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, shared) {
"use strict";
const ON_LOAD = "onLoad";
function formatAppLog(type2, filename, ...args) {
if (uni.__log__) {
uni.__log__(type2, filename, ...args);
} else {
console[type2].apply(console, [...args, filename]);
}
}
function resolveEasycom(component, easycom2) {
return shared.isString(component) ? easycom2 : component;
}
const createHook = (lifecycle) => (hook, target = vue.getCurrentInstance()) => {
!vue.isInSSRComponentSetup && vue.injectHook(lifecycle, hook, target);
};
const onLoad = /* @__PURE__ */ createHook(ON_LOAD);
const icons$1 = {
"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 node_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$1 = {
// 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,
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: "",
borderBottom: "",
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,
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: ""
}
};
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$1 = {
// 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$i = {
...ActionSheet,
...Album,
...Alert,
...Avatar,
...AvatarGroup,
...Backtop,
...Badge,
...Button,
...Calendar$1,
...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$1,
...Toolbar,
...Tooltip,
...Transition,
...Upload
};
const props$h = {
props: {
// 图标类名
name: {
type: String,
default: props$i.icon.name
},
// 图标颜色,可接受主题色
color: {
type: String,
default: props$i.icon.color
},
// 字体大小,单位px
size: {
type: [String, Number],
default: props$i.icon.size
},
// 是否显示粗体
bold: {
type: Boolean,
default: props$i.icon.bold
},
// 点击图标的时候传递事件出去的index(用于区分点击了哪一个)
index: {
type: [String, Number],
default: props$i.icon.index
},
// 触摸图标时的类名
hoverClass: {
type: String,
default: props$i.icon.hoverClass
},
// 自定义扩展前缀,方便用户扩展自己的图标库
customPrefix: {
type: String,
default: props$i.icon.customPrefix
},
// 图标右边或者下面的文字
label: {
type: [String, Number],
default: props$i.icon.label
},
// label的位置,只能右边或者下边
labelPos: {
type: String,
default: props$i.icon.labelPos
},
// label的大小
labelSize: {
type: [String, Number],
default: props$i.icon.labelSize
},
// label的颜色
labelColor: {
type: String,
default: props$i.icon.labelColor
},
// label与图标的距离
space: {
type: [String, Number],
default: props$i.icon.space
},
// 图片的mode
imgMode: {
type: String,
default: props$i.icon.imgMode
},
// 用于显示图片小图标时,图片的宽度
width: {
type: [String, Number],
default: props$i.icon.width
},
// 用于显示图片小图标时,图片的高度
height: {
type: [String, Number],
default: props$i.icon.height
},
// 用于解决某些情况下,让图标垂直居中的用途
top: {
type: [String, Number],
default: props$i.icon.top
},
// 是否阻止事件传播
stop: {
type: Boolean,
default: props$i.icon.stop
}
}
};
const mpMixin = {};
const mixin = {
// 定义每个组件都可能需要用到的外部样式以及类名
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 uni.$u.deepMerge(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) {
this.$u.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 = uni.$u.$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(e2) {
e2 && typeof e2.stopPropagation === "function" && e2.stopPropagation();
},
// 空操作
noop(e2) {
this.preventEvent(e2);
}
},
onReachBottom() {
uni.$emit("uOnReachBottom");
},
beforeDestroy() {
if (this.parent && uni.$u.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$A = {
name: "u-icon",
data() {
return {};
},
emits: ["click"],
mixins: [mpMixin, mixin, props$h],
computed: {
uClasses() {
let classes = [];
classes.push(this.customPrefix + "-" + this.name);
if (this.color && uni.$u.config.type.includes(this.color))
classes.push("u-icon__icon--" + this.color);
return classes;
},
iconStyle() {
let style = {};
style = {
fontSize: uni.$u.addUnit(this.size),
lineHeight: uni.$u.addUnit(this.size),
fontWeight: this.bold ? "bold" : "normal",
// 某些特殊情况需要设置一个到顶部的距离,才能更好的垂直居中
top: uni.$u.addUnit(this.top)
};
if (this.color && !uni.$u.config.type.includes(this.color))
style.color = this.color;
return style;
},
// 判断传入的name属性,是否图片路径,只要带有"/"均认为是图片形式
isImg() {
return this.name.indexOf("/") !== -1;
},
imgStyle() {
let style = {};
style.width = this.width ? uni.$u.addUnit(this.width) : uni.$u.addUnit(this.size);
style.height = this.height ? uni.$u.addUnit(this.height) : uni.$u.addUnit(this.size);
return style;
},
// 通过图标名,查找对应的图标
icon() {
return icons$1["uicon-" + this.name] || this.name;
}
},
methods: {
clickHandler(e2) {
this.$emit("click", this.index);
this.stop && this.preventEvent(e2);
}
}
};
function _sfc_render$m(_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, _ctx.$u.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, _ctx.$u.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: _ctx.$u.addUnit(_ctx.labelSize),
marginLeft: _ctx.labelPos == "right" ? _ctx.$u.addUnit(_ctx.space) : 0,
marginTop: _ctx.labelPos == "bottom" ? _ctx.$u.addUnit(_ctx.space) : 0,
marginRight: _ctx.labelPos == "left" ? _ctx.$u.addUnit(_ctx.space) : 0,
marginBottom: _ctx.labelPos == "top" ? _ctx.$u.addUnit(_ctx.space) : 0
})
},
vue.toDisplayString(_ctx.label),
5
/* TEXT, STYLE */
)) : vue.createCommentVNode("v-if", true)
],
2
/* CLASS */
);
}
const __easycom_1$4 = /* @__PURE__ */ _export_sfc(_sfc_main$A, [["render", _sfc_render$m], ["__scopeId", "data-v-1c933a9a"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/node_modules/uview-plus/components/u-icon/u-icon.vue"]]);
const props$g = {
props: {
// 是否展示组件
show: {
type: Boolean,
default: props$i.transition.show
},
// 使用的动画模式
mode: {
type: String,
default: props$i.transition.mode
},
// 动画的执行时间,单位ms
duration: {
type: [String, Number],
default: props$i.transition.duration
},
// 使用的动画过渡函数
timingFunction: {
type: String,
default: props$i.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();
{
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$z = {
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前面
...uni.$u.addStyle(customStyle),
...viewStyle
};
}
},
// 将mixin挂在到组件中,uni.$u.mixin实际上为一个vue格式对象
mixins: [mpMixin, mixin, transition, props$g],
watch: {
show: {
handler(newVal) {
newVal ? this.vueEnter() : this.vueLeave();
},
// 表示同时监听初始化时的props的show的意思
immediate: true
}
}
};
function _sfc_render$l(_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, HYDRATE_EVENTS */
)) : vue.createCommentVNode("v-if", true);
}
const __easycom_4 = /* @__PURE__ */ _export_sfc(_sfc_main$z, [["render", _sfc_render$l], ["__scopeId", "data-v-0573594d"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/node_modules/uview-plus/components/u-transition/u-transition.vue"]]);
const props$f = {
props: {
// 图片地址
src: {
type: String,
default: props$i.image.src
},
// 裁剪模式
mode: {
type: String,
default: props$i.image.mode
},
// 宽度,单位任意
width: {
type: [String, Number],
default: props$i.image.width
},
// 高度,单位任意
height: {
type: [String, Number],
default: props$i.image.height
},
// 图片形状,circle-圆形,square-方形
shape: {
type: String,
default: props$i.image.shape
},
// 圆角,单位任意
radius: {
type: [String, Number],
default: props$i.image.radius
},
// 是否懒加载,微信小程序、App、百度小程序、字节跳动小程序
lazyLoad: {
type: Boolean,
default: props$i.image.lazyLoad
},
// 开启长按图片显示识别微信小程序码菜单
showMenuByLongpress: {
type: Boolean,
default: props$i.image.showMenuByLongpress
},
// 加载中的图标,或者小图片
loadingIcon: {
type: String,
default: props$i.image.loadingIcon
},
// 加载失败的图标,或者小图片
errorIcon: {
type: String,
default: props$i.image.errorIcon
},
// 是否显示加载中的图标或者自定义的slot
showLoading: {
type: Boolean,
default: props$i.image.showLoading
},
// 是否显示加载错误的图标或者自定义的slot
showError: {
type: Boolean,
default: props$i.image.showError
},
// 是否需要淡入效果
fade: {
type: Boolean,
default: props$i.image.fade
},
// 只支持网络资源,只对微信小程序有效
webp: {
type: Boolean,
default: props$i.image.webp
},
// 过渡时间,单位ms
duration: {
type: [String, Number],
default: props$i.image.duration
},
// 背景颜色,用于深色页面加载图片时,为了和背景色融合
bgColor: {
type: String,
default: props$i.image.bgColor
}
}
};
const _sfc_main$y = {
name: "u-image",
mixins: [mpMixin, mixin, props$f],
data() {
return {
// 图片是否加载错误,如果是,则显示错误占位图
isError: false,
// 初始化组件时,默认为加载中状态
loading: true,
// 不透明度,为了实现淡入淡出的效果
opacity: 1,
// 过渡时间,因为props的值无法修改,故需要一个中间值
durationTime: this.duration,
// 图片加载完成时,去掉背景颜色,因为如果是png图片,就会显示灰色的背景
backgroundStyle: {},
// 用于fade模式的控制组件显示与否
show: false
};
},
watch: {
src: {
immediate: true,
handler(n2) {
if (!n2) {
this.isError = true;
} else {
this.isError = false;
this.loading = true;
}
}
}
},
computed: {
wrapStyle() {
let style = {};
style.width = this.$u.addUnit(this.width);
style.height = this.$u.addUnit(this.height);
style.borderRadius = this.shape == "circle" ? "10000px" : uni.$u.addUnit(this.radius);
style.overflow = this.radius > 0 ? "hidden" : "visible";
return uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle));
}
},
mounted() {
this.show = true;
},
emits: ["click", "error", "load"],
methods: {
// 点击图片
onClick() {
this.$emit("click");
},
// 图片加载失败
onErrorHandler(err) {
this.loading = false;
this.isError = true;
this.$emit("error", err);
},
// 图片加载完成,标记loading结束
onLoadHandler(event) {
this.loading = false;
this.isError = false;
this.$emit("load", event);
this.removeBgColor();
},
// 移除图片的背景色
removeBgColor() {
this.backgroundStyle = {
backgroundColor: "transparent"
};
}
}
};
function _sfc_render$k(_ctx, _cache, $props, $setup, $data, $options) {
const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_1$4);
const _component_u_transition = resolveEasycom(vue.resolveDynamicComponent("u-transition"), __easycom_4);
return vue.openBlock(), vue.createBlock(_component_u_transition, {
mode: "fade",
show: $data.show,
duration: _ctx.fade ? 1e3 : 0
}, {
default: vue.withCtx(() => [
vue.createElementVNode(
"view",
{
class: "u-image",
onClick: _cache[2] || (_cache[2] = (...args) => $options.onClick && $options.onClick(...args)),
style: vue.normalizeStyle([$options.wrapStyle, $data.backgroundStyle])
},
[
!$data.isError ? (vue.openBlock(), vue.createElementBlock("image", {
key: 0,
src: _ctx.src,
mode: _ctx.mode,
onError: _cache[0] || (_cache[0] = (...args) => $options.onErrorHandler && $options.onErrorHandler(...args)),
onLoad: _cache[1] || (_cache[1] = (...args) => $options.onLoadHandler && $options.onLoadHandler(...args)),
"show-menu-by-longpress": _ctx.showMenuByLongpress,
"lazy-load": _ctx.lazyLoad,
class: "u-image__image",
style: vue.normalizeStyle({
borderRadius: _ctx.shape == "circle" ? "10000px" : _ctx.$u.addUnit(_ctx.radius),
width: _ctx.$u.addUnit(_ctx.width),
height: _ctx.$u.addUnit(_ctx.height)
})
}, null, 44, ["src", "mode", "show-menu-by-longpress", "lazy-load"])) : vue.createCommentVNode("v-if", true),
_ctx.showLoading && $data.loading ? (vue.openBlock(), vue.createElementBlock(
"view",
{
key: 1,
class: "u-image__loading",
style: vue.normalizeStyle({
borderRadius: _ctx.shape == "circle" ? "50%" : _ctx.$u.addUnit(_ctx.radius),
backgroundColor: this.bgColor,
width: _ctx.$u.addUnit(_ctx.width),
height: _ctx.$u.addUnit(_ctx.height)
})
},
[
vue.renderSlot(_ctx.$slots, "loading", {}, () => [
vue.createVNode(_component_u_icon, {
name: _ctx.loadingIcon,
width: _ctx.width,
height: _ctx.height
}, null, 8, ["name", "width", "height"])
], true)
],
4
/* STYLE */
)) : vue.createCommentVNode("v-if", true),
_ctx.showError && $data.isError && !$data.loading ? (vue.openBlock(), vue.createElementBlock(
"view",
{
key: 2,
class: "u-image__error",
style: vue.normalizeStyle({
borderRadius: _ctx.shape == "circle" ? "50%" : _ctx.$u.addUnit(_ctx.radius),
width: _ctx.$u.addUnit(_ctx.width),
height: _ctx.$u.addUnit(_ctx.height)
})
},
[
vue.renderSlot(_ctx.$slots, "error", {}, () => [
vue.createVNode(_component_u_icon, {
name: _ctx.errorIcon,
width: _ctx.width,
height: _ctx.height
}, null, 8, ["name", "width", "height"])
], true)
],
4
/* STYLE */
)) : vue.createCommentVNode("v-if", true)
],
4
/* STYLE */
)
]),
_: 3
/* FORWARDED */
}, 8, ["show", "duration"]);
}
const __easycom_0$7 = /* @__PURE__ */ _export_sfc(_sfc_main$y, [["render", _sfc_render$k], ["__scopeId", "data-v-9d58ba7c"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/node_modules/uview-plus/components/u-image/u-image.vue"]]);
const props$e = {
props: {
// 是否显示组件
show: {
type: Boolean,
default: props$i.loadingIcon.show
},
// 颜色
color: {
type: String,
default: props$i.loadingIcon.color
},
// 提示文字颜色
textColor: {
type: String,
default: props$i.loadingIcon.textColor
},
// 文字和图标是否垂直排列
vertical: {
type: Boolean,
default: props$i.loadingIcon.vertical
},
// 模式选择,circle-圆形,spinner-花朵形,semicircle-半圆形
mode: {
type: String,
default: props$i.loadingIcon.mode
},
// 图标大小,单位默认px
size: {
type: [String, Number],
default: props$i.loadingIcon.size
},
// 文字大小
textSize: {
type: [String, Number],
default: props$i.loadingIcon.textSize
},
// 文字内容
text: {
type: [String, Number],
default: props$i.loadingIcon.text
},
// 动画模式
timingFunction: {
type: String,
default: props$i.loadingIcon.timingFunction
},
// 动画执行周期时间
duration: {
type: [String, Number],
default: props$i.loadingIcon.duration
},
// mode=circle时的暗边颜色
inactiveColor: {
type: String,
default: props$i.loadingIcon.inactiveColor
}
}
};
const _sfc_main$x = {
name: "u-loading-icon",
mixins: [mpMixin, mixin, props$e],
data() {
return {
// Array.form可以通过一个伪数组对象创建指定长度的数组
// https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/from
array12: Array.from({
length: 12
}),
// 这里需要设置默认值为360,否则在安卓nvue上,会延迟一个duration周期后才执行
// 在iOS nvue上,则会一开始默认执行两个周期的动画
aniAngel: 360,
// 动画旋转角度
webviewHide: false,
// 监听webview的状态,如果隐藏了页面,则停止动画,以免性能消耗
loading: false
// 是否运行中,针对nvue使用
};
},
computed: {
// 当为circle类型时,给其另外三边设置一个更轻一些的颜色
// 之所以需要这么做的原因是,比如父组件传了color为红色,那么需要另外的三个边为浅红色
// 而不能是固定的某一个其他颜色(因为这个固定的颜色可能浅蓝,导致效果没有那么细腻良好)
otherBorderColor() {
const lightColor = uni.$u.colorGradient(this.color, "#ffffff", 100)[80];
if (this.mode === "circle") {
return this.inactiveColor ? this.inactiveColor : lightColor;
} else {
return "transparent";
}
}
},
watch: {
show(n2) {
}
},
mounted() {
this.init();
},
methods: {
init() {
setTimeout(() => {
this.show && this.addEventListenerToWebview();
}, 20);
},
// 监听webview的显示与隐藏
addEventListenerToWebview() {
const pages2 = getCurrentPages();
const page2 = pages2[pages2.length - 1];
const currentWebview = page2.$getAppWebview();
currentWebview.addEventListener("hide", () => {
this.webviewHide = true;
});
currentWebview.addEventListener("show", () => {
this.webviewHide = false;
});
}
}
};
function _sfc_render$j(_ctx, _cache, $props, $setup, $data, $options) {
return _ctx.show ? (vue.openBlock(), vue.createElementBlock(
"view",
{
key: 0,
class: vue.normalizeClass(["u-loading-icon", [_ctx.vertical && "u-loading-icon--vertical"]]),
style: vue.normalizeStyle([_ctx.$u.addStyle(_ctx.customStyle)])
},
[
!$data.webviewHide ? (vue.openBlock(), vue.createElementBlock(
"view",
{
key: 0,
class: vue.normalizeClass(["u-loading-icon__spinner", [`u-loading-icon__spinner--${_ctx.mode}`]]),
ref: "ani",
style: vue.normalizeStyle({
color: _ctx.color,
width: _ctx.$u.addUnit(_ctx.size),
height: _ctx.$u.addUnit(_ctx.size),
borderTopColor: _ctx.color,
borderBottomColor: $options.otherBorderColor,
borderLeftColor: $options.otherBorderColor,
borderRightColor: $options.otherBorderColor,
"animation-duration": `${_ctx.duration}ms`,
"animation-timing-function": _ctx.mode === "semicircle" || _ctx.mode === "circle" ? _ctx.timingFunction : ""
})
},
[
_ctx.mode === "spinner" ? (vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
{ key: 0 },
vue.renderList($data.array12, (item, index2) => {
return vue.openBlock(), vue.createElementBlock("view", {
key: index2,
class: "u-loading-icon__dot"
});
}),
128
/* KEYED_FRAGMENT */
)) : vue.createCommentVNode("v-if", true)
],
6
/* CLASS, STYLE */
)) : vue.createCommentVNode("v-if", true),
_ctx.text ? (vue.openBlock(), vue.createElementBlock(
"text",
{
key: 1,
class: "u-loading-icon__text",
style: vue.normalizeStyle({
fontSize: _ctx.$u.addUnit(_ctx.textSize),
color: _ctx.textColor
})
},
vue.toDisplayString(_ctx.text),
5
/* TEXT, STYLE */
)) : vue.createCommentVNode("v-if", true)
],
6
/* CLASS, STYLE */
)) : vue.createCommentVNode("v-if", true);
}
const __easycom_0$6 = /* @__PURE__ */ _export_sfc(_sfc_main$x, [["render", _sfc_render$j], ["__scopeId", "data-v-00752c6d"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/node_modules/uview-plus/components/u-loading-icon/u-loading-icon.vue"]]);
const props$d = {
props: {
// 提示内容
loadingText: {
type: [String, Number],
default: props$i.loadingPage.loadingText
},
// 文字上方用于替换loading动画的图片
image: {
type: String,
default: props$i.loadingPage.image
},
// 加载动画的模式,circle-圆形,spinner-花朵形,semicircle-半圆形
loadingMode: {
type: String,
default: props$i.loadingPage.loadingMode
},
// 是否加载中
loading: {
type: Boolean,
default: props$i.loadingPage.loading
},
// 背景色
bgColor: {
type: String,
default: props$i.loadingPage.bgColor
},
// 文字颜色
color: {
type: String,
default: props$i.loadingPage.color
},
// 文字大小
fontSize: {
type: [String, Number],
default: props$i.loadingPage.fontSize
},
// 图标大小
iconSize: {
type: [String, Number],
default: props$i.loadingPage.fontSize
},
// 加载中图标的颜色,只能rgb或者十六进制颜色值
loadingColor: {
type: String,
default: props$i.loadingPage.loadingColor
}
}
};
const _sfc_main$w = {
name: "u-loading-page",
mixins: [mpMixin, mixin, props$d],
data() {
return {};
},
methods: {}
};
function _sfc_render$i(_ctx, _cache, $props, $setup, $data, $options) {
const _component_u_loading_icon = resolveEasycom(vue.resolveDynamicComponent("u-loading-icon"), __easycom_0$6);
const _component_u_transition = resolveEasycom(vue.resolveDynamicComponent("u-transition"), __easycom_4);
return vue.openBlock(), vue.createBlock(_component_u_transition, {
show: _ctx.loading,
"custom-style": {
position: "fixed",
top: 0,
left: 0,
right: 0,
bottom: 0,
backgroundColor: _ctx.bgColor,
display: "flex"
}
}, {
default: vue.withCtx(() => [
vue.createElementVNode("view", { class: "u-loading-page" }, [
vue.createElementVNode("view", { class: "u-loading-page__warpper" }, [
vue.createElementVNode("view", { class: "u-loading-page__warpper__loading-icon" }, [
_ctx.image ? (vue.openBlock(), vue.createElementBlock("image", {
key: 0,
src: _ctx.image,
class: "u-loading-page__warpper__loading-icon__img",
mode: "widthFit",
style: vue.normalizeStyle({
width: _ctx.$u.addUnit(_ctx.iconSize),
height: _ctx.$u.addUnit(_ctx.iconSize)
})
}, null, 12, ["src"])) : (vue.openBlock(), vue.createBlock(_component_u_loading_icon, {
key: 1,
mode: _ctx.loadingMode,
size: _ctx.$u.addUnit(_ctx.iconSize),
color: _ctx.loadingColor
}, null, 8, ["mode", "size", "color"]))
]),
vue.renderSlot(_ctx.$slots, "default", {}, () => [
vue.createElementVNode(
"text",
{
class: "u-loading-page__warpper__text",
style: vue.normalizeStyle({
fontSize: _ctx.$u.addUnit(_ctx.fontSize),
color: _ctx.color
})
},
vue.toDisplayString(_ctx.loadingText),
5
/* TEXT, STYLE */
)
], true)
])
])
]),
_: 3
/* FORWARDED */
}, 8, ["show", "custom-style"]);
}
const __easycom_2$2 = /* @__PURE__ */ _export_sfc(_sfc_main$w, [["render", _sfc_render$i], ["__scopeId", "data-v-f571bd8d"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/node_modules/uview-plus/components/u-loading-page/u-loading-page.vue"]]);
const props$c = {
props: {
// 是否展示工具条
show: {
type: Boolean,
default: props$i.toolbar.show
},
// 取消按钮的文字
cancelText: {
type: String,
default: props$i.toolbar.cancelText
},
// 确认按钮的文字
confirmText: {
type: String,
default: props$i.toolbar.confirmText
},
// 取消按钮的颜色
cancelColor: {
type: String,
default: props$i.toolbar.cancelColor
},
// 确认按钮的颜色
confirmColor: {
type: String,
default: props$i.toolbar.confirmColor
},
// 标题文字
title: {
type: String,
default: props$i.toolbar.title
}
}
};
const _sfc_main$v = {
name: "u-toolbar",
mixins: [mpMixin, mixin, props$c],
emits: ["confirm", "cancel"],
methods: {
// 点击取消按钮
cancel() {
this.$emit("cancel");
},
// 点击确定按钮
confirm() {
this.$emit("confirm");
}
}
};
function _sfc_render$h(_ctx, _cache, $props, $setup, $data, $options) {
return _ctx.show ? (vue.openBlock(), vue.createElementBlock(
"view",
{
key: 0,
class: "u-toolbar",
onTouchmove: _cache[2] || (_cache[2] = vue.withModifiers((...args) => _ctx.noop && _ctx.noop(...args), ["stop", "prevent"]))
},
[
vue.createElementVNode("view", {
class: "u-toolbar__cancel__wrapper",
"hover-class": "u-hover-class"
}, [
vue.createElementVNode(
"text",
{
class: "u-toolbar__wrapper__cancel",
onClick: _cache[0] || (_cache[0] = (...args) => $options.cancel && $options.cancel(...args)),
style: vue.normalizeStyle({
color: _ctx.cancelColor
})
},
vue.toDisplayString(_ctx.cancelText),
5
/* TEXT, STYLE */
)
]),
_ctx.title ? (vue.openBlock(), vue.createElementBlock(
"text",
{
key: 0,
class: "u-toolbar__title u-line-1"
},
vue.toDisplayString(_ctx.title),
1
/* TEXT */
)) : vue.createCommentVNode("v-if", true),
vue.createElementVNode("view", {
class: "u-toolbar__confirm__wrapper",
"hover-class": "u-hover-class"
}, [
vue.createElementVNode(
"text",
{
class: "u-toolbar__wrapper__confirm",
onClick: _cache[1] || (_cache[1] = (...args) => $options.confirm && $options.confirm(...args)),
style: vue.normalizeStyle({
color: _ctx.confirmColor
})
},
vue.toDisplayString(_ctx.confirmText),
5
/* TEXT, STYLE */
)
])
],
32
/* HYDRATE_EVENTS */
)) : vue.createCommentVNode("v-if", true);
}
const __easycom_0$5 = /* @__PURE__ */ _export_sfc(_sfc_main$v, [["render", _sfc_render$h], ["__scopeId", "data-v-3fd495d6"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/node_modules/uview-plus/components/u-toolbar/u-toolbar.vue"]]);
const props$b = {
props: {
// 是否显示遮罩
show: {
type: Boolean,
default: props$i.overlay.show
},
// 层级z-index
zIndex: {
type: [String, Number],
default: props$i.overlay.zIndex
},
// 遮罩的过渡时间,单位为ms
duration: {
type: [String, Number],
default: props$i.overlay.duration
},
// 不透明度值,当做rgba的第四个参数
opacity: {
type: [String, Number],
default: props$i.overlay.opacity
}
}
};
const _sfc_main$u = {
name: "u-overlay",
mixins: [mpMixin, mixin, props$b],
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 uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle));
}
},
emits: ["click"],
methods: {
clickHandler() {
this.$emit("click");
}
}
};
function _sfc_render$g(_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$4 = /* @__PURE__ */ _export_sfc(_sfc_main$u, [["render", _sfc_render$g], ["__scopeId", "data-v-35f7c3e5"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/node_modules/uview-plus/components/u-overlay/u-overlay.vue"]]);
const props$a = {
props: {
bgColor: {
type: String,
default: props$i.statusBar.bgColor
}
}
};
const _sfc_main$t = {
name: "u-status-bar",
mixins: [mpMixin, mixin, props$a],
data() {
return {};
},
computed: {
style() {
const style = {};
style.height = uni.$u.addUnit(uni.$u.sys().statusBarHeight, "px");
style.backgroundColor = this.bgColor;
return uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle));
}
}
};
function _sfc_render$f(_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$t, [["render", _sfc_render$f], ["__scopeId", "data-v-c0b45a48"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/node_modules/uview-plus/components/u-status-bar/u-status-bar.vue"]]);
const props$9 = {
props: {}
};
const _sfc_main$s = {
name: "u-safe-bottom",
mixins: [mpMixin, mixin, props$9],
data() {
return {
safeAreaBottomHeight: 0,
isNvue: false
};
},
computed: {
style() {
const style = {};
return uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle));
}
},
mounted() {
}
};
function _sfc_render$e(_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$2 = /* @__PURE__ */ _export_sfc(_sfc_main$s, [["render", _sfc_render$e], ["__scopeId", "data-v-3ec581de"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/node_modules/uview-plus/components/u-safe-bottom/u-safe-bottom.vue"]]);
const props$8 = {
props: {
// 是否展示弹窗
show: {
type: Boolean,
default: props$i.popup.show
},
// 是否显示遮罩
overlay: {
type: Boolean,
default: props$i.popup.overlay
},
// 弹出的方向,可选值为 top bottom right left center
mode: {
type: String,
default: props$i.popup.mode
},
// 动画时长,单位ms
duration: {
type: [String, Number],
default: props$i.popup.duration
},
// 是否显示关闭图标
closeable: {
type: Boolean,
default: props$i.popup.closeable
},
// 自定义遮罩的样式
overlayStyle: {
type: [Object, String],
default: props$i.popup.overlayStyle
},
// 点击遮罩是否关闭弹窗
closeOnClickOverlay: {
type: Boolean,
default: props$i.popup.closeOnClickOverlay
},
// 层级
zIndex: {
type: [String, Number],
default: props$i.popup.zIndex
},
// 是否为iPhoneX留出底部安全距离
safeAreaInsetBottom: {
type: Boolean,
default: props$i.popup.safeAreaInsetBottom
},
// 是否留出顶部安全距离(状态栏高度)
safeAreaInsetTop: {
type: Boolean,
default: props$i.popup.safeAreaInsetTop
},
// 自定义关闭图标位置,top-left为左上角,top-right为右上角,bottom-left为左下角,bottom-right为右下角
closeIconPos: {
type: String,
default: props$i.popup.closeIconPos
},
// 是否显示圆角
round: {
type: [Boolean, String, Number],
default: props$i.popup.round
},
// mode=center,也即中部弹出时,是否使用缩放模式
zoom: {
type: Boolean,
default: props$i.popup.zoom
},
// 弹窗背景色,设置为transparent可去除白色背景
bgColor: {
type: String,
default: props$i.popup.bgColor
},
// 遮罩的透明度,0-1之间
overlayOpacity: {
type: [Number, String],
default: props$i.popup.overlayOpacity
}
}
};
const _sfc_main$r = {
name: "u-popup",
mixins: [mpMixin, mixin, props$8],
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 uni.$u.deepMerge(style, {
bottom: 0,
top: 0
});
} else if (this.mode === "right") {
return uni.$u.deepMerge(style, {
bottom: 0,
top: 0
});
} else if (this.mode === "top") {
return uni.$u.deepMerge(style, {
left: 0,
right: 0
});
} else if (this.mode === "bottom") {
return uni.$u.deepMerge(style, {
left: 0,
right: 0
});
} else if (this.mode === "center") {
return uni.$u.deepMerge(style, {
alignItems: "center",
"justify-content": "center",
top: 0,
left: 0,
right: 0,
bottom: 0
});
}
},
contentStyle() {
const style = {};
uni.$u.sys();
if (this.mode !== "center") {
style.flex = 1;
}
if (this.bgColor) {
style.backgroundColor = this.bgColor;
}
if (this.round) {
const value = uni.$u.addUnit(this.round);
if (this.mode === "top") {
style.borderBottomLeftRadius = value;
style.borderBottomRightRadius = value;
} else if (this.mode === "bottom") {
style.borderTopLeftRadius = value;
style.borderTopRightRadius = value;
} else if (this.mode === "center") {
style.borderRadius = value;
}
}
return uni.$u.deepMerge(style, uni.$u.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(e2) {
this.$emit("close");
},
afterEnter() {
this.$emit("open");
},
clickHandler() {
if (this.mode === "center") {
this.overlayClick();
}
this.$emit("click");
}
}
};
function _sfc_render$d(_ctx, _cache, $props, $setup, $data, $options) {
const _component_u_overlay = resolveEasycom(vue.resolveDynamicComponent("u-overlay"), __easycom_0$4);
const _component_u_status_bar = resolveEasycom(vue.resolveDynamicComponent("u-status-bar"), __easycom_1$3);
const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_1$4);
const _component_u_safe_bottom = resolveEasycom(vue.resolveDynamicComponent("u-safe-bottom"), __easycom_3$2);
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_2$1 = /* @__PURE__ */ _export_sfc(_sfc_main$r, [["render", _sfc_render$d], ["__scopeId", "data-v-74921bef"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/node_modules/uview-plus/components/u-popup/u-popup.vue"]]);
const props$7 = {
props: {
// 是否展示picker弹窗
show: {
type: Boolean,
default: props$i.picker.show
},
// 是否展示顶部的操作栏
showToolbar: {
type: Boolean,
default: props$i.picker.showToolbar
},
// 顶部标题
title: {
type: String,
default: props$i.picker.title
},
// 对象数组,设置每一列的数据
columns: {
type: Array,
default: props$i.picker.columns
},
// 是否显示加载中状态
loading: {
type: Boolean,
default: props$i.picker.loading
},
// 各列中,单个选项的高度
itemHeight: {
type: [String, Number],
default: props$i.picker.itemHeight
},
// 取消按钮的文字
cancelText: {
type: String,
default: props$i.picker.cancelText
},
// 确认按钮的文字
confirmText: {
type: String,
default: props$i.picker.confirmText
},
// 取消按钮的颜色
cancelColor: {
type: String,
default: props$i.picker.cancelColor
},
// 确认按钮的颜色
confirmColor: {
type: String,
default: props$i.picker.confirmColor
},
// 每列中可见选项的数量
visibleItemCount: {
type: [String, Number],
default: props$i.picker.visibleItemCount
},
// 选项对象中,需要展示的属性键名
keyName: {
type: String,
default: props$i.picker.keyName
},
// 是否允许点击遮罩关闭选择器
closeOnClickOverlay: {
type: Boolean,
default: props$i.picker.closeOnClickOverlay
},
// 各列的默认索引
defaultIndex: {
type: Array,
default: props$i.picker.defaultIndex
},
// 是否在手指松开时立即触发 change 事件。若不开启则会在滚动动画结束后触发 change 事件,只在微信2.21.1及以上有效
immediateChange: {
type: Boolean,
default: props$i.picker.immediateChange
}
}
};
const _sfc_main$q = {
name: "u-picker",
mixins: [mpMixin, mixin, props$7],
data() {
return {
// 上一次选择的列索引
lastIndex: [],
// 索引值 ,对应picker-view的value
innerIndex: [],
// 各列的值
innerColumns: [],
// 上一次的变化列索引
columnIndex: 0
};
},
watch: {
// 监听默认索引的变化,重新设置对应的值
defaultIndex: {
immediate: true,
handler(n2) {
this.setIndexs(n2, true);
}
},
// 监听columns参数的变化
columns: {
immediate: true,
deep: true,
handler(n2) {
this.setColumns(n2);
}
}
},
emits: ["close", "cancel", "confirm", "change"],
methods: {
// 获取item需要显示的文字,判别为对象还是文本
getItemText(item) {
if (uni.$u.test.object(item)) {
return item[this.keyName];
} else {
return item;
}
},
// 关闭选择器
closeHandler() {
if (this.closeOnClickOverlay) {
this.$emit("close");
}
},
// 点击工具栏的取消按钮
cancel() {
this.$emit("cancel");
},
// 点击工具栏的确定按钮
confirm() {
this.$emit("confirm", {
indexs: this.innerIndex,
value: this.innerColumns.map((item, index2) => item[this.innerIndex[index2]]),
values: this.innerColumns
});
},
// 选择器某一列的数据发生变化时触发
changeHandler(e2) {
const {
value
} = e2.detail;
let index2 = 0, columnIndex = 0;
for (let i2 = 0; i2 < value.length; i2++) {
let item = value[i2];
if (item !== (this.lastIndex[i2] || 0)) {
columnIndex = i2;
index2 = item;
break;
}
}
this.columnIndex = columnIndex;
const values = this.innerColumns;
this.setLastIndex(value);
this.setIndexs(value);
this.$emit("change", {
// 微信小程序不能传递this,会因为循环引用而报错
picker: this,
value: this.innerColumns.map((item, index3) => item[value[index3]]),
index: index2,
indexs: value,
// values为当前变化列的数组内容
values,
columnIndex
});
},
// 设置index索引,此方法可被外部调用设置
setIndexs(index2, setLastIndex) {
this.innerIndex = uni.$u.deepClone(index2);
if (setLastIndex) {
this.setLastIndex(index2);
}
},
// 记录上一次的各列索引位置
setLastIndex(index2) {
this.lastIndex = uni.$u.deepClone(index2);
},
// 设置对应列选项的所有值
setColumnValues(columnIndex, values) {
this.innerColumns.splice(columnIndex, 1, values);
let tmpIndex = uni.$u.deepClone(this.innerIndex);
for (let i2 = 0; i2 < this.innerColumns.length; i2++) {
if (i2 > this.columnIndex) {
tmpIndex[i2] = 0;
}
}
this.setIndexs(tmpIndex);
},
// 获取对应列的所有选项
getColumnValues(columnIndex) {
(async () => {
await uni.$u.sleep();
})();
return this.innerColumns[columnIndex];
},
// 设置整体各列的columns的值
setColumns(columns) {
this.innerColumns = uni.$u.deepClone(columns);
if (this.innerIndex.length === 0) {
this.innerIndex = new Array(columns.length).fill(0);
}
},
// 获取各列选中值对应的索引
getIndexs() {
return this.innerIndex;
},
// 获取各列选中的值
getValues() {
(async () => {
await uni.$u.sleep();
})();
return this.innerColumns.map((item, index2) => item[this.innerIndex[index2]]);
}
}
};
function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) {
const _component_u_toolbar = resolveEasycom(vue.resolveDynamicComponent("u-toolbar"), __easycom_0$5);
const _component_u_loading_icon = resolveEasycom(vue.resolveDynamicComponent("u-loading-icon"), __easycom_0$6);
const _component_u_popup = resolveEasycom(vue.resolveDynamicComponent("u-popup"), __easycom_2$1);
return vue.openBlock(), vue.createBlock(_component_u_popup, {
show: _ctx.show,
onClose: $options.closeHandler
}, {
default: vue.withCtx(() => [
vue.createElementVNode("view", { class: "u-picker" }, [
_ctx.showToolbar ? (vue.openBlock(), vue.createBlock(_component_u_toolbar, {
key: 0,
cancelColor: _ctx.cancelColor,
confirmColor: _ctx.confirmColor,
cancelText: _ctx.cancelText,
confirmText: _ctx.confirmText,
title: _ctx.title,
onCancel: $options.cancel,
onConfirm: $options.confirm
}, null, 8, ["cancelColor", "confirmColor", "cancelText", "confirmText", "title", "onCancel", "onConfirm"])) : vue.createCommentVNode("v-if", true),
vue.createElementVNode("picker-view", {
class: "u-picker__view",
indicatorStyle: `height: ${_ctx.$u.addUnit(_ctx.itemHeight)}`,
value: $data.innerIndex,
immediateChange: _ctx.immediateChange,
style: vue.normalizeStyle({
height: `${_ctx.$u.addUnit(_ctx.visibleItemCount * _ctx.itemHeight)}`
}),
onChange: _cache[0] || (_cache[0] = (...args) => $options.changeHandler && $options.changeHandler(...args))
}, [
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList($data.innerColumns, (item, index2) => {
return vue.openBlock(), vue.createElementBlock("picker-view-column", {
key: index2,
class: "u-picker__view__column"
}, [
_ctx.$u.test.array(item) ? (vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
{ key: 0 },
vue.renderList(item, (item1, index1) => {
return vue.openBlock(), vue.createElementBlock(
"text",
{
class: "u-picker__view__column__item u-line-1",
key: index1,
style: vue.normalizeStyle({
height: _ctx.$u.addUnit(_ctx.itemHeight),
lineHeight: _ctx.$u.addUnit(_ctx.itemHeight),
fontWeight: index1 === $data.innerIndex[index2] ? "bold" : "normal"
})
},
vue.toDisplayString($options.getItemText(item1)),
5
/* TEXT, STYLE */
);
}),
128
/* KEYED_FRAGMENT */
)) : vue.createCommentVNode("v-if", true)
]);
}),
128
/* KEYED_FRAGMENT */
))
], 44, ["indicatorStyle", "value", "immediateChange"]),
_ctx.loading ? (vue.openBlock(), vue.createElementBlock("view", {
key: 1,
class: "u-picker--loading"
}, [
vue.createVNode(_component_u_loading_icon, { mode: "circle" })
])) : vue.createCommentVNode("v-if", true)
])
]),
_: 1
/* STABLE */
}, 8, ["show", "onClose"]);
}
const __easycom_2 = /* @__PURE__ */ _export_sfc(_sfc_main$q, [["render", _sfc_render$c], ["__scopeId", "data-v-1500ce68"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/node_modules/uview-plus/components/u-picker/u-picker.vue"]]);
const _sfc_main$p = {
__name: "index",
setup(__props) {
const url2 = vue.ref("https://ceshi-worker-task.lihaink.cn//uploads//images//20231121//202311211336582b7920656.jpg");
const soilList = vue.reactive([
{
icon: "/static/img/sj.png",
name: "土壤温度",
num: 20,
unit: "%"
},
{
icon: "/static/img/sj.png",
name: "土壤湿度",
num: 20,
unit: "%"
},
{
icon: "/static/img/sj.png",
name: "土壤导电率",
num: 20,
unit: "%"
},
{
icon: "/static/img/sj.png",
name: "土壤PH值",
num: 20,
unit: ""
},
{
icon: "/static/img/sj.png",
name: "土壤含氮量",
num: 20,
unit: ""
},
{
icon: "/static/img/sj.png",
name: "土壤含磷量",
num: 20,
unit: ""
},
{
icon: "/static/img/sj.png",
name: "土壤含钾量",
num: 20,
unit: ""
}
]);
const show = vue.ref(false);
const showLoading = vue.ref(false);
const columns = vue.reactive([
["中国", "美国", "日本"]
]);
const environmentList = vue.reactive([
{
icon: "/static/img/sj.png",
name: "风速",
num: 20,
unit: "%"
},
{
icon: "/static/img/sj.png",
name: "风向",
num: 20,
unit: "%"
},
{
icon: "/static/img/sj.png",
name: "温度",
num: 20,
unit: "%"
},
{
icon: "/static/img/sj.png",
name: "湿度",
num: 20,
unit: ""
},
{
icon: "/static/img/sj.png",
name: "二氧化碳",
num: 20,
unit: ""
},
{
icon: "/static/img/sj.png",
name: "气压",
num: 20,
unit: ""
},
{
icon: "/static/img/sj.png",
name: "雨量",
num: 20,
unit: ""
},
{
icon: "/static/img/sj.png",
name: "光照量",
num: 20,
unit: ""
}
]);
const confirm = (e2) => {
formatAppLog("log", "at pages/index/index.vue:256", e2);
show.value = false;
showLoading.value = true;
setTimeout(() => {
showLoading.value = false;
}, 1e3);
};
const getNowTimeFn = () => {
const now2 = /* @__PURE__ */ new Date();
const hour = now2.getHours();
const minute = now2.getMinutes();
const formattedHour = hour < 10 ? "0" + hour : hour;
const formattedMinute = minute < 10 ? "0" + minute : minute;
const currentTime = formattedHour + ":" + formattedMinute;
return currentTime;
};
const navto = (url3) => {
uni.navigateTo({
url: url3
});
};
getNowTimeFn();
return (_ctx, _cache) => {
const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_1$4);
const _component_u__image = resolveEasycom(vue.resolveDynamicComponent("u--image"), __easycom_0$7);
const _component_u_loading_page = resolveEasycom(vue.resolveDynamicComponent("u-loading-page"), __easycom_2$2);
const _component_u_picker = resolveEasycom(vue.resolveDynamicComponent("u-picker"), __easycom_2);
return vue.openBlock(), vue.createElementBlock("view", {
class: "",
style: { "position": "relative" }
}, [
vue.createElementVNode("view", { class: "top" }, [
vue.createElementVNode("view", {
class: "",
style: { "height": "var(--status-bar-height)" }
}),
vue.createElementVNode("view", { class: "nav" }, [
vue.createElementVNode("view", { class: "" }, [
vue.createVNode(_component_u_icon, {
name: "scan",
color: "white",
size: 30
})
]),
vue.createElementVNode("view", {
class: "",
style: { "margin-left": "20rpx" }
}, [
vue.createVNode(_component_u_icon, {
name: "plus-circle",
color: "white",
size: 28
})
])
])
]),
vue.createElementVNode("view", { class: "" }, [
vue.createElementVNode("view", {
class: "",
style: { "height": "var(--status-bar-height)" }
}),
vue.createElementVNode("view", { class: "nav" })
]),
(vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "content"
}, [
vue.createCommentVNode(" 土地信息 "),
vue.createElementVNode("view", { class: "" }, [
vue.createElementVNode("view", { class: "card" }, [
vue.createElementVNode("view", { class: "" }, [
vue.createElementVNode("view", { class: "" }, " 土地名称: 土地信息1 "),
vue.createElementVNode("view", {
class: "",
style: { "margin": "10rpx 0" }
}, " 农作物: 洋芋 "),
vue.createElementVNode("view", { class: "" }, " 面积: 20亩 ")
]),
vue.createElementVNode("view", {
class: "changeLand",
onClick: _cache[0] || (_cache[0] = ($event) => show.value = true)
}, " 切换土地 ")
])
]),
vue.createCommentVNode(" 苗情监测 "),
vue.createElementVNode("view", { class: "" }, [
vue.createElementVNode("view", { class: "live-video soil-monitor" }, [
vue.createElementVNode("view", { class: "head" }, [
vue.createElementVNode("view", { class: "tit" }, " 苗情监测数据 "),
vue.createElementVNode("view", { class: "flushed-time" }, [
vue.createVNode(_component_u_icon, { name: "clock" }),
vue.createElementVNode(
"text",
null,
"刷新时间: " + vue.toDisplayString(getNowTimeFn()),
1
/* TEXT */
)
])
])
]),
vue.createElementVNode("view", {
class: "video",
onClick: _cache[1] || (_cache[1] = ($event) => navto("/pages/live/live"))
}, [
vue.createVNode(_component_u__image, {
src: url2.value,
width: "100%",
height: "300rpx"
}, null, 8, ["src"])
])
]),
vue.createCommentVNode(" 土壤监测 "),
vue.createElementVNode("view", { class: "soil-monitor" }, [
vue.createElementVNode("view", { class: "head" }, [
vue.createElementVNode("view", { class: "tit" }, " 土壤监测数据 "),
vue.createElementVNode("view", { class: "flushed-time" }, [
vue.createVNode(_component_u_icon, { name: "clock" }),
vue.createElementVNode(
"text",
null,
"刷新时间: " + vue.toDisplayString(getNowTimeFn()),
1
/* TEXT */
)
])
]),
vue.createElementVNode("view", { class: "monitor-content" }, [
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList(soilList, (item, index2) => {
return vue.openBlock(), vue.createElementBlock("view", {
class: "monitor-card",
key: index2
}, [
vue.createElementVNode("view", { class: "name" }, [
vue.createElementVNode("view", { class: "" }, [
vue.createVNode(_component_u__image, {
src: item.icon,
width: "38.55rpx",
height: "38.55rpx"
}, null, 8, ["src"])
]),
vue.createElementVNode(
"view",
{
class: "",
style: { "margin-left": "10rpx" }
},
vue.toDisplayString(item.name),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "num" }, [
vue.createElementVNode(
"text",
{ style: { "font-size": "70rpx" } },
vue.toDisplayString(item.num),
1
/* TEXT */
),
vue.createElementVNode(
"text",
null,
vue.toDisplayString(item.unit),
1
/* TEXT */
)
])
]);
}),
128
/* KEYED_FRAGMENT */
))
])
]),
vue.createCommentVNode(" 环境监测 "),
vue.createElementVNode("view", { class: "soil-monitor" }, [
vue.createElementVNode("view", { class: "head" }, [
vue.createElementVNode("view", { class: "tit" }, " 环境监测数据 "),
vue.createElementVNode("view", { class: "flushed-time" }, [
vue.createVNode(_component_u_icon, { name: "clock" }),
vue.createElementVNode(
"text",
null,
"刷新时间: " + vue.toDisplayString(getNowTimeFn()),
1
/* TEXT */
)
])
]),
vue.createElementVNode("view", { class: "monitor-content" }, [
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList(environmentList, (item, index2) => {
return vue.openBlock(), vue.createElementBlock("view", {
class: "monitor-card",
key: index2
}, [
vue.createElementVNode("view", { class: "name" }, [
vue.createElementVNode("view", { class: "" }, [
vue.createVNode(_component_u__image, {
src: item.icon,
width: "38.55rpx",
height: "38.55rpx"
}, null, 8, ["src"])
]),
vue.createElementVNode(
"view",
{
class: "",
style: { "margin-left": "10rpx" }
},
vue.toDisplayString(item.name),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "num" }, [
vue.createElementVNode(
"text",
{ style: { "font-size": "70rpx" } },
vue.toDisplayString(item.num),
1
/* TEXT */
),
vue.createElementVNode(
"text",
null,
vue.toDisplayString(item.unit),
1
/* TEXT */
)
])
]);
}),
128
/* KEYED_FRAGMENT */
))
])
]),
vue.createCommentVNode(" 组件 "),
vue.createVNode(_component_u_loading_page, { loading: showLoading.value }, null, 8, ["loading"]),
vue.createVNode(_component_u_picker, {
show: show.value,
columns,
onCancel: _cache[2] || (_cache[2] = ($event) => show.value = false),
onConfirm: confirm
}, null, 8, ["show", "columns"])
]))
]);
};
}
};
const PagesIndexIndex = /* @__PURE__ */ _export_sfc(_sfc_main$p, [["__scopeId", "data-v-1cf27b2a"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/pages/index/index.vue"]]);
let BASE_URL;
{
BASE_URL = "http://ceshi-suyuan.lihaink.cn/";
}
let config = {
HTTP_REQUEST_URL: BASE_URL,
HEADER: {
"content-type": "application/json",
"Form-type": "app",
"TOKEN": uni.getStorageSync("SY_TOKEN") || ""
}
};
function baseRequest(url2, method2, data, {
noAuth = false,
noVerify = false,
onReLogin = false
}) {
let Url = config.HTTP_REQUEST_URL, header = config.HEADER;
return new Promise((reslove, reject) => {
uni.request({
url: Url + "api" + url2,
method: method2 || "GET",
header: {
...header
},
data: method2 != "GET" ? data || {} : {},
params: method2 == "GET" ? data : {},
success: (res) => {
if (res.data.show) {
uni.showToast({
title: res.data.msg || "操作成功",
icon: "success"
});
}
if (noVerify)
reslove(res.data);
else if (res.data.code == -1) {
if (onReLogin) {
return reject();
}
} else if (res.data.code == 0) {
if (res.data.msg != "无登录信息") {
uni.showToast({
title: res.data.msg || "请检查网络",
icon: "none"
});
}
reject(res.data);
} else if (res.data.code == 1) {
reslove(res.data);
} else if (res.data.code == 200) {
reslove(res.data.data);
} else if ([41e4, 410001, 410002, 4e4].indexOf(res.data.code) !== -1) {
reject(res.data);
} else if (res.data.code == 501) {
reject(res.data);
} else {
uni.showToast({
title: res.data.msg || "请检查网络",
icon: "none"
});
reject(res.data.msg || "请检查网络");
}
},
fail: (message) => {
formatAppLog("log", "at utils/syhttp.js:67", message, "错误");
uni.showToast({
title: "网络错误",
icon: "none"
});
reject("请求失败");
}
});
});
}
const syhttp = {};
["options", "get", "post", "put", "head", "delete", "trace", "connect"].forEach((method2) => {
syhttp[method2] = (api, data, opt) => baseRequest(api, method2, data, opt || {});
});
const userInfoAPI = (data) => syhttp.get("/user/userInfo", data);
const landInfoAPI = (data) => syhttp.get("/LandPlant/landInfo", data);
const _sfc_main$o = {
__name: "landInfo",
props: {
land_id: String,
is_cropped: Boolean
},
emits: ["child-click"],
setup(__props, { emit }) {
const props2 = __props;
const land = vue.reactive({});
const objFn = (res, data) => {
for (let key in res) {
data[key] = res[key];
}
};
vue.watch(props2, (newValue, oldVlaue) => {
if (props2 == null ? void 0 : props2.land_id) {
landInfoAPI({
land_id: props2.land_id,
user_id: 307
}).then((res) => {
objFn(res.data, land);
emit("getcropid", {
cropid: res.data.crop_id
});
});
}
}, {
immediate: true
});
return (_ctx, _cache) => {
return vue.openBlock(), vue.createElementBlock("view", { class: "card" }, [
vue.createElementVNode("view", { class: "tit" }, [
vue.createElementVNode(
"view",
{ class: "" },
vue.toDisplayString(land.crop_id) + "号土地 ",
1
/* TEXT */
),
vue.createElementVNode(
"view",
{ class: "" },
" 溯源码: " + vue.toDisplayString(land.source_code),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "card-li" }, [
vue.createElementVNode(
"view",
{ class: "" },
" 当前种植: " + vue.toDisplayString(land.crop_name),
1
/* TEXT */
),
vue.createElementVNode(
"view",
{ class: "" },
" 种植品牌: " + vue.toDisplayString(land.crop_brand),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "card-li" }, [
vue.createElementVNode(
"view",
{ class: "" },
" 土地面积: " + vue.toDisplayString(land.land_area) + "亩 ",
1
/* TEXT */
),
vue.createElementVNode(
"view",
{ class: "" },
" 种子品牌: " + vue.toDisplayString(land.crop_variety),
1
/* TEXT */
)
]),
land.crop_yield ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "card-li"
}, [
vue.createElementVNode(
"view",
{ class: "" },
" 预计产量: " + vue.toDisplayString(land.crop_yield) + "亩 ",
1
/* TEXT */
),
vue.createCommentVNode(' \r\n 已出售: ???\r\n ')
])) : vue.createCommentVNode("v-if", true),
vue.createElementVNode("view", { class: "card-li" }, [
vue.createElementVNode(
"view",
{ class: "" },
" 播种时间: " + vue.toDisplayString(land.seed_time),
1
/* TEXT */
)
])
]);
};
}
};
const landInfo = /* @__PURE__ */ _export_sfc(_sfc_main$o, [["__scopeId", "data-v-5f103973"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/components/plant/landInfo.vue"]]);
const _sfc_main$n = {
__name: "index",
setup(__props) {
const dataList = vue.reactive([
{
type: "0"
},
{
type: "1"
},
{
type: "2"
},
{
type: "3"
},
{
type: "4"
},
{
type: "5"
}
]);
const showPicker = vue.ref(false);
const columns = vue.reactive([
[
{
label: "种植",
route: "/pages/husbandryForm/sow"
},
{
label: "施肥",
route: "/pages/husbandryForm/fertilize"
},
{
label: "除草",
route: "/pages/husbandryForm/weeding"
},
{
label: "灌溉",
route: "/pages/husbandryForm/irrigate"
},
{
label: "除虫",
route: "/pages/husbandryForm/Pest"
},
{
label: "收获",
route: "/pages/husbandryForm/harvest"
}
]
]);
const navto = (url3) => {
uni.navigateTo({
url: url3
});
};
const navtoForm = (type2) => {
switch (type2) {
case "0":
navto(`/pages/husbandryForm/sow?task_id=${5}`);
break;
case "1":
navto(`/pages/husbandryForm/fertilize?task_id=${5}`);
break;
case "2":
navto(`/pages/husbandryForm/weeding?task_id=${5}`);
break;
case "3":
navto(`/pages/husbandryForm/irrigate?task_id=${5}`);
break;
case "4":
navto(`/pages/husbandryForm/Pest?task_id=${5}`);
break;
case "5":
navto(`/pages/husbandryForm/harvest?task_id=${5}`);
break;
}
};
const confirm = (e2) => {
showPicker.value = false;
uni.navigateTo({
url: e2.value[0].route
});
};
const url2 = vue.ref("https://ceshi-worker-task.lihaink.cn//uploads//images//20231121//202311211336582b7920656.jpg");
const getNowTimeFn = () => {
const now2 = /* @__PURE__ */ new Date();
const hour = now2.getHours();
const minute = now2.getMinutes();
const formattedHour = hour < 10 ? "0" + hour : hour;
const formattedMinute = minute < 10 ? "0" + minute : minute;
const currentTime = formattedHour + ":" + formattedMinute;
return currentTime;
};
const perviewFn = (url3) => {
formatAppLog("log", "at pages/landDetail/index.vue:160", url3);
uni.previewImage({
urls: [url3]
});
};
return (_ctx, _cache) => {
const _component_u__image = resolveEasycom(vue.resolveDynamicComponent("u--image"), __easycom_0$7);
const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_1$4);
const _component_u_picker = resolveEasycom(vue.resolveDynamicComponent("u-picker"), __easycom_2);
return vue.openBlock(), vue.createElementBlock("view", { class: "box" }, [
vue.createElementVNode("view", { class: "content" }, [
vue.createElementVNode("view", {
class: "video",
onClick: _cache[0] || (_cache[0] = ($event) => navto("/pages/live/live"))
}, [
vue.createVNode(_component_u__image, {
src: url2.value,
width: "100%",
height: "300rpx"
}, null, 8, ["src"])
]),
vue.createElementVNode("view", { class: "time" }, [
vue.createVNode(_component_u_icon, { name: "clock" }),
vue.createElementVNode(
"text",
null,
"刷新时间: " + vue.toDisplayString(getNowTimeFn()),
1
/* TEXT */
)
]),
vue.createElementVNode("view", {
class: "add-thing",
onClick: _cache[1] || (_cache[1] = ($event) => showPicker.value = true)
}, " 记农事 "),
vue.createVNode(landInfo),
vue.createElementVNode("view", { class: "" }, [
vue.createElementVNode("view", {
class: "tit",
style: { "font-size": "33.29rpx", "margin": "20rpx 0" }
}, " 历史农事信息 "),
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList(dataList, (item, index2) => {
return vue.openBlock(), vue.createElementBlock("view", {
class: "thing-card",
key: index2
}, [
vue.createElementVNode("view", { class: "head" }, [
vue.createElementVNode("view", { class: "" }, " 种植 "),
vue.createElementVNode("view", {
class: "",
onClick: ($event) => navtoForm(item.type)
}, " 农事查看 ", 8, ["onClick"])
]),
vue.createElementVNode("view", { class: "body" }, [
vue.createElementVNode("view", { class: "left" }, [
vue.createVNode(_component_u__image, {
onClick: _cache[2] || (_cache[2] = ($event) => perviewFn(url2.value)),
radius: "10",
src: url2.value,
width: "200rpx",
height: "200rpx"
}, null, 8, ["src"])
]),
vue.createElementVNode("view", { class: "right" }, [
vue.createElementVNode("view", { class: "" }, " 土地名称: 张伟撒打算撒旦 "),
vue.createElementVNode("view", { class: "" }, " 土地名称: 张伟撒打算撒旦 "),
vue.createElementVNode("view", { class: "" }, " 土地名称: 张伟撒打算撒旦 "),
vue.createElementVNode("view", { class: "" }, " 土地名称: 张伟撒打算撒旦 ")
])
])
]);
}),
128
/* KEYED_FRAGMENT */
))
])
]),
vue.createCommentVNode(" 组件 "),
vue.createElementVNode("view", { class: "" }, [
vue.createVNode(_component_u_picker, {
keyName: "label",
show: showPicker.value,
onCancel: _cache[3] || (_cache[3] = ($event) => showPicker.value = false),
onConfirm: confirm,
columns
}, null, 8, ["show", "columns"])
])
]);
};
}
};
const PagesLandDetailIndex = /* @__PURE__ */ _export_sfc(_sfc_main$n, [["__scopeId", "data-v-2b983efa"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/pages/landDetail/index.vue"]]);
const props$6 = {
props: {
// 绑定的值
modelValue: {
type: [String, Number],
default: props$i.input.value
},
// number-数字输入键盘,app-vue下可以输入浮点数,app-nvue和小程序平台下只能输入整数
// idcard-身份证输入键盘,微信、支付宝、百度、QQ小程序
// digit-带小数点的数字键盘,App的nvue页面、微信、支付宝、百度、头条、QQ小程序
// text-文本输入键盘
type: {
type: String,
default: props$i.input.type
},
// 如果 textarea 是在一个 position:fixed 的区域,需要显示指定属性 fixed 为 true,
// 兼容性:微信小程序、百度小程序、字节跳动小程序、QQ小程序
fixed: {
type: Boolean,
default: props$i.input.fixed
},
// 是否禁用输入框
disabled: {
type: Boolean,
default: props$i.input.disabled
},
// 禁用状态时的背景色
disabledColor: {
type: String,
default: props$i.input.disabledColor
},
// 是否显示清除控件
clearable: {
type: Boolean,
default: props$i.input.clearable
},
// 是否密码类型
password: {
type: Boolean,
default: props$i.input.password
},
// 最大输入长度,设置为 -1 的时候不限制最大长度
maxlength: {
type: [String, Number],
default: props$i.input.maxlength
},
// 输入框为空时的占位符
placeholder: {
type: String,
default: props$i.input.placeholder
},
// 指定placeholder的样式类,注意页面或组件的style中写了scoped时,需要在类名前写/deep/
placeholderClass: {
type: String,
default: props$i.input.placeholderClass
},
// 指定placeholder的样式
placeholderStyle: {
type: [String, Object],
default: props$i.input.placeholderStyle
},
// 是否显示输入字数统计,只在 type ="text"或type ="textarea"时有效
showWordLimit: {
type: Boolean,
default: props$i.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$i.input.confirmType
},
// 点击键盘右下角按钮时是否保持键盘不收起,H5无效
confirmHold: {
type: Boolean,
default: props$i.input.confirmHold
},
// focus时,点击页面的时候不收起键盘,微信小程序有效
holdKeyboard: {
type: Boolean,
default: props$i.input.holdKeyboard
},
// 自动获取焦点
// 在 H5 平台能否聚焦以及软键盘是否跟随弹出,取决于当前浏览器本身的实现。nvue 页面不支持,需使用组件的 focus()、blur() 方法控制焦点
focus: {
type: Boolean,
default: props$i.input.focus
},
// 键盘收起时,是否自动失去焦点,目前仅App3.0.0+有效
autoBlur: {
type: Boolean,
default: props$i.input.autoBlur
},
// 是否去掉 iOS 下的默认内边距,仅微信小程序,且type=textarea时有效
disableDefaultPadding: {
type: Boolean,
default: props$i.input.disableDefaultPadding
},
// 指定focus时光标的位置
cursor: {
type: [String, Number],
default: props$i.input.cursor
},
// 输入框聚焦时底部与键盘的距离
cursorSpacing: {
type: [String, Number],
default: props$i.input.cursorSpacing
},
// 光标起始位置,自动聚集时有效,需与selection-end搭配使用
selectionStart: {
type: [String, Number],
default: props$i.input.selectionStart
},
// 光标结束位置,自动聚集时有效,需与selection-start搭配使用
selectionEnd: {
type: [String, Number],
default: props$i.input.selectionEnd
},
// 键盘弹起时,是否自动上推页面
adjustPosition: {
type: Boolean,
default: props$i.input.adjustPosition
},
// 输入框内容对齐方式,可选值为:left|center|right
inputAlign: {
type: String,
default: props$i.input.inputAlign
},
// 输入框字体的大小
fontSize: {
type: [String, Number],
default: props$i.input.fontSize
},
// 输入框字体颜色
color: {
type: String,
default: props$i.input.color
},
// 输入框前置图标
prefixIcon: {
type: String,
default: props$i.input.prefixIcon
},
// 前置图标样式,对象或字符串
prefixIconStyle: {
type: [String, Object],
default: props$i.input.prefixIconStyle
},
// 输入框后置图标
suffixIcon: {
type: String,
default: props$i.input.suffixIcon
},
// 后置图标样式,对象或字符串
suffixIconStyle: {
type: [String, Object],
default: props$i.input.suffixIconStyle
},
// 边框类型,surround-四周边框,bottom-底部边框,none-无边框
border: {
type: String,
default: props$i.input.border
},
// 是否只读,与disabled不同之处在于disabled会置灰组件,而readonly则不会
readonly: {
type: Boolean,
default: props$i.input.readonly
},
// 输入框形状,circle-圆形,square-方形
shape: {
type: String,
default: props$i.input.shape
},
// 用于处理或者过滤输入框内容的方法
formatter: {
type: [Function, null],
default: props$i.input.formatter
},
// 是否忽略组件内对文本合成系统事件的处理
ignoreCompositionEvent: {
type: Boolean,
default: true
}
}
};
const _sfc_main$m = {
name: "u-input",
mixins: [mpMixin, mixin, props$6],
data() {
return {
// 输入框的值
innerValue: "",
// 是否处于获得焦点状态
focused: false,
// value是否第一次变化,在watch中,由于加入immediate属性,会在第一次触发,此时不应该认为value发生了变化
firstChange: true,
// value绑定值的变化是由内部还是外部引起的
changeFromInner: false,
// 过滤处理方法
innerFormatter: (value) => value
};
},
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 uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle));
},
// 输入框的样式
inputStyle() {
const style = {
color: this.color,
fontSize: uni.$u.addUnit(this.fontSize),
textAlign: this.inputAlign
};
return style;
}
},
emits: ["update:modelValue", "focus", "blur", "change", "confirm", "clear", "keyboardheightchange"],
methods: {
// 在微信小程序中,不支持将函数当做props参数,故只能通过ref形式调用
setFormatter(e2) {
this.innerFormatter = e2;
},
// 当键盘输入时,触发input事件
onInput(e2) {
let { value = "" } = e2.detail || {};
const formatter = this.formatter || this.innerFormatter;
const formatValue = formatter(value);
this.innerValue = value;
this.$nextTick(() => {
this.innerValue = formatValue;
this.valueChange();
});
},
// 输入框失去焦点时触发
onBlur(event) {
this.$emit("blur", event.detail.value);
uni.$u.sleep(50).then(() => {
this.focused = false;
});
uni.$u.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() {
const value = this.innerValue;
this.$nextTick(() => {
this.$emit("update:modelValue", value);
this.changeFromInner = true;
this.$emit("change", value);
uni.$u.formValidate(this, "change");
});
},
// 点击清除控件
onClear() {
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$b(_ctx, _cache, $props, $setup, $data, $options) {
const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_1$4);
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均失效,此时\r\n 为了防止type=number时,又存在password属性,type无效,此时需要设置password为undefined\r\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" || void 0,
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_0$3 = /* @__PURE__ */ _export_sfc(_sfc_main$m, [["render", _sfc_render$b], ["__scopeId", "data-v-5904192e"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/node_modules/uview-plus/components/u-input/u-input.vue"]]);
const props$5 = {
props: {
color: {
type: String,
default: props$i.line.color
},
// 长度,竖向时表现为高度,横向时表现为长度,可以为百分比,带px单位的值等
length: {
type: [String, Number],
default: props$i.line.length
},
// 线条方向,col-竖向,row-横向
direction: {
type: String,
default: props$i.line.direction
},
// 是否显示细边框
hairline: {
type: Boolean,
default: props$i.line.hairline
},
// 线条与上下左右元素的间距,字符串形式,如"30px"、"20px 30px"
margin: {
type: [String, Number],
default: props$i.line.margin
},
// 是否虚线,true-虚线,false-实线
dashed: {
type: Boolean,
default: props$i.line.dashed
}
}
};
const _sfc_main$l = {
name: "u-line",
mixins: [mpMixin, mixin, props$5],
computed: {
lineStyle() {
const style = {};
style.margin = this.margin;
if (this.direction === "row") {
style.borderBottomWidth = "1px";
style.borderBottomStyle = this.dashed ? "dashed" : "solid";
style.width = uni.$u.addUnit(this.length);
if (this.hairline)
style.transform = "scaleY(0.5)";
} else {
style.borderLeftWidth = "1px";
style.borderLeftStyle = this.dashed ? "dashed" : "solid";
style.height = uni.$u.addUnit(this.length);
if (this.hairline)
style.transform = "scaleX(0.5)";
}
style.borderColor = this.color;
return uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle));
}
}
};
function _sfc_render$a(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createElementBlock(
"view",
{
class: "u-line",
style: vue.normalizeStyle([$options.lineStyle])
},
null,
4
/* STYLE */
);
}
const __easycom_1$2 = /* @__PURE__ */ _export_sfc(_sfc_main$l, [["render", _sfc_render$a], ["__scopeId", "data-v-bbd9963c"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/node_modules/uview-plus/components/u-line/u-line.vue"]]);
const props$4 = {
props: {
// input的label提示语
label: {
type: String,
default: props$i.formItem.label
},
// 绑定的值
prop: {
type: String,
default: props$i.formItem.prop
},
// 是否显示表单域的下划线边框
borderBottom: {
type: [String, Boolean],
default: props$i.formItem.borderBottom
},
// label的宽度,单位px
labelWidth: {
type: [String, Number],
default: props$i.formItem.labelWidth
},
// 右侧图标
rightIcon: {
type: String,
default: props$i.formItem.rightIcon
},
// 左侧图标
leftIcon: {
type: String,
default: props$i.formItem.leftIcon
},
// 是否显示左边的必填星号,只作显示用,具体校验必填的逻辑,请在rules中配置
required: {
type: Boolean,
default: props$i.formItem.required
},
leftIconStyle: {
type: [String, Object],
default: props$i.formItem.leftIconStyle
}
}
};
const _sfc_main$k = {
name: "u-form-item",
mixins: [mpMixin, mixin, props$4],
data() {
return {
// 错误提示语
message: "",
parentData: {
// 提示文本的位置
labelPosition: "left",
// 提示文本对齐方式
labelAlign: "left",
// 提示文本的样式
labelStyle: {},
// 提示文本的宽度
labelWidth: 45,
// 错误提示方式
errorType: "message"
}
};
},
// 组件创建完成时,将当前实例保存到u-form中
computed: {
propsLine() {
return uni.$u.props.line;
}
},
mounted() {
this.init();
},
emits: ["click"],
methods: {
init() {
this.updateParentData();
if (!this.parent) {
uni.$u.error("u-form-item需要结合u-form组件使用");
}
},
// 获取父组件的参数
updateParentData() {
this.getParentData("u-form");
},
// 移除u-form-item的校验结果
clearValidate() {
this.message = null;
},
// 清空当前的组件的校验结果,并重置为初始值
resetField() {
const value = uni.$u.getProperty(this.parent.originalModel, this.prop);
uni.$u.setProperty(this.parent.model, this.prop, value);
this.message = null;
},
// 点击组件
clickHandler() {
this.$emit("click");
}
}
};
function _sfc_render$9(_ctx, _cache, $props, $setup, $data, $options) {
const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_1$4);
const _component_u_line = resolveEasycom(vue.resolveDynamicComponent("u-line"), __easycom_1$2);
return vue.openBlock(), vue.createElementBlock("view", { class: "u-form-item" }, [
vue.createElementVNode(
"view",
{
class: "u-form-item__body",
onClick: _cache[0] || (_cache[0] = (...args) => $options.clickHandler && $options.clickHandler(...args)),
style: vue.normalizeStyle([_ctx.$u.addStyle(_ctx.customStyle), {
flexDirection: $data.parentData.labelPosition === "left" ? "row" : "column"
}])
},
[
vue.createCommentVNode(' 微信小程序中,将一个参数设置空字符串,结果会变成字符串"true" '),
vue.renderSlot(_ctx.$slots, "label", {}, () => [
vue.createCommentVNode(" {{required}} "),
_ctx.required || _ctx.leftIcon || _ctx.label ? (vue.openBlock(), vue.createElementBlock(
"view",
{
key: 0,
class: "u-form-item__body__left",
style: vue.normalizeStyle({
width: _ctx.$u.addUnit(_ctx.labelWidth || $data.parentData.labelWidth),
marginBottom: $data.parentData.labelPosition === "left" ? 0 : "5px"
})
},
[
vue.createCommentVNode(" 为了块对齐 "),
vue.createElementVNode("view", { class: "u-form-item__body__left__content" }, [
vue.createCommentVNode(" nvue不支持伪元素before "),
_ctx.required ? (vue.openBlock(), vue.createElementBlock("text", {
key: 0,
class: "u-form-item__body__left__content__required"
}, "*")) : vue.createCommentVNode("v-if", true),
_ctx.leftIcon ? (vue.openBlock(), vue.createElementBlock("view", {
key: 1,
class: "u-form-item__body__left__content__icon"
}, [
vue.createVNode(_component_u_icon, {
name: _ctx.leftIcon,
"custom-style": _ctx.leftIconStyle
}, null, 8, ["name", "custom-style"])
])) : vue.createCommentVNode("v-if", true),
vue.createElementVNode(
"text",
{
class: "u-form-item__body__left__content__label",
style: vue.normalizeStyle([$data.parentData.labelStyle, {
justifyContent: $data.parentData.labelAlign === "left" ? "flex-start" : $data.parentData.labelAlign === "center" ? "center" : "flex-end"
}])
},
vue.toDisplayString(_ctx.label),
5
/* TEXT, STYLE */
)
])
],
4
/* STYLE */
)) : vue.createCommentVNode("v-if", true)
], true),
vue.createElementVNode("view", { class: "u-form-item__body__right" }, [
vue.createElementVNode("view", { class: "u-form-item__body__right__content" }, [
vue.createElementVNode("view", { class: "u-form-item__body__right__content__slot" }, [
vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
]),
_ctx.$slots.right ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "item__body__right__content__icon"
}, [
vue.renderSlot(_ctx.$slots, "right", {}, void 0, true)
])) : vue.createCommentVNode("v-if", true)
])
])
],
4
/* STYLE */
),
vue.renderSlot(_ctx.$slots, "error", {}, () => [
!!$data.message && $data.parentData.errorType === "message" ? (vue.openBlock(), vue.createElementBlock(
"text",
{
key: 0,
class: "u-form-item__body__right__message",
style: vue.normalizeStyle({
marginLeft: _ctx.$u.addUnit($data.parentData.labelPosition === "top" ? 0 : _ctx.labelWidth || $data.parentData.labelWidth)
})
},
vue.toDisplayString($data.message),
5
/* TEXT, STYLE */
)) : vue.createCommentVNode("v-if", true)
], true),
_ctx.borderBottom ? (vue.openBlock(), vue.createBlock(_component_u_line, {
key: 0,
color: $data.message && $data.parentData.errorType === "border-bottom" ? _ctx.$u.color.error : $options.propsLine.color,
customStyle: `margin-top: ${$data.message && $data.parentData.errorType === "message" ? "5px" : 0}`
}, null, 8, ["color", "customStyle"])) : vue.createCommentVNode("v-if", true)
]);
}
const __easycom_1$1 = /* @__PURE__ */ _export_sfc(_sfc_main$k, [["render", _sfc_render$9], ["__scopeId", "data-v-b4fd400b"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/node_modules/uview-plus/components/u-form-item/u-form-item.vue"]]);
const props$3 = {
props: {
// 输入框的内容
value: {
type: [String, Number],
default: props$i.textarea.value
},
// 输入框的内容
modelValue: {
type: [String, Number],
default: props$i.textarea.value
},
// 输入框为空时占位符
placeholder: {
type: [String, Number],
default: props$i.textarea.placeholder
},
// 指定placeholder的样式类,注意页面或组件的style中写了scoped时,需要在类名前写/deep/
placeholderClass: {
type: String,
default: props$i.input.placeholderClass
},
// 指定placeholder的样式
placeholderStyle: {
type: [String, Object],
default: props$i.input.placeholderStyle
},
// 输入框高度
height: {
type: [String, Number],
default: props$i.textarea.height
},
// 设置键盘右下角按钮的文字,仅微信小程序,App-vue和H5有效
confirmType: {
type: String,
default: props$i.textarea.confirmType
},
// 是否禁用
disabled: {
type: Boolean,
default: props$i.textarea.disabled
},
// 是否显示统计字数
count: {
type: Boolean,
default: props$i.textarea.count
},
// 是否自动获取焦点,nvue不支持,H5取决于浏览器的实现
focus: {
type: Boolean,
default: props$i.textarea.focus
},
// 是否自动增加高度
autoHeight: {
type: Boolean,
default: props$i.textarea.autoHeight
},
// 如果textarea是在一个position:fixed的区域,需要显示指定属性fixed为true
fixed: {
type: Boolean,
default: props$i.textarea.fixed
},
// 指定光标与键盘的距离
cursorSpacing: {
type: Number,
default: props$i.textarea.cursorSpacing
},
// 指定focus时的光标位置
cursor: {
type: [String, Number],
default: props$i.textarea.cursor
},
// 是否显示键盘上方带有”完成“按钮那一栏,
showConfirmBar: {
type: Boolean,
default: props$i.textarea.showConfirmBar
},
// 光标起始位置,自动聚焦时有效,需与selection-end搭配使用
selectionStart: {
type: Number,
default: props$i.textarea.selectionStart
},
// 光标结束位置,自动聚焦时有效,需与selection-start搭配使用
selectionEnd: {
type: Number,
default: props$i.textarea.selectionEnd
},
// 键盘弹起时,是否自动上推页面
adjustPosition: {
type: Boolean,
default: props$i.textarea.adjustPosition
},
// 是否去掉 iOS 下的默认内边距,只微信小程序有效
disableDefaultPadding: {
type: Boolean,
default: props$i.textarea.disableDefaultPadding
},
// focus时,点击页面的时候不收起键盘,只微信小程序有效
holdKeyboard: {
type: Boolean,
default: props$i.textarea.holdKeyboard
},
// 最大输入长度,设置为 -1 的时候不限制最大长度
maxlength: {
type: [String, Number],
default: props$i.textarea.maxlength
},
// 边框类型,surround-四周边框,bottom-底部边框
border: {
type: String,
default: props$i.textarea.border
},
// 用于处理或者过滤输入框内容的方法
formatter: {
type: [Function, null],
default: props$i.textarea.formatter
},
// 是否忽略组件内对文本合成系统事件的处理
ignoreCompositionEvent: {
type: Boolean,
default: true
}
}
};
const _sfc_main$j = {
name: "u-textarea",
mixins: [mpMixin, mixin, props$3],
data() {
return {
// 输入框的值
innerValue: "",
// 是否处于获得焦点状态
focused: false,
// value是否第一次变化,在watch中,由于加入immediate属性,会在第一次触发,此时不应该认为value发生了变化
firstChange: true,
// value绑定值的变化是由内部还是外部引起的
changeFromInner: false,
// 过滤处理方法
innerFormatter: (value) => value
};
},
created() {
},
watch: {
modelValue: {
immediate: true,
handler(newVal, oldVal) {
this.innerValue = newVal;
this.firstChange = false;
this.changeFromInner = false;
}
}
},
computed: {
// 组件的类名
textareaClass() {
let classes = [], { border, disabled } = this;
border === "surround" && (classes = classes.concat(["u-border", "u-textarea--radius"]));
border === "bottom" && (classes = classes.concat([
"u-border-bottom",
"u-textarea--no-radius"
]));
disabled && classes.push("u-textarea--disabled");
return classes.join(" ");
},
// 组件的样式
textareaStyle() {
const style = {};
return uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle));
}
},
emits: ["update:modelValue", "linechange", "focus", "blur", "change", "confirm", "keyboardheightchange"],
methods: {
// 在微信小程序中,不支持将函数当做props参数,故只能通过ref形式调用
setFormatter(e2) {
this.innerFormatter = e2;
},
onFocus(e2) {
this.$emit("focus", e2);
},
onBlur(e2) {
this.$emit("blur", e2);
uni.$u.formValidate(this, "blur");
},
onLinechange(e2) {
this.$emit("linechange", e2);
},
onInput(e2) {
let { value = "" } = e2.detail || {};
const formatter = this.formatter || this.innerFormatter;
const formatValue = formatter(value);
this.innerValue = value;
this.$nextTick(() => {
this.innerValue = formatValue;
this.valueChange();
});
},
// 内容发生变化,进行处理
valueChange() {
const value = this.innerValue;
this.$nextTick(() => {
this.$emit("update:modelValue", value);
this.changeFromInner = true;
this.$emit("change", value);
uni.$u.formValidate(this, "change");
});
},
onConfirm(e2) {
this.$emit("confirm", e2);
},
onKeyboardheightchange(e2) {
this.$emit("keyboardheightchange", e2);
}
}
};
function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createElementBlock(
"view",
{
class: vue.normalizeClass(["u-textarea", $options.textareaClass]),
style: vue.normalizeStyle([$options.textareaStyle])
},
[
vue.createElementVNode("textarea", {
class: "u-textarea__field",
value: $data.innerValue,
style: vue.normalizeStyle({ height: _ctx.$u.addUnit(_ctx.height) }),
placeholder: _ctx.placeholder,
"placeholder-style": _ctx.$u.addStyle(_ctx.placeholderStyle, "string"),
"placeholder-class": _ctx.placeholderClass,
disabled: _ctx.disabled,
focus: _ctx.focus,
autoHeight: _ctx.autoHeight,
fixed: _ctx.fixed,
cursorSpacing: _ctx.cursorSpacing,
cursor: _ctx.cursor,
showConfirmBar: _ctx.showConfirmBar,
selectionStart: _ctx.selectionStart,
selectionEnd: _ctx.selectionEnd,
adjustPosition: _ctx.adjustPosition,
disableDefaultPadding: _ctx.disableDefaultPadding,
holdKeyboard: _ctx.holdKeyboard,
maxlength: _ctx.maxlength,
"confirm-type": _ctx.confirmType,
ignoreCompositionEvent: _ctx.ignoreCompositionEvent,
onFocus: _cache[0] || (_cache[0] = (...args) => $options.onFocus && $options.onFocus(...args)),
onBlur: _cache[1] || (_cache[1] = (...args) => $options.onBlur && $options.onBlur(...args)),
onLinechange: _cache[2] || (_cache[2] = (...args) => $options.onLinechange && $options.onLinechange(...args)),
onInput: _cache[3] || (_cache[3] = (...args) => $options.onInput && $options.onInput(...args)),
onConfirm: _cache[4] || (_cache[4] = (...args) => $options.onConfirm && $options.onConfirm(...args)),
onKeyboardheightchange: _cache[5] || (_cache[5] = (...args) => $options.onKeyboardheightchange && $options.onKeyboardheightchange(...args))
}, null, 44, ["value", "placeholder", "placeholder-style", "placeholder-class", "disabled", "focus", "autoHeight", "fixed", "cursorSpacing", "cursor", "showConfirmBar", "selectionStart", "selectionEnd", "adjustPosition", "disableDefaultPadding", "holdKeyboard", "maxlength", "confirm-type", "ignoreCompositionEvent"]),
_ctx.count ? (vue.openBlock(), vue.createElementBlock(
"text",
{
key: 0,
class: "u-textarea__count",
style: vue.normalizeStyle({
"background-color": _ctx.disabled ? "transparent" : "#fff"
})
},
vue.toDisplayString($data.innerValue.length) + "/" + vue.toDisplayString(_ctx.maxlength),
5
/* TEXT, STYLE */
)) : vue.createCommentVNode("v-if", true)
],
6
/* CLASS, STYLE */
);
}
const __easycom_3$1 = /* @__PURE__ */ _export_sfc(_sfc_main$j, [["render", _sfc_render$8], ["__scopeId", "data-v-31706dd7"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/node_modules/uview-plus/components/u-textarea/u-textarea.vue"]]);
const props$2 = {
props: {
// 当前form的需要验证字段的集合
model: {
type: Object,
default: props$i.form.model
},
// 验证规则
rules: {
type: [Object, Function, Array],
default: props$i.form.rules
},
// 有错误时的提示方式,message-提示信息,toast-进行toast提示
// border-bottom-下边框呈现红色,none-无提示
errorType: {
type: String,
default: props$i.form.errorType
},
// 是否显示表单域的下划线边框
borderBottom: {
type: Boolean,
default: props$i.form.borderBottom
},
// label的位置,left-左边,top-上边
labelPosition: {
type: String,
default: props$i.form.labelPosition
},
// label的宽度,单位px
labelWidth: {
type: [String, Number],
default: props$i.form.labelWidth
},
// lable字体的对齐方式
labelAlign: {
type: String,
default: props$i.form.labelAlign
},
// lable的样式,对象形式
labelStyle: {
type: Object,
default: props$i.form.labelStyle
}
}
};
const formatRegExp = /%[sdj%]/g;
let warning = function warning2() {
};
if (typeof process !== "undefined" && process.env && true && typeof window !== "undefined" && typeof document !== "undefined") {
warning = function warning2(type2, errors) {
if (typeof console !== "undefined" && console.warn) {
if (errors.every((e2) => typeof e2 === "string")) {
formatAppLog("warn", "at node_modules/uview-plus/libs/util/async-validator.js:28", type2, errors);
}
}
};
}
function convertFieldsError(errors) {
if (!errors || !errors.length)
return null;
const fields = {};
errors.forEach((error2) => {
const { field } = error2;
fields[field] = fields[field] || [];
fields[field].push(error2);
});
return fields;
}
function format() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
let i2 = 1;
const f2 = args[0];
const len = args.length;
if (typeof f2 === "function") {
return f2.apply(null, args.slice(1));
}
if (typeof f2 === "string") {
let str = String(f2).replace(formatRegExp, (x) => {
if (x === "%%") {
return "%";
}
if (i2 >= len) {
return x;
}
switch (x) {
case "%s":
return String(args[i2++]);
case "%d":
return Number(args[i2++]);
case "%j":
try {
return JSON.stringify(args[i2++]);
} catch (_2) {
return "[Circular]";
}
break;
default:
return x;
}
});
for (let arg = args[i2]; i2 < len; arg = args[++i2]) {
str += ` ${arg}`;
}
return str;
}
return f2;
}
function isNativeStringType(type2) {
return type2 === "string" || type2 === "url" || type2 === "hex" || type2 === "email" || type2 === "pattern";
}
function isEmptyValue(value, type2) {
if (value === void 0 || value === null) {
return true;
}
if (type2 === "array" && Array.isArray(value) && !value.length) {
return true;
}
if (isNativeStringType(type2) && typeof value === "string" && !value) {
return true;
}
return false;
}
function asyncParallelArray(arr, func2, callback) {
const results = [];
let total = 0;
const arrLength = arr.length;
function count(errors) {
results.push.apply(results, errors);
total++;
if (total === arrLength) {
callback(results);
}
}
arr.forEach((a2) => {
func2(a2, count);
});
}
function asyncSerialArray(arr, func2, callback) {
let index2 = 0;
const arrLength = arr.length;
function next(errors) {
if (errors && errors.length) {
callback(errors);
return;
}
const original = index2;
index2 += 1;
if (original < arrLength) {
func2(arr[original], next);
} else {
callback([]);
}
}
next([]);
}
function flattenObjArr(objArr) {
const ret = [];
Object.keys(objArr).forEach((k) => {
ret.push.apply(ret, objArr[k]);
});
return ret;
}
function asyncMap(objArr, option, func2, callback) {
if (option.first) {
const _pending = new Promise((resolve, reject) => {
const next = function next2(errors) {
callback(errors);
return errors.length ? reject({
errors,
fields: convertFieldsError(errors)
}) : resolve();
};
const flattenArr = flattenObjArr(objArr);
asyncSerialArray(flattenArr, func2, next);
});
_pending.catch((e2) => e2);
return _pending;
}
let firstFields = option.firstFields || [];
if (firstFields === true) {
firstFields = Object.keys(objArr);
}
const objArrKeys = Object.keys(objArr);
const objArrLength = objArrKeys.length;
let total = 0;
const results = [];
const pending = new Promise((resolve, reject) => {
const next = function next2(errors) {
results.push.apply(results, errors);
total++;
if (total === objArrLength) {
callback(results);
return results.length ? reject({
errors: results,
fields: convertFieldsError(results)
}) : resolve();
}
};
if (!objArrKeys.length) {
callback(results);
resolve();
}
objArrKeys.forEach((key) => {
const arr = objArr[key];
if (firstFields.indexOf(key) !== -1) {
asyncSerialArray(arr, func2, next);
} else {
asyncParallelArray(arr, func2, next);
}
});
});
pending.catch((e2) => e2);
return pending;
}
function complementError(rule) {
return function(oe2) {
if (oe2 && oe2.message) {
oe2.field = oe2.field || rule.fullField;
return oe2;
}
return {
message: typeof oe2 === "function" ? oe2() : oe2,
field: oe2.field || rule.fullField
};
};
}
function deepMerge$2(target, source) {
if (source) {
for (const s2 in source) {
if (source.hasOwnProperty(s2)) {
const value = source[s2];
if (typeof value === "object" && typeof target[s2] === "object") {
target[s2] = { ...target[s2], ...value };
} else {
target[s2] = value;
}
}
}
}
return target;
}
function required(rule, value, source, errors, options, type2) {
if (rule.required && (!source.hasOwnProperty(rule.field) || isEmptyValue(value, type2 || rule.type))) {
errors.push(format(options.messages.required, rule.fullField));
}
}
function whitespace(rule, value, source, errors, options) {
if (/^\s+$/.test(value) || value === "") {
errors.push(format(options.messages.whitespace, rule.fullField));
}
}
const pattern = {
// http://emailregex.com/
email: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
url: new RegExp(
"^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$",
"i"
),
hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i
};
var types = {
integer: function integer2(value) {
return /^(-)?\d+$/.test(value);
},
float: function float(value) {
return /^(-)?\d+(\.\d+)?$/.test(value);
},
array: function array2(value) {
return Array.isArray(value);
},
regexp: function regexp2(value) {
if (value instanceof RegExp) {
return true;
}
try {
return !!new RegExp(value);
} catch (e2) {
return false;
}
},
date: function date2(value) {
return typeof value.getTime === "function" && typeof value.getMonth === "function" && typeof value.getYear === "function";
},
number: function number2(value) {
if (isNaN(value)) {
return false;
}
return typeof +value === "number";
},
object: function object2(value) {
return typeof value === "object" && !types.array(value);
},
method: function method2(value) {
return typeof value === "function";
},
email: function email2(value) {
return typeof value === "string" && !!value.match(pattern.email) && value.length < 255;
},
url: function url2(value) {
return typeof value === "string" && !!value.match(pattern.url);
},
hex: function hex(value) {
return typeof value === "string" && !!value.match(pattern.hex);
}
};
function type(rule, value, source, errors, options) {
if (rule.required && value === void 0) {
required(rule, value, source, errors, options);
return;
}
const custom = ["integer", "float", "array", "regexp", "object", "method", "email", "number", "date", "url", "hex"];
const ruleType = rule.type;
if (custom.indexOf(ruleType) > -1) {
if (!types[ruleType](value)) {
errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));
}
} else if (ruleType && typeof value !== rule.type) {
errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));
}
}
function range$2(rule, value, source, errors, options) {
const len = typeof rule.len === "number";
const min = typeof rule.min === "number";
const max = typeof rule.max === "number";
const spRegexp = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
let val = value;
let key = null;
const num = typeof value === "number";
const str = typeof value === "string";
const arr = Array.isArray(value);
if (num) {
key = "number";
} else if (str) {
key = "string";
} else if (arr) {
key = "array";
}
if (!key) {
return false;
}
if (arr) {
val = value.length;
}
if (str) {
val = value.replace(spRegexp, "_").length;
}
if (len) {
if (val !== rule.len) {
errors.push(format(options.messages[key].len, rule.fullField, rule.len));
}
} else if (min && !max && val < rule.min) {
errors.push(format(options.messages[key].min, rule.fullField, rule.min));
} else if (max && !min && val > rule.max) {
errors.push(format(options.messages[key].max, rule.fullField, rule.max));
} else if (min && max && (val < rule.min || val > rule.max)) {
errors.push(format(options.messages[key].range, rule.fullField, rule.min, rule.max));
}
}
const ENUM = "enum";
function enumerable(rule, value, source, errors, options) {
rule[ENUM] = Array.isArray(rule[ENUM]) ? rule[ENUM] : [];
if (rule[ENUM].indexOf(value) === -1) {
errors.push(format(options.messages[ENUM], rule.fullField, rule[ENUM].join(", ")));
}
}
function pattern$1(rule, value, source, errors, options) {
if (rule.pattern) {
if (rule.pattern instanceof RegExp) {
rule.pattern.lastIndex = 0;
if (!rule.pattern.test(value)) {
errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));
}
} else if (typeof rule.pattern === "string") {
const _pattern = new RegExp(rule.pattern);
if (!_pattern.test(value)) {
errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));
}
}
}
}
const rules = {
required,
whitespace,
type,
range: range$2,
enum: enumerable,
pattern: pattern$1
};
function string$1(rule, value, callback, source, options) {
const errors = [];
const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
if (validate) {
if (isEmptyValue(value, "string") && !rule.required) {
return callback();
}
rules.required(rule, value, source, errors, options, "string");
if (!isEmptyValue(value, "string")) {
rules.type(rule, value, source, errors, options);
rules.range(rule, value, source, errors, options);
rules.pattern(rule, value, source, errors, options);
if (rule.whitespace === true) {
rules.whitespace(rule, value, source, errors, options);
}
}
}
callback(errors);
}
function method(rule, value, callback, source, options) {
const errors = [];
const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
if (validate) {
if (isEmptyValue(value) && !rule.required) {
return callback();
}
rules.required(rule, value, source, errors, options);
if (value !== void 0) {
rules.type(rule, value, source, errors, options);
}
}
callback(errors);
}
function number$1(rule, value, callback, source, options) {
const errors = [];
const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
if (validate) {
if (value === "") {
value = void 0;
}
if (isEmptyValue(value) && !rule.required) {
return callback();
}
rules.required(rule, value, source, errors, options);
if (value !== void 0) {
rules.type(rule, value, source, errors, options);
rules.range(rule, value, source, errors, options);
}
}
callback(errors);
}
function _boolean(rule, value, callback, source, options) {
const errors = [];
const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
if (validate) {
if (isEmptyValue(value) && !rule.required) {
return callback();
}
rules.required(rule, value, source, errors, options);
if (value !== void 0) {
rules.type(rule, value, source, errors, options);
}
}
callback(errors);
}
function regexp(rule, value, callback, source, options) {
const errors = [];
const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
if (validate) {
if (isEmptyValue(value) && !rule.required) {
return callback();
}
rules.required(rule, value, source, errors, options);
if (!isEmptyValue(value)) {
rules.type(rule, value, source, errors, options);
}
}
callback(errors);
}
function integer(rule, value, callback, source, options) {
const errors = [];
const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
if (validate) {
if (isEmptyValue(value) && !rule.required) {
return callback();
}
rules.required(rule, value, source, errors, options);
if (value !== void 0) {
rules.type(rule, value, source, errors, options);
rules.range(rule, value, source, errors, options);
}
}
callback(errors);
}
function floatFn(rule, value, callback, source, options) {
const errors = [];
const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
if (validate) {
if (isEmptyValue(value) && !rule.required) {
return callback();
}
rules.required(rule, value, source, errors, options);
if (value !== void 0) {
rules.type(rule, value, source, errors, options);
rules.range(rule, value, source, errors, options);
}
}
callback(errors);
}
function array$1(rule, value, callback, source, options) {
const errors = [];
const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
if (validate) {
if (isEmptyValue(value, "array") && !rule.required) {
return callback();
}
rules.required(rule, value, source, errors, options, "array");
if (!isEmptyValue(value, "array")) {
rules.type(rule, value, source, errors, options);
rules.range(rule, value, source, errors, options);
}
}
callback(errors);
}
function object$1(rule, value, callback, source, options) {
const errors = [];
const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
if (validate) {
if (isEmptyValue(value) && !rule.required) {
return callback();
}
rules.required(rule, value, source, errors, options);
if (value !== void 0) {
rules.type(rule, value, source, errors, options);
}
}
callback(errors);
}
const ENUM$1 = "enum";
function enumerable$1(rule, value, callback, source, options) {
const errors = [];
const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
if (validate) {
if (isEmptyValue(value) && !rule.required) {
return callback();
}
rules.required(rule, value, source, errors, options);
if (value !== void 0) {
rules[ENUM$1](rule, value, source, errors, options);
}
}
callback(errors);
}
function pattern$2(rule, value, callback, source, options) {
const errors = [];
const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
if (validate) {
if (isEmptyValue(value, "string") && !rule.required) {
return callback();
}
rules.required(rule, value, source, errors, options);
if (!isEmptyValue(value, "string")) {
rules.pattern(rule, value, source, errors, options);
}
}
callback(errors);
}
function date$1(rule, value, callback, source, options) {
const errors = [];
const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
if (validate) {
if (isEmptyValue(value) && !rule.required) {
return callback();
}
rules.required(rule, value, source, errors, options);
if (!isEmptyValue(value)) {
let dateObject;
if (typeof value === "number") {
dateObject = new Date(value);
} else {
dateObject = value;
}
rules.type(rule, dateObject, source, errors, options);
if (dateObject) {
rules.range(rule, dateObject.getTime(), source, errors, options);
}
}
}
callback(errors);
}
function required$1(rule, value, callback, source, options) {
const errors = [];
const type2 = Array.isArray(value) ? "array" : typeof value;
rules.required(rule, value, source, errors, options, type2);
callback(errors);
}
function type$1(rule, value, callback, source, options) {
const ruleType = rule.type;
const errors = [];
const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
if (validate) {
if (isEmptyValue(value, ruleType) && !rule.required) {
return callback();
}
rules.required(rule, value, source, errors, options, ruleType);
if (!isEmptyValue(value, ruleType)) {
rules.type(rule, value, source, errors, options);
}
}
callback(errors);
}
function any(rule, value, callback, source, options) {
const errors = [];
const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
if (validate) {
if (isEmptyValue(value) && !rule.required) {
return callback();
}
rules.required(rule, value, source, errors, options);
}
callback(errors);
}
const validators = {
string: string$1,
method,
number: number$1,
boolean: _boolean,
regexp,
integer,
float: floatFn,
array: array$1,
object: object$1,
enum: enumerable$1,
pattern: pattern$2,
date: date$1,
url: type$1,
hex: type$1,
email: type$1,
required: required$1,
any
};
function newMessages() {
return {
default: "Validation error on field %s",
required: "%s is required",
enum: "%s must be one of %s",
whitespace: "%s cannot be empty",
date: {
format: "%s date %s is invalid for format %s",
parse: "%s date could not be parsed, %s is invalid ",
invalid: "%s date %s is invalid"
},
types: {
string: "%s is not a %s",
method: "%s is not a %s (function)",
array: "%s is not an %s",
object: "%s is not an %s",
number: "%s is not a %s",
date: "%s is not a %s",
boolean: "%s is not a %s",
integer: "%s is not an %s",
float: "%s is not a %s",
regexp: "%s is not a valid %s",
email: "%s is not a valid %s",
url: "%s is not a valid %s",
hex: "%s is not a valid %s"
},
string: {
len: "%s must be exactly %s characters",
min: "%s must be at least %s characters",
max: "%s cannot be longer than %s characters",
range: "%s must be between %s and %s characters"
},
number: {
len: "%s must equal %s",
min: "%s cannot be less than %s",
max: "%s cannot be greater than %s",
range: "%s must be between %s and %s"
},
array: {
len: "%s must be exactly %s in length",
min: "%s cannot be less than %s in length",
max: "%s cannot be greater than %s in length",
range: "%s must be between %s and %s in length"
},
pattern: {
mismatch: "%s value %s does not match pattern %s"
},
clone: function clone2() {
const cloned = JSON.parse(JSON.stringify(this));
cloned.clone = this.clone;
return cloned;
}
};
}
const messages = newMessages();
function Schema(descriptor) {
this.rules = null;
this._messages = messages;
this.define(descriptor);
}
Schema.prototype = {
messages: function messages2(_messages) {
if (_messages) {
this._messages = deepMerge$2(newMessages(), _messages);
}
return this._messages;
},
define: function define(rules2) {
if (!rules2) {
throw new Error("Cannot configure a schema with no rules");
}
if (typeof rules2 !== "object" || Array.isArray(rules2)) {
throw new Error("Rules must be an object");
}
this.rules = {};
let z2;
let item;
for (z2 in rules2) {
if (rules2.hasOwnProperty(z2)) {
item = rules2[z2];
this.rules[z2] = Array.isArray(item) ? item : [item];
}
}
},
validate: function validate(source_, o2, oc) {
const _this = this;
if (o2 === void 0) {
o2 = {};
}
if (oc === void 0) {
oc = function oc2() {
};
}
let source = source_;
let options = o2;
let callback = oc;
if (typeof options === "function") {
callback = options;
options = {};
}
if (!this.rules || Object.keys(this.rules).length === 0) {
if (callback) {
callback();
}
return Promise.resolve();
}
function complete(results) {
let i2;
let errors = [];
let fields = {};
function add(e2) {
if (Array.isArray(e2)) {
let _errors;
errors = (_errors = errors).concat.apply(_errors, e2);
} else {
errors.push(e2);
}
}
for (i2 = 0; i2 < results.length; i2++) {
add(results[i2]);
}
if (!errors.length) {
errors = null;
fields = null;
} else {
fields = convertFieldsError(errors);
}
callback(errors, fields);
}
if (options.messages) {
let messages$1 = this.messages();
if (messages$1 === messages) {
messages$1 = newMessages();
}
deepMerge$2(messages$1, options.messages);
options.messages = messages$1;
} else {
options.messages = this.messages();
}
let arr;
let value;
const series = {};
const keys = options.keys || Object.keys(this.rules);
keys.forEach((z2) => {
arr = _this.rules[z2];
value = source[z2];
arr.forEach((r2) => {
let rule = r2;
if (typeof rule.transform === "function") {
if (source === source_) {
source = { ...source };
}
value = source[z2] = rule.transform(value);
}
if (typeof rule === "function") {
rule = {
validator: rule
};
} else {
rule = { ...rule };
}
rule.validator = _this.getValidationMethod(rule);
rule.field = z2;
rule.fullField = rule.fullField || z2;
rule.type = _this.getType(rule);
if (!rule.validator) {
return;
}
series[z2] = series[z2] || [];
series[z2].push({
rule,
value,
source,
field: z2
});
});
});
const errorFields = {};
return asyncMap(series, options, (data, doIt) => {
const { rule } = data;
let deep = (rule.type === "object" || rule.type === "array") && (typeof rule.fields === "object" || typeof rule.defaultField === "object");
deep = deep && (rule.required || !rule.required && data.value);
rule.field = data.field;
function addFullfield(key, schema) {
return { ...schema, fullField: `${rule.fullField}.${key}` };
}
function cb(e2) {
if (e2 === void 0) {
e2 = [];
}
let errors = e2;
if (!Array.isArray(errors)) {
errors = [errors];
}
if (!options.suppressWarning && errors.length) {
Schema.warning("async-validator:", errors);
}
if (errors.length && rule.message) {
errors = [].concat(rule.message);
}
errors = errors.map(complementError(rule));
if (options.first && errors.length) {
errorFields[rule.field] = 1;
return doIt(errors);
}
if (!deep) {
doIt(errors);
} else {
if (rule.required && !data.value) {
if (rule.message) {
errors = [].concat(rule.message).map(complementError(rule));
} else if (options.error) {
errors = [options.error(rule, format(options.messages.required, rule.field))];
} else {
errors = [];
}
return doIt(errors);
}
let fieldsSchema = {};
if (rule.defaultField) {
for (const k in data.value) {
if (data.value.hasOwnProperty(k)) {
fieldsSchema[k] = rule.defaultField;
}
}
}
fieldsSchema = { ...fieldsSchema, ...data.rule.fields };
for (const f2 in fieldsSchema) {
if (fieldsSchema.hasOwnProperty(f2)) {
const fieldSchema = Array.isArray(fieldsSchema[f2]) ? fieldsSchema[f2] : [fieldsSchema[f2]];
fieldsSchema[f2] = fieldSchema.map(addFullfield.bind(null, f2));
}
}
const schema = new Schema(fieldsSchema);
schema.messages(options.messages);
if (data.rule.options) {
data.rule.options.messages = options.messages;
data.rule.options.error = options.error;
}
schema.validate(data.value, data.rule.options || options, (errs) => {
const finalErrors = [];
if (errors && errors.length) {
finalErrors.push.apply(finalErrors, errors);
}
if (errs && errs.length) {
finalErrors.push.apply(finalErrors, errs);
}
doIt(finalErrors.length ? finalErrors : null);
});
}
}
let res;
if (rule.asyncValidator) {
res = rule.asyncValidator(rule, data.value, cb, data.source, options);
} else if (rule.validator) {
res = rule.validator(rule, data.value, cb, data.source, options);
if (res === true) {
cb();
} else if (res === false) {
cb(rule.message || `${rule.field} fails`);
} else if (res instanceof Array) {
cb(res);
} else if (res instanceof Error) {
cb(res.message);
}
}
if (res && res.then) {
res.then(() => cb(), (e2) => cb(e2));
}
}, (results) => {
complete(results);
});
},
getType: function getType(rule) {
if (rule.type === void 0 && rule.pattern instanceof RegExp) {
rule.type = "pattern";
}
if (typeof rule.validator !== "function" && rule.type && !validators.hasOwnProperty(rule.type)) {
throw new Error(format("Unknown rule type %s", rule.type));
}
return rule.type || "string";
},
getValidationMethod: function getValidationMethod(rule) {
if (typeof rule.validator === "function") {
return rule.validator;
}
const keys = Object.keys(rule);
const messageIndex = keys.indexOf("message");
if (messageIndex !== -1) {
keys.splice(messageIndex, 1);
}
if (keys.length === 1 && keys[0] === "required") {
return validators.required;
}
return validators[this.getType(rule)] || false;
}
};
Schema.register = function register(type2, validator) {
if (typeof validator !== "function") {
throw new Error("Cannot register a validator by type, validator is not a function");
}
validators[type2] = validator;
};
Schema.warning = warning;
Schema.messages = messages;
Schema.warning = function() {
};
const _sfc_main$i = {
name: "u-form",
mixins: [mpMixin, mixin, props$2],
provide() {
return {
uForm: this
};
},
data() {
return {
formRules: {},
// 规则校验器
validator: {},
// 原始的model快照,用于resetFields方法重置表单时使用
originalModel: null
};
},
watch: {
// 监听规则的变化
rules: {
immediate: true,
handler(n2) {
this.setRules(n2);
}
},
// 监听属性的变化,通知子组件u-form-item重新获取信息
propsChange(n2) {
var _a;
if ((_a = this.children) == null ? void 0 : _a.length) {
this.children.map((child) => {
typeof child.updateParentData == "function" && child.updateParentData();
});
}
},
// 监听model的初始值作为重置表单的快照
model: {
immediate: true,
handler(n2) {
if (!this.originalModel) {
this.originalModel = uni.$u.deepClone(n2);
}
}
}
},
computed: {
propsChange() {
return [
this.errorType,
this.borderBottom,
this.labelPosition,
this.labelWidth,
this.labelAlign,
this.labelStyle
];
}
},
created() {
this.children = [];
},
methods: {
// 手动设置校验的规则,如果规则中有函数的话,微信小程序中会过滤掉,所以只能手动调用设置规则
setRules(rules2) {
if (Object.keys(rules2).length === 0)
return;
if (Object.keys(this.model).length === 0) {
uni.$u.error("设置rules,model必须设置!如果已经设置,请刷新页面。");
return;
}
this.formRules = rules2;
this.validator = new Schema(rules2);
},
// 清空所有u-form-item组件的内容,本质上是调用了u-form-item组件中的resetField()方法
resetFields() {
this.resetModel();
},
// 重置model为初始值的快照
resetModel(obj) {
this.children.map((child) => {
const prop = child == null ? void 0 : child.prop;
const value = uni.$u.getProperty(this.originalModel, prop);
uni.$u.setProperty(this.model, prop, value);
});
},
// 清空校验结果
clearValidate(props2) {
props2 = [].concat(props2);
this.children.map((child) => {
if (props2[0] === void 0 || props2.includes(child.prop)) {
child.message = null;
}
});
},
// 对部分表单字段进行校验
async validateField(value, callback, event = null) {
this.$nextTick(() => {
const errorsRes = [];
value = [].concat(value);
this.children.map((child) => {
const childErrors = [];
if (value.includes(child.prop)) {
const propertyVal = uni.$u.getProperty(
this.model,
child.prop
);
const propertyChain = child.prop.split(".");
const propertyName = propertyChain[propertyChain.length - 1];
const rule = this.formRules[child.prop];
if (!rule)
return;
const rules2 = [].concat(rule);
for (let i2 = 0; i2 < rules2.length; i2++) {
const ruleItem = rules2[i2];
const trigger = [].concat(ruleItem == null ? void 0 : ruleItem.trigger);
if (event && !trigger.includes(event))
continue;
const validator = new Schema({
[propertyName]: ruleItem
});
validator.validate(
{
[propertyName]: propertyVal
},
(errors, fields) => {
var _a;
if (uni.$u.test.array(errors)) {
errorsRes.push(...errors);
childErrors.push(...errors);
}
child.message = ((_a = childErrors[0]) == null ? void 0 : _a.message) ? childErrors[0].message : null;
}
);
}
}
});
typeof callback === "function" && callback(errorsRes);
});
},
// 校验全部数据
validate(callback) {
if (Object.keys(this.formRules).length === 0) {
uni.$u.error("未设置rules,请看文档说明!如果已经设置,请刷新页面。");
return;
}
return new Promise((resolve, reject) => {
this.$nextTick(() => {
const formItemProps = this.children.map(
(item) => item.prop
);
this.validateField(formItemProps, (errors) => {
if (errors.length) {
this.errorType === "toast" && uni.$u.toast(errors[0].message);
reject(errors);
} else {
resolve(true);
}
});
});
});
}
}
};
function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createElementBlock("view", { class: "u-form" }, [
vue.renderSlot(_ctx.$slots, "default")
]);
}
const __easycom_3 = /* @__PURE__ */ _export_sfc(_sfc_main$i, [["render", _sfc_render$7], ["__file", "D:/zmj/uniapp/TraceabilityAPP/node_modules/uview-plus/components/u-form/u-form.vue"]]);
let uplodeImg = () => {
return new Promise((reslove, reject) => {
uni.chooseImage({
count: 1,
sizeType: ["compressed"],
sourceType: ["album"],
success: (res) => {
var imageSrc = res.tempFilePaths[0];
uni.showLoading({
title: "上传中",
duration: 1e3
});
uni.uploadFile({
url: "http://ceshi-suyuan.lihaink.cn/api/user/imageUpload",
filePath: imageSrc,
name: "file",
// formData: {
// 'user': 'test'
// },
success: (res2) => {
uni.showToast({
title: "上传成功",
icon: "success",
duration: 1e3
});
reslove(JSON.parse(res2.data));
},
fail: (err) => {
reject(err);
uni.showToast({
title: "检查网络",
duration: 1e3
});
}
});
}
});
});
};
const _sfc_main$h = {
__name: "harvest",
setup(__props) {
const form = vue.ref(null);
const formData = vue.reactive({
breed: ""
});
const rules2 = {
"formData.breed": {
type: "string",
required: true,
message: "请填写姓名",
trigger: ["blur", "change"]
}
};
const addFn = () => {
form.value.validate().then((res) => {
formatAppLog("log", "at pages/husbandryForm/harvest.vue:95", 6);
}).catch((errors) => {
uni.$u.toast("校验失败");
});
console.log();
return;
};
const updateImgFn = async () => {
if (mode.value == "detail")
return;
let res = await uplodeImg();
formData.buy_cert = res.data.image;
};
const mode = vue.ref("add");
onLoad((options) => {
if (options.task_id) {
mode.value = "detail";
}
});
return (_ctx, _cache) => {
const _component_up_input = resolveEasycom(vue.resolveDynamicComponent("up-input"), __easycom_0$3);
const _component_u_form_item = resolveEasycom(vue.resolveDynamicComponent("u-form-item"), __easycom_1$1);
const _component_u__image = resolveEasycom(vue.resolveDynamicComponent("u--image"), __easycom_0$7);
const _component_u__textarea = resolveEasycom(vue.resolveDynamicComponent("u--textarea"), __easycom_3$1);
const _component_u__form = resolveEasycom(vue.resolveDynamicComponent("u--form"), __easycom_3);
return vue.openBlock(), vue.createElementBlock(
vue.Fragment,
null,
[
vue.createCommentVNode(" 播种 "),
vue.createElementVNode("view", { class: "content" }, [
vue.createElementVNode("view", { class: "card" }, [
vue.createVNode(_component_u__form, {
labelPosition: "top",
labelWidth: "100",
model: formData,
rules: rules2,
ref_key: "form",
ref: form
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_u_form_item, {
label: "作业地块",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入作业地块",
disabled: mode.value == "detail",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_u_form_item, {
label: "作业面积",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入作业面积",
disabled: mode.value == "detail",
type: "number",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_u_form_item, {
label: "参与人",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入参与人",
disabled: mode.value == "detail",
type: "number",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createElementVNode("view", { class: "card-li" }, [
vue.createElementVNode("view", { class: "card-li-tit" }, " 收获图片 "),
vue.createElementVNode("view", { class: "code-img" }, [
vue.createElementVNode("view", {
class: "",
onClick: updateImgFn
}, [
formData.buy_cert ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: ""
}, [
vue.createVNode(_component_u__image, {
src: formData.buy_cert,
width: "637.85rpx",
height: "350.47rpx"
}, null, 8, ["src"])
])) : (vue.openBlock(), vue.createElementBlock("view", {
key: 1,
class: "carime-icon"
}, [
vue.createVNode(_component_u__image, {
src: "/static/img/DJSC.png",
width: "91.12rpx",
height: "91.12rpx"
}),
vue.createElementVNode("view", { class: "" }, " 点击上传图片 ")
]))
])
])
]),
vue.createVNode(_component_u_form_item, {
label: "备注",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_u__textarea, {
disabled: mode.value == "detail",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => formData.breed = $event),
placeholder: "请输入内容"
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
})
]),
_: 1
/* STABLE */
}, 8, ["model"])
]),
mode.value == "add" ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "confirm"
}, [
vue.createElementVNode("view", {
class: "confirm-btn",
style: { "color": "white", "background-color": "#0AA565" },
onClick: addFn
}, " 完成添加 ")
])) : vue.createCommentVNode("v-if", true)
])
],
2112
/* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
);
};
}
};
const PagesHusbandryFormHarvest = /* @__PURE__ */ _export_sfc(_sfc_main$h, [["__scopeId", "data-v-4ac40caa"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/pages/husbandryForm/harvest.vue"]]);
var calendar = {
/**
* 农历1900-2100的润大小信息表
* @Array Of Property
* @return Hex
*/
lunarInfo: [
19416,
19168,
42352,
21717,
53856,
55632,
91476,
22176,
39632,
21970,
// 1900-1909
19168,
42422,
42192,
53840,
119381,
46400,
54944,
44450,
38320,
84343,
// 1910-1919
18800,
42160,
46261,
27216,
27968,
109396,
11104,
38256,
21234,
18800,
// 1920-1929
25958,
54432,
59984,
28309,
23248,
11104,
100067,
37600,
116951,
51536,
// 1930-1939
54432,
120998,
46416,
22176,
107956,
9680,
37584,
53938,
43344,
46423,
// 1940-1949
27808,
46416,
86869,
19872,
42416,
83315,
21168,
43432,
59728,
27296,
// 1950-1959
44710,
43856,
19296,
43748,
42352,
21088,
62051,
55632,
23383,
22176,
// 1960-1969
38608,
19925,
19152,
42192,
54484,
53840,
54616,
46400,
46752,
103846,
// 1970-1979
38320,
18864,
43380,
42160,
45690,
27216,
27968,
44870,
43872,
38256,
// 1980-1989
19189,
18800,
25776,
29859,
59984,
27480,
23232,
43872,
38613,
37600,
// 1990-1999
51552,
55636,
54432,
55888,
30034,
22176,
43959,
9680,
37584,
51893,
// 2000-2009
43344,
46240,
47780,
44368,
21977,
19360,
42416,
86390,
21168,
43312,
// 2010-2019
31060,
27296,
44368,
23378,
19296,
42726,
42208,
53856,
60005,
54576,
// 2020-2029
23200,
30371,
38608,
19195,
19152,
42192,
118966,
53840,
54560,
56645,
// 2030-2039
46496,
22224,
21938,
18864,
42359,
42160,
43600,
111189,
27936,
44448,
// 2040-2049
/** Add By JJonline@JJonline.Cn**/
84835,
37744,
18936,
18800,
25776,
92326,
59984,
27424,
108228,
43744,
// 2050-2059
41696,
53987,
51552,
54615,
54432,
55888,
23893,
22176,
42704,
21972,
// 2060-2069
21200,
43448,
43344,
46240,
46758,
44368,
21920,
43940,
42416,
21168,
// 2070-2079
45683,
26928,
29495,
27296,
44368,
84821,
19296,
42352,
21732,
53600,
// 2080-2089
59752,
54560,
55968,
92838,
22224,
19168,
43476,
41680,
53584,
62034,
// 2090-2099
54560
],
// 2100
/**
* 公历每个月份的天数普通表
* @Array Of Property
* @return Number
*/
solarMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
/**
* 天干地支之天干速查表
* @Array Of Property trans["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"]
* @return Cn string
*/
Gan: ["甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"],
/**
* 天干地支之地支速查表
* @Array Of Property
* @trans["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"]
* @return Cn string
*/
Zhi: ["子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"],
/**
* 天干地支之地支速查表<=>生肖
* @Array Of Property
* @trans["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"]
* @return Cn string
*/
Animals: ["鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"],
/**
* 24节气速查表
* @Array Of Property
* @trans["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"]
* @return Cn string
*/
solarTerm: ["小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至"],
/**
* 1900-2100各年的24节气日期速查表
* @Array Of Property
* @return 0x string For splice
*/
sTermInfo: [
"9778397bd097c36b0b6fc9274c91aa",
"97b6b97bd19801ec9210c965cc920e",
"97bcf97c3598082c95f8c965cc920f",
"97bd0b06bdb0722c965ce1cfcc920f",
"b027097bd097c36b0b6fc9274c91aa",
"97b6b97bd19801ec9210c965cc920e",
"97bcf97c359801ec95f8c965cc920f",
"97bd0b06bdb0722c965ce1cfcc920f",
"b027097bd097c36b0b6fc9274c91aa",
"97b6b97bd19801ec9210c965cc920e",
"97bcf97c359801ec95f8c965cc920f",
"97bd0b06bdb0722c965ce1cfcc920f",
"b027097bd097c36b0b6fc9274c91aa",
"9778397bd19801ec9210c965cc920e",
"97b6b97bd19801ec95f8c965cc920f",
"97bd09801d98082c95f8e1cfcc920f",
"97bd097bd097c36b0b6fc9210c8dc2",
"9778397bd197c36c9210c9274c91aa",
"97b6b97bd19801ec95f8c965cc920e",
"97bd09801d98082c95f8e1cfcc920f",
"97bd097bd097c36b0b6fc9210c8dc2",
"9778397bd097c36c9210c9274c91aa",
"97b6b97bd19801ec95f8c965cc920e",
"97bcf97c3598082c95f8e1cfcc920f",
"97bd097bd097c36b0b6fc9210c8dc2",
"9778397bd097c36c9210c9274c91aa",
"97b6b97bd19801ec9210c965cc920e",
"97bcf97c3598082c95f8c965cc920f",
"97bd097bd097c35b0b6fc920fb0722",
"9778397bd097c36b0b6fc9274c91aa",
"97b6b97bd19801ec9210c965cc920e",
"97bcf97c3598082c95f8c965cc920f",
"97bd097bd097c35b0b6fc920fb0722",
"9778397bd097c36b0b6fc9274c91aa",
"97b6b97bd19801ec9210c965cc920e",
"97bcf97c359801ec95f8c965cc920f",
"97bd097bd097c35b0b6fc920fb0722",
"9778397bd097c36b0b6fc9274c91aa",
"97b6b97bd19801ec9210c965cc920e",
"97bcf97c359801ec95f8c965cc920f",
"97bd097bd097c35b0b6fc920fb0722",
"9778397bd097c36b0b6fc9274c91aa",
"97b6b97bd19801ec9210c965cc920e",
"97bcf97c359801ec95f8c965cc920f",
"97bd097bd07f595b0b6fc920fb0722",
"9778397bd097c36b0b6fc9210c8dc2",
"9778397bd19801ec9210c9274c920e",
"97b6b97bd19801ec95f8c965cc920f",
"97bd07f5307f595b0b0bc920fb0722",
"7f0e397bd097c36b0b6fc9210c8dc2",
"9778397bd097c36c9210c9274c920e",
"97b6b97bd19801ec95f8c965cc920f",
"97bd07f5307f595b0b0bc920fb0722",
"7f0e397bd097c36b0b6fc9210c8dc2",
"9778397bd097c36c9210c9274c91aa",
"97b6b97bd19801ec9210c965cc920e",
"97bd07f1487f595b0b0bc920fb0722",
"7f0e397bd097c36b0b6fc9210c8dc2",
"9778397bd097c36b0b6fc9274c91aa",
"97b6b97bd19801ec9210c965cc920e",
"97bcf7f1487f595b0b0bb0b6fb0722",
"7f0e397bd097c35b0b6fc920fb0722",
"9778397bd097c36b0b6fc9274c91aa",
"97b6b97bd19801ec9210c965cc920e",
"97bcf7f1487f595b0b0bb0b6fb0722",
"7f0e397bd097c35b0b6fc920fb0722",
"9778397bd097c36b0b6fc9274c91aa",
"97b6b97bd19801ec9210c965cc920e",
"97bcf7f1487f531b0b0bb0b6fb0722",
"7f0e397bd097c35b0b6fc920fb0722",
"9778397bd097c36b0b6fc9274c91aa",
"97b6b97bd19801ec9210c965cc920e",
"97bcf7f1487f531b0b0bb0b6fb0722",
"7f0e397bd07f595b0b6fc920fb0722",
"9778397bd097c36b0b6fc9274c91aa",
"97b6b97bd19801ec9210c9274c920e",
"97bcf7f0e47f531b0b0bb0b6fb0722",
"7f0e397bd07f595b0b0bc920fb0722",
"9778397bd097c36b0b6fc9210c91aa",
"97b6b97bd197c36c9210c9274c920e",
"97bcf7f0e47f531b0b0bb0b6fb0722",
"7f0e397bd07f595b0b0bc920fb0722",
"9778397bd097c36b0b6fc9210c8dc2",
"9778397bd097c36c9210c9274c920e",
"97b6b7f0e47f531b0723b0b6fb0722",
"7f0e37f5307f595b0b0bc920fb0722",
"7f0e397bd097c36b0b6fc9210c8dc2",
"9778397bd097c36b0b70c9274c91aa",
"97b6b7f0e47f531b0723b0b6fb0721",
"7f0e37f1487f595b0b0bb0b6fb0722",
"7f0e397bd097c35b0b6fc9210c8dc2",
"9778397bd097c36b0b6fc9274c91aa",
"97b6b7f0e47f531b0723b0b6fb0721",
"7f0e27f1487f595b0b0bb0b6fb0722",
"7f0e397bd097c35b0b6fc920fb0722",
"9778397bd097c36b0b6fc9274c91aa",
"97b6b7f0e47f531b0723b0b6fb0721",
"7f0e27f1487f531b0b0bb0b6fb0722",
"7f0e397bd097c35b0b6fc920fb0722",
"9778397bd097c36b0b6fc9274c91aa",
"97b6b7f0e47f531b0723b0b6fb0721",
"7f0e27f1487f531b0b0bb0b6fb0722",
"7f0e397bd097c35b0b6fc920fb0722",
"9778397bd097c36b0b6fc9274c91aa",
"97b6b7f0e47f531b0723b0b6fb0721",
"7f0e27f1487f531b0b0bb0b6fb0722",
"7f0e397bd07f595b0b0bc920fb0722",
"9778397bd097c36b0b6fc9274c91aa",
"97b6b7f0e47f531b0723b0787b0721",
"7f0e27f0e47f531b0b0bb0b6fb0722",
"7f0e397bd07f595b0b0bc920fb0722",
"9778397bd097c36b0b6fc9210c91aa",
"97b6b7f0e47f149b0723b0787b0721",
"7f0e27f0e47f531b0723b0b6fb0722",
"7f0e397bd07f595b0b0bc920fb0722",
"9778397bd097c36b0b6fc9210c8dc2",
"977837f0e37f149b0723b0787b0721",
"7f07e7f0e47f531b0723b0b6fb0722",
"7f0e37f5307f595b0b0bc920fb0722",
"7f0e397bd097c35b0b6fc9210c8dc2",
"977837f0e37f14998082b0787b0721",
"7f07e7f0e47f531b0723b0b6fb0721",
"7f0e37f1487f595b0b0bb0b6fb0722",
"7f0e397bd097c35b0b6fc9210c8dc2",
"977837f0e37f14998082b0787b06bd",
"7f07e7f0e47f531b0723b0b6fb0721",
"7f0e27f1487f531b0b0bb0b6fb0722",
"7f0e397bd097c35b0b6fc920fb0722",
"977837f0e37f14998082b0787b06bd",
"7f07e7f0e47f531b0723b0b6fb0721",
"7f0e27f1487f531b0b0bb0b6fb0722",
"7f0e397bd097c35b0b6fc920fb0722",
"977837f0e37f14998082b0787b06bd",
"7f07e7f0e47f531b0723b0b6fb0721",
"7f0e27f1487f531b0b0bb0b6fb0722",
"7f0e397bd07f595b0b0bc920fb0722",
"977837f0e37f14998082b0787b06bd",
"7f07e7f0e47f531b0723b0b6fb0721",
"7f0e27f1487f531b0b0bb0b6fb0722",
"7f0e397bd07f595b0b0bc920fb0722",
"977837f0e37f14998082b0787b06bd",
"7f07e7f0e47f149b0723b0787b0721",
"7f0e27f0e47f531b0b0bb0b6fb0722",
"7f0e397bd07f595b0b0bc920fb0722",
"977837f0e37f14998082b0723b06bd",
"7f07e7f0e37f149b0723b0787b0721",
"7f0e27f0e47f531b0723b0b6fb0722",
"7f0e397bd07f595b0b0bc920fb0722",
"977837f0e37f14898082b0723b02d5",
"7ec967f0e37f14998082b0787b0721",
"7f07e7f0e47f531b0723b0b6fb0722",
"7f0e37f1487f595b0b0bb0b6fb0722",
"7f0e37f0e37f14898082b0723b02d5",
"7ec967f0e37f14998082b0787b0721",
"7f07e7f0e47f531b0723b0b6fb0722",
"7f0e37f1487f531b0b0bb0b6fb0722",
"7f0e37f0e37f14898082b0723b02d5",
"7ec967f0e37f14998082b0787b06bd",
"7f07e7f0e47f531b0723b0b6fb0721",
"7f0e37f1487f531b0b0bb0b6fb0722",
"7f0e37f0e37f14898082b072297c35",
"7ec967f0e37f14998082b0787b06bd",
"7f07e7f0e47f531b0723b0b6fb0721",
"7f0e27f1487f531b0b0bb0b6fb0722",
"7f0e37f0e37f14898082b072297c35",
"7ec967f0e37f14998082b0787b06bd",
"7f07e7f0e47f531b0723b0b6fb0721",
"7f0e27f1487f531b0b0bb0b6fb0722",
"7f0e37f0e366aa89801eb072297c35",
"7ec967f0e37f14998082b0787b06bd",
"7f07e7f0e47f149b0723b0787b0721",
"7f0e27f1487f531b0b0bb0b6fb0722",
"7f0e37f0e366aa89801eb072297c35",
"7ec967f0e37f14998082b0723b06bd",
"7f07e7f0e47f149b0723b0787b0721",
"7f0e27f0e47f531b0723b0b6fb0722",
"7f0e37f0e366aa89801eb072297c35",
"7ec967f0e37f14998082b0723b06bd",
"7f07e7f0e37f14998083b0787b0721",
"7f0e27f0e47f531b0723b0b6fb0722",
"7f0e37f0e366aa89801eb072297c35",
"7ec967f0e37f14898082b0723b02d5",
"7f07e7f0e37f14998082b0787b0721",
"7f07e7f0e47f531b0723b0b6fb0722",
"7f0e36665b66aa89801e9808297c35",
"665f67f0e37f14898082b0723b02d5",
"7ec967f0e37f14998082b0787b0721",
"7f07e7f0e47f531b0723b0b6fb0722",
"7f0e36665b66a449801e9808297c35",
"665f67f0e37f14898082b0723b02d5",
"7ec967f0e37f14998082b0787b06bd",
"7f07e7f0e47f531b0723b0b6fb0721",
"7f0e36665b66a449801e9808297c35",
"665f67f0e37f14898082b072297c35",
"7ec967f0e37f14998082b0787b06bd",
"7f07e7f0e47f531b0723b0b6fb0721",
"7f0e26665b66a449801e9808297c35",
"665f67f0e37f1489801eb072297c35",
"7ec967f0e37f14998082b0787b06bd",
"7f07e7f0e47f531b0723b0b6fb0721",
"7f0e27f1487f531b0b0bb0b6fb0722"
],
/**
* 数字转中文速查表
* @Array Of Property
* @trans ['日','一','二','三','四','五','六','七','八','九','十']
* @return Cn string
*/
nStr1: ["日", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十"],
/**
* 日期转农历称呼速查表
* @Array Of Property
* @trans ['初','十','廿','卅']
* @return Cn string
*/
nStr2: ["初", "十", "廿", "卅"],
/**
* 月份转农历称呼速查表
* @Array Of Property
* @trans ['正','一','二','三','四','五','六','七','八','九','十','冬','腊']
* @return Cn string
*/
nStr3: ["正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "冬", "腊"],
/**
* 返回农历y年一整年的总天数
* @param lunar Year
* @return Number
* @eg:var count = calendar.lYearDays(1987) ;//count=387
*/
lYearDays: function(y2) {
var i2;
var sum = 348;
for (i2 = 32768; i2 > 8; i2 >>= 1) {
sum += this.lunarInfo[y2 - 1900] & i2 ? 1 : 0;
}
return sum + this.leapDays(y2);
},
/**
* 返回农历y年闰月是哪个月;若y年没有闰月 则返回0
* @param lunar Year
* @return Number (0-12)
* @eg:var leapMonth = calendar.leapMonth(1987) ;//leapMonth=6
*/
leapMonth: function(y2) {
return this.lunarInfo[y2 - 1900] & 15;
},
/**
* 返回农历y年闰月的天数 若该年没有闰月则返回0
* @param lunar Year
* @return Number (0、29、30)
* @eg:var leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29
*/
leapDays: function(y2) {
if (this.leapMonth(y2)) {
return this.lunarInfo[y2 - 1900] & 65536 ? 30 : 29;
}
return 0;
},
/**
* 返回农历y年m月(非闰月)的总天数,计算m为闰月时的天数请使用leapDays方法
* @param lunar Year
* @return Number (-1、29、30)
* @eg:var MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29
*/
monthDays: function(y2, m2) {
if (m2 > 12 || m2 < 1) {
return -1;
}
return this.lunarInfo[y2 - 1900] & 65536 >> m2 ? 30 : 29;
},
/**
* 返回公历(!)y年m月的天数
* @param solar Year
* @return Number (-1、28、29、30、31)
* @eg:var solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30
*/
solarDays: function(y2, m2) {
if (m2 > 12 || m2 < 1) {
return -1;
}
var ms2 = m2 - 1;
if (ms2 == 1) {
return y2 % 4 == 0 && y2 % 100 != 0 || y2 % 400 == 0 ? 29 : 28;
} else {
return this.solarMonth[ms2];
}
},
/**
* 农历年份转换为干支纪年
* @param lYear 农历年的年份数
* @return Cn string
*/
toGanZhiYear: function(lYear) {
var ganKey = (lYear - 3) % 10;
var zhiKey = (lYear - 3) % 12;
if (ganKey == 0)
ganKey = 10;
if (zhiKey == 0)
zhiKey = 12;
return this.Gan[ganKey - 1] + this.Zhi[zhiKey - 1];
},
/**
* 公历月、日判断所属星座
* @param cMonth [description]
* @param cDay [description]
* @return Cn string
*/
toAstro: function(cMonth, cDay) {
var s2 = "魔羯水瓶双鱼白羊金牛双子巨蟹狮子处女天秤天蝎射手魔羯";
var arr = [20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22];
return s2.substr(cMonth * 2 - (cDay < arr[cMonth - 1] ? 2 : 0), 2) + "座";
},
/**
* 传入offset偏移量返回干支
* @param offset 相对甲子的偏移量
* @return Cn string
*/
toGanZhi: function(offset) {
return this.Gan[offset % 10] + this.Zhi[offset % 12];
},
/**
* 传入公历(!)y年获得该年第n个节气的公历日期
* @param y公历年(1900-2100);n二十四节气中的第几个节气(1~24);从n=1(小寒)算起
* @return day Number
* @eg:var _24 = calendar.getTerm(1987,3) ;//_24=4;意即1987年2月4日立春
*/
getTerm: function(y2, n2) {
if (y2 < 1900 || y2 > 2100) {
return -1;
}
if (n2 < 1 || n2 > 24) {
return -1;
}
var _table = this.sTermInfo[y2 - 1900];
var _info = [
parseInt("0x" + _table.substr(0, 5)).toString(),
parseInt("0x" + _table.substr(5, 5)).toString(),
parseInt("0x" + _table.substr(10, 5)).toString(),
parseInt("0x" + _table.substr(15, 5)).toString(),
parseInt("0x" + _table.substr(20, 5)).toString(),
parseInt("0x" + _table.substr(25, 5)).toString()
];
var _calday = [
_info[0].substr(0, 1),
_info[0].substr(1, 2),
_info[0].substr(3, 1),
_info[0].substr(4, 2),
_info[1].substr(0, 1),
_info[1].substr(1, 2),
_info[1].substr(3, 1),
_info[1].substr(4, 2),
_info[2].substr(0, 1),
_info[2].substr(1, 2),
_info[2].substr(3, 1),
_info[2].substr(4, 2),
_info[3].substr(0, 1),
_info[3].substr(1, 2),
_info[3].substr(3, 1),
_info[3].substr(4, 2),
_info[4].substr(0, 1),
_info[4].substr(1, 2),
_info[4].substr(3, 1),
_info[4].substr(4, 2),
_info[5].substr(0, 1),
_info[5].substr(1, 2),
_info[5].substr(3, 1),
_info[5].substr(4, 2)
];
return parseInt(_calday[n2 - 1]);
},
/**
* 传入农历数字月份返回汉语通俗表示法
* @param lunar month
* @return Cn string
* @eg:var cnMonth = calendar.toChinaMonth(12) ;//cnMonth='腊月'
*/
toChinaMonth: function(m2) {
if (m2 > 12 || m2 < 1) {
return -1;
}
var s2 = this.nStr3[m2 - 1];
s2 += "月";
return s2;
},
/**
* 传入农历日期数字返回汉字表示法
* @param lunar day
* @return Cn string
* @eg:var cnDay = calendar.toChinaDay(21) ;//cnMonth='廿一'
*/
toChinaDay: function(d2) {
var s2;
switch (d2) {
case 10:
s2 = "初十";
break;
case 20:
s2 = "二十";
break;
case 30:
s2 = "三十";
break;
default:
s2 = this.nStr2[Math.floor(d2 / 10)];
s2 += this.nStr1[d2 % 10];
}
return s2;
},
/**
* 年份转生肖[!仅能大致转换] => 精确划分生肖分界线是“立春”
* @param y year
* @return Cn string
* @eg:var animal = calendar.getAnimal(1987) ;//animal='兔'
*/
getAnimal: function(y2) {
return this.Animals[(y2 - 4) % 12];
},
/**
* 传入阳历年月日获得详细的公历、农历object信息 <=>JSON
* @param y solar year
* @param m solar month
* @param d solar day
* @return JSON object
* @eg:__f__('log','at uni_modules/uni-calendar/components/uni-calendar/calendar.js:381',calendar.solar2lunar(1987,11,01));
*/
solar2lunar: function(y2, m2, d2) {
if (y2 < 1900 || y2 > 2100) {
return -1;
}
if (y2 == 1900 && m2 == 1 && d2 < 31) {
return -1;
}
if (!y2) {
var objDate = /* @__PURE__ */ new Date();
} else {
var objDate = new Date(y2, parseInt(m2) - 1, d2);
}
var i2;
var leap = 0;
var temp = 0;
var y2 = objDate.getFullYear();
var m2 = objDate.getMonth() + 1;
var d2 = objDate.getDate();
var offset = (Date.UTC(objDate.getFullYear(), objDate.getMonth(), objDate.getDate()) - Date.UTC(1900, 0, 31)) / 864e5;
for (i2 = 1900; i2 < 2101 && offset > 0; i2++) {
temp = this.lYearDays(i2);
offset -= temp;
}
if (offset < 0) {
offset += temp;
i2--;
}
var isTodayObj = /* @__PURE__ */ new Date();
var isToday = false;
if (isTodayObj.getFullYear() == y2 && isTodayObj.getMonth() + 1 == m2 && isTodayObj.getDate() == d2) {
isToday = true;
}
var nWeek = objDate.getDay();
var cWeek = this.nStr1[nWeek];
if (nWeek == 0) {
nWeek = 7;
}
var year = i2;
var leap = this.leapMonth(i2);
var isLeap = false;
for (i2 = 1; i2 < 13 && offset > 0; i2++) {
if (leap > 0 && i2 == leap + 1 && isLeap == false) {
--i2;
isLeap = true;
temp = this.leapDays(year);
} else {
temp = this.monthDays(year, i2);
}
if (isLeap == true && i2 == leap + 1) {
isLeap = false;
}
offset -= temp;
}
if (offset == 0 && leap > 0 && i2 == leap + 1) {
if (isLeap) {
isLeap = false;
} else {
isLeap = true;
--i2;
}
}
if (offset < 0) {
offset += temp;
--i2;
}
var month = i2;
var day = offset + 1;
var sm = m2 - 1;
var gzY = this.toGanZhiYear(year);
var firstNode = this.getTerm(y2, m2 * 2 - 1);
var secondNode = this.getTerm(y2, m2 * 2);
var gzM = this.toGanZhi((y2 - 1900) * 12 + m2 + 11);
if (d2 >= firstNode) {
gzM = this.toGanZhi((y2 - 1900) * 12 + m2 + 12);
}
var isTerm = false;
var Term = null;
if (firstNode == d2) {
isTerm = true;
Term = this.solarTerm[m2 * 2 - 2];
}
if (secondNode == d2) {
isTerm = true;
Term = this.solarTerm[m2 * 2 - 1];
}
var dayCyclical = Date.UTC(y2, sm, 1, 0, 0, 0, 0) / 864e5 + 25567 + 10;
var gzD = this.toGanZhi(dayCyclical + d2 - 1);
var astro = this.toAstro(m2, d2);
return { "lYear": year, "lMonth": month, "lDay": day, "Animal": this.getAnimal(year), "IMonthCn": (isLeap ? "闰" : "") + this.toChinaMonth(month), "IDayCn": this.toChinaDay(day), "cYear": y2, "cMonth": m2, "cDay": d2, "gzYear": gzY, "gzMonth": gzM, "gzDay": gzD, "isToday": isToday, "isLeap": isLeap, "nWeek": nWeek, "ncWeek": "星期" + cWeek, "isTerm": isTerm, "Term": Term, "astro": astro };
},
/**
* 传入农历年月日以及传入的月份是否闰月获得详细的公历、农历object信息 <=>JSON
* @param y lunar year
* @param m lunar month
* @param d lunar day
* @param isLeapMonth lunar month is leap or not.[如果是农历闰月第四个参数赋值true即可]
* @return JSON object
* @eg:__f__('log','at uni_modules/uni-calendar/components/uni-calendar/calendar.js:500',calendar.lunar2solar(1987,9,10));
*/
lunar2solar: function(y2, m2, d2, isLeapMonth) {
var isLeapMonth = !!isLeapMonth;
var leapMonth = this.leapMonth(y2);
this.leapDays(y2);
if (isLeapMonth && leapMonth != m2) {
return -1;
}
if (y2 == 2100 && m2 == 12 && d2 > 1 || y2 == 1900 && m2 == 1 && d2 < 31) {
return -1;
}
var day = this.monthDays(y2, m2);
var _day = day;
if (isLeapMonth) {
_day = this.leapDays(y2, m2);
}
if (y2 < 1900 || y2 > 2100 || d2 > _day) {
return -1;
}
var offset = 0;
for (var i2 = 1900; i2 < y2; i2++) {
offset += this.lYearDays(i2);
}
var leap = 0;
var isAdd = false;
for (var i2 = 1; i2 < m2; i2++) {
leap = this.leapMonth(y2);
if (!isAdd) {
if (leap <= i2 && leap > 0) {
offset += this.leapDays(y2);
isAdd = true;
}
}
offset += this.monthDays(y2, i2);
}
if (isLeapMonth) {
offset += day;
}
var stmap = Date.UTC(1900, 1, 30, 0, 0, 0);
var calObj = new Date((offset + d2 - 31) * 864e5 + stmap);
var cY = calObj.getUTCFullYear();
var cM = calObj.getUTCMonth() + 1;
var cD = calObj.getUTCDate();
return this.solar2lunar(cY, cM, cD);
}
};
class Calendar {
constructor({
date: date2,
selected,
startDate,
endDate,
range: range2
} = {}) {
this.date = this.getDate(/* @__PURE__ */ new Date());
this.selected = selected || [];
this.startDate = startDate;
this.endDate = endDate;
this.range = range2;
this.cleanMultipleStatus();
this.weeks = {};
}
/**
* 设置日期
* @param {Object} date
*/
setDate(date2) {
this.selectDate = this.getDate(date2);
this._getWeek(this.selectDate.fullDate);
}
/**
* 清理多选状态
*/
cleanMultipleStatus() {
this.multipleStatus = {
before: "",
after: "",
data: []
};
}
/**
* 重置开始日期
*/
resetSatrtDate(startDate) {
this.startDate = startDate;
}
/**
* 重置结束日期
*/
resetEndDate(endDate) {
this.endDate = endDate;
}
/**
* 获取任意时间
*/
getDate(date2, AddDayCount = 0, str = "day") {
if (!date2) {
date2 = /* @__PURE__ */ new Date();
}
if (typeof date2 !== "object") {
date2 = date2.replace(/-/g, "/");
}
const dd = new Date(date2);
switch (str) {
case "day":
dd.setDate(dd.getDate() + AddDayCount);
break;
case "month":
if (dd.getDate() === 31 && AddDayCount > 0) {
dd.setDate(dd.getDate() + AddDayCount);
} else {
const preMonth = dd.getMonth();
dd.setMonth(preMonth + AddDayCount);
const nextMonth = dd.getMonth();
if (AddDayCount < 0 && preMonth !== 0 && nextMonth - preMonth > AddDayCount) {
dd.setMonth(nextMonth + (nextMonth - preMonth + AddDayCount));
}
if (AddDayCount > 0 && nextMonth - preMonth > AddDayCount) {
dd.setMonth(nextMonth - (nextMonth - preMonth - AddDayCount));
}
}
break;
case "year":
dd.setFullYear(dd.getFullYear() + AddDayCount);
break;
}
const y2 = dd.getFullYear();
const m2 = dd.getMonth() + 1 < 10 ? "0" + (dd.getMonth() + 1) : dd.getMonth() + 1;
const d2 = dd.getDate() < 10 ? "0" + dd.getDate() : dd.getDate();
return {
fullDate: y2 + "-" + m2 + "-" + d2,
year: y2,
month: m2,
date: d2,
day: dd.getDay()
};
}
/**
* 获取上月剩余天数
*/
_getLastMonthDays(firstDay, full) {
let dateArr = [];
for (let i2 = firstDay; i2 > 0; i2--) {
const beforeDate = new Date(full.year, full.month - 1, -i2 + 1).getDate();
dateArr.push({
date: beforeDate,
month: full.month - 1,
lunar: this.getlunar(full.year, full.month - 1, beforeDate),
disable: true
});
}
return dateArr;
}
/**
* 获取本月天数
*/
_currentMonthDys(dateData, full) {
let dateArr = [];
let fullDate = this.date.fullDate;
for (let i2 = 1; i2 <= dateData; i2++) {
let nowDate = full.year + "-" + (full.month < 10 ? full.month : full.month) + "-" + (i2 < 10 ? "0" + i2 : i2);
let isDay = fullDate === nowDate;
let info = this.selected && this.selected.find((item) => {
if (this.dateEqual(nowDate, item.date)) {
return item;
}
});
let disableBefore = true;
let disableAfter = true;
if (this.startDate) {
disableBefore = this.dateCompare(this.startDate, nowDate);
}
if (this.endDate) {
disableAfter = this.dateCompare(nowDate, this.endDate);
}
let multiples = this.multipleStatus.data;
let checked = false;
let multiplesStatus = -1;
if (this.range) {
if (multiples) {
multiplesStatus = multiples.findIndex((item) => {
return this.dateEqual(item, nowDate);
});
}
if (multiplesStatus !== -1) {
checked = true;
}
}
let data = {
fullDate: nowDate,
year: full.year,
date: i2,
multiple: this.range ? checked : false,
beforeMultiple: this.dateEqual(this.multipleStatus.before, nowDate),
afterMultiple: this.dateEqual(this.multipleStatus.after, nowDate),
month: full.month,
lunar: this.getlunar(full.year, full.month, i2),
disable: !(disableBefore && disableAfter),
isDay
};
if (info) {
data.extraInfo = info;
}
dateArr.push(data);
}
return dateArr;
}
/**
* 获取下月天数
*/
_getNextMonthDays(surplus, full) {
let dateArr = [];
for (let i2 = 1; i2 < surplus + 1; i2++) {
dateArr.push({
date: i2,
month: Number(full.month) + 1,
lunar: this.getlunar(full.year, Number(full.month) + 1, i2),
disable: true
});
}
return dateArr;
}
/**
* 获取当前日期详情
* @param {Object} date
*/
getInfo(date2) {
if (!date2) {
date2 = /* @__PURE__ */ new Date();
}
const dateInfo = this.canlender.find((item) => item.fullDate === this.getDate(date2).fullDate);
return dateInfo;
}
/**
* 比较时间大小
*/
dateCompare(startDate, endDate) {
startDate = new Date(startDate.replace("-", "/").replace("-", "/"));
endDate = new Date(endDate.replace("-", "/").replace("-", "/"));
if (startDate <= endDate) {
return true;
} else {
return false;
}
}
/**
* 比较时间是否相等
*/
dateEqual(before, after) {
before = new Date(before.replace("-", "/").replace("-", "/"));
after = new Date(after.replace("-", "/").replace("-", "/"));
if (before.getTime() - after.getTime() === 0) {
return true;
} else {
return false;
}
}
/**
* 获取日期范围内所有日期
* @param {Object} begin
* @param {Object} end
*/
geDateAll(begin, end) {
var arr = [];
var ab = begin.split("-");
var ae2 = end.split("-");
var db = /* @__PURE__ */ new Date();
db.setFullYear(ab[0], ab[1] - 1, ab[2]);
var de2 = /* @__PURE__ */ new Date();
de2.setFullYear(ae2[0], ae2[1] - 1, ae2[2]);
var unixDb = db.getTime() - 24 * 60 * 60 * 1e3;
var unixDe = de2.getTime() - 24 * 60 * 60 * 1e3;
for (var k = unixDb; k <= unixDe; ) {
k = k + 24 * 60 * 60 * 1e3;
arr.push(this.getDate(new Date(parseInt(k))).fullDate);
}
return arr;
}
/**
* 计算阴历日期显示
*/
getlunar(year, month, date2) {
return calendar.solar2lunar(year, month, date2);
}
/**
* 设置打点
*/
setSelectInfo(data, value) {
this.selected = value;
this._getWeek(data);
}
/**
* 获取多选状态
*/
setMultiple(fullDate) {
let {
before,
after
} = this.multipleStatus;
if (!this.range)
return;
if (before && after) {
this.multipleStatus.before = "";
this.multipleStatus.after = "";
this.multipleStatus.data = [];
} else {
if (!before) {
this.multipleStatus.before = fullDate;
} else {
this.multipleStatus.after = fullDate;
if (this.dateCompare(this.multipleStatus.before, this.multipleStatus.after)) {
this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus.after);
} else {
this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus.before);
}
}
}
this._getWeek(fullDate);
}
/**
* 获取每周数据
* @param {Object} dateData
*/
_getWeek(dateData) {
const {
year,
month
} = this.getDate(dateData);
let firstDay = new Date(year, month - 1, 1).getDay();
let currentDay = new Date(year, month, 0).getDate();
let dates = {
lastMonthDays: this._getLastMonthDays(firstDay, this.getDate(dateData)),
// 上个月末尾几天
currentMonthDys: this._currentMonthDys(currentDay, this.getDate(dateData)),
// 本月天数
nextMonthDays: [],
// 下个月开始几天
weeks: []
};
let canlender = [];
const surplus = 42 - (dates.lastMonthDays.length + dates.currentMonthDys.length);
dates.nextMonthDays = this._getNextMonthDays(surplus, this.getDate(dateData));
canlender = canlender.concat(dates.lastMonthDays, dates.currentMonthDys, dates.nextMonthDays);
let weeks = {};
for (let i2 = 0; i2 < canlender.length; i2++) {
if (i2 % 7 === 0) {
weeks[parseInt(i2 / 7)] = new Array(7);
}
weeks[parseInt(i2 / 7)][i2 % 7] = canlender[i2];
}
this.canlender = canlender;
this.weeks = weeks;
}
//静态方法
// static init(date) {
// if (!this.instance) {
// this.instance = new Calendar(date);
// }
// return this.instance;
// }
}
const isObject$1 = (val) => val !== null && typeof val === "object";
const defaultDelimiters = ["{", "}"];
class BaseFormatter {
constructor() {
this._caches = /* @__PURE__ */ Object.create(null);
}
interpolate(message, values, delimiters = defaultDelimiters) {
if (!values) {
return [message];
}
let tokens = this._caches[message];
if (!tokens) {
tokens = parse(message, delimiters);
this._caches[message] = tokens;
}
return compile(tokens, values);
}
}
const RE_TOKEN_LIST_VALUE = /^(?:\d)+/;
const RE_TOKEN_NAMED_VALUE = /^(?:\w)+/;
function parse(format2, [startDelimiter, endDelimiter]) {
const tokens = [];
let position = 0;
let text = "";
while (position < format2.length) {
let char = format2[position++];
if (char === startDelimiter) {
if (text) {
tokens.push({ type: "text", value: text });
}
text = "";
let sub = "";
char = format2[position++];
while (char !== void 0 && char !== endDelimiter) {
sub += char;
char = format2[position++];
}
const isClosed = char === endDelimiter;
const type2 = RE_TOKEN_LIST_VALUE.test(sub) ? "list" : isClosed && RE_TOKEN_NAMED_VALUE.test(sub) ? "named" : "unknown";
tokens.push({ value: sub, type: type2 });
} else {
text += char;
}
}
text && tokens.push({ type: "text", value: text });
return tokens;
}
function compile(tokens, values) {
const compiled = [];
let index2 = 0;
const mode = Array.isArray(values) ? "list" : isObject$1(values) ? "named" : "unknown";
if (mode === "unknown") {
return compiled;
}
while (index2 < tokens.length) {
const token = tokens[index2];
switch (token.type) {
case "text":
compiled.push(token.value);
break;
case "list":
compiled.push(values[parseInt(token.value, 10)]);
break;
case "named":
if (mode === "named") {
compiled.push(values[token.value]);
} else {
{
console.warn(`Type of token '${token.type}' and format of value '${mode}' don't match!`);
}
}
break;
case "unknown":
{
console.warn(`Detect 'unknown' type of token!`);
}
break;
}
index2++;
}
return compiled;
}
const LOCALE_ZH_HANS = "zh-Hans";
const LOCALE_ZH_HANT = "zh-Hant";
const LOCALE_EN = "en";
const LOCALE_FR = "fr";
const LOCALE_ES = "es";
const hasOwnProperty = Object.prototype.hasOwnProperty;
const hasOwn = (val, key) => hasOwnProperty.call(val, key);
const defaultFormatter = new BaseFormatter();
function include(str, parts) {
return !!parts.find((part) => str.indexOf(part) !== -1);
}
function startsWith(str, parts) {
return parts.find((part) => str.indexOf(part) === 0);
}
function normalizeLocale(locale, messages2) {
if (!locale) {
return;
}
locale = locale.trim().replace(/_/g, "-");
if (messages2 && messages2[locale]) {
return locale;
}
locale = locale.toLowerCase();
if (locale === "chinese") {
return LOCALE_ZH_HANS;
}
if (locale.indexOf("zh") === 0) {
if (locale.indexOf("-hans") > -1) {
return LOCALE_ZH_HANS;
}
if (locale.indexOf("-hant") > -1) {
return LOCALE_ZH_HANT;
}
if (include(locale, ["-tw", "-hk", "-mo", "-cht"])) {
return LOCALE_ZH_HANT;
}
return LOCALE_ZH_HANS;
}
let locales = [LOCALE_EN, LOCALE_FR, LOCALE_ES];
if (messages2 && Object.keys(messages2).length > 0) {
locales = Object.keys(messages2);
}
const lang = startsWith(locale, locales);
if (lang) {
return lang;
}
}
class I18n {
constructor({ locale, fallbackLocale, messages: messages2, watcher, formater }) {
this.locale = LOCALE_EN;
this.fallbackLocale = LOCALE_EN;
this.message = {};
this.messages = {};
this.watchers = [];
if (fallbackLocale) {
this.fallbackLocale = fallbackLocale;
}
this.formater = formater || defaultFormatter;
this.messages = messages2 || {};
this.setLocale(locale || LOCALE_EN);
if (watcher) {
this.watchLocale(watcher);
}
}
setLocale(locale) {
const oldLocale = this.locale;
this.locale = normalizeLocale(locale, this.messages) || this.fallbackLocale;
if (!this.messages[this.locale]) {
this.messages[this.locale] = {};
}
this.message = this.messages[this.locale];
if (oldLocale !== this.locale) {
this.watchers.forEach((watcher) => {
watcher(this.locale, oldLocale);
});
}
}
getLocale() {
return this.locale;
}
watchLocale(fn) {
const index2 = this.watchers.push(fn) - 1;
return () => {
this.watchers.splice(index2, 1);
};
}
add(locale, message, override = true) {
const curMessages = this.messages[locale];
if (curMessages) {
if (override) {
Object.assign(curMessages, message);
} else {
Object.keys(message).forEach((key) => {
if (!hasOwn(curMessages, key)) {
curMessages[key] = message[key];
}
});
}
} else {
this.messages[locale] = message;
}
}
f(message, values, delimiters) {
return this.formater.interpolate(message, values, delimiters).join("");
}
t(key, locale, values) {
let message = this.message;
if (typeof locale === "string") {
locale = normalizeLocale(locale, this.messages);
locale && (message = this.messages[locale]);
} else {
values = locale;
}
if (!hasOwn(message, key)) {
console.warn(`Cannot translate the value of keypath ${key}. Use the value of keypath as default.`);
return key;
}
return this.formater.interpolate(message[key], values).join("");
}
}
function watchAppLocale(appVm, i18n) {
if (appVm.$watchLocale) {
appVm.$watchLocale((newLocale) => {
i18n.setLocale(newLocale);
});
} else {
appVm.$watch(() => appVm.$locale, (newLocale) => {
i18n.setLocale(newLocale);
});
}
}
function getDefaultLocale() {
if (typeof uni !== "undefined" && uni.getLocale) {
return uni.getLocale();
}
if (typeof global !== "undefined" && global.getLocale) {
return global.getLocale();
}
return LOCALE_EN;
}
function initVueI18n(locale, messages2 = {}, fallbackLocale, watcher) {
if (typeof locale !== "string") {
[locale, messages2] = [
messages2,
locale
];
}
if (typeof locale !== "string") {
locale = getDefaultLocale();
}
if (typeof fallbackLocale !== "string") {
fallbackLocale = typeof __uniConfig !== "undefined" && __uniConfig.fallbackLocale || LOCALE_EN;
}
const i18n = new I18n({
locale,
fallbackLocale,
messages: messages2,
watcher
});
let t2 = (key, values) => {
if (typeof getApp !== "function") {
t2 = function(key2, values2) {
return i18n.t(key2, values2);
};
} else {
let isWatchedAppLocale = false;
t2 = function(key2, values2) {
const appVm = getApp().$vm;
if (appVm) {
appVm.$locale;
if (!isWatchedAppLocale) {
isWatchedAppLocale = true;
watchAppLocale(appVm, i18n);
}
}
return i18n.t(key2, values2);
};
}
return t2(key, values);
};
return {
i18n,
f(message, values, delimiters) {
return i18n.f(message, values, delimiters);
},
t(key, values) {
return t2(key, values);
},
add(locale2, message, override = true) {
return i18n.add(locale2, message, override);
},
watch(fn) {
return i18n.watchLocale(fn);
},
getLocale() {
return i18n.getLocale();
},
setLocale(newLocale) {
return i18n.setLocale(newLocale);
}
};
}
const en = {
"uni-calender.ok": "ok",
"uni-calender.cancel": "cancel",
"uni-calender.today": "today",
"uni-calender.MON": "MON",
"uni-calender.TUE": "TUE",
"uni-calender.WED": "WED",
"uni-calender.THU": "THU",
"uni-calender.FRI": "FRI",
"uni-calender.SAT": "SAT",
"uni-calender.SUN": "SUN"
};
const zhHans = {
"uni-calender.ok": "确定",
"uni-calender.cancel": "取消",
"uni-calender.today": "今日",
"uni-calender.SUN": "日",
"uni-calender.MON": "一",
"uni-calender.TUE": "二",
"uni-calender.WED": "三",
"uni-calender.THU": "四",
"uni-calender.FRI": "五",
"uni-calender.SAT": "六"
};
const zhHant = {
"uni-calender.ok": "確定",
"uni-calender.cancel": "取消",
"uni-calender.today": "今日",
"uni-calender.SUN": "日",
"uni-calender.MON": "一",
"uni-calender.TUE": "二",
"uni-calender.WED": "三",
"uni-calender.THU": "四",
"uni-calender.FRI": "五",
"uni-calender.SAT": "六"
};
const i18nMessages = {
en,
"zh-Hans": zhHans,
"zh-Hant": zhHant
};
const { t: t$2 } = initVueI18n(i18nMessages);
const _sfc_main$g = {
emits: ["change"],
props: {
weeks: {
type: Object,
default() {
return {};
}
},
calendar: {
type: Object,
default: () => {
return {};
}
},
selected: {
type: Array,
default: () => {
return [];
}
},
lunar: {
type: Boolean,
default: false
}
},
computed: {
todayText() {
return t$2("uni-calender.today");
}
},
methods: {
choiceDate(weeks) {
this.$emit("change", weeks);
}
}
};
function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createElementBlock(
"view",
{
class: vue.normalizeClass(["uni-calendar-item__weeks-box", {
"uni-calendar-item--disable": $props.weeks.disable,
"uni-calendar-item--isDay": $props.calendar.fullDate === $props.weeks.fullDate && $props.weeks.isDay,
"uni-calendar-item--checked": $props.calendar.fullDate === $props.weeks.fullDate && !$props.weeks.isDay,
"uni-calendar-item--before-checked": $props.weeks.beforeMultiple,
"uni-calendar-item--multiple": $props.weeks.multiple,
"uni-calendar-item--after-checked": $props.weeks.afterMultiple
}]),
onClick: _cache[0] || (_cache[0] = ($event) => $options.choiceDate($props.weeks))
},
[
vue.createElementVNode("view", { class: "uni-calendar-item__weeks-box-item" }, [
$props.selected && $props.weeks.extraInfo ? (vue.openBlock(), vue.createElementBlock("text", {
key: 0,
class: "uni-calendar-item__weeks-box-circle"
})) : vue.createCommentVNode("v-if", true),
vue.createElementVNode(
"text",
{
class: vue.normalizeClass(["uni-calendar-item__weeks-box-text", {
"uni-calendar-item--isDay-text": $props.weeks.isDay,
"uni-calendar-item--isDay": $props.calendar.fullDate === $props.weeks.fullDate && $props.weeks.isDay,
"uni-calendar-item--checked": $props.calendar.fullDate === $props.weeks.fullDate && !$props.weeks.isDay,
"uni-calendar-item--before-checked": $props.weeks.beforeMultiple,
"uni-calendar-item--multiple": $props.weeks.multiple,
"uni-calendar-item--after-checked": $props.weeks.afterMultiple,
"uni-calendar-item--disable": $props.weeks.disable
}])
},
vue.toDisplayString($props.weeks.date),
3
/* TEXT, CLASS */
),
!$props.lunar && !$props.weeks.extraInfo && $props.weeks.isDay ? (vue.openBlock(), vue.createElementBlock(
"text",
{
key: 1,
class: vue.normalizeClass(["uni-calendar-item__weeks-lunar-text", {
"uni-calendar-item--isDay-text": $props.weeks.isDay,
"uni-calendar-item--isDay": $props.calendar.fullDate === $props.weeks.fullDate && $props.weeks.isDay,
"uni-calendar-item--checked": $props.calendar.fullDate === $props.weeks.fullDate && !$props.weeks.isDay,
"uni-calendar-item--before-checked": $props.weeks.beforeMultiple,
"uni-calendar-item--multiple": $props.weeks.multiple,
"uni-calendar-item--after-checked": $props.weeks.afterMultiple
}])
},
vue.toDisplayString($options.todayText),
3
/* TEXT, CLASS */
)) : vue.createCommentVNode("v-if", true),
$props.lunar && !$props.weeks.extraInfo ? (vue.openBlock(), vue.createElementBlock(
"text",
{
key: 2,
class: vue.normalizeClass(["uni-calendar-item__weeks-lunar-text", {
"uni-calendar-item--isDay-text": $props.weeks.isDay,
"uni-calendar-item--isDay": $props.calendar.fullDate === $props.weeks.fullDate && $props.weeks.isDay,
"uni-calendar-item--checked": $props.calendar.fullDate === $props.weeks.fullDate && !$props.weeks.isDay,
"uni-calendar-item--before-checked": $props.weeks.beforeMultiple,
"uni-calendar-item--multiple": $props.weeks.multiple,
"uni-calendar-item--after-checked": $props.weeks.afterMultiple,
"uni-calendar-item--disable": $props.weeks.disable
}])
},
vue.toDisplayString($props.weeks.isDay ? $options.todayText : $props.weeks.lunar.IDayCn === "初一" ? $props.weeks.lunar.IMonthCn : $props.weeks.lunar.IDayCn),
3
/* TEXT, CLASS */
)) : vue.createCommentVNode("v-if", true),
$props.weeks.extraInfo && $props.weeks.extraInfo.info ? (vue.openBlock(), vue.createElementBlock(
"text",
{
key: 3,
class: vue.normalizeClass(["uni-calendar-item__weeks-lunar-text", {
"uni-calendar-item--extra": $props.weeks.extraInfo.info,
"uni-calendar-item--isDay-text": $props.weeks.isDay,
"uni-calendar-item--isDay": $props.calendar.fullDate === $props.weeks.fullDate && $props.weeks.isDay,
"uni-calendar-item--checked": $props.calendar.fullDate === $props.weeks.fullDate && !$props.weeks.isDay,
"uni-calendar-item--before-checked": $props.weeks.beforeMultiple,
"uni-calendar-item--multiple": $props.weeks.multiple,
"uni-calendar-item--after-checked": $props.weeks.afterMultiple,
"uni-calendar-item--disable": $props.weeks.disable
}])
},
vue.toDisplayString($props.weeks.extraInfo.info),
3
/* TEXT, CLASS */
)) : vue.createCommentVNode("v-if", true)
])
],
2
/* CLASS */
);
}
const CalendarItem = /* @__PURE__ */ _export_sfc(_sfc_main$g, [["render", _sfc_render$6], ["__scopeId", "data-v-65626c58"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue"]]);
const { t: t$1 } = initVueI18n(i18nMessages);
const _sfc_main$f = {
components: {
CalendarItem
},
emits: ["close", "confirm", "change", "monthSwitch"],
props: {
date: {
type: String,
default: ""
},
selected: {
type: Array,
default() {
return [];
}
},
lunar: {
type: Boolean,
default: false
},
startDate: {
type: String,
default: ""
},
endDate: {
type: String,
default: ""
},
range: {
type: Boolean,
default: false
},
insert: {
type: Boolean,
default: true
},
showMonth: {
type: Boolean,
default: true
},
clearDate: {
type: Boolean,
default: true
}
},
data() {
return {
show: false,
weeks: [],
calendar: {},
nowDate: "",
aniMaskShow: false
};
},
computed: {
/**
* for i18n
*/
okText() {
return t$1("uni-calender.ok");
},
cancelText() {
return t$1("uni-calender.cancel");
},
todayText() {
return t$1("uni-calender.today");
},
monText() {
return t$1("uni-calender.MON");
},
TUEText() {
return t$1("uni-calender.TUE");
},
WEDText() {
return t$1("uni-calender.WED");
},
THUText() {
return t$1("uni-calender.THU");
},
FRIText() {
return t$1("uni-calender.FRI");
},
SATText() {
return t$1("uni-calender.SAT");
},
SUNText() {
return t$1("uni-calender.SUN");
}
},
watch: {
date(newVal) {
this.init(newVal);
},
startDate(val) {
this.cale.resetSatrtDate(val);
this.cale.setDate(this.nowDate.fullDate);
this.weeks = this.cale.weeks;
},
endDate(val) {
this.cale.resetEndDate(val);
this.cale.setDate(this.nowDate.fullDate);
this.weeks = this.cale.weeks;
},
selected(newVal) {
this.cale.setSelectInfo(this.nowDate.fullDate, newVal);
this.weeks = this.cale.weeks;
}
},
created() {
this.cale = new Calendar({
selected: this.selected,
startDate: this.startDate,
endDate: this.endDate,
range: this.range
});
this.init(this.date);
},
methods: {
// 取消穿透
clean() {
},
bindDateChange(e2) {
const value = e2.detail.value + "-1";
this.setDate(value);
const { year, month } = this.cale.getDate(value);
this.$emit("monthSwitch", {
year,
month
});
},
/**
* 初始化日期显示
* @param {Object} date
*/
init(date2) {
this.cale.setDate(date2);
this.weeks = this.cale.weeks;
this.nowDate = this.calendar = this.cale.getInfo(date2);
},
/**
* 打开日历弹窗
*/
open() {
if (this.clearDate && !this.insert) {
this.cale.cleanMultipleStatus();
this.init(this.date);
}
this.show = true;
this.$nextTick(() => {
setTimeout(() => {
this.aniMaskShow = true;
}, 50);
});
},
/**
* 关闭日历弹窗
*/
close() {
this.aniMaskShow = false;
this.$nextTick(() => {
setTimeout(() => {
this.show = false;
this.$emit("close");
}, 300);
});
},
/**
* 确认按钮
*/
confirm() {
this.setEmit("confirm");
this.close();
},
/**
* 变化触发
*/
change() {
if (!this.insert)
return;
this.setEmit("change");
},
/**
* 选择月份触发
*/
monthSwitch() {
let {
year,
month
} = this.nowDate;
this.$emit("monthSwitch", {
year,
month: Number(month)
});
},
/**
* 派发事件
* @param {Object} name
*/
setEmit(name) {
let {
year,
month,
date: date2,
fullDate,
lunar,
extraInfo
} = this.calendar;
this.$emit(name, {
range: this.cale.multipleStatus,
year,
month,
date: date2,
fulldate: fullDate,
lunar,
extraInfo: extraInfo || {}
});
},
/**
* 选择天触发
* @param {Object} weeks
*/
choiceDate(weeks) {
if (weeks.disable)
return;
this.calendar = weeks;
this.cale.setMultiple(this.calendar.fullDate);
this.weeks = this.cale.weeks;
this.change();
},
/**
* 回到今天
*/
backToday() {
const nowYearMonth = `${this.nowDate.year}-${this.nowDate.month}`;
const date2 = this.cale.getDate(/* @__PURE__ */ new Date());
const todayYearMonth = `${date2.year}-${date2.month}`;
if (nowYearMonth !== todayYearMonth) {
this.monthSwitch();
}
this.init(date2.fullDate);
this.change();
},
/**
* 上个月
*/
pre() {
const preDate = this.cale.getDate(this.nowDate.fullDate, -1, "month").fullDate;
this.setDate(preDate);
this.monthSwitch();
},
/**
* 下个月
*/
next() {
const nextDate = this.cale.getDate(this.nowDate.fullDate, 1, "month").fullDate;
this.setDate(nextDate);
this.monthSwitch();
},
/**
* 设置日期
* @param {Object} date
*/
setDate(date2) {
this.cale.setDate(date2);
this.weeks = this.cale.weeks;
this.nowDate = this.cale.getInfo(date2);
}
}
};
function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) {
const _component_calendar_item = vue.resolveComponent("calendar-item");
return vue.openBlock(), vue.createElementBlock("view", { class: "uni-calendar" }, [
!$props.insert && $data.show ? (vue.openBlock(), vue.createElementBlock(
"view",
{
key: 0,
class: vue.normalizeClass(["uni-calendar__mask", { "uni-calendar--mask-show": $data.aniMaskShow }]),
onClick: _cache[0] || (_cache[0] = (...args) => $options.clean && $options.clean(...args))
},
null,
2
/* CLASS */
)) : vue.createCommentVNode("v-if", true),
$props.insert || $data.show ? (vue.openBlock(), vue.createElementBlock(
"view",
{
key: 1,
class: vue.normalizeClass(["uni-calendar__content", { "uni-calendar--fixed": !$props.insert, "uni-calendar--ani-show": $data.aniMaskShow }])
},
[
!$props.insert ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "uni-calendar__header uni-calendar--fixed-top"
}, [
vue.createElementVNode("view", {
class: "uni-calendar__header-btn-box",
onClick: _cache[1] || (_cache[1] = (...args) => $options.close && $options.close(...args))
}, [
vue.createElementVNode(
"text",
{ class: "uni-calendar__header-text uni-calendar--fixed-width" },
vue.toDisplayString($options.cancelText),
1
/* TEXT */
)
]),
vue.createElementVNode("view", {
class: "uni-calendar__header-btn-box",
onClick: _cache[2] || (_cache[2] = (...args) => $options.confirm && $options.confirm(...args))
}, [
vue.createElementVNode(
"text",
{ class: "uni-calendar__header-text uni-calendar--fixed-width" },
vue.toDisplayString($options.okText),
1
/* TEXT */
)
])
])) : vue.createCommentVNode("v-if", true),
vue.createElementVNode("view", { class: "uni-calendar__header" }, [
vue.createElementVNode("view", {
class: "uni-calendar__header-btn-box",
onClick: _cache[3] || (_cache[3] = vue.withModifiers((...args) => $options.pre && $options.pre(...args), ["stop"]))
}, [
vue.createElementVNode("view", { class: "uni-calendar__header-btn uni-calendar--left" })
]),
vue.createElementVNode("picker", {
mode: "date",
value: $props.date,
fields: "month",
onChange: _cache[4] || (_cache[4] = (...args) => $options.bindDateChange && $options.bindDateChange(...args))
}, [
vue.createElementVNode(
"text",
{ class: "uni-calendar__header-text" },
vue.toDisplayString(($data.nowDate.year || "") + " / " + ($data.nowDate.month || "")),
1
/* TEXT */
)
], 40, ["value"]),
vue.createElementVNode("view", {
class: "uni-calendar__header-btn-box",
onClick: _cache[5] || (_cache[5] = vue.withModifiers((...args) => $options.next && $options.next(...args), ["stop"]))
}, [
vue.createElementVNode("view", { class: "uni-calendar__header-btn uni-calendar--right" })
]),
vue.createElementVNode(
"text",
{
class: "uni-calendar__backtoday",
onClick: _cache[6] || (_cache[6] = (...args) => $options.backToday && $options.backToday(...args))
},
vue.toDisplayString($options.todayText),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "uni-calendar__box" }, [
$props.showMonth ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "uni-calendar__box-bg"
}, [
vue.createElementVNode(
"text",
{ class: "uni-calendar__box-bg-text" },
vue.toDisplayString($data.nowDate.month),
1
/* TEXT */
)
])) : vue.createCommentVNode("v-if", true),
vue.createElementVNode("view", { class: "uni-calendar__weeks" }, [
vue.createElementVNode("view", { class: "uni-calendar__weeks-day" }, [
vue.createElementVNode(
"text",
{ class: "uni-calendar__weeks-day-text" },
vue.toDisplayString($options.SUNText),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "uni-calendar__weeks-day" }, [
vue.createElementVNode(
"text",
{ class: "uni-calendar__weeks-day-text" },
vue.toDisplayString($options.monText),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "uni-calendar__weeks-day" }, [
vue.createElementVNode(
"text",
{ class: "uni-calendar__weeks-day-text" },
vue.toDisplayString($options.TUEText),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "uni-calendar__weeks-day" }, [
vue.createElementVNode(
"text",
{ class: "uni-calendar__weeks-day-text" },
vue.toDisplayString($options.WEDText),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "uni-calendar__weeks-day" }, [
vue.createElementVNode(
"text",
{ class: "uni-calendar__weeks-day-text" },
vue.toDisplayString($options.THUText),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "uni-calendar__weeks-day" }, [
vue.createElementVNode(
"text",
{ class: "uni-calendar__weeks-day-text" },
vue.toDisplayString($options.FRIText),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "uni-calendar__weeks-day" }, [
vue.createElementVNode(
"text",
{ class: "uni-calendar__weeks-day-text" },
vue.toDisplayString($options.SATText),
1
/* TEXT */
)
])
]),
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList($data.weeks, (item, weekIndex) => {
return vue.openBlock(), vue.createElementBlock("view", {
class: "uni-calendar__weeks",
key: weekIndex
}, [
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList(item, (weeks, weeksIndex) => {
return vue.openBlock(), vue.createElementBlock("view", {
class: "uni-calendar__weeks-item",
key: weeksIndex
}, [
vue.createVNode(_component_calendar_item, {
class: "uni-calendar-item--hook",
weeks,
calendar: $data.calendar,
selected: $props.selected,
lunar: $props.lunar,
onChange: $options.choiceDate
}, null, 8, ["weeks", "calendar", "selected", "lunar", "onChange"])
]);
}),
128
/* KEYED_FRAGMENT */
))
]);
}),
128
/* KEYED_FRAGMENT */
))
])
],
2
/* CLASS */
)) : vue.createCommentVNode("v-if", true)
]);
}
const __easycom_5 = /* @__PURE__ */ _export_sfc(_sfc_main$f, [["render", _sfc_render$5], ["__scopeId", "data-v-b6ab2cfb"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue"]]);
const _sfc_main$e = {
__name: "Pest",
setup(__props) {
const calendar2 = vue.ref(null);
const form = vue.ref(null);
const openDate = () => {
calendar2.value.open();
};
const formData = vue.reactive({
breed: ""
});
const dateConfirmfn = (e2) => {
formatAppLog("log", "at pages/husbandryForm/Pest.vue:107", e2);
};
const rules2 = {
"formData.breed": {
type: "string",
required: true,
message: "请填写姓名",
trigger: ["blur", "change"]
}
};
const addFn = () => {
form.value.validate().then((res) => {
formatAppLog("log", "at pages/husbandryForm/Pest.vue:124", 6);
}).catch((errors) => {
uni.$u.toast("校验失败");
});
console.log();
return;
};
const updateImgFn = async () => {
if (mode.value == "detail")
return;
let res = await uplodeImg();
formData.buy_cert = res.data.image;
};
const mode = vue.ref("add");
onLoad((options) => {
if (options.task_id) {
mode.value = "detail";
}
});
return (_ctx, _cache) => {
const _component_up_input = resolveEasycom(vue.resolveDynamicComponent("up-input"), __easycom_0$3);
const _component_u_form_item = resolveEasycom(vue.resolveDynamicComponent("u-form-item"), __easycom_1$1);
const _component_u__image = resolveEasycom(vue.resolveDynamicComponent("u--image"), __easycom_0$7);
const _component_u__textarea = resolveEasycom(vue.resolveDynamicComponent("u--textarea"), __easycom_3$1);
const _component_u__form = resolveEasycom(vue.resolveDynamicComponent("u--form"), __easycom_3);
const _component_uni_calendar = resolveEasycom(vue.resolveDynamicComponent("uni-calendar"), __easycom_5);
return vue.openBlock(), vue.createElementBlock(
vue.Fragment,
null,
[
vue.createCommentVNode(" 播种 "),
vue.createElementVNode("view", { class: "content" }, [
vue.createElementVNode("view", { class: "card" }, [
vue.createVNode(_component_u__form, {
labelPosition: "top",
labelWidth: "100",
model: formData,
rules: rules2,
ref_key: "form",
ref: form
}, {
default: vue.withCtx(() => [
vue.createVNode(
_component_u_form_item,
{
label: "药剂种类",
prop: "formData.breed",
borderBottom: "",
ref: "item1",
required: ""
},
{
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入药剂种类",
disabled: mode.value == "detail",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
},
512
/* NEED_PATCH */
),
vue.createVNode(_component_u_form_item, {
label: "药剂品牌",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入药剂品牌",
disabled: mode.value == "detail",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_u_form_item, {
label: "药剂用量",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入药剂用量",
disabled: mode.value == "detail",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_u_form_item, {
label: "开始日期",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请选择日期",
border: "surround",
onBlur: openDate,
disabled: mode.value == "detail",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_u_form_item, {
label: "结束日期",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请选择日期",
border: "surround",
onBlur: openDate,
disabled: mode.value == "detail",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_u_form_item, {
label: "作业地块",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入作业地块",
border: "surround",
disabled: mode.value == "detail",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_u_form_item, {
label: "作业面积",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入作业面积",
type: "number",
disabled: mode.value == "detail",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_u_form_item, {
label: "参与人",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入参与人",
type: "number",
disabled: mode.value == "detail",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createElementVNode("view", { class: "card-li" }, [
vue.createElementVNode("view", { class: "card-li-tit" }, " 防治图片 "),
vue.createElementVNode("view", { class: "code-img" }, [
vue.createElementVNode("view", {
class: "",
onClick: updateImgFn
}, [
formData.buy_cert ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: ""
}, [
vue.createVNode(_component_u__image, {
src: formData.buy_cert,
width: "637.85rpx",
height: "350.47rpx"
}, null, 8, ["src"])
])) : (vue.openBlock(), vue.createElementBlock("view", {
key: 1,
class: "carime-icon"
}, [
vue.createVNode(_component_u__image, {
src: "/static/img/DJSC.png",
width: "91.12rpx",
height: "91.12rpx"
}),
vue.createElementVNode("view", { class: "" }, " 点击上传图片 ")
]))
])
])
]),
vue.createVNode(_component_u_form_item, {
label: "备注",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_u__textarea, {
modelValue: formData.breed,
"onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => formData.breed = $event),
disabled: mode.value == "detail",
placeholder: "请输入内容"
}, null, 8, ["modelValue", "disabled"])
]),
_: 1
/* STABLE */
})
]),
_: 1
/* STABLE */
}, 8, ["model"]),
vue.createElementVNode("view", null, [
vue.createVNode(
_component_uni_calendar,
{
ref_key: "calendar",
ref: calendar2,
showMonth: true,
lunar: true,
insert: false,
onConfirm: dateConfirmfn
},
null,
512
/* NEED_PATCH */
)
])
]),
mode.value == "add" ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "confirm"
}, [
vue.createElementVNode("view", {
class: "confirm-btn",
style: { "color": "white", "background-color": "#0AA565" },
onClick: addFn
}, " 完成添加 ")
])) : vue.createCommentVNode("v-if", true)
])
],
2112
/* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
);
};
}
};
const PagesHusbandryFormPest = /* @__PURE__ */ _export_sfc(_sfc_main$e, [["__scopeId", "data-v-b3c802e1"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/pages/husbandryForm/Pest.vue"]]);
const easycom = {
custom: {
"^u--(.*)": "uview-plus/components/u-$1/u-$1.vue",
"^up-(.*)": "uview-plus/components/u-$1/u-$1.vue",
"^u-([^-].*)": "uview-plus/components/u-$1/u-$1.vue"
}
};
const pages$1 = [
{
path: "pages/index/index",
style: {
navigationStyle: "custom"
}
},
{
path: "pages/landDetail/index",
style: {
navigationBarTitleText: "土地详情",
enablePullDownRefresh: false,
navigationBarBackgroundColor: "#F4F4F4",
navigationBarTextStyle: "black"
}
},
{
path: "pages/husbandryForm/harvest",
style: {
navigationBarTitleText: "添加收获信息",
enablePullDownRefresh: false,
navigationBarBackgroundColor: "#F4F4F4",
navigationBarTextStyle: "black"
}
},
{
path: "pages/husbandryForm/Pest",
style: {
navigationBarTitleText: "添加虫害防治信息",
enablePullDownRefresh: false,
navigationBarBackgroundColor: "#F4F4F4",
navigationBarTextStyle: "black"
}
},
{
path: "pages/husbandryForm/irrigate",
style: {
navigationBarTitleText: "添加灌溉信息",
enablePullDownRefresh: false,
navigationBarBackgroundColor: "#F4F4F4",
navigationBarTextStyle: "black"
}
},
{
path: "pages/husbandryForm/weeding",
style: {
navigationBarTitleText: "添加除草信息",
enablePullDownRefresh: false,
navigationBarBackgroundColor: "#F4F4F4",
navigationBarTextStyle: "black"
}
},
{
path: "pages/husbandryForm/fertilize",
style: {
navigationBarTitleText: "添加施肥信息",
enablePullDownRefresh: false,
navigationBarBackgroundColor: "#F4F4F4",
navigationBarTextStyle: "black"
}
},
{
path: "pages/husbandryForm/sow",
style: {
navigationBarTitleText: "添加种植信息",
enablePullDownRefresh: false,
navigationBarBackgroundColor: "#F4F4F4",
navigationBarTextStyle: "black"
}
},
{
path: "pages/live/live",
style: {
navigationBarTitleText: "苗情监测",
enablePullDownRefresh: false,
navigationBarBackgroundColor: "#F4F4F4",
navigationBarTextStyle: "black"
}
},
{
path: "pages/addLand/addLand",
style: {
navigationBarTitleText: "添加土地信息",
enablePullDownRefresh: false,
navigationBarBackgroundColor: "#F4F4F4",
navigationBarTextStyle: "black"
}
},
{
path: "pages/updatePassword/updatePassword",
style: {
navigationBarTitleText: "密码修改",
enablePullDownRefresh: false,
navigationBarBackgroundColor: "#F4F4F4",
navigationBarTextStyle: "black"
}
},
{
path: "pages/index/massif",
style: {
navigationBarTitleText: "地块",
enablePullDownRefresh: false,
navigationBarBackgroundColor: "#F4F4F4",
navigationBarTextStyle: "black"
}
},
{
path: "pages/index/personal",
style: {
navigationStyle: "custom"
}
},
{
path: "pages/Login/login",
style: {
navigationStyle: "custom"
}
}
];
const globalStyle = {
navigationBarTextStyle: "black",
navigationBarTitleText: "uni-app",
navigationBarBackgroundColor: "#F8F8F8",
backgroundColor: "#F8F8F8"
};
const tabBar = {
color: "#B3B3B3",
selectedColor: "#272822",
borderStyle: "white",
backgroundColor: "#EBF1EF",
list: [
{
pagePath: "pages/index/index",
text: "首页",
iconPath: "static/tabs-icon/home.png",
selectedIconPath: "static/img/DK.png"
},
{
pagePath: "pages/index/massif",
text: "地块",
iconPath: "static/img/SJ (1).png",
selectedIconPath: "static/img/SJ (1).png"
},
{
pagePath: "pages/index/personal",
text: "我的",
iconPath: "static/img/WD.png",
selectedIconPath: "static/img/WD.png"
}
]
};
const uniIdRouter = {};
const e = {
easycom,
pages: pages$1,
globalStyle,
tabBar,
uniIdRouter
};
function t(e2) {
return e2 && e2.__esModule && Object.prototype.hasOwnProperty.call(e2, "default") ? e2.default : e2;
}
function n(e2, t2, n2) {
return e2(n2 = { path: t2, exports: {}, require: function(e3, t3) {
return function() {
throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs");
}(null == t3 && n2.path);
} }, n2.exports), n2.exports;
}
var s = n(function(e2, t2) {
var n2;
e2.exports = (n2 = n2 || function(e3, t3) {
var n3 = Object.create || function() {
function e4() {
}
return function(t4) {
var n4;
return e4.prototype = t4, n4 = new e4(), e4.prototype = null, n4;
};
}(), s2 = {}, r2 = s2.lib = {}, i2 = r2.Base = { extend: function(e4) {
var t4 = n3(this);
return e4 && t4.mixIn(e4), t4.hasOwnProperty("init") && this.init !== t4.init || (t4.init = function() {
t4.$super.init.apply(this, arguments);
}), t4.init.prototype = t4, t4.$super = this, t4;
}, create: function() {
var e4 = this.extend();
return e4.init.apply(e4, arguments), e4;
}, init: function() {
}, mixIn: function(e4) {
for (var t4 in e4)
e4.hasOwnProperty(t4) && (this[t4] = e4[t4]);
e4.hasOwnProperty("toString") && (this.toString = e4.toString);
}, clone: function() {
return this.init.prototype.extend(this);
} }, o2 = r2.WordArray = i2.extend({ init: function(e4, n4) {
e4 = this.words = e4 || [], this.sigBytes = n4 != t3 ? n4 : 4 * e4.length;
}, toString: function(e4) {
return (e4 || c2).stringify(this);
}, concat: function(e4) {
var t4 = this.words, n4 = e4.words, s3 = this.sigBytes, r3 = e4.sigBytes;
if (this.clamp(), s3 % 4)
for (var i3 = 0; i3 < r3; i3++) {
var o3 = n4[i3 >>> 2] >>> 24 - i3 % 4 * 8 & 255;
t4[s3 + i3 >>> 2] |= o3 << 24 - (s3 + i3) % 4 * 8;
}
else
for (i3 = 0; i3 < r3; i3 += 4)
t4[s3 + i3 >>> 2] = n4[i3 >>> 2];
return this.sigBytes += r3, this;
}, clamp: function() {
var t4 = this.words, n4 = this.sigBytes;
t4[n4 >>> 2] &= 4294967295 << 32 - n4 % 4 * 8, t4.length = e3.ceil(n4 / 4);
}, clone: function() {
var e4 = i2.clone.call(this);
return e4.words = this.words.slice(0), e4;
}, random: function(t4) {
for (var n4, s3 = [], r3 = function(t5) {
t5 = t5;
var n5 = 987654321, s4 = 4294967295;
return function() {
var r4 = ((n5 = 36969 * (65535 & n5) + (n5 >> 16) & s4) << 16) + (t5 = 18e3 * (65535 & t5) + (t5 >> 16) & s4) & s4;
return r4 /= 4294967296, (r4 += 0.5) * (e3.random() > 0.5 ? 1 : -1);
};
}, i3 = 0; i3 < t4; i3 += 4) {
var a3 = r3(4294967296 * (n4 || e3.random()));
n4 = 987654071 * a3(), s3.push(4294967296 * a3() | 0);
}
return new o2.init(s3, t4);
} }), a2 = s2.enc = {}, c2 = a2.Hex = { stringify: function(e4) {
for (var t4 = e4.words, n4 = e4.sigBytes, s3 = [], r3 = 0; r3 < n4; r3++) {
var i3 = t4[r3 >>> 2] >>> 24 - r3 % 4 * 8 & 255;
s3.push((i3 >>> 4).toString(16)), s3.push((15 & i3).toString(16));
}
return s3.join("");
}, parse: function(e4) {
for (var t4 = e4.length, n4 = [], s3 = 0; s3 < t4; s3 += 2)
n4[s3 >>> 3] |= parseInt(e4.substr(s3, 2), 16) << 24 - s3 % 8 * 4;
return new o2.init(n4, t4 / 2);
} }, u2 = a2.Latin1 = { stringify: function(e4) {
for (var t4 = e4.words, n4 = e4.sigBytes, s3 = [], r3 = 0; r3 < n4; r3++) {
var i3 = t4[r3 >>> 2] >>> 24 - r3 % 4 * 8 & 255;
s3.push(String.fromCharCode(i3));
}
return s3.join("");
}, parse: function(e4) {
for (var t4 = e4.length, n4 = [], s3 = 0; s3 < t4; s3++)
n4[s3 >>> 2] |= (255 & e4.charCodeAt(s3)) << 24 - s3 % 4 * 8;
return new o2.init(n4, t4);
} }, l2 = a2.Utf8 = { stringify: function(e4) {
try {
return decodeURIComponent(escape(u2.stringify(e4)));
} catch (e5) {
throw new Error("Malformed UTF-8 data");
}
}, parse: function(e4) {
return u2.parse(unescape(encodeURIComponent(e4)));
} }, h2 = r2.BufferedBlockAlgorithm = i2.extend({ reset: function() {
this._data = new o2.init(), this._nDataBytes = 0;
}, _append: function(e4) {
"string" == typeof e4 && (e4 = l2.parse(e4)), this._data.concat(e4), this._nDataBytes += e4.sigBytes;
}, _process: function(t4) {
var n4 = this._data, s3 = n4.words, r3 = n4.sigBytes, i3 = this.blockSize, a3 = r3 / (4 * i3), c3 = (a3 = t4 ? e3.ceil(a3) : e3.max((0 | a3) - this._minBufferSize, 0)) * i3, u3 = e3.min(4 * c3, r3);
if (c3) {
for (var l3 = 0; l3 < c3; l3 += i3)
this._doProcessBlock(s3, l3);
var h3 = s3.splice(0, c3);
n4.sigBytes -= u3;
}
return new o2.init(h3, u3);
}, clone: function() {
var e4 = i2.clone.call(this);
return e4._data = this._data.clone(), e4;
}, _minBufferSize: 0 });
r2.Hasher = h2.extend({ cfg: i2.extend(), init: function(e4) {
this.cfg = this.cfg.extend(e4), this.reset();
}, reset: function() {
h2.reset.call(this), this._doReset();
}, update: function(e4) {
return this._append(e4), this._process(), this;
}, finalize: function(e4) {
return e4 && this._append(e4), this._doFinalize();
}, blockSize: 16, _createHelper: function(e4) {
return function(t4, n4) {
return new e4.init(n4).finalize(t4);
};
}, _createHmacHelper: function(e4) {
return function(t4, n4) {
return new d2.HMAC.init(e4, n4).finalize(t4);
};
} });
var d2 = s2.algo = {};
return s2;
}(Math), n2);
}), r = s, i = (n(function(e2, t2) {
var n2;
e2.exports = (n2 = r, function(e3) {
var t3 = n2, s2 = t3.lib, r2 = s2.WordArray, i2 = s2.Hasher, o2 = t3.algo, a2 = [];
!function() {
for (var t4 = 0; t4 < 64; t4++)
a2[t4] = 4294967296 * e3.abs(e3.sin(t4 + 1)) | 0;
}();
var c2 = o2.MD5 = i2.extend({ _doReset: function() {
this._hash = new r2.init([1732584193, 4023233417, 2562383102, 271733878]);
}, _doProcessBlock: function(e4, t4) {
for (var n3 = 0; n3 < 16; n3++) {
var s3 = t4 + n3, r3 = e4[s3];
e4[s3] = 16711935 & (r3 << 8 | r3 >>> 24) | 4278255360 & (r3 << 24 | r3 >>> 8);
}
var i3 = this._hash.words, o3 = e4[t4 + 0], c3 = e4[t4 + 1], p2 = e4[t4 + 2], f2 = e4[t4 + 3], g2 = e4[t4 + 4], m2 = e4[t4 + 5], y2 = e4[t4 + 6], _2 = e4[t4 + 7], w2 = e4[t4 + 8], v2 = e4[t4 + 9], I2 = e4[t4 + 10], S2 = e4[t4 + 11], b2 = e4[t4 + 12], k = e4[t4 + 13], A2 = e4[t4 + 14], P2 = e4[t4 + 15], T2 = i3[0], C2 = i3[1], x = i3[2], O2 = i3[3];
T2 = u2(T2, C2, x, O2, o3, 7, a2[0]), O2 = u2(O2, T2, C2, x, c3, 12, a2[1]), x = u2(x, O2, T2, C2, p2, 17, a2[2]), C2 = u2(C2, x, O2, T2, f2, 22, a2[3]), T2 = u2(T2, C2, x, O2, g2, 7, a2[4]), O2 = u2(O2, T2, C2, x, m2, 12, a2[5]), x = u2(x, O2, T2, C2, y2, 17, a2[6]), C2 = u2(C2, x, O2, T2, _2, 22, a2[7]), T2 = u2(T2, C2, x, O2, w2, 7, a2[8]), O2 = u2(O2, T2, C2, x, v2, 12, a2[9]), x = u2(x, O2, T2, C2, I2, 17, a2[10]), C2 = u2(C2, x, O2, T2, S2, 22, a2[11]), T2 = u2(T2, C2, x, O2, b2, 7, a2[12]), O2 = u2(O2, T2, C2, x, k, 12, a2[13]), x = u2(x, O2, T2, C2, A2, 17, a2[14]), T2 = l2(T2, C2 = u2(C2, x, O2, T2, P2, 22, a2[15]), x, O2, c3, 5, a2[16]), O2 = l2(O2, T2, C2, x, y2, 9, a2[17]), x = l2(x, O2, T2, C2, S2, 14, a2[18]), C2 = l2(C2, x, O2, T2, o3, 20, a2[19]), T2 = l2(T2, C2, x, O2, m2, 5, a2[20]), O2 = l2(O2, T2, C2, x, I2, 9, a2[21]), x = l2(x, O2, T2, C2, P2, 14, a2[22]), C2 = l2(C2, x, O2, T2, g2, 20, a2[23]), T2 = l2(T2, C2, x, O2, v2, 5, a2[24]), O2 = l2(O2, T2, C2, x, A2, 9, a2[25]), x = l2(x, O2, T2, C2, f2, 14, a2[26]), C2 = l2(C2, x, O2, T2, w2, 20, a2[27]), T2 = l2(T2, C2, x, O2, k, 5, a2[28]), O2 = l2(O2, T2, C2, x, p2, 9, a2[29]), x = l2(x, O2, T2, C2, _2, 14, a2[30]), T2 = h2(T2, C2 = l2(C2, x, O2, T2, b2, 20, a2[31]), x, O2, m2, 4, a2[32]), O2 = h2(O2, T2, C2, x, w2, 11, a2[33]), x = h2(x, O2, T2, C2, S2, 16, a2[34]), C2 = h2(C2, x, O2, T2, A2, 23, a2[35]), T2 = h2(T2, C2, x, O2, c3, 4, a2[36]), O2 = h2(O2, T2, C2, x, g2, 11, a2[37]), x = h2(x, O2, T2, C2, _2, 16, a2[38]), C2 = h2(C2, x, O2, T2, I2, 23, a2[39]), T2 = h2(T2, C2, x, O2, k, 4, a2[40]), O2 = h2(O2, T2, C2, x, o3, 11, a2[41]), x = h2(x, O2, T2, C2, f2, 16, a2[42]), C2 = h2(C2, x, O2, T2, y2, 23, a2[43]), T2 = h2(T2, C2, x, O2, v2, 4, a2[44]), O2 = h2(O2, T2, C2, x, b2, 11, a2[45]), x = h2(x, O2, T2, C2, P2, 16, a2[46]), T2 = d2(T2, C2 = h2(C2, x, O2, T2, p2, 23, a2[47]), x, O2, o3, 6, a2[48]), O2 = d2(O2, T2, C2, x, _2, 10, a2[49]), x = d2(x, O2, T2, C2, A2, 15, a2[50]), C2 = d2(C2, x, O2, T2, m2, 21, a2[51]), T2 = d2(T2, C2, x, O2, b2, 6, a2[52]), O2 = d2(O2, T2, C2, x, f2, 10, a2[53]), x = d2(x, O2, T2, C2, I2, 15, a2[54]), C2 = d2(C2, x, O2, T2, c3, 21, a2[55]), T2 = d2(T2, C2, x, O2, w2, 6, a2[56]), O2 = d2(O2, T2, C2, x, P2, 10, a2[57]), x = d2(x, O2, T2, C2, y2, 15, a2[58]), C2 = d2(C2, x, O2, T2, k, 21, a2[59]), T2 = d2(T2, C2, x, O2, g2, 6, a2[60]), O2 = d2(O2, T2, C2, x, S2, 10, a2[61]), x = d2(x, O2, T2, C2, p2, 15, a2[62]), C2 = d2(C2, x, O2, T2, v2, 21, a2[63]), i3[0] = i3[0] + T2 | 0, i3[1] = i3[1] + C2 | 0, i3[2] = i3[2] + x | 0, i3[3] = i3[3] + O2 | 0;
}, _doFinalize: function() {
var t4 = this._data, n3 = t4.words, s3 = 8 * this._nDataBytes, r3 = 8 * t4.sigBytes;
n3[r3 >>> 5] |= 128 << 24 - r3 % 32;
var i3 = e3.floor(s3 / 4294967296), o3 = s3;
n3[15 + (r3 + 64 >>> 9 << 4)] = 16711935 & (i3 << 8 | i3 >>> 24) | 4278255360 & (i3 << 24 | i3 >>> 8), n3[14 + (r3 + 64 >>> 9 << 4)] = 16711935 & (o3 << 8 | o3 >>> 24) | 4278255360 & (o3 << 24 | o3 >>> 8), t4.sigBytes = 4 * (n3.length + 1), this._process();
for (var a3 = this._hash, c3 = a3.words, u3 = 0; u3 < 4; u3++) {
var l3 = c3[u3];
c3[u3] = 16711935 & (l3 << 8 | l3 >>> 24) | 4278255360 & (l3 << 24 | l3 >>> 8);
}
return a3;
}, clone: function() {
var e4 = i2.clone.call(this);
return e4._hash = this._hash.clone(), e4;
} });
function u2(e4, t4, n3, s3, r3, i3, o3) {
var a3 = e4 + (t4 & n3 | ~t4 & s3) + r3 + o3;
return (a3 << i3 | a3 >>> 32 - i3) + t4;
}
function l2(e4, t4, n3, s3, r3, i3, o3) {
var a3 = e4 + (t4 & s3 | n3 & ~s3) + r3 + o3;
return (a3 << i3 | a3 >>> 32 - i3) + t4;
}
function h2(e4, t4, n3, s3, r3, i3, o3) {
var a3 = e4 + (t4 ^ n3 ^ s3) + r3 + o3;
return (a3 << i3 | a3 >>> 32 - i3) + t4;
}
function d2(e4, t4, n3, s3, r3, i3, o3) {
var a3 = e4 + (n3 ^ (t4 | ~s3)) + r3 + o3;
return (a3 << i3 | a3 >>> 32 - i3) + t4;
}
t3.MD5 = i2._createHelper(c2), t3.HmacMD5 = i2._createHmacHelper(c2);
}(Math), n2.MD5);
}), n(function(e2, t2) {
var n2;
e2.exports = (n2 = r, void function() {
var e3 = n2, t3 = e3.lib.Base, s2 = e3.enc.Utf8;
e3.algo.HMAC = t3.extend({ init: function(e4, t4) {
e4 = this._hasher = new e4.init(), "string" == typeof t4 && (t4 = s2.parse(t4));
var n3 = e4.blockSize, r2 = 4 * n3;
t4.sigBytes > r2 && (t4 = e4.finalize(t4)), t4.clamp();
for (var i2 = this._oKey = t4.clone(), o2 = this._iKey = t4.clone(), a2 = i2.words, c2 = o2.words, u2 = 0; u2 < n3; u2++)
a2[u2] ^= 1549556828, c2[u2] ^= 909522486;
i2.sigBytes = o2.sigBytes = r2, this.reset();
}, reset: function() {
var e4 = this._hasher;
e4.reset(), e4.update(this._iKey);
}, update: function(e4) {
return this._hasher.update(e4), this;
}, finalize: function(e4) {
var t4 = this._hasher, n3 = t4.finalize(e4);
return t4.reset(), t4.finalize(this._oKey.clone().concat(n3));
} });
}());
}), n(function(e2, t2) {
e2.exports = r.HmacMD5;
})), o = n(function(e2, t2) {
e2.exports = r.enc.Utf8;
}), a = n(function(e2, t2) {
var n2;
e2.exports = (n2 = r, function() {
var e3 = n2, t3 = e3.lib.WordArray;
function s2(e4, n3, s3) {
for (var r2 = [], i2 = 0, o2 = 0; o2 < n3; o2++)
if (o2 % 4) {
var a2 = s3[e4.charCodeAt(o2 - 1)] << o2 % 4 * 2, c2 = s3[e4.charCodeAt(o2)] >>> 6 - o2 % 4 * 2;
r2[i2 >>> 2] |= (a2 | c2) << 24 - i2 % 4 * 8, i2++;
}
return t3.create(r2, i2);
}
e3.enc.Base64 = { stringify: function(e4) {
var t4 = e4.words, n3 = e4.sigBytes, s3 = this._map;
e4.clamp();
for (var r2 = [], i2 = 0; i2 < n3; i2 += 3)
for (var o2 = (t4[i2 >>> 2] >>> 24 - i2 % 4 * 8 & 255) << 16 | (t4[i2 + 1 >>> 2] >>> 24 - (i2 + 1) % 4 * 8 & 255) << 8 | t4[i2 + 2 >>> 2] >>> 24 - (i2 + 2) % 4 * 8 & 255, a2 = 0; a2 < 4 && i2 + 0.75 * a2 < n3; a2++)
r2.push(s3.charAt(o2 >>> 6 * (3 - a2) & 63));
var c2 = s3.charAt(64);
if (c2)
for (; r2.length % 4; )
r2.push(c2);
return r2.join("");
}, parse: function(e4) {
var t4 = e4.length, n3 = this._map, r2 = this._reverseMap;
if (!r2) {
r2 = this._reverseMap = [];
for (var i2 = 0; i2 < n3.length; i2++)
r2[n3.charCodeAt(i2)] = i2;
}
var o2 = n3.charAt(64);
if (o2) {
var a2 = e4.indexOf(o2);
-1 !== a2 && (t4 = a2);
}
return s2(e4, t4, r2);
}, _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" };
}(), n2.enc.Base64);
});
const c = "FUNCTION", u = "OBJECT", l = "CLIENT_DB", h = "pending", d = "fulfilled", p = "rejected";
function f(e2) {
return Object.prototype.toString.call(e2).slice(8, -1).toLowerCase();
}
function g(e2) {
return "object" === f(e2);
}
function m(e2) {
return "function" == typeof e2;
}
function y(e2) {
return function() {
try {
return e2.apply(e2, arguments);
} catch (e3) {
console.error(e3);
}
};
}
const _ = "REJECTED", w = "NOT_PENDING";
class v {
constructor({ createPromise: e2, retryRule: t2 = _ } = {}) {
this.createPromise = e2, this.status = null, this.promise = null, this.retryRule = t2;
}
get needRetry() {
if (!this.status)
return true;
switch (this.retryRule) {
case _:
return this.status === p;
case w:
return this.status !== h;
}
}
exec() {
return this.needRetry ? (this.status = h, this.promise = this.createPromise().then((e2) => (this.status = d, Promise.resolve(e2)), (e2) => (this.status = p, Promise.reject(e2))), this.promise) : this.promise;
}
}
function I(e2) {
return e2 && "string" == typeof e2 ? JSON.parse(e2) : e2;
}
const S = true, b = "app", A = I([]), P = b, T = I(""), C = I("[]") || [];
let O = "";
try {
O = "__UNI__D087881";
} catch (e2) {
}
let E = {};
function L(e2, t2 = {}) {
var n2, s2;
return n2 = E, s2 = e2, Object.prototype.hasOwnProperty.call(n2, s2) || (E[e2] = t2), E[e2];
}
E = uni._globalUniCloudObj ? uni._globalUniCloudObj : uni._globalUniCloudObj = {};
const R = ["invoke", "success", "fail", "complete"], U = L("_globalUniCloudInterceptor");
function N(e2, t2) {
U[e2] || (U[e2] = {}), g(t2) && Object.keys(t2).forEach((n2) => {
R.indexOf(n2) > -1 && function(e3, t3, n3) {
let s2 = U[e3][t3];
s2 || (s2 = U[e3][t3] = []), -1 === s2.indexOf(n3) && m(n3) && s2.push(n3);
}(e2, n2, t2[n2]);
});
}
function D(e2, t2) {
U[e2] || (U[e2] = {}), g(t2) ? Object.keys(t2).forEach((n2) => {
R.indexOf(n2) > -1 && function(e3, t3, n3) {
const s2 = U[e3][t3];
if (!s2)
return;
const r2 = s2.indexOf(n3);
r2 > -1 && s2.splice(r2, 1);
}(e2, n2, t2[n2]);
}) : delete U[e2];
}
function M(e2, t2) {
return e2 && 0 !== e2.length ? e2.reduce((e3, n2) => e3.then(() => n2(t2)), Promise.resolve()) : Promise.resolve();
}
function q(e2, t2) {
return U[e2] && U[e2][t2] || [];
}
function F(e2) {
N("callObject", e2);
}
const K = L("_globalUniCloudListener"), j = "response", B = "needLogin", $ = "refreshToken", W = "clientdb", H = "cloudfunction", z = "cloudobject";
function J(e2) {
return K[e2] || (K[e2] = []), K[e2];
}
function V(e2, t2) {
const n2 = J(e2);
n2.includes(t2) || n2.push(t2);
}
function G(e2, t2) {
const n2 = J(e2), s2 = n2.indexOf(t2);
-1 !== s2 && n2.splice(s2, 1);
}
function Y(e2, t2) {
const n2 = J(e2);
for (let e3 = 0; e3 < n2.length; e3++) {
(0, n2[e3])(t2);
}
}
let Q, X = false;
function Z() {
return Q || (Q = new Promise((e2) => {
X && e2(), function t2() {
if ("function" == typeof getCurrentPages) {
const t3 = getCurrentPages();
t3 && t3[0] && (X = true, e2());
}
X || setTimeout(() => {
t2();
}, 30);
}();
}), Q);
}
function ee(e2) {
const t2 = {};
for (const n2 in e2) {
const s2 = e2[n2];
m(s2) && (t2[n2] = y(s2));
}
return t2;
}
class te extends Error {
constructor(e2) {
super(e2.message), this.errMsg = e2.message || e2.errMsg || "unknown system error", this.code = this.errCode = e2.code || e2.errCode || "SYSTEM_ERROR", this.errSubject = this.subject = e2.subject || e2.errSubject, this.cause = e2.cause, this.requestId = e2.requestId;
}
toJson(e2 = 0) {
if (!(e2 >= 10))
return e2++, { errCode: this.errCode, errMsg: this.errMsg, errSubject: this.errSubject, cause: this.cause && this.cause.toJson ? this.cause.toJson(e2) : this.cause };
}
}
var ne = { request: (e2) => uni.request(e2), uploadFile: (e2) => uni.uploadFile(e2), setStorageSync: (e2, t2) => uni.setStorageSync(e2, t2), getStorageSync: (e2) => uni.getStorageSync(e2), removeStorageSync: (e2) => uni.removeStorageSync(e2), clearStorageSync: () => uni.clearStorageSync() };
function se(e2) {
return e2 && se(e2.__v_raw) || e2;
}
function re() {
return { token: ne.getStorageSync("uni_id_token") || ne.getStorageSync("uniIdToken"), tokenExpired: ne.getStorageSync("uni_id_token_expired") };
}
function ie({ token: e2, tokenExpired: t2 } = {}) {
e2 && ne.setStorageSync("uni_id_token", e2), t2 && ne.setStorageSync("uni_id_token_expired", t2);
}
let oe, ae;
function ce() {
return oe || (oe = uni.getSystemInfoSync()), oe;
}
function ue() {
let e2, t2;
try {
if (uni.getLaunchOptionsSync) {
if (uni.getLaunchOptionsSync.toString().indexOf("not yet implemented") > -1)
return;
const { scene: n2, channel: s2 } = uni.getLaunchOptionsSync();
e2 = s2, t2 = n2;
}
} catch (e3) {
}
return { channel: e2, scene: t2 };
}
function le() {
const e2 = uni.getLocale && uni.getLocale() || "en";
if (ae)
return { ...ae, locale: e2, LOCALE: e2 };
const t2 = ce(), { deviceId: n2, osName: s2, uniPlatform: r2, appId: i2 } = t2, o2 = ["pixelRatio", "brand", "model", "system", "language", "version", "platform", "host", "SDKVersion", "swanNativeVersion", "app", "AppPlatform", "fontSizeSetting"];
for (let e3 = 0; e3 < o2.length; e3++) {
delete t2[o2[e3]];
}
return ae = { PLATFORM: r2, OS: s2, APPID: i2, DEVICEID: n2, ...ue(), ...t2 }, { ...ae, locale: e2, LOCALE: e2 };
}
var he = { sign: function(e2, t2) {
let n2 = "";
return Object.keys(e2).sort().forEach(function(t3) {
e2[t3] && (n2 = n2 + "&" + t3 + "=" + e2[t3]);
}), n2 = n2.slice(1), i(n2, t2).toString();
}, wrappedRequest: function(e2, t2) {
return new Promise((n2, s2) => {
t2(Object.assign(e2, { complete(e3) {
e3 || (e3 = {});
const t3 = e3.data && e3.data.header && e3.data.header["x-serverless-request-id"] || e3.header && e3.header["request-id"];
if (!e3.statusCode || e3.statusCode >= 400)
return s2(new te({ code: "SYS_ERR", message: e3.errMsg || "request:fail", requestId: t3 }));
const r2 = e3.data;
if (r2.error)
return s2(new te({ code: r2.error.code, message: r2.error.message, requestId: t3 }));
r2.result = r2.data, r2.requestId = t3, delete r2.data, n2(r2);
} }));
});
}, toBase64: function(e2) {
return a.stringify(o.parse(e2));
} };
var de = class {
constructor(e2) {
["spaceId", "clientSecret"].forEach((t2) => {
if (!Object.prototype.hasOwnProperty.call(e2, t2))
throw new Error(`${t2} required`);
}), this.config = Object.assign({}, { endpoint: 0 === e2.spaceId.indexOf("mp-") ? "https://api.next.bspapp.com" : "https://api.bspapp.com" }, e2), this.config.provider = "aliyun", this.config.requestUrl = this.config.endpoint + "/client", this.config.envType = this.config.envType || "public", this.config.accessTokenKey = "access_token_" + this.config.spaceId, this.adapter = ne, this._getAccessTokenPromiseHub = new v({ createPromise: () => this.requestAuth(this.setupRequest({ method: "serverless.auth.user.anonymousAuthorize", params: "{}" }, "auth")).then((e3) => {
if (!e3.result || !e3.result.accessToken)
throw new te({ code: "AUTH_FAILED", message: "获取accessToken失败" });
this.setAccessToken(e3.result.accessToken);
}), retryRule: w });
}
get hasAccessToken() {
return !!this.accessToken;
}
setAccessToken(e2) {
this.accessToken = e2;
}
requestWrapped(e2) {
return he.wrappedRequest(e2, this.adapter.request);
}
requestAuth(e2) {
return this.requestWrapped(e2);
}
request(e2, t2) {
return Promise.resolve().then(() => this.hasAccessToken ? t2 ? this.requestWrapped(e2) : this.requestWrapped(e2).catch((t3) => new Promise((e3, n2) => {
!t3 || "GATEWAY_INVALID_TOKEN" !== t3.code && "InvalidParameter.InvalidToken" !== t3.code ? n2(t3) : e3();
}).then(() => this.getAccessToken()).then(() => {
const t4 = this.rebuildRequest(e2);
return this.request(t4, true);
})) : this.getAccessToken().then(() => {
const t3 = this.rebuildRequest(e2);
return this.request(t3, true);
}));
}
rebuildRequest(e2) {
const t2 = Object.assign({}, e2);
return t2.data.token = this.accessToken, t2.header["x-basement-token"] = this.accessToken, t2.header["x-serverless-sign"] = he.sign(t2.data, this.config.clientSecret), t2;
}
setupRequest(e2, t2) {
const n2 = Object.assign({}, e2, { spaceId: this.config.spaceId, timestamp: Date.now() }), s2 = { "Content-Type": "application/json" };
return "auth" !== t2 && (n2.token = this.accessToken, s2["x-basement-token"] = this.accessToken), s2["x-serverless-sign"] = he.sign(n2, this.config.clientSecret), { url: this.config.requestUrl, method: "POST", data: n2, dataType: "json", header: s2 };
}
getAccessToken() {
return this._getAccessTokenPromiseHub.exec();
}
async authorize() {
await this.getAccessToken();
}
callFunction(e2) {
const t2 = { method: "serverless.function.runtime.invoke", params: JSON.stringify({ functionTarget: e2.name, functionArgs: e2.data || {} }) };
return this.request(this.setupRequest(t2));
}
getOSSUploadOptionsFromPath(e2) {
const t2 = { method: "serverless.file.resource.generateProximalSign", params: JSON.stringify(e2) };
return this.request(this.setupRequest(t2));
}
uploadFileToOSS({ url: e2, formData: t2, name: n2, filePath: s2, fileType: r2, onUploadProgress: i2 }) {
return new Promise((o2, a2) => {
const c2 = this.adapter.uploadFile({ url: e2, formData: t2, name: n2, filePath: s2, fileType: r2, header: { "X-OSS-server-side-encrpytion": "AES256" }, success(e3) {
e3 && e3.statusCode < 400 ? o2(e3) : a2(new te({ code: "UPLOAD_FAILED", message: "文件上传失败" }));
}, fail(e3) {
a2(new te({ code: e3.code || "UPLOAD_FAILED", message: e3.message || e3.errMsg || "文件上传失败" }));
} });
"function" == typeof i2 && c2 && "function" == typeof c2.onProgressUpdate && c2.onProgressUpdate((e3) => {
i2({ loaded: e3.totalBytesSent, total: e3.totalBytesExpectedToSend });
});
});
}
reportOSSUpload(e2) {
const t2 = { method: "serverless.file.resource.report", params: JSON.stringify(e2) };
return this.request(this.setupRequest(t2));
}
async uploadFile({ filePath: e2, cloudPath: t2, fileType: n2 = "image", cloudPathAsRealPath: s2 = false, onUploadProgress: r2, config: i2 }) {
if ("string" !== f(t2))
throw new te({ code: "INVALID_PARAM", message: "cloudPath必须为字符串类型" });
if (!(t2 = t2.trim()))
throw new te({ code: "INVALID_PARAM", message: "cloudPath不可为空" });
if (/:\/\//.test(t2))
throw new te({ code: "INVALID_PARAM", message: "cloudPath不合法" });
const o2 = i2 && i2.envType || this.config.envType;
if (s2 && ("/" !== t2[0] && (t2 = "/" + t2), t2.indexOf("\\") > -1))
throw new te({ code: "INVALID_PARAM", message: "使用cloudPath作为路径时,cloudPath不可包含“\\”" });
const a2 = (await this.getOSSUploadOptionsFromPath({ env: o2, filename: s2 ? t2.split("/").pop() : t2, fileId: s2 ? t2 : void 0 })).result, c2 = "https://" + a2.cdnDomain + "/" + a2.ossPath, { securityToken: u2, accessKeyId: l2, signature: h2, host: d2, ossPath: p2, id: g2, policy: m2, ossCallbackUrl: y2 } = a2, _2 = { "Cache-Control": "max-age=2592000", "Content-Disposition": "attachment", OSSAccessKeyId: l2, Signature: h2, host: d2, id: g2, key: p2, policy: m2, success_action_status: 200 };
if (u2 && (_2["x-oss-security-token"] = u2), y2) {
const e3 = JSON.stringify({ callbackUrl: y2, callbackBody: JSON.stringify({ fileId: g2, spaceId: this.config.spaceId }), callbackBodyType: "application/json" });
_2.callback = he.toBase64(e3);
}
const w2 = { url: "https://" + a2.host, formData: _2, fileName: "file", name: "file", filePath: e2, fileType: n2 };
if (await this.uploadFileToOSS(Object.assign({}, w2, { onUploadProgress: r2 })), y2)
return { success: true, filePath: e2, fileID: c2 };
if ((await this.reportOSSUpload({ id: g2 })).success)
return { success: true, filePath: e2, fileID: c2 };
throw new te({ code: "UPLOAD_FAILED", message: "文件上传失败" });
}
getTempFileURL({ fileList: e2 } = {}) {
return new Promise((t2, n2) => {
Array.isArray(e2) && 0 !== e2.length || n2(new te({ code: "INVALID_PARAM", message: "fileList的元素必须是非空的字符串" })), t2({ fileList: e2.map((e3) => ({ fileID: e3, tempFileURL: e3 })) });
});
}
async getFileInfo({ fileList: e2 } = {}) {
if (!Array.isArray(e2) || 0 === e2.length)
throw new te({ code: "INVALID_PARAM", message: "fileList的元素必须是非空的字符串" });
const t2 = { method: "serverless.file.resource.info", params: JSON.stringify({ id: e2.map((e3) => e3.split("?")[0]).join(",") }) };
return { fileList: (await this.request(this.setupRequest(t2))).result };
}
};
var pe = { init(e2) {
const t2 = new de(e2), n2 = { signInAnonymously: function() {
return t2.authorize();
}, getLoginState: function() {
return Promise.resolve(false);
} };
return t2.auth = function() {
return n2;
}, t2.customAuth = t2.auth, t2;
} };
const fe = "undefined" != typeof location && "http:" === location.protocol ? "http:" : "https:";
var ge;
!function(e2) {
e2.local = "local", e2.none = "none", e2.session = "session";
}(ge || (ge = {}));
var me = function() {
}, ye = n(function(e2, t2) {
var n2;
e2.exports = (n2 = r, function(e3) {
var t3 = n2, s2 = t3.lib, r2 = s2.WordArray, i2 = s2.Hasher, o2 = t3.algo, a2 = [], c2 = [];
!function() {
function t4(t5) {
for (var n4 = e3.sqrt(t5), s4 = 2; s4 <= n4; s4++)
if (!(t5 % s4))
return false;
return true;
}
function n3(e4) {
return 4294967296 * (e4 - (0 | e4)) | 0;
}
for (var s3 = 2, r3 = 0; r3 < 64; )
t4(s3) && (r3 < 8 && (a2[r3] = n3(e3.pow(s3, 0.5))), c2[r3] = n3(e3.pow(s3, 1 / 3)), r3++), s3++;
}();
var u2 = [], l2 = o2.SHA256 = i2.extend({ _doReset: function() {
this._hash = new r2.init(a2.slice(0));
}, _doProcessBlock: function(e4, t4) {
for (var n3 = this._hash.words, s3 = n3[0], r3 = n3[1], i3 = n3[2], o3 = n3[3], a3 = n3[4], l3 = n3[5], h2 = n3[6], d2 = n3[7], p2 = 0; p2 < 64; p2++) {
if (p2 < 16)
u2[p2] = 0 | e4[t4 + p2];
else {
var f2 = u2[p2 - 15], g2 = (f2 << 25 | f2 >>> 7) ^ (f2 << 14 | f2 >>> 18) ^ f2 >>> 3, m2 = u2[p2 - 2], y2 = (m2 << 15 | m2 >>> 17) ^ (m2 << 13 | m2 >>> 19) ^ m2 >>> 10;
u2[p2] = g2 + u2[p2 - 7] + y2 + u2[p2 - 16];
}
var _2 = s3 & r3 ^ s3 & i3 ^ r3 & i3, w2 = (s3 << 30 | s3 >>> 2) ^ (s3 << 19 | s3 >>> 13) ^ (s3 << 10 | s3 >>> 22), v2 = d2 + ((a3 << 26 | a3 >>> 6) ^ (a3 << 21 | a3 >>> 11) ^ (a3 << 7 | a3 >>> 25)) + (a3 & l3 ^ ~a3 & h2) + c2[p2] + u2[p2];
d2 = h2, h2 = l3, l3 = a3, a3 = o3 + v2 | 0, o3 = i3, i3 = r3, r3 = s3, s3 = v2 + (w2 + _2) | 0;
}
n3[0] = n3[0] + s3 | 0, n3[1] = n3[1] + r3 | 0, n3[2] = n3[2] + i3 | 0, n3[3] = n3[3] + o3 | 0, n3[4] = n3[4] + a3 | 0, n3[5] = n3[5] + l3 | 0, n3[6] = n3[6] + h2 | 0, n3[7] = n3[7] + d2 | 0;
}, _doFinalize: function() {
var t4 = this._data, n3 = t4.words, s3 = 8 * this._nDataBytes, r3 = 8 * t4.sigBytes;
return n3[r3 >>> 5] |= 128 << 24 - r3 % 32, n3[14 + (r3 + 64 >>> 9 << 4)] = e3.floor(s3 / 4294967296), n3[15 + (r3 + 64 >>> 9 << 4)] = s3, t4.sigBytes = 4 * n3.length, this._process(), this._hash;
}, clone: function() {
var e4 = i2.clone.call(this);
return e4._hash = this._hash.clone(), e4;
} });
t3.SHA256 = i2._createHelper(l2), t3.HmacSHA256 = i2._createHmacHelper(l2);
}(Math), n2.SHA256);
}), _e = ye, we = n(function(e2, t2) {
e2.exports = r.HmacSHA256;
});
const ve = () => {
let e2;
if (!Promise) {
e2 = () => {
}, e2.promise = {};
const t3 = () => {
throw new te({ message: 'Your Node runtime does support ES6 Promises. Set "global.Promise" to your preferred implementation of promises.' });
};
return Object.defineProperty(e2.promise, "then", { get: t3 }), Object.defineProperty(e2.promise, "catch", { get: t3 }), e2;
}
const t2 = new Promise((t3, n2) => {
e2 = (e3, s2) => e3 ? n2(e3) : t3(s2);
});
return e2.promise = t2, e2;
};
function Ie(e2) {
return void 0 === e2;
}
function Se(e2) {
return "[object Null]" === Object.prototype.toString.call(e2);
}
var be;
function ke(e2) {
const t2 = (n2 = e2, "[object Array]" === Object.prototype.toString.call(n2) ? e2 : [e2]);
var n2;
for (const e3 of t2) {
const { isMatch: t3, genAdapter: n3, runtime: s2 } = e3;
if (t3())
return { adapter: n3(), runtime: s2 };
}
}
!function(e2) {
e2.WEB = "web", e2.WX_MP = "wx_mp";
}(be || (be = {}));
const Ae = { adapter: null, runtime: void 0 }, Pe = ["anonymousUuidKey"];
class Te extends me {
constructor() {
super(), Ae.adapter.root.tcbObject || (Ae.adapter.root.tcbObject = {});
}
setItem(e2, t2) {
Ae.adapter.root.tcbObject[e2] = t2;
}
getItem(e2) {
return Ae.adapter.root.tcbObject[e2];
}
removeItem(e2) {
delete Ae.adapter.root.tcbObject[e2];
}
clear() {
delete Ae.adapter.root.tcbObject;
}
}
function Ce(e2, t2) {
switch (e2) {
case "local":
return t2.localStorage || new Te();
case "none":
return new Te();
default:
return t2.sessionStorage || new Te();
}
}
class xe {
constructor(e2) {
if (!this._storage) {
this._persistence = Ae.adapter.primaryStorage || e2.persistence, this._storage = Ce(this._persistence, Ae.adapter);
const t2 = `access_token_${e2.env}`, n2 = `access_token_expire_${e2.env}`, s2 = `refresh_token_${e2.env}`, r2 = `anonymous_uuid_${e2.env}`, i2 = `login_type_${e2.env}`, o2 = `user_info_${e2.env}`;
this.keys = { accessTokenKey: t2, accessTokenExpireKey: n2, refreshTokenKey: s2, anonymousUuidKey: r2, loginTypeKey: i2, userInfoKey: o2 };
}
}
updatePersistence(e2) {
if (e2 === this._persistence)
return;
const t2 = "local" === this._persistence;
this._persistence = e2;
const n2 = Ce(e2, Ae.adapter);
for (const e3 in this.keys) {
const s2 = this.keys[e3];
if (t2 && Pe.includes(e3))
continue;
const r2 = this._storage.getItem(s2);
Ie(r2) || Se(r2) || (n2.setItem(s2, r2), this._storage.removeItem(s2));
}
this._storage = n2;
}
setStore(e2, t2, n2) {
if (!this._storage)
return;
const s2 = { version: n2 || "localCachev1", content: t2 }, r2 = JSON.stringify(s2);
try {
this._storage.setItem(e2, r2);
} catch (e3) {
throw e3;
}
}
getStore(e2, t2) {
try {
if (!this._storage)
return;
} catch (e3) {
return "";
}
t2 = t2 || "localCachev1";
const n2 = this._storage.getItem(e2);
if (!n2)
return "";
if (n2.indexOf(t2) >= 0) {
return JSON.parse(n2).content;
}
return "";
}
removeStore(e2) {
this._storage.removeItem(e2);
}
}
const Oe = {}, Ee = {};
function Le(e2) {
return Oe[e2];
}
class Re {
constructor(e2, t2) {
this.data = t2 || null, this.name = e2;
}
}
class Ue extends Re {
constructor(e2, t2) {
super("error", { error: e2, data: t2 }), this.error = e2;
}
}
const Ne = new class {
constructor() {
this._listeners = {};
}
on(e2, t2) {
return function(e3, t3, n2) {
n2[e3] = n2[e3] || [], n2[e3].push(t3);
}(e2, t2, this._listeners), this;
}
off(e2, t2) {
return function(e3, t3, n2) {
if (n2 && n2[e3]) {
const s2 = n2[e3].indexOf(t3);
-1 !== s2 && n2[e3].splice(s2, 1);
}
}(e2, t2, this._listeners), this;
}
fire(e2, t2) {
if (e2 instanceof Ue)
return console.error(e2.error), this;
const n2 = "string" == typeof e2 ? new Re(e2, t2 || {}) : e2;
const s2 = n2.name;
if (this._listens(s2)) {
n2.target = this;
const e3 = this._listeners[s2] ? [...this._listeners[s2]] : [];
for (const t3 of e3)
t3.call(this, n2);
}
return this;
}
_listens(e2) {
return this._listeners[e2] && this._listeners[e2].length > 0;
}
}();
function De(e2, t2) {
Ne.on(e2, t2);
}
function Me(e2, t2 = {}) {
Ne.fire(e2, t2);
}
function qe(e2, t2) {
Ne.off(e2, t2);
}
const Fe = "loginStateChanged", Ke = "loginStateExpire", je = "loginTypeChanged", Be = "anonymousConverted", $e = "refreshAccessToken";
var We;
!function(e2) {
e2.ANONYMOUS = "ANONYMOUS", e2.WECHAT = "WECHAT", e2.WECHAT_PUBLIC = "WECHAT-PUBLIC", e2.WECHAT_OPEN = "WECHAT-OPEN", e2.CUSTOM = "CUSTOM", e2.EMAIL = "EMAIL", e2.USERNAME = "USERNAME", e2.NULL = "NULL";
}(We || (We = {}));
const He = ["auth.getJwt", "auth.logout", "auth.signInWithTicket", "auth.signInAnonymously", "auth.signIn", "auth.fetchAccessTokenWithRefreshToken", "auth.signUpWithEmailAndPassword", "auth.activateEndUserMail", "auth.sendPasswordResetEmail", "auth.resetPasswordWithToken", "auth.isUsernameRegistered"], ze = { "X-SDK-Version": "1.3.5" };
function Je(e2, t2, n2) {
const s2 = e2[t2];
e2[t2] = function(t3) {
const r2 = {}, i2 = {};
n2.forEach((n3) => {
const { data: s3, headers: o3 } = n3.call(e2, t3);
Object.assign(r2, s3), Object.assign(i2, o3);
});
const o2 = t3.data;
return o2 && (() => {
var e3;
if (e3 = o2, "[object FormData]" !== Object.prototype.toString.call(e3))
t3.data = { ...o2, ...r2 };
else
for (const e4 in r2)
o2.append(e4, r2[e4]);
})(), t3.headers = { ...t3.headers || {}, ...i2 }, s2.call(e2, t3);
};
}
function Ve() {
const e2 = Math.random().toString(16).slice(2);
return { data: { seqId: e2 }, headers: { ...ze, "x-seqid": e2 } };
}
class Ge {
constructor(e2 = {}) {
var t2;
this.config = e2, this._reqClass = new Ae.adapter.reqClass({ timeout: this.config.timeout, timeoutMsg: `请求在${this.config.timeout / 1e3}s内未完成,已中断`, restrictedMethods: ["post"] }), this._cache = Le(this.config.env), this._localCache = (t2 = this.config.env, Ee[t2]), Je(this._reqClass, "post", [Ve]), Je(this._reqClass, "upload", [Ve]), Je(this._reqClass, "download", [Ve]);
}
async post(e2) {
return await this._reqClass.post(e2);
}
async upload(e2) {
return await this._reqClass.upload(e2);
}
async download(e2) {
return await this._reqClass.download(e2);
}
async refreshAccessToken() {
let e2, t2;
this._refreshAccessTokenPromise || (this._refreshAccessTokenPromise = this._refreshAccessToken());
try {
e2 = await this._refreshAccessTokenPromise;
} catch (e3) {
t2 = e3;
}
if (this._refreshAccessTokenPromise = null, this._shouldRefreshAccessTokenHook = null, t2)
throw t2;
return e2;
}
async _refreshAccessToken() {
const { accessTokenKey: e2, accessTokenExpireKey: t2, refreshTokenKey: n2, loginTypeKey: s2, anonymousUuidKey: r2 } = this._cache.keys;
this._cache.removeStore(e2), this._cache.removeStore(t2);
let i2 = this._cache.getStore(n2);
if (!i2)
throw new te({ message: "未登录CloudBase" });
const o2 = { refresh_token: i2 }, a2 = await this.request("auth.fetchAccessTokenWithRefreshToken", o2);
if (a2.data.code) {
const { code: e3 } = a2.data;
if ("SIGN_PARAM_INVALID" === e3 || "REFRESH_TOKEN_EXPIRED" === e3 || "INVALID_REFRESH_TOKEN" === e3) {
if (this._cache.getStore(s2) === We.ANONYMOUS && "INVALID_REFRESH_TOKEN" === e3) {
const e4 = this._cache.getStore(r2), t3 = this._cache.getStore(n2), s3 = await this.send("auth.signInAnonymously", { anonymous_uuid: e4, refresh_token: t3 });
return this.setRefreshToken(s3.refresh_token), this._refreshAccessToken();
}
Me(Ke), this._cache.removeStore(n2);
}
throw new te({ code: a2.data.code, message: `刷新access token失败:${a2.data.code}` });
}
if (a2.data.access_token)
return Me($e), this._cache.setStore(e2, a2.data.access_token), this._cache.setStore(t2, a2.data.access_token_expire + Date.now()), { accessToken: a2.data.access_token, accessTokenExpire: a2.data.access_token_expire };
a2.data.refresh_token && (this._cache.removeStore(n2), this._cache.setStore(n2, a2.data.refresh_token), this._refreshAccessToken());
}
async getAccessToken() {
const { accessTokenKey: e2, accessTokenExpireKey: t2, refreshTokenKey: n2 } = this._cache.keys;
if (!this._cache.getStore(n2))
throw new te({ message: "refresh token不存在,登录状态异常" });
let s2 = this._cache.getStore(e2), r2 = this._cache.getStore(t2), i2 = true;
return this._shouldRefreshAccessTokenHook && !await this._shouldRefreshAccessTokenHook(s2, r2) && (i2 = false), (!s2 || !r2 || r2 < Date.now()) && i2 ? this.refreshAccessToken() : { accessToken: s2, accessTokenExpire: r2 };
}
async request(e2, t2, n2) {
const s2 = `x-tcb-trace_${this.config.env}`;
let r2 = "application/x-www-form-urlencoded";
const i2 = { action: e2, env: this.config.env, dataVersion: "2019-08-16", ...t2 };
if (-1 === He.indexOf(e2)) {
const { refreshTokenKey: e3 } = this._cache.keys;
this._cache.getStore(e3) && (i2.access_token = (await this.getAccessToken()).accessToken);
}
let o2;
if ("storage.uploadFile" === e2) {
o2 = new FormData();
for (let e3 in o2)
o2.hasOwnProperty(e3) && void 0 !== o2[e3] && o2.append(e3, i2[e3]);
r2 = "multipart/form-data";
} else {
r2 = "application/json", o2 = {};
for (let e3 in i2)
void 0 !== i2[e3] && (o2[e3] = i2[e3]);
}
let a2 = { headers: { "content-type": r2 } };
n2 && n2.onUploadProgress && (a2.onUploadProgress = n2.onUploadProgress);
const c2 = this._localCache.getStore(s2);
c2 && (a2.headers["X-TCB-Trace"] = c2);
const { parse: u2, inQuery: l2, search: h2 } = t2;
let d2 = { env: this.config.env };
u2 && (d2.parse = true), l2 && (d2 = { ...l2, ...d2 });
let p2 = function(e3, t3, n3 = {}) {
const s3 = /\?/.test(t3);
let r3 = "";
for (let e4 in n3)
"" === r3 ? !s3 && (t3 += "?") : r3 += "&", r3 += `${e4}=${encodeURIComponent(n3[e4])}`;
return /^http(s)?\:\/\//.test(t3 += r3) ? t3 : `${e3}${t3}`;
}(fe, "//tcb-api.tencentcloudapi.com/web", d2);
h2 && (p2 += h2);
const f2 = await this.post({ url: p2, data: o2, ...a2 }), g2 = f2.header && f2.header["x-tcb-trace"];
if (g2 && this._localCache.setStore(s2, g2), 200 !== Number(f2.status) && 200 !== Number(f2.statusCode) || !f2.data)
throw new te({ code: "NETWORK_ERROR", message: "network request error" });
return f2;
}
async send(e2, t2 = {}) {
const n2 = await this.request(e2, t2, { onUploadProgress: t2.onUploadProgress });
if ("ACCESS_TOKEN_EXPIRED" === n2.data.code && -1 === He.indexOf(e2)) {
await this.refreshAccessToken();
const n3 = await this.request(e2, t2, { onUploadProgress: t2.onUploadProgress });
if (n3.data.code)
throw new te({ code: n3.data.code, message: n3.data.message });
return n3.data;
}
if (n2.data.code)
throw new te({ code: n2.data.code, message: n2.data.message });
return n2.data;
}
setRefreshToken(e2) {
const { accessTokenKey: t2, accessTokenExpireKey: n2, refreshTokenKey: s2 } = this._cache.keys;
this._cache.removeStore(t2), this._cache.removeStore(n2), this._cache.setStore(s2, e2);
}
}
const Ye = {};
function Qe(e2) {
return Ye[e2];
}
class Xe {
constructor(e2) {
this.config = e2, this._cache = Le(e2.env), this._request = Qe(e2.env);
}
setRefreshToken(e2) {
const { accessTokenKey: t2, accessTokenExpireKey: n2, refreshTokenKey: s2 } = this._cache.keys;
this._cache.removeStore(t2), this._cache.removeStore(n2), this._cache.setStore(s2, e2);
}
setAccessToken(e2, t2) {
const { accessTokenKey: n2, accessTokenExpireKey: s2 } = this._cache.keys;
this._cache.setStore(n2, e2), this._cache.setStore(s2, t2);
}
async refreshUserInfo() {
const { data: e2 } = await this._request.send("auth.getUserInfo", {});
return this.setLocalUserInfo(e2), e2;
}
setLocalUserInfo(e2) {
const { userInfoKey: t2 } = this._cache.keys;
this._cache.setStore(t2, e2);
}
}
class Ze {
constructor(e2) {
if (!e2)
throw new te({ code: "PARAM_ERROR", message: "envId is not defined" });
this._envId = e2, this._cache = Le(this._envId), this._request = Qe(this._envId), this.setUserInfo();
}
linkWithTicket(e2) {
if ("string" != typeof e2)
throw new te({ code: "PARAM_ERROR", message: "ticket must be string" });
return this._request.send("auth.linkWithTicket", { ticket: e2 });
}
linkWithRedirect(e2) {
e2.signInWithRedirect();
}
updatePassword(e2, t2) {
return this._request.send("auth.updatePassword", { oldPassword: t2, newPassword: e2 });
}
updateEmail(e2) {
return this._request.send("auth.updateEmail", { newEmail: e2 });
}
updateUsername(e2) {
if ("string" != typeof e2)
throw new te({ code: "PARAM_ERROR", message: "username must be a string" });
return this._request.send("auth.updateUsername", { username: e2 });
}
async getLinkedUidList() {
const { data: e2 } = await this._request.send("auth.getLinkedUidList", {});
let t2 = false;
const { users: n2 } = e2;
return n2.forEach((e3) => {
e3.wxOpenId && e3.wxPublicId && (t2 = true);
}), { users: n2, hasPrimaryUid: t2 };
}
setPrimaryUid(e2) {
return this._request.send("auth.setPrimaryUid", { uid: e2 });
}
unlink(e2) {
return this._request.send("auth.unlink", { platform: e2 });
}
async update(e2) {
const { nickName: t2, gender: n2, avatarUrl: s2, province: r2, country: i2, city: o2 } = e2, { data: a2 } = await this._request.send("auth.updateUserInfo", { nickName: t2, gender: n2, avatarUrl: s2, province: r2, country: i2, city: o2 });
this.setLocalUserInfo(a2);
}
async refresh() {
const { data: e2 } = await this._request.send("auth.getUserInfo", {});
return this.setLocalUserInfo(e2), e2;
}
setUserInfo() {
const { userInfoKey: e2 } = this._cache.keys, t2 = this._cache.getStore(e2);
["uid", "loginType", "openid", "wxOpenId", "wxPublicId", "unionId", "qqMiniOpenId", "email", "hasPassword", "customUserId", "nickName", "gender", "avatarUrl"].forEach((e3) => {
this[e3] = t2[e3];
}), this.location = { country: t2.country, province: t2.province, city: t2.city };
}
setLocalUserInfo(e2) {
const { userInfoKey: t2 } = this._cache.keys;
this._cache.setStore(t2, e2), this.setUserInfo();
}
}
class et {
constructor(e2) {
if (!e2)
throw new te({ code: "PARAM_ERROR", message: "envId is not defined" });
this._cache = Le(e2);
const { refreshTokenKey: t2, accessTokenKey: n2, accessTokenExpireKey: s2 } = this._cache.keys, r2 = this._cache.getStore(t2), i2 = this._cache.getStore(n2), o2 = this._cache.getStore(s2);
this.credential = { refreshToken: r2, accessToken: i2, accessTokenExpire: o2 }, this.user = new Ze(e2);
}
get isAnonymousAuth() {
return this.loginType === We.ANONYMOUS;
}
get isCustomAuth() {
return this.loginType === We.CUSTOM;
}
get isWeixinAuth() {
return this.loginType === We.WECHAT || this.loginType === We.WECHAT_OPEN || this.loginType === We.WECHAT_PUBLIC;
}
get loginType() {
return this._cache.getStore(this._cache.keys.loginTypeKey);
}
}
class tt extends Xe {
async signIn() {
this._cache.updatePersistence("local");
const { anonymousUuidKey: e2, refreshTokenKey: t2 } = this._cache.keys, n2 = this._cache.getStore(e2) || void 0, s2 = this._cache.getStore(t2) || void 0, r2 = await this._request.send("auth.signInAnonymously", { anonymous_uuid: n2, refresh_token: s2 });
if (r2.uuid && r2.refresh_token) {
this._setAnonymousUUID(r2.uuid), this.setRefreshToken(r2.refresh_token), await this._request.refreshAccessToken(), Me(Fe), Me(je, { env: this.config.env, loginType: We.ANONYMOUS, persistence: "local" });
const e3 = new et(this.config.env);
return await e3.user.refresh(), e3;
}
throw new te({ message: "匿名登录失败" });
}
async linkAndRetrieveDataWithTicket(e2) {
const { anonymousUuidKey: t2, refreshTokenKey: n2 } = this._cache.keys, s2 = this._cache.getStore(t2), r2 = this._cache.getStore(n2), i2 = await this._request.send("auth.linkAndRetrieveDataWithTicket", { anonymous_uuid: s2, refresh_token: r2, ticket: e2 });
if (i2.refresh_token)
return this._clearAnonymousUUID(), this.setRefreshToken(i2.refresh_token), await this._request.refreshAccessToken(), Me(Be, { env: this.config.env }), Me(je, { loginType: We.CUSTOM, persistence: "local" }), { credential: { refreshToken: i2.refresh_token } };
throw new te({ message: "匿名转化失败" });
}
_setAnonymousUUID(e2) {
const { anonymousUuidKey: t2, loginTypeKey: n2 } = this._cache.keys;
this._cache.removeStore(t2), this._cache.setStore(t2, e2), this._cache.setStore(n2, We.ANONYMOUS);
}
_clearAnonymousUUID() {
this._cache.removeStore(this._cache.keys.anonymousUuidKey);
}
}
class nt extends Xe {
async signIn(e2) {
if ("string" != typeof e2)
throw new te({ code: "PARAM_ERROR", message: "ticket must be a string" });
const { refreshTokenKey: t2 } = this._cache.keys, n2 = await this._request.send("auth.signInWithTicket", { ticket: e2, refresh_token: this._cache.getStore(t2) || "" });
if (n2.refresh_token)
return this.setRefreshToken(n2.refresh_token), await this._request.refreshAccessToken(), Me(Fe), Me(je, { env: this.config.env, loginType: We.CUSTOM, persistence: this.config.persistence }), await this.refreshUserInfo(), new et(this.config.env);
throw new te({ message: "自定义登录失败" });
}
}
class st extends Xe {
async signIn(e2, t2) {
if ("string" != typeof e2)
throw new te({ code: "PARAM_ERROR", message: "email must be a string" });
const { refreshTokenKey: n2 } = this._cache.keys, s2 = await this._request.send("auth.signIn", { loginType: "EMAIL", email: e2, password: t2, refresh_token: this._cache.getStore(n2) || "" }), { refresh_token: r2, access_token: i2, access_token_expire: o2 } = s2;
if (r2)
return this.setRefreshToken(r2), i2 && o2 ? this.setAccessToken(i2, o2) : await this._request.refreshAccessToken(), await this.refreshUserInfo(), Me(Fe), Me(je, { env: this.config.env, loginType: We.EMAIL, persistence: this.config.persistence }), new et(this.config.env);
throw s2.code ? new te({ code: s2.code, message: `邮箱登录失败: ${s2.message}` }) : new te({ message: "邮箱登录失败" });
}
async activate(e2) {
return this._request.send("auth.activateEndUserMail", { token: e2 });
}
async resetPasswordWithToken(e2, t2) {
return this._request.send("auth.resetPasswordWithToken", { token: e2, newPassword: t2 });
}
}
class rt extends Xe {
async signIn(e2, t2) {
if ("string" != typeof e2)
throw new te({ code: "PARAM_ERROR", message: "username must be a string" });
"string" != typeof t2 && (t2 = "", console.warn("password is empty"));
const { refreshTokenKey: n2 } = this._cache.keys, s2 = await this._request.send("auth.signIn", { loginType: We.USERNAME, username: e2, password: t2, refresh_token: this._cache.getStore(n2) || "" }), { refresh_token: r2, access_token_expire: i2, access_token: o2 } = s2;
if (r2)
return this.setRefreshToken(r2), o2 && i2 ? this.setAccessToken(o2, i2) : await this._request.refreshAccessToken(), await this.refreshUserInfo(), Me(Fe), Me(je, { env: this.config.env, loginType: We.USERNAME, persistence: this.config.persistence }), new et(this.config.env);
throw s2.code ? new te({ code: s2.code, message: `用户名密码登录失败: ${s2.message}` }) : new te({ message: "用户名密码登录失败" });
}
}
class it {
constructor(e2) {
this.config = e2, this._cache = Le(e2.env), this._request = Qe(e2.env), this._onAnonymousConverted = this._onAnonymousConverted.bind(this), this._onLoginTypeChanged = this._onLoginTypeChanged.bind(this), De(je, this._onLoginTypeChanged);
}
get currentUser() {
const e2 = this.hasLoginState();
return e2 && e2.user || null;
}
get loginType() {
return this._cache.getStore(this._cache.keys.loginTypeKey);
}
anonymousAuthProvider() {
return new tt(this.config);
}
customAuthProvider() {
return new nt(this.config);
}
emailAuthProvider() {
return new st(this.config);
}
usernameAuthProvider() {
return new rt(this.config);
}
async signInAnonymously() {
return new tt(this.config).signIn();
}
async signInWithEmailAndPassword(e2, t2) {
return new st(this.config).signIn(e2, t2);
}
signInWithUsernameAndPassword(e2, t2) {
return new rt(this.config).signIn(e2, t2);
}
async linkAndRetrieveDataWithTicket(e2) {
this._anonymousAuthProvider || (this._anonymousAuthProvider = new tt(this.config)), De(Be, this._onAnonymousConverted);
return await this._anonymousAuthProvider.linkAndRetrieveDataWithTicket(e2);
}
async signOut() {
if (this.loginType === We.ANONYMOUS)
throw new te({ message: "匿名用户不支持登出操作" });
const { refreshTokenKey: e2, accessTokenKey: t2, accessTokenExpireKey: n2 } = this._cache.keys, s2 = this._cache.getStore(e2);
if (!s2)
return;
const r2 = await this._request.send("auth.logout", { refresh_token: s2 });
return this._cache.removeStore(e2), this._cache.removeStore(t2), this._cache.removeStore(n2), Me(Fe), Me(je, { env: this.config.env, loginType: We.NULL, persistence: this.config.persistence }), r2;
}
async signUpWithEmailAndPassword(e2, t2) {
return this._request.send("auth.signUpWithEmailAndPassword", { email: e2, password: t2 });
}
async sendPasswordResetEmail(e2) {
return this._request.send("auth.sendPasswordResetEmail", { email: e2 });
}
onLoginStateChanged(e2) {
De(Fe, () => {
const t3 = this.hasLoginState();
e2.call(this, t3);
});
const t2 = this.hasLoginState();
e2.call(this, t2);
}
onLoginStateExpired(e2) {
De(Ke, e2.bind(this));
}
onAccessTokenRefreshed(e2) {
De($e, e2.bind(this));
}
onAnonymousConverted(e2) {
De(Be, e2.bind(this));
}
onLoginTypeChanged(e2) {
De(je, () => {
const t2 = this.hasLoginState();
e2.call(this, t2);
});
}
async getAccessToken() {
return { accessToken: (await this._request.getAccessToken()).accessToken, env: this.config.env };
}
hasLoginState() {
const { refreshTokenKey: e2 } = this._cache.keys;
return this._cache.getStore(e2) ? new et(this.config.env) : null;
}
async isUsernameRegistered(e2) {
if ("string" != typeof e2)
throw new te({ code: "PARAM_ERROR", message: "username must be a string" });
const { data: t2 } = await this._request.send("auth.isUsernameRegistered", { username: e2 });
return t2 && t2.isRegistered;
}
getLoginState() {
return Promise.resolve(this.hasLoginState());
}
async signInWithTicket(e2) {
return new nt(this.config).signIn(e2);
}
shouldRefreshAccessToken(e2) {
this._request._shouldRefreshAccessTokenHook = e2.bind(this);
}
getUserInfo() {
return this._request.send("auth.getUserInfo", {}).then((e2) => e2.code ? e2 : { ...e2.data, requestId: e2.seqId });
}
getAuthHeader() {
const { refreshTokenKey: e2, accessTokenKey: t2 } = this._cache.keys, n2 = this._cache.getStore(e2);
return { "x-cloudbase-credentials": this._cache.getStore(t2) + "/@@/" + n2 };
}
_onAnonymousConverted(e2) {
const { env: t2 } = e2.data;
t2 === this.config.env && this._cache.updatePersistence(this.config.persistence);
}
_onLoginTypeChanged(e2) {
const { loginType: t2, persistence: n2, env: s2 } = e2.data;
s2 === this.config.env && (this._cache.updatePersistence(n2), this._cache.setStore(this._cache.keys.loginTypeKey, t2));
}
}
const ot = function(e2, t2) {
t2 = t2 || ve();
const n2 = Qe(this.config.env), { cloudPath: s2, filePath: r2, onUploadProgress: i2, fileType: o2 = "image" } = e2;
return n2.send("storage.getUploadMetadata", { path: s2 }).then((e3) => {
const { data: { url: a2, authorization: c2, token: u2, fileId: l2, cosFileId: h2 }, requestId: d2 } = e3, p2 = { key: s2, signature: c2, "x-cos-meta-fileid": h2, success_action_status: "201", "x-cos-security-token": u2 };
n2.upload({ url: a2, data: p2, file: r2, name: s2, fileType: o2, onUploadProgress: i2 }).then((e4) => {
201 === e4.statusCode ? t2(null, { fileID: l2, requestId: d2 }) : t2(new te({ code: "STORAGE_REQUEST_FAIL", message: `STORAGE_REQUEST_FAIL: ${e4.data}` }));
}).catch((e4) => {
t2(e4);
});
}).catch((e3) => {
t2(e3);
}), t2.promise;
}, at = function(e2, t2) {
t2 = t2 || ve();
const n2 = Qe(this.config.env), { cloudPath: s2 } = e2;
return n2.send("storage.getUploadMetadata", { path: s2 }).then((e3) => {
t2(null, e3);
}).catch((e3) => {
t2(e3);
}), t2.promise;
}, ct = function({ fileList: e2 }, t2) {
if (t2 = t2 || ve(), !e2 || !Array.isArray(e2))
return { code: "INVALID_PARAM", message: "fileList必须是非空的数组" };
for (let t3 of e2)
if (!t3 || "string" != typeof t3)
return { code: "INVALID_PARAM", message: "fileList的元素必须是非空的字符串" };
const n2 = { fileid_list: e2 };
return Qe(this.config.env).send("storage.batchDeleteFile", n2).then((e3) => {
e3.code ? t2(null, e3) : t2(null, { fileList: e3.data.delete_list, requestId: e3.requestId });
}).catch((e3) => {
t2(e3);
}), t2.promise;
}, ut = function({ fileList: e2 }, t2) {
t2 = t2 || ve(), e2 && Array.isArray(e2) || t2(null, { code: "INVALID_PARAM", message: "fileList必须是非空的数组" });
let n2 = [];
for (let s3 of e2)
"object" == typeof s3 ? (s3.hasOwnProperty("fileID") && s3.hasOwnProperty("maxAge") || t2(null, { code: "INVALID_PARAM", message: "fileList的元素必须是包含fileID和maxAge的对象" }), n2.push({ fileid: s3.fileID, max_age: s3.maxAge })) : "string" == typeof s3 ? n2.push({ fileid: s3 }) : t2(null, { code: "INVALID_PARAM", message: "fileList的元素必须是字符串" });
const s2 = { file_list: n2 };
return Qe(this.config.env).send("storage.batchGetDownloadUrl", s2).then((e3) => {
e3.code ? t2(null, e3) : t2(null, { fileList: e3.data.download_list, requestId: e3.requestId });
}).catch((e3) => {
t2(e3);
}), t2.promise;
}, lt = async function({ fileID: e2 }, t2) {
const n2 = (await ut.call(this, { fileList: [{ fileID: e2, maxAge: 600 }] })).fileList[0];
if ("SUCCESS" !== n2.code)
return t2 ? t2(n2) : new Promise((e3) => {
e3(n2);
});
const s2 = Qe(this.config.env);
let r2 = n2.download_url;
if (r2 = encodeURI(r2), !t2)
return s2.download({ url: r2 });
t2(await s2.download({ url: r2 }));
}, ht = function({ name: e2, data: t2, query: n2, parse: s2, search: r2 }, i2) {
const o2 = i2 || ve();
let a2;
try {
a2 = t2 ? JSON.stringify(t2) : "";
} catch (e3) {
return Promise.reject(e3);
}
if (!e2)
return Promise.reject(new te({ code: "PARAM_ERROR", message: "函数名不能为空" }));
const c2 = { inQuery: n2, parse: s2, search: r2, function_name: e2, request_data: a2 };
return Qe(this.config.env).send("functions.invokeFunction", c2).then((e3) => {
if (e3.code)
o2(null, e3);
else {
let t3 = e3.data.response_data;
if (s2)
o2(null, { result: t3, requestId: e3.requestId });
else
try {
t3 = JSON.parse(e3.data.response_data), o2(null, { result: t3, requestId: e3.requestId });
} catch (e4) {
o2(new te({ message: "response data must be json" }));
}
}
return o2.promise;
}).catch((e3) => {
o2(e3);
}), o2.promise;
}, dt = { timeout: 15e3, persistence: "session" }, pt = {};
class ft {
constructor(e2) {
this.config = e2 || this.config, this.authObj = void 0;
}
init(e2) {
switch (Ae.adapter || (this.requestClient = new Ae.adapter.reqClass({ timeout: e2.timeout || 5e3, timeoutMsg: `请求在${(e2.timeout || 5e3) / 1e3}s内未完成,已中断` })), this.config = { ...dt, ...e2 }, true) {
case this.config.timeout > 6e5:
console.warn("timeout大于可配置上限[10分钟],已重置为上限数值"), this.config.timeout = 6e5;
break;
case this.config.timeout < 100:
console.warn("timeout小于可配置下限[100ms],已重置为下限数值"), this.config.timeout = 100;
}
return new ft(this.config);
}
auth({ persistence: e2 } = {}) {
if (this.authObj)
return this.authObj;
const t2 = e2 || Ae.adapter.primaryStorage || dt.persistence;
var n2;
return t2 !== this.config.persistence && (this.config.persistence = t2), function(e3) {
const { env: t3 } = e3;
Oe[t3] = new xe(e3), Ee[t3] = new xe({ ...e3, persistence: "local" });
}(this.config), n2 = this.config, Ye[n2.env] = new Ge(n2), this.authObj = new it(this.config), this.authObj;
}
on(e2, t2) {
return De.apply(this, [e2, t2]);
}
off(e2, t2) {
return qe.apply(this, [e2, t2]);
}
callFunction(e2, t2) {
return ht.apply(this, [e2, t2]);
}
deleteFile(e2, t2) {
return ct.apply(this, [e2, t2]);
}
getTempFileURL(e2, t2) {
return ut.apply(this, [e2, t2]);
}
downloadFile(e2, t2) {
return lt.apply(this, [e2, t2]);
}
uploadFile(e2, t2) {
return ot.apply(this, [e2, t2]);
}
getUploadMetadata(e2, t2) {
return at.apply(this, [e2, t2]);
}
registerExtension(e2) {
pt[e2.name] = e2;
}
async invokeExtension(e2, t2) {
const n2 = pt[e2];
if (!n2)
throw new te({ message: `扩展${e2} 必须先注册` });
return await n2.invoke(t2, this);
}
useAdapters(e2) {
const { adapter: t2, runtime: n2 } = ke(e2) || {};
t2 && (Ae.adapter = t2), n2 && (Ae.runtime = n2);
}
}
var gt = new ft();
function mt(e2, t2, n2) {
void 0 === n2 && (n2 = {});
var s2 = /\?/.test(t2), r2 = "";
for (var i2 in n2)
"" === r2 ? !s2 && (t2 += "?") : r2 += "&", r2 += i2 + "=" + encodeURIComponent(n2[i2]);
return /^http(s)?:\/\//.test(t2 += r2) ? t2 : "" + e2 + t2;
}
class yt {
post(e2) {
const { url: t2, data: n2, headers: s2 } = e2;
return new Promise((e3, r2) => {
ne.request({ url: mt("https:", t2), data: n2, method: "POST", header: s2, success(t3) {
e3(t3);
}, fail(e4) {
r2(e4);
} });
});
}
upload(e2) {
return new Promise((t2, n2) => {
const { url: s2, file: r2, data: i2, headers: o2, fileType: a2 } = e2, c2 = ne.uploadFile({ url: mt("https:", s2), name: "file", formData: Object.assign({}, i2), filePath: r2, fileType: a2, header: o2, success(e3) {
const n3 = { statusCode: e3.statusCode, data: e3.data || {} };
200 === e3.statusCode && i2.success_action_status && (n3.statusCode = parseInt(i2.success_action_status, 10)), t2(n3);
}, fail(e3) {
n2(new Error(e3.errMsg || "uploadFile:fail"));
} });
"function" == typeof e2.onUploadProgress && c2 && "function" == typeof c2.onProgressUpdate && c2.onProgressUpdate((t3) => {
e2.onUploadProgress({ loaded: t3.totalBytesSent, total: t3.totalBytesExpectedToSend });
});
});
}
}
const _t = { setItem(e2, t2) {
ne.setStorageSync(e2, t2);
}, getItem: (e2) => ne.getStorageSync(e2), removeItem(e2) {
ne.removeStorageSync(e2);
}, clear() {
ne.clearStorageSync();
} };
var wt = { genAdapter: function() {
return { root: {}, reqClass: yt, localStorage: _t, primaryStorage: "local" };
}, isMatch: function() {
return true;
}, runtime: "uni_app" };
gt.useAdapters(wt);
const vt = gt, It = vt.init;
vt.init = function(e2) {
e2.env = e2.spaceId;
const t2 = It.call(this, e2);
t2.config.provider = "tencent", t2.config.spaceId = e2.spaceId;
const n2 = t2.auth;
return t2.auth = function(e3) {
const t3 = n2.call(this, e3);
return ["linkAndRetrieveDataWithTicket", "signInAnonymously", "signOut", "getAccessToken", "getLoginState", "signInWithTicket", "getUserInfo"].forEach((e4) => {
var n3;
t3[e4] = (n3 = t3[e4], function(e5) {
e5 = e5 || {};
const { success: t4, fail: s2, complete: r2 } = ee(e5);
if (!(t4 || s2 || r2))
return n3.call(this, e5);
n3.call(this, e5).then((e6) => {
t4 && t4(e6), r2 && r2(e6);
}, (e6) => {
s2 && s2(e6), r2 && r2(e6);
});
}).bind(t3);
}), t3;
}, t2.customAuth = t2.auth, t2;
};
var St = vt;
var bt = class extends de {
getAccessToken() {
return new Promise((e2, t2) => {
const n2 = "Anonymous_Access_token";
this.setAccessToken(n2), e2(n2);
});
}
setupRequest(e2, t2) {
const n2 = Object.assign({}, e2, { spaceId: this.config.spaceId, timestamp: Date.now() }), s2 = { "Content-Type": "application/json" };
"auth" !== t2 && (n2.token = this.accessToken, s2["x-basement-token"] = this.accessToken), s2["x-serverless-sign"] = he.sign(n2, this.config.clientSecret);
const r2 = le();
s2["x-client-info"] = encodeURIComponent(JSON.stringify(r2));
const { token: i2 } = re();
return s2["x-client-token"] = i2, { url: this.config.requestUrl, method: "POST", data: n2, dataType: "json", header: JSON.parse(JSON.stringify(s2)) };
}
uploadFileToOSS({ url: e2, formData: t2, name: n2, filePath: s2, fileType: r2, onUploadProgress: i2 }) {
return new Promise((o2, a2) => {
const c2 = this.adapter.uploadFile({ url: e2, formData: t2, name: n2, filePath: s2, fileType: r2, success(e3) {
e3 && e3.statusCode < 400 ? o2(e3) : a2(new te({ code: "UPLOAD_FAILED", message: "文件上传失败" }));
}, fail(e3) {
a2(new te({ code: e3.code || "UPLOAD_FAILED", message: e3.message || e3.errMsg || "文件上传失败" }));
} });
"function" == typeof i2 && c2 && "function" == typeof c2.onProgressUpdate && c2.onProgressUpdate((e3) => {
i2({ loaded: e3.totalBytesSent, total: e3.totalBytesExpectedToSend });
});
});
}
uploadFile({ filePath: e2, cloudPath: t2, fileType: n2 = "image", onUploadProgress: s2 }) {
if (!t2)
throw new te({ code: "CLOUDPATH_REQUIRED", message: "cloudPath不可为空" });
let r2;
return this.getOSSUploadOptionsFromPath({ cloudPath: t2 }).then((t3) => {
const { url: i2, formData: o2, name: a2 } = t3.result;
r2 = t3.result.fileUrl;
const c2 = { url: i2, formData: o2, name: a2, filePath: e2, fileType: n2 };
return this.uploadFileToOSS(Object.assign({}, c2, { onUploadProgress: s2 }));
}).then(() => this.reportOSSUpload({ cloudPath: t2 })).then((t3) => new Promise((n3, s3) => {
t3.success ? n3({ success: true, filePath: e2, fileID: r2 }) : s3(new te({ code: "UPLOAD_FAILED", message: "文件上传失败" }));
}));
}
deleteFile({ fileList: e2 }) {
const t2 = { method: "serverless.file.resource.delete", params: JSON.stringify({ fileList: e2 }) };
return this.request(this.setupRequest(t2)).then((e3) => {
if (e3.success)
return e3.result;
throw new te({ code: "DELETE_FILE_FAILED", message: "删除文件失败" });
});
}
getTempFileURL({ fileList: e2, maxAge: t2 } = {}) {
if (!Array.isArray(e2) || 0 === e2.length)
throw new te({ code: "INVALID_PARAM", message: "fileList的元素必须是非空的字符串" });
const n2 = { method: "serverless.file.resource.getTempFileURL", params: JSON.stringify({ fileList: e2, maxAge: t2 }) };
return this.request(this.setupRequest(n2)).then((e3) => {
if (e3.success)
return { fileList: e3.result.fileList.map((e4) => ({ fileID: e4.fileID, tempFileURL: e4.tempFileURL })) };
throw new te({ code: "GET_TEMP_FILE_URL_FAILED", message: "获取临时文件链接失败" });
});
}
};
var kt = { init(e2) {
const t2 = new bt(e2), n2 = { signInAnonymously: function() {
return t2.authorize();
}, getLoginState: function() {
return Promise.resolve(false);
} };
return t2.auth = function() {
return n2;
}, t2.customAuth = t2.auth, t2;
} }, At = n(function(e2, t2) {
e2.exports = r.enc.Hex;
});
function Pt(e2 = "", t2 = {}) {
const { data: n2, functionName: s2, method: r2, headers: i2, signHeaderKeys: o2 = [], config: a2 } = t2, c2 = Date.now(), u2 = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(e3) {
var t3 = 16 * Math.random() | 0;
return ("x" === e3 ? t3 : 3 & t3 | 8).toString(16);
}), l2 = Object.assign({}, i2, { "x-from-app-id": a2.appId, "x-from-env-id": a2.envId, "x-to-env-id": a2.envId, "x-from-instance-id": c2, "x-from-function-name": s2, "x-client-timestamp": c2, "x-alipay-source": "client", "x-request-id": u2, "x-alipay-callid": u2 }), h2 = ["x-from-app-id", "x-from-env-id", "x-to-env-id", "x-from-instance-id", "x-from-function-name", "x-client-timestamp"].concat(o2), [d2 = "", p2 = ""] = e2.split("?") || [], f2 = function(e3) {
const t3 = e3.signedHeaders.join(";"), n3 = e3.signedHeaders.map((t4) => `${t4.toLowerCase()}:${e3.headers[t4]}
`).join(""), s3 = _e(e3.body).toString(At), r3 = `${e3.method.toUpperCase()}
${e3.path}
${e3.query}
${n3}
${t3}
${s3}
`, i3 = _e(r3).toString(At), o3 = `HMAC-SHA256
${e3.timestamp}
${i3}
`, a3 = we(o3, e3.secretKey).toString(At);
return `HMAC-SHA256 Credential=${e3.secretId}, SignedHeaders=${t3}, Signature=${a3}`;
}({ path: d2, query: p2, method: r2, headers: l2, timestamp: c2, body: JSON.stringify(n2), secretId: a2.secretId, secretKey: a2.secretKey, signedHeaders: h2.sort() });
return { url: `${a2.endpoint}${e2.replace(/^\//, "")}`, headers: Object.assign({}, l2, { Authorization: f2 }) };
}
function Tt({ url: e2, data: t2, method: n2 = "POST", headers: s2 = {} }) {
return new Promise((r2, i2) => {
ne.request({ url: e2, method: n2, data: t2, header: s2, dataType: "json", complete: (e3 = {}) => {
if (!e3.statusCode || e3.statusCode >= 400) {
const { errMsg: t3 } = e3.data || {};
return i2(new te({ code: "SYS_ERR", message: t3 || e3.errMsg || "request:fail" }));
}
r2({ status: e3.statusCode, data: e3.data, headers: e3.header });
} });
});
}
function Ct(e2, t2) {
const { path: n2, data: s2, method: r2 = "GET" } = e2, { url: i2, headers: o2 } = Pt(n2, { functionName: "", data: s2, method: r2, headers: { "x-alipay-cloud-mode": "oss", "x-data-api-type": "oss", "x-expire-timestamp": Date.now() + 6e4 }, signHeaderKeys: ["x-data-api-type", "x-expire-timestamp"], config: t2 });
return Tt({ url: i2, data: s2, method: r2, headers: o2 }).then((e3) => {
const t3 = e3.data || {};
if (!t3.success)
throw new te({ code: e3.code, message: e3.message, requestId: e3.trace_id });
return t3.data || {};
}).catch((e3) => {
throw new te({ code: e3.errCode, message: e3.errMsg, requestId: e3.requestId });
});
}
function xt(e2 = "") {
const t2 = e2.trim().replace(/^cloud:\/\//, ""), n2 = t2.indexOf("/");
if (n2 <= 0)
throw new te({ code: "INVALID_PARAM", message: "fileID不合法" });
const s2 = t2.substring(0, n2), r2 = t2.substring(n2 + 1);
return s2 !== this.config.envId && console.warn("file ".concat(e2, " does not belong to env ").concat(this.config.envId)), r2;
}
var Ot = class {
constructor(e2) {
["spaceId", "spaceAppId", "accessKey", "secretKey"].forEach((t3) => {
if (!Object.prototype.hasOwnProperty.call(e2, t3))
throw new Error(`${t3} required`);
});
const { spaceAppId: t2, accessKey: n2, ...s2 } = e2;
this.config = Object.assign({}, { endpoint: e2.endpoint || `https://${e2.envId}.api-hz.cloudbasefunction.cn/`, envId: e2.spaceId, appId: t2, secretId: n2 }, s2);
}
callFunction(e2) {
return function(e3, t2) {
const { name: n2, data: s2 } = e3, r2 = "POST", { url: i2, headers: o2 } = Pt("/functions/invokeFunction", { functionName: n2, data: s2, method: r2, headers: { "x-to-function-name": n2 }, signHeaderKeys: ["x-to-function-name"], config: t2 });
return Tt({ url: i2, data: s2, method: r2, headers: o2 }).then((e4) => (e4.errCode = 0, e4.success = true, e4.requestId = e4.requestID || e4.requestId, e4.result = e4.data, delete e4.requestID, delete e4.data, e4)).catch((e4) => {
throw new te({ code: e4.errCode, message: e4.errMsg, requestId: e4.requestId });
});
}(e2, this.config);
}
uploadFileToOSS({ url: e2, filePath: t2, fileType: n2, formData: s2, onUploadProgress: r2 }) {
return new Promise((i2, o2) => {
const a2 = ne.uploadFile({ url: e2, filePath: t2, fileType: n2, formData: s2, success(e3) {
e3 && e3.statusCode < 400 ? i2(e3) : o2(new te({ code: "UPLOAD_FAILED", message: "文件上传失败" }));
}, fail(e3) {
o2(new te({ code: e3.code || "UPLOAD_FAILED", message: e3.message || e3.errMsg || "文件上传失败" }));
} });
"function" == typeof r2 && a2 && "function" == typeof a2.onProgressUpdate && a2.onProgressUpdate((e3) => {
r2({ loaded: e3.totalBytesSent, total: e3.totalBytesExpectedToSend });
});
});
}
async uploadFile({ filePath: e2, cloudPath: t2 = "", fileType: n2 = "image", onUploadProgress: s2 }) {
if ("string" !== f(t2))
throw new te({ code: "INVALID_PARAM", message: "cloudPath必须为字符串类型" });
if (!(t2 = t2.trim()))
throw new te({ code: "INVALID_PARAM", message: "cloudPath不可为空" });
if (/:\/\//.test(t2))
throw new te({ code: "INVALID_PARAM", message: "cloudPath不合法" });
const r2 = await Ct({ path: "/".concat(t2.replace(/^\//, ""), "?post_url") }, this.config), { file_id: i2, upload_url: o2, form_data: a2 } = r2, c2 = a2 && a2.reduce((e3, t3) => (e3[t3.key] = t3.value, e3), {});
return this.uploadFileToOSS({ url: o2, filePath: e2, fileType: n2, formData: c2, onUploadProgress: s2 }).then(() => ({ fileID: i2 }));
}
async getTempFileURL({ fileList: e2 }) {
return new Promise((t2, n2) => {
(!e2 || e2.length < 0) && n2(new te({ errCode: "INVALID_PARAM", errMsg: "fileList不能为空数组" })), e2.length > 50 && n2(new te({ errCode: "INVALID_PARAM", errMsg: "fileList数组长度不能超过50" }));
const s2 = [];
for (const t3 of e2) {
"string" !== f(t3) && n2(new te({ errCode: "INVALID_PARAM", errMsg: "fileList的元素必须是非空的字符串" }));
const e3 = xt.call(this, t3);
s2.push({ file_id: e3, expire: 600 });
}
Ct({ path: "/?download_url", data: { file_list: s2 }, method: "POST" }, this.config).then((e3) => {
const { file_list: n3 = [] } = e3;
t2({ fileList: n3.map((e4) => ({ fileID: e4.file_id, tempFileURL: e4.download_url })) });
}).catch((e3) => n2(e3));
});
}
async deleteFile({ fileList: e2 }) {
return new Promise((t2, n2) => {
(!e2 || e2.length < 0) && n2(new te({ errCode: "INVALID_PARAM", errMsg: "fileList不能为空数组" })), e2.length > 50 && n2(new te({ errCode: "INVALID_PARAM", errMsg: "fileList数组长度不能超过50" }));
const s2 = [];
for (const t3 of e2)
"string" !== f(t3) && n2(new te({ errCode: "INVALID_PARAM", errMsg: "fileList的元素必须是非空的字符串" })), s2.push(xt.call(this, t3));
Ct({ path: "/?delete", data: { file_list: s2 }, method: "POST" }, this.config).then((e3) => {
const { file_list: n3 = [] } = e3;
t2({ fileList: n3.map((e4) => ({ fileID: e4.file_id, tempFileURL: e4.download_url })) });
}).catch((e3) => n2(e3));
});
}
};
var Et = { init: (e2) => {
e2.envId = e2.spaceId, e2.provider = "alipay";
const t2 = new Ot(e2);
return t2.auth = function() {
return { signInAnonymously: function() {
return Promise.resolve();
}, getLoginState: function() {
return Promise.resolve(true);
} };
}, t2;
} };
function Lt({ data: e2 }) {
let t2;
t2 = le();
const n2 = JSON.parse(JSON.stringify(e2 || {}));
if (Object.assign(n2, { clientInfo: t2 }), !n2.uniIdToken) {
const { token: e3 } = re();
e3 && (n2.uniIdToken = e3);
}
return n2;
}
async function Rt({ name: e2, data: t2 } = {}) {
await this.__dev__.initLocalNetwork();
const { localAddress: n2, localPort: s2 } = this.__dev__, r2 = { aliyun: "aliyun", tencent: "tcb", alipay: "alipay" }[this.config.provider], i2 = this.config.spaceId, o2 = `http://${n2}:${s2}/system/check-function`, a2 = `http://${n2}:${s2}/cloudfunctions/${e2}`;
return new Promise((t3, n3) => {
ne.request({ method: "POST", url: o2, data: { name: e2, platform: P, provider: r2, spaceId: i2 }, timeout: 3e3, success(e3) {
t3(e3);
}, fail() {
t3({ data: { code: "NETWORK_ERROR", message: "连接本地调试服务失败,请检查客户端是否和主机在同一局域网下,自动切换为已部署的云函数。" } });
} });
}).then(({ data: e3 } = {}) => {
const { code: t3, message: n3 } = e3 || {};
return { code: 0 === t3 ? 0 : t3 || "SYS_ERR", message: n3 || "SYS_ERR" };
}).then(({ code: n3, message: s3 }) => {
if (0 !== n3) {
switch (n3) {
case "MODULE_ENCRYPTED":
console.error(`此云函数(${e2})依赖加密公共模块不可本地调试,自动切换为云端已部署的云函数`);
break;
case "FUNCTION_ENCRYPTED":
console.error(`此云函数(${e2})已加密不可本地调试,自动切换为云端已部署的云函数`);
break;
case "ACTION_ENCRYPTED":
console.error(s3 || "需要访问加密的uni-clientDB-action,自动切换为云端环境");
break;
case "NETWORK_ERROR": {
const e3 = "连接本地调试服务失败,请检查客户端是否和主机在同一局域网下";
throw console.error(e3), new Error(e3);
}
case "SWITCH_TO_CLOUD":
break;
default: {
const e3 = `检测本地调试服务出现错误:${s3},请检查网络环境或重启客户端再试`;
throw console.error(e3), new Error(e3);
}
}
return this._callCloudFunction({ name: e2, data: t2 });
}
return new Promise((e3, n4) => {
const s4 = Lt.call(this, { data: t2 });
ne.request({ method: "POST", url: a2, data: { provider: r2, platform: P, param: s4 }, success: ({ statusCode: t3, data: s5 } = {}) => !t3 || t3 >= 400 ? n4(new te({ code: s5.code || "SYS_ERR", message: s5.message || "request:fail" })) : e3({ result: s5 }), fail(e4) {
n4(new te({ code: e4.code || e4.errCode || "SYS_ERR", message: e4.message || e4.errMsg || "request:fail" }));
} });
});
});
}
const Ut = [{ rule: /fc_function_not_found|FUNCTION_NOT_FOUND/, content: ",云函数[{functionName}]在云端不存在,请检查此云函数名称是否正确以及该云函数是否已上传到服务空间", mode: "append" }];
var Nt = /[\\^$.*+?()[\]{}|]/g, Dt = RegExp(Nt.source);
function Mt(e2, t2, n2) {
return e2.replace(new RegExp((s2 = t2) && Dt.test(s2) ? s2.replace(Nt, "\\$&") : s2, "g"), n2);
var s2;
}
const Ft = "request", Kt = "response", jt = "both";
const kn = { code: 2e4, message: "System error" }, An = { code: 20101, message: "Invalid client" };
function Cn(e2) {
const { errSubject: t2, subject: n2, errCode: s2, errMsg: r2, code: i2, message: o2, cause: a2 } = e2 || {};
return new te({ subject: t2 || n2 || "uni-secure-network", code: s2 || i2 || kn.code, message: r2 || o2, cause: a2 });
}
let On;
function Nn({ secretType: e2 } = {}) {
return e2 === Ft || e2 === Kt || e2 === jt;
}
function Dn({ name: e2, data: t2 = {} } = {}) {
return "DCloud-clientDB" === e2 && "encryption" === t2.redirectTo && "getAppClientKey" === t2.action;
}
function Mn({ provider: e2, spaceId: t2, functionName: n2 } = {}) {
const { appId: s2, uniPlatform: r2, osName: i2 } = ce();
let o2 = r2;
"app" === r2 && (o2 = i2);
const a2 = function({ provider: e3, spaceId: t3 } = {}) {
const n3 = A;
if (!n3)
return {};
e3 = function(e4) {
return "tencent" === e4 ? "tcb" : e4;
}(e3);
const s3 = n3.find((n4) => n4.provider === e3 && n4.spaceId === t3);
return s3 && s3.config;
}({ provider: e2, spaceId: t2 });
if (!a2 || !a2.accessControl || !a2.accessControl.enable)
return false;
const c2 = a2.accessControl.function || {}, u2 = Object.keys(c2);
if (0 === u2.length)
return true;
const l2 = function(e3, t3) {
let n3, s3, r3;
for (let i3 = 0; i3 < e3.length; i3++) {
const o3 = e3[i3];
o3 !== t3 ? "*" !== o3 ? o3.split(",").map((e4) => e4.trim()).indexOf(t3) > -1 && (s3 = o3) : r3 = o3 : n3 = o3;
}
return n3 || s3 || r3;
}(u2, n2);
if (!l2)
return false;
if ((c2[l2] || []).find((e3 = {}) => e3.appId === s2 && (e3.platform || "").toLowerCase() === o2.toLowerCase()))
return true;
throw console.error(`此应用[appId: ${s2}, platform: ${o2}]不在云端配置的允许访问的应用列表内,参考:https://uniapp.dcloud.net.cn/uniCloud/secure-network.html#verify-client`), Cn(An);
}
function qn({ functionName: e2, result: t2, logPvd: n2 }) {
if (this.__dev__.debugLog && t2 && t2.requestId) {
const s2 = JSON.stringify({ spaceId: this.config.spaceId, functionName: e2, requestId: t2.requestId });
console.log(`[${n2}-request]${s2}[/${n2}-request]`);
}
}
function Fn(e2) {
const t2 = e2.callFunction, n2 = function(n3) {
const s2 = n3.name;
n3.data = Lt.call(e2, { data: n3.data });
const r2 = { aliyun: "aliyun", tencent: "tcb", tcb: "tcb", alipay: "alipay" }[this.config.provider], i2 = Nn(n3), o2 = Dn(n3), a2 = i2 || o2;
return t2.call(this, n3).then((e3) => (e3.errCode = 0, !a2 && qn.call(this, { functionName: s2, result: e3, logPvd: r2 }), Promise.resolve(e3)), (e3) => (!a2 && qn.call(this, { functionName: s2, result: e3, logPvd: r2 }), e3 && e3.message && (e3.message = function({ message: e4 = "", extraInfo: t3 = {}, formatter: n4 = [] } = {}) {
for (let s3 = 0; s3 < n4.length; s3++) {
const { rule: r3, content: i3, mode: o3 } = n4[s3], a3 = e4.match(r3);
if (!a3)
continue;
let c2 = i3;
for (let e5 = 1; e5 < a3.length; e5++)
c2 = Mt(c2, `{$${e5}}`, a3[e5]);
for (const e5 in t3)
c2 = Mt(c2, `{${e5}}`, t3[e5]);
return "replace" === o3 ? c2 : e4 + c2;
}
return e4;
}({ message: `[${n3.name}]: ${e3.message}`, formatter: Ut, extraInfo: { functionName: s2 } })), Promise.reject(e3)));
};
e2.callFunction = function(t3) {
const { provider: s2, spaceId: r2 } = e2.config, i2 = t3.name;
let o2, a2;
if (t3.data = t3.data || {}, e2.__dev__.debugInfo && !e2.__dev__.debugInfo.forceRemote && C ? (e2._callCloudFunction || (e2._callCloudFunction = n2, e2._callLocalFunction = Rt), o2 = Rt) : o2 = n2, o2 = o2.bind(e2), Dn(t3))
a2 = n2.call(e2, t3);
else if (Nn(t3)) {
a2 = new On({ secretType: t3.secretType, uniCloudIns: e2 }).wrapEncryptDataCallFunction(n2.bind(e2))(t3);
} else if (Mn({ provider: s2, spaceId: r2, functionName: i2 })) {
a2 = new On({ secretType: t3.secretType, uniCloudIns: e2 }).wrapVerifyClientCallFunction(n2.bind(e2))(t3);
} else
a2 = o2(t3);
return Object.defineProperty(a2, "result", { get: () => (console.warn("当前返回结果为Promise类型,不可直接访问其result属性,详情请参考:https://uniapp.dcloud.net.cn/uniCloud/faq?id=promise"), {}) }), a2;
};
}
On = class {
constructor() {
throw Cn({ message: `Platform ${P} is not enabled, please check whether secure network module is enabled in your manifest.json` });
}
};
const Kn = Symbol("CLIENT_DB_INTERNAL");
function jn(e2, t2) {
return e2.then = "DoNotReturnProxyWithAFunctionNamedThen", e2._internalType = Kn, e2.inspect = null, e2.__v_raw = void 0, new Proxy(e2, { get(e3, n2, s2) {
if ("_uniClient" === n2)
return null;
if ("symbol" == typeof n2)
return e3[n2];
if (n2 in e3 || "string" != typeof n2) {
const t3 = e3[n2];
return "function" == typeof t3 ? t3.bind(e3) : t3;
}
return t2.get(e3, n2, s2);
} });
}
function Bn(e2) {
return { on: (t2, n2) => {
e2[t2] = e2[t2] || [], e2[t2].indexOf(n2) > -1 || e2[t2].push(n2);
}, off: (t2, n2) => {
e2[t2] = e2[t2] || [];
const s2 = e2[t2].indexOf(n2);
-1 !== s2 && e2[t2].splice(s2, 1);
} };
}
const $n = ["db.Geo", "db.command", "command.aggregate"];
function Wn(e2, t2) {
return $n.indexOf(`${e2}.${t2}`) > -1;
}
function Hn(e2) {
switch (f(e2 = se(e2))) {
case "array":
return e2.map((e3) => Hn(e3));
case "object":
return e2._internalType === Kn || Object.keys(e2).forEach((t2) => {
e2[t2] = Hn(e2[t2]);
}), e2;
case "regexp":
return { $regexp: { source: e2.source, flags: e2.flags } };
case "date":
return { $date: e2.toISOString() };
default:
return e2;
}
}
function zn(e2) {
return e2 && e2.content && e2.content.$method;
}
class Jn {
constructor(e2, t2, n2) {
this.content = e2, this.prevStage = t2 || null, this.udb = null, this._database = n2;
}
toJSON() {
let e2 = this;
const t2 = [e2.content];
for (; e2.prevStage; )
e2 = e2.prevStage, t2.push(e2.content);
return { $db: t2.reverse().map((e3) => ({ $method: e3.$method, $param: Hn(e3.$param) })) };
}
toString() {
return JSON.stringify(this.toJSON());
}
getAction() {
const e2 = this.toJSON().$db.find((e3) => "action" === e3.$method);
return e2 && e2.$param && e2.$param[0];
}
getCommand() {
return { $db: this.toJSON().$db.filter((e2) => "action" !== e2.$method) };
}
get isAggregate() {
let e2 = this;
for (; e2; ) {
const t2 = zn(e2), n2 = zn(e2.prevStage);
if ("aggregate" === t2 && "collection" === n2 || "pipeline" === t2)
return true;
e2 = e2.prevStage;
}
return false;
}
get isCommand() {
let e2 = this;
for (; e2; ) {
if ("command" === zn(e2))
return true;
e2 = e2.prevStage;
}
return false;
}
get isAggregateCommand() {
let e2 = this;
for (; e2; ) {
const t2 = zn(e2), n2 = zn(e2.prevStage);
if ("aggregate" === t2 && "command" === n2)
return true;
e2 = e2.prevStage;
}
return false;
}
getNextStageFn(e2) {
const t2 = this;
return function() {
return Vn({ $method: e2, $param: Hn(Array.from(arguments)) }, t2, t2._database);
};
}
get count() {
return this.isAggregate ? this.getNextStageFn("count") : function() {
return this._send("count", Array.from(arguments));
};
}
get remove() {
return this.isCommand ? this.getNextStageFn("remove") : function() {
return this._send("remove", Array.from(arguments));
};
}
get() {
return this._send("get", Array.from(arguments));
}
get add() {
return this.isCommand ? this.getNextStageFn("add") : function() {
return this._send("add", Array.from(arguments));
};
}
update() {
return this._send("update", Array.from(arguments));
}
end() {
return this._send("end", Array.from(arguments));
}
get set() {
return this.isCommand ? this.getNextStageFn("set") : function() {
throw new Error("JQL禁止使用set方法");
};
}
_send(e2, t2) {
const n2 = this.getAction(), s2 = this.getCommand();
if (s2.$db.push({ $method: e2, $param: Hn(t2) }), S) {
const e3 = s2.$db.find((e4) => "collection" === e4.$method), t3 = e3 && e3.$param;
t3 && 1 === t3.length && "string" == typeof e3.$param[0] && e3.$param[0].indexOf(",") > -1 && console.warn("检测到使用JQL语法联表查询时,未使用getTemp先过滤主表数据,在主表数据量大的情况下可能会查询缓慢。\n- 如何优化请参考此文档:https://uniapp.dcloud.net.cn/uniCloud/jql?id=lookup-with-temp \n- 如果主表数据量很小请忽略此信息,项目发行时不会出现此提示。");
}
return this._database._callCloudFunction({ action: n2, command: s2 });
}
}
function Vn(e2, t2, n2) {
return jn(new Jn(e2, t2, n2), { get(e3, t3) {
let s2 = "db";
return e3 && e3.content && (s2 = e3.content.$method), Wn(s2, t3) ? Vn({ $method: t3 }, e3, n2) : function() {
return Vn({ $method: t3, $param: Hn(Array.from(arguments)) }, e3, n2);
};
} });
}
function Gn({ path: e2, method: t2 }) {
return class {
constructor() {
this.param = Array.from(arguments);
}
toJSON() {
return { $newDb: [...e2.map((e3) => ({ $method: e3 })), { $method: t2, $param: this.param }] };
}
toString() {
return JSON.stringify(this.toJSON());
}
};
}
function Yn(e2, t2 = {}) {
return jn(new e2(t2), { get: (e3, t3) => Wn("db", t3) ? Vn({ $method: t3 }, null, e3) : function() {
return Vn({ $method: t3, $param: Hn(Array.from(arguments)) }, null, e3);
} });
}
class Qn extends class {
constructor({ uniClient: e2 = {}, isJQL: t2 = false } = {}) {
this._uniClient = e2, this._authCallBacks = {}, this._dbCallBacks = {}, e2._isDefault && (this._dbCallBacks = L("_globalUniCloudDatabaseCallback")), t2 || (this.auth = Bn(this._authCallBacks)), this._isJQL = t2, Object.assign(this, Bn(this._dbCallBacks)), this.env = jn({}, { get: (e3, t3) => ({ $env: t3 }) }), this.Geo = jn({}, { get: (e3, t3) => Gn({ path: ["Geo"], method: t3 }) }), this.serverDate = Gn({ path: [], method: "serverDate" }), this.RegExp = Gn({ path: [], method: "RegExp" });
}
getCloudEnv(e2) {
if ("string" != typeof e2 || !e2.trim())
throw new Error("getCloudEnv参数错误");
return { $env: e2.replace("$cloudEnv_", "") };
}
_callback(e2, t2) {
const n2 = this._dbCallBacks;
n2[e2] && n2[e2].forEach((e3) => {
e3(...t2);
});
}
_callbackAuth(e2, t2) {
const n2 = this._authCallBacks;
n2[e2] && n2[e2].forEach((e3) => {
e3(...t2);
});
}
multiSend() {
const e2 = Array.from(arguments), t2 = e2.map((e3) => {
const t3 = e3.getAction(), n2 = e3.getCommand();
if ("getTemp" !== n2.$db[n2.$db.length - 1].$method)
throw new Error("multiSend只支持子命令内使用getTemp");
return { action: t3, command: n2 };
});
return this._callCloudFunction({ multiCommand: t2, queryList: e2 });
}
} {
_parseResult(e2) {
return this._isJQL ? e2.result : e2;
}
_callCloudFunction({ action: e2, command: t2, multiCommand: n2, queryList: s2 }) {
function r2(e3, t3) {
if (n2 && s2)
for (let n3 = 0; n3 < s2.length; n3++) {
const r3 = s2[n3];
r3.udb && "function" == typeof r3.udb.setResult && (t3 ? r3.udb.setResult(t3) : r3.udb.setResult(e3.result.dataList[n3]));
}
}
const i2 = this, o2 = this._isJQL ? "databaseForJQL" : "database";
function a2(e3) {
return i2._callback("error", [e3]), M(q(o2, "fail"), e3).then(() => M(q(o2, "complete"), e3)).then(() => (r2(null, e3), Y(j, { type: W, content: e3 }), Promise.reject(e3)));
}
const c2 = M(q(o2, "invoke")), u2 = this._uniClient;
return c2.then(() => u2.callFunction({ name: "DCloud-clientDB", type: l, data: { action: e2, command: t2, multiCommand: n2 } })).then((e3) => {
const { code: t3, message: n3, token: s3, tokenExpired: c3, systemInfo: u3 = [] } = e3.result;
if (u3)
for (let e4 = 0; e4 < u3.length; e4++) {
const { level: t4, message: n4, detail: s4 } = u3[e4], r3 = console["warn" === t4 ? "error" : t4] || console.log;
let i3 = "[System Info]" + n4;
s4 && (i3 = `${i3}
详细信息:${s4}`), r3(i3);
}
if (t3) {
return a2(new te({ code: t3, message: n3, requestId: e3.requestId }));
}
e3.result.errCode = e3.result.errCode || e3.result.code, e3.result.errMsg = e3.result.errMsg || e3.result.message, s3 && c3 && (ie({ token: s3, tokenExpired: c3 }), this._callbackAuth("refreshToken", [{ token: s3, tokenExpired: c3 }]), this._callback("refreshToken", [{ token: s3, tokenExpired: c3 }]), Y($, { token: s3, tokenExpired: c3 }));
const l2 = [{ prop: "affectedDocs", tips: "affectedDocs不再推荐使用,请使用inserted/deleted/updated/data.length替代" }, { prop: "code", tips: "code不再推荐使用,请使用errCode替代" }, { prop: "message", tips: "message不再推荐使用,请使用errMsg替代" }];
for (let t4 = 0; t4 < l2.length; t4++) {
const { prop: n4, tips: s4 } = l2[t4];
if (n4 in e3.result) {
const t5 = e3.result[n4];
Object.defineProperty(e3.result, n4, { get: () => (console.warn(s4), t5) });
}
}
return function(e4) {
return M(q(o2, "success"), e4).then(() => M(q(o2, "complete"), e4)).then(() => {
r2(e4, null);
const t4 = i2._parseResult(e4);
return Y(j, { type: W, content: t4 }), Promise.resolve(t4);
});
}(e3);
}, (e3) => {
/fc_function_not_found|FUNCTION_NOT_FOUND/g.test(e3.message) && console.warn("clientDB未初始化,请在web控制台保存一次schema以开启clientDB");
return a2(new te({ code: e3.code || "SYSTEM_ERROR", message: e3.message, requestId: e3.requestId }));
});
}
}
const Xn = "token无效,跳转登录页面", Zn = "token过期,跳转登录页面", es = { TOKEN_INVALID_TOKEN_EXPIRED: Zn, TOKEN_INVALID_INVALID_CLIENTID: Xn, TOKEN_INVALID: Xn, TOKEN_INVALID_WRONG_TOKEN: Xn, TOKEN_INVALID_ANONYMOUS_USER: Xn }, ts = { "uni-id-token-expired": Zn, "uni-id-check-token-failed": Xn, "uni-id-token-not-exist": Xn, "uni-id-check-device-feature-failed": Xn };
function ns(e2, t2) {
let n2 = "";
return n2 = e2 ? `${e2}/${t2}` : t2, n2.replace(/^\//, "");
}
function ss(e2 = [], t2 = "") {
const n2 = [], s2 = [];
return e2.forEach((e3) => {
true === e3.needLogin ? n2.push(ns(t2, e3.path)) : false === e3.needLogin && s2.push(ns(t2, e3.path));
}), { needLoginPage: n2, notNeedLoginPage: s2 };
}
function rs(e2) {
return e2.split("?")[0].replace(/^\//, "");
}
function is() {
return function(e2) {
let t2 = e2 && e2.$page && e2.$page.fullPath || "";
return t2 ? ("/" !== t2.charAt(0) && (t2 = "/" + t2), t2) : t2;
}(function() {
const e2 = getCurrentPages();
return e2[e2.length - 1];
}());
}
function os$1() {
return rs(is());
}
function as(e2 = "", t2 = {}) {
if (!e2)
return false;
if (!(t2 && t2.list && t2.list.length))
return false;
const n2 = t2.list, s2 = rs(e2);
return n2.some((e3) => e3.pagePath === s2);
}
const cs = !!e.uniIdRouter;
const { loginPage: us, routerNeedLogin: ls, resToLogin: hs, needLoginPage: ds, notNeedLoginPage: ps, loginPageInTabBar: fs } = function({ pages: t2 = [], subPackages: n2 = [], uniIdRouter: s2 = {}, tabBar: r2 = {} } = e) {
const { loginPage: i2, needLogin: o2 = [], resToLogin: a2 = true } = s2, { needLoginPage: c2, notNeedLoginPage: u2 } = ss(t2), { needLoginPage: l2, notNeedLoginPage: h2 } = function(e2 = []) {
const t3 = [], n3 = [];
return e2.forEach((e3) => {
const { root: s3, pages: r3 = [] } = e3, { needLoginPage: i3, notNeedLoginPage: o3 } = ss(r3, s3);
t3.push(...i3), n3.push(...o3);
}), { needLoginPage: t3, notNeedLoginPage: n3 };
}(n2);
return { loginPage: i2, routerNeedLogin: o2, resToLogin: a2, needLoginPage: [...c2, ...l2], notNeedLoginPage: [...u2, ...h2], loginPageInTabBar: as(i2, r2) };
}();
if (ds.indexOf(us) > -1)
throw new Error(`Login page [${us}] should not be "needLogin", please check your pages.json`);
function gs(e2) {
const t2 = os$1();
if ("/" === e2.charAt(0))
return e2;
const [n2, s2] = e2.split("?"), r2 = n2.replace(/^\//, "").split("/"), i2 = t2.split("/");
i2.pop();
for (let e3 = 0; e3 < r2.length; e3++) {
const t3 = r2[e3];
".." === t3 ? i2.pop() : "." !== t3 && i2.push(t3);
}
return "" === i2[0] && i2.shift(), "/" + i2.join("/") + (s2 ? "?" + s2 : "");
}
function ms(e2) {
const t2 = rs(gs(e2));
return !(ps.indexOf(t2) > -1) && (ds.indexOf(t2) > -1 || ls.some((t3) => function(e3, t4) {
return new RegExp(t4).test(e3);
}(e2, t3)));
}
function ys({ redirect: e2 }) {
const t2 = rs(e2), n2 = rs(us);
return os$1() !== n2 && t2 !== n2;
}
function _s({ api: e2, redirect: t2 } = {}) {
if (!t2 || !ys({ redirect: t2 }))
return;
const n2 = function(e3, t3) {
return "/" !== e3.charAt(0) && (e3 = "/" + e3), t3 ? e3.indexOf("?") > -1 ? e3 + `&uniIdRedirectUrl=${encodeURIComponent(t3)}` : e3 + `?uniIdRedirectUrl=${encodeURIComponent(t3)}` : e3;
}(us, t2);
fs ? "navigateTo" !== e2 && "redirectTo" !== e2 || (e2 = "switchTab") : "switchTab" === e2 && (e2 = "navigateTo");
const s2 = { navigateTo: uni.navigateTo, redirectTo: uni.redirectTo, switchTab: uni.switchTab, reLaunch: uni.reLaunch };
setTimeout(() => {
s2[e2]({ url: n2 });
});
}
function ws({ url: e2 } = {}) {
const t2 = { abortLoginPageJump: false, autoToLoginPage: false }, n2 = function() {
const { token: e3, tokenExpired: t3 } = re();
let n3;
if (e3) {
if (t3 < Date.now()) {
const e4 = "uni-id-token-expired";
n3 = { errCode: e4, errMsg: ts[e4] };
}
} else {
const e4 = "uni-id-check-token-failed";
n3 = { errCode: e4, errMsg: ts[e4] };
}
return n3;
}();
if (ms(e2) && n2) {
n2.uniIdRedirectUrl = e2;
if (J(B).length > 0)
return setTimeout(() => {
Y(B, n2);
}, 0), t2.abortLoginPageJump = true, t2;
t2.autoToLoginPage = true;
}
return t2;
}
function vs() {
!function() {
const e3 = is(), { abortLoginPageJump: t2, autoToLoginPage: n2 } = ws({ url: e3 });
t2 || n2 && _s({ api: "redirectTo", redirect: e3 });
}();
const e2 = ["navigateTo", "redirectTo", "reLaunch", "switchTab"];
for (let t2 = 0; t2 < e2.length; t2++) {
const n2 = e2[t2];
uni.addInterceptor(n2, { invoke(e3) {
const { abortLoginPageJump: t3, autoToLoginPage: s2 } = ws({ url: e3.url });
return t3 ? e3 : s2 ? (_s({ api: n2, redirect: gs(e3.url) }), false) : e3;
} });
}
}
function Is() {
this.onResponse((e2) => {
const { type: t2, content: n2 } = e2;
let s2 = false;
switch (t2) {
case "cloudobject":
s2 = function(e3) {
if ("object" != typeof e3)
return false;
const { errCode: t3 } = e3 || {};
return t3 in ts;
}(n2);
break;
case "clientdb":
s2 = function(e3) {
if ("object" != typeof e3)
return false;
const { errCode: t3 } = e3 || {};
return t3 in es;
}(n2);
}
s2 && function(e3 = {}) {
const t3 = J(B);
Z().then(() => {
const n3 = is();
if (n3 && ys({ redirect: n3 }))
return t3.length > 0 ? Y(B, Object.assign({ uniIdRedirectUrl: n3 }, e3)) : void (us && _s({ api: "navigateTo", redirect: n3 }));
});
}(n2);
});
}
function Ss(e2) {
!function(e3) {
e3.onResponse = function(e4) {
V(j, e4);
}, e3.offResponse = function(e4) {
G(j, e4);
};
}(e2), function(e3) {
e3.onNeedLogin = function(e4) {
V(B, e4);
}, e3.offNeedLogin = function(e4) {
G(B, e4);
}, cs && (L("_globalUniCloudStatus").needLoginInit || (L("_globalUniCloudStatus").needLoginInit = true, Z().then(() => {
vs.call(e3);
}), hs && Is.call(e3)));
}(e2), function(e3) {
e3.onRefreshToken = function(e4) {
V($, e4);
}, e3.offRefreshToken = function(e4) {
G($, e4);
};
}(e2);
}
let bs;
const ks = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", As = /^(?:[A-Za-z\d+/]{4})*?(?:[A-Za-z\d+/]{2}(?:==)?|[A-Za-z\d+/]{3}=?)?$/;
function Ps() {
const e2 = re().token || "", t2 = e2.split(".");
if (!e2 || 3 !== t2.length)
return { uid: null, role: [], permission: [], tokenExpired: 0 };
let n2;
try {
n2 = JSON.parse((s2 = t2[1], decodeURIComponent(bs(s2).split("").map(function(e3) {
return "%" + ("00" + e3.charCodeAt(0).toString(16)).slice(-2);
}).join(""))));
} catch (e3) {
throw new Error("获取当前用户信息出错,详细错误信息为:" + e3.message);
}
var s2;
return n2.tokenExpired = 1e3 * n2.exp, delete n2.exp, delete n2.iat, n2;
}
bs = "function" != typeof atob ? function(e2) {
if (e2 = String(e2).replace(/[\t\n\f\r ]+/g, ""), !As.test(e2))
throw new Error("Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.");
var t2;
e2 += "==".slice(2 - (3 & e2.length));
for (var n2, s2, r2 = "", i2 = 0; i2 < e2.length; )
t2 = ks.indexOf(e2.charAt(i2++)) << 18 | ks.indexOf(e2.charAt(i2++)) << 12 | (n2 = ks.indexOf(e2.charAt(i2++))) << 6 | (s2 = ks.indexOf(e2.charAt(i2++))), r2 += 64 === n2 ? String.fromCharCode(t2 >> 16 & 255) : 64 === s2 ? String.fromCharCode(t2 >> 16 & 255, t2 >> 8 & 255) : String.fromCharCode(t2 >> 16 & 255, t2 >> 8 & 255, 255 & t2);
return r2;
} : atob;
var Ts = n(function(e2, t2) {
Object.defineProperty(t2, "__esModule", { value: true });
const n2 = "chooseAndUploadFile:ok", s2 = "chooseAndUploadFile:fail";
function r2(e3, t3) {
return e3.tempFiles.forEach((e4, n3) => {
e4.name || (e4.name = e4.path.substring(e4.path.lastIndexOf("/") + 1)), t3 && (e4.fileType = t3), e4.cloudPath = Date.now() + "_" + n3 + e4.name.substring(e4.name.lastIndexOf("."));
}), e3.tempFilePaths || (e3.tempFilePaths = e3.tempFiles.map((e4) => e4.path)), e3;
}
function i2(e3, t3, { onChooseFile: s3, onUploadProgress: r3 }) {
return t3.then((e4) => {
if (s3) {
const t4 = s3(e4);
if (void 0 !== t4)
return Promise.resolve(t4).then((t5) => void 0 === t5 ? e4 : t5);
}
return e4;
}).then((t4) => false === t4 ? { errMsg: n2, tempFilePaths: [], tempFiles: [] } : function(e4, t5, s4 = 5, r4) {
(t5 = Object.assign({}, t5)).errMsg = n2;
const i3 = t5.tempFiles, o2 = i3.length;
let a2 = 0;
return new Promise((n3) => {
for (; a2 < s4; )
c2();
function c2() {
const s5 = a2++;
if (s5 >= o2)
return void (!i3.find((e5) => !e5.url && !e5.errMsg) && n3(t5));
const u2 = i3[s5];
e4.uploadFile({ filePath: u2.path, cloudPath: u2.cloudPath, fileType: u2.fileType, cloudPathAsRealPath: u2.cloudPathAsRealPath, onUploadProgress(e5) {
e5.index = s5, e5.tempFile = u2, e5.tempFilePath = u2.path, r4 && r4(e5);
} }).then((e5) => {
u2.url = e5.fileID, s5 < o2 && c2();
}).catch((e5) => {
u2.errMsg = e5.errMsg || e5.message, s5 < o2 && c2();
});
}
});
}(e3, t4, 5, r3));
}
t2.initChooseAndUploadFile = function(e3) {
return function(t3 = { type: "all" }) {
return "image" === t3.type ? i2(e3, function(e4) {
const { count: t4, sizeType: n3, sourceType: i3 = ["album", "camera"], extension: o2 } = e4;
return new Promise((e5, a2) => {
uni.chooseImage({ count: t4, sizeType: n3, sourceType: i3, extension: o2, success(t5) {
e5(r2(t5, "image"));
}, fail(e6) {
a2({ errMsg: e6.errMsg.replace("chooseImage:fail", s2) });
} });
});
}(t3), t3) : "video" === t3.type ? i2(e3, function(e4) {
const { camera: t4, compressed: n3, maxDuration: i3, sourceType: o2 = ["album", "camera"], extension: a2 } = e4;
return new Promise((e5, c2) => {
uni.chooseVideo({ camera: t4, compressed: n3, maxDuration: i3, sourceType: o2, extension: a2, success(t5) {
const { tempFilePath: n4, duration: s3, size: i4, height: o3, width: a3 } = t5;
e5(r2({ errMsg: "chooseVideo:ok", tempFilePaths: [n4], tempFiles: [{ name: t5.tempFile && t5.tempFile.name || "", path: n4, size: i4, type: t5.tempFile && t5.tempFile.type || "", width: a3, height: o3, duration: s3, fileType: "video", cloudPath: "" }] }, "video"));
}, fail(e6) {
c2({ errMsg: e6.errMsg.replace("chooseVideo:fail", s2) });
} });
});
}(t3), t3) : i2(e3, function(e4) {
const { count: t4, extension: n3 } = e4;
return new Promise((e5, i3) => {
let o2 = uni.chooseFile;
if ("undefined" != typeof wx && "function" == typeof wx.chooseMessageFile && (o2 = wx.chooseMessageFile), "function" != typeof o2)
return i3({ errMsg: s2 + " 请指定 type 类型,该平台仅支持选择 image 或 video。" });
o2({ type: "all", count: t4, extension: n3, success(t5) {
e5(r2(t5));
}, fail(e6) {
i3({ errMsg: e6.errMsg.replace("chooseFile:fail", s2) });
} });
});
}(t3), t3);
};
};
}), Cs = t(Ts);
const xs = "manual";
function Os(e2) {
return { props: { localdata: { type: Array, default: () => [] }, options: { type: [Object, Array], default: () => ({}) }, spaceInfo: { type: Object, default: () => ({}) }, collection: { type: [String, Array], default: "" }, action: { type: String, default: "" }, field: { type: String, default: "" }, orderby: { type: String, default: "" }, where: { type: [String, Object], default: "" }, pageData: { type: String, default: "add" }, pageCurrent: { type: Number, default: 1 }, pageSize: { type: Number, default: 20 }, getcount: { type: [Boolean, String], default: false }, gettree: { type: [Boolean, String], default: false }, gettreepath: { type: [Boolean, String], default: false }, startwith: { type: String, default: "" }, limitlevel: { type: Number, default: 10 }, groupby: { type: String, default: "" }, groupField: { type: String, default: "" }, distinct: { type: [Boolean, String], default: false }, foreignKey: { type: String, default: "" }, loadtime: { type: String, default: "auto" }, manual: { type: Boolean, default: false } }, data: () => ({ mixinDatacomLoading: false, mixinDatacomHasMore: false, mixinDatacomResData: [], mixinDatacomErrorMessage: "", mixinDatacomPage: {} }), created() {
this.mixinDatacomPage = { current: this.pageCurrent, size: this.pageSize, count: 0 }, this.$watch(() => {
var e3 = [];
return ["pageCurrent", "pageSize", "localdata", "collection", "action", "field", "orderby", "where", "getont", "getcount", "gettree", "groupby", "groupField", "distinct"].forEach((t2) => {
e3.push(this[t2]);
}), e3;
}, (e3, t2) => {
if (this.loadtime === xs)
return;
let n2 = false;
const s2 = [];
for (let r2 = 2; r2 < e3.length; r2++)
e3[r2] !== t2[r2] && (s2.push(e3[r2]), n2 = true);
e3[0] !== t2[0] && (this.mixinDatacomPage.current = this.pageCurrent), this.mixinDatacomPage.size = this.pageSize, this.onMixinDatacomPropsChange(n2, s2);
});
}, methods: { onMixinDatacomPropsChange(e3, t2) {
}, mixinDatacomEasyGet({ getone: e3 = false, success: t2, fail: n2 } = {}) {
this.mixinDatacomLoading || (this.mixinDatacomLoading = true, this.mixinDatacomErrorMessage = "", this.mixinDatacomGet().then((n3) => {
this.mixinDatacomLoading = false;
const { data: s2, count: r2 } = n3.result;
this.getcount && (this.mixinDatacomPage.count = r2), this.mixinDatacomHasMore = s2.length < this.pageSize;
const i2 = e3 ? s2.length ? s2[0] : void 0 : s2;
this.mixinDatacomResData = i2, t2 && t2(i2);
}).catch((e4) => {
this.mixinDatacomLoading = false, this.mixinDatacomErrorMessage = e4, n2 && n2(e4);
}));
}, mixinDatacomGet(t2 = {}) {
let n2 = e2.database(this.spaceInfo);
const s2 = t2.action || this.action;
s2 && (n2 = n2.action(s2));
const r2 = t2.collection || this.collection;
n2 = Array.isArray(r2) ? n2.collection(...r2) : n2.collection(r2);
const i2 = t2.where || this.where;
i2 && Object.keys(i2).length && (n2 = n2.where(i2));
const o2 = t2.field || this.field;
o2 && (n2 = n2.field(o2));
const a2 = t2.foreignKey || this.foreignKey;
a2 && (n2 = n2.foreignKey(a2));
const c2 = t2.groupby || this.groupby;
c2 && (n2 = n2.groupBy(c2));
const u2 = t2.groupField || this.groupField;
u2 && (n2 = n2.groupField(u2));
true === (void 0 !== t2.distinct ? t2.distinct : this.distinct) && (n2 = n2.distinct());
const l2 = t2.orderby || this.orderby;
l2 && (n2 = n2.orderBy(l2));
const h2 = void 0 !== t2.pageCurrent ? t2.pageCurrent : this.mixinDatacomPage.current, d2 = void 0 !== t2.pageSize ? t2.pageSize : this.mixinDatacomPage.size, p2 = void 0 !== t2.getcount ? t2.getcount : this.getcount, f2 = void 0 !== t2.gettree ? t2.gettree : this.gettree, g2 = void 0 !== t2.gettreepath ? t2.gettreepath : this.gettreepath, m2 = { getCount: p2 }, y2 = { limitLevel: void 0 !== t2.limitlevel ? t2.limitlevel : this.limitlevel, startWith: void 0 !== t2.startwith ? t2.startwith : this.startwith };
return f2 && (m2.getTree = y2), g2 && (m2.getTreePath = y2), n2 = n2.skip(d2 * (h2 - 1)).limit(d2).get(m2), n2;
} } };
}
function Es(e2) {
return function(t2, n2 = {}) {
n2 = function(e3, t3 = {}) {
return e3.customUI = t3.customUI || e3.customUI, e3.parseSystemError = t3.parseSystemError || e3.parseSystemError, Object.assign(e3.loadingOptions, t3.loadingOptions), Object.assign(e3.errorOptions, t3.errorOptions), "object" == typeof t3.secretMethods && (e3.secretMethods = t3.secretMethods), e3;
}({ customUI: false, loadingOptions: { title: "加载中...", mask: true }, errorOptions: { type: "modal", retry: false } }, n2);
const { customUI: s2, loadingOptions: r2, errorOptions: i2, parseSystemError: o2 } = n2, a2 = !s2;
return new Proxy({}, { get: (s3, c2) => function({ fn: e3, interceptorName: t3, getCallbackArgs: n3 } = {}) {
return async function(...s4) {
const r3 = n3 ? n3({ params: s4 }) : {};
let i3, o3;
try {
return await M(q(t3, "invoke"), { ...r3 }), i3 = await e3(...s4), await M(q(t3, "success"), { ...r3, result: i3 }), i3;
} catch (e4) {
throw o3 = e4, await M(q(t3, "fail"), { ...r3, error: o3 }), o3;
} finally {
await M(q(t3, "complete"), o3 ? { ...r3, error: o3 } : { ...r3, result: i3 });
}
};
}({ fn: async function s4(...l2) {
let h2;
a2 && uni.showLoading({ title: r2.title, mask: r2.mask });
const d2 = { name: t2, type: u, data: { method: c2, params: l2 } };
"object" == typeof n2.secretMethods && function(e3, t3) {
const n3 = t3.data.method, s5 = e3.secretMethods || {}, r3 = s5[n3] || s5["*"];
r3 && (t3.secretType = r3);
}(n2, d2);
let p2 = false;
try {
h2 = await e2.callFunction(d2);
} catch (e3) {
p2 = true, h2 = { result: new te(e3) };
}
const { errSubject: f2, errCode: g2, errMsg: m2, newToken: y2 } = h2.result || {};
if (a2 && uni.hideLoading(), y2 && y2.token && y2.tokenExpired && (ie(y2), Y($, { ...y2 })), g2) {
let e3 = m2;
if (p2 && o2) {
e3 = (await o2({ objectName: t2, methodName: c2, params: l2, errSubject: f2, errCode: g2, errMsg: m2 })).errMsg || m2;
}
if (a2)
if ("toast" === i2.type)
uni.showToast({ title: e3, icon: "none" });
else {
if ("modal" !== i2.type)
throw new Error(`Invalid errorOptions.type: ${i2.type}`);
{
const { confirm: t3 } = await async function({ title: e4, content: t4, showCancel: n4, cancelText: s5, confirmText: r3 } = {}) {
return new Promise((i3, o3) => {
uni.showModal({ title: e4, content: t4, showCancel: n4, cancelText: s5, confirmText: r3, success(e5) {
i3(e5);
}, fail() {
i3({ confirm: false, cancel: true });
} });
});
}({ title: "提示", content: e3, showCancel: i2.retry, cancelText: "取消", confirmText: i2.retry ? "重试" : "确定" });
if (i2.retry && t3)
return s4(...l2);
}
}
const n3 = new te({ subject: f2, code: g2, message: m2, requestId: h2.requestId });
throw n3.detail = h2.result, Y(j, { type: z, content: n3 }), n3;
}
return Y(j, { type: z, content: h2.result }), h2.result;
}, interceptorName: "callObject", getCallbackArgs: function({ params: e3 } = {}) {
return { objectName: t2, methodName: c2, params: e3 };
} }) });
};
}
function Ls(e2) {
return L("_globalUniCloudSecureNetworkCache__{spaceId}".replace("{spaceId}", e2.config.spaceId));
}
async function Rs({ openid: e2, callLoginByWeixin: t2 = false } = {}) {
Ls(this);
throw new Error(`[SecureNetwork] API \`initSecureNetworkByWeixin\` is not supported on platform \`${P}\``);
}
async function Us(e2) {
const t2 = Ls(this);
return t2.initPromise || (t2.initPromise = Rs.call(this, e2)), t2.initPromise;
}
function Ns(e2) {
return function({ openid: t2, callLoginByWeixin: n2 = false } = {}) {
return Us.call(e2, { openid: t2, callLoginByWeixin: n2 });
};
}
function Ds(e2) {
const t2 = { getSystemInfo: uni.getSystemInfo, getPushClientId: uni.getPushClientId };
return function(n2) {
return new Promise((s2, r2) => {
t2[e2]({ ...n2, success(e3) {
s2(e3);
}, fail(e3) {
r2(e3);
} });
});
};
}
class Ms extends class {
constructor() {
this._callback = {};
}
addListener(e2, t2) {
this._callback[e2] || (this._callback[e2] = []), this._callback[e2].push(t2);
}
on(e2, t2) {
return this.addListener(e2, t2);
}
removeListener(e2, t2) {
if (!t2)
throw new Error('The "listener" argument must be of type function. Received undefined');
const n2 = this._callback[e2];
if (!n2)
return;
const s2 = function(e3, t3) {
for (let n3 = e3.length - 1; n3 >= 0; n3--)
if (e3[n3] === t3)
return n3;
return -1;
}(n2, t2);
n2.splice(s2, 1);
}
off(e2, t2) {
return this.removeListener(e2, t2);
}
removeAllListener(e2) {
delete this._callback[e2];
}
emit(e2, ...t2) {
const n2 = this._callback[e2];
if (n2)
for (let e3 = 0; e3 < n2.length; e3++)
n2[e3](...t2);
}
} {
constructor() {
super(), this._uniPushMessageCallback = this._receivePushMessage.bind(this), this._currentMessageId = -1, this._payloadQueue = [];
}
init() {
return Promise.all([Ds("getSystemInfo")(), Ds("getPushClientId")()]).then(([{ appId: e2 } = {}, { cid: t2 } = {}] = []) => {
if (!e2)
throw new Error("Invalid appId, please check the manifest.json file");
if (!t2)
throw new Error("Invalid push client id");
this._appId = e2, this._pushClientId = t2, this._seqId = Date.now() + "-" + Math.floor(9e5 * Math.random() + 1e5), this.emit("open"), this._initMessageListener();
}, (e2) => {
throw this.emit("error", e2), this.close(), e2;
});
}
async open() {
return this.init();
}
_isUniCloudSSE(e2) {
if ("receive" !== e2.type)
return false;
const t2 = e2 && e2.data && e2.data.payload;
return !(!t2 || "UNI_CLOUD_SSE" !== t2.channel || t2.seqId !== this._seqId);
}
_receivePushMessage(e2) {
if (!this._isUniCloudSSE(e2))
return;
const t2 = e2 && e2.data && e2.data.payload, { action: n2, messageId: s2, message: r2 } = t2;
this._payloadQueue.push({ action: n2, messageId: s2, message: r2 }), this._consumMessage();
}
_consumMessage() {
for (; ; ) {
const e2 = this._payloadQueue.find((e3) => e3.messageId === this._currentMessageId + 1);
if (!e2)
break;
this._currentMessageId++, this._parseMessagePayload(e2);
}
}
_parseMessagePayload(e2) {
const { action: t2, messageId: n2, message: s2 } = e2;
"end" === t2 ? this._end({ messageId: n2, message: s2 }) : "message" === t2 && this._appendMessage({ messageId: n2, message: s2 });
}
_appendMessage({ messageId: e2, message: t2 } = {}) {
this.emit("message", t2);
}
_end({ messageId: e2, message: t2 } = {}) {
this.emit("end", t2), this.close();
}
_initMessageListener() {
uni.onPushMessage(this._uniPushMessageCallback);
}
_destroy() {
uni.offPushMessage(this._uniPushMessageCallback);
}
toJSON() {
return { appId: this._appId, pushClientId: this._pushClientId, seqId: this._seqId };
}
close() {
this._destroy(), this.emit("close");
}
}
async function qs(e2, t2) {
const n2 = `http://${e2}:${t2}/system/ping`;
try {
const e3 = await (s2 = { url: n2, timeout: 500 }, new Promise((e4, t3) => {
ne.request({ ...s2, success(t4) {
e4(t4);
}, fail(e5) {
t3(e5);
} });
}));
return !(!e3.data || 0 !== e3.data.code);
} catch (e3) {
return false;
}
var s2;
}
async function Fs(e2) {
{
const { osName: e3, osVersion: t3 } = ce();
"ios" === e3 && function(e4) {
if (!e4 || "string" != typeof e4)
return 0;
const t4 = e4.match(/^(\d+)./);
return t4 && t4[1] ? parseInt(t4[1]) : 0;
}(t3) >= 14 && console.warn("iOS 14及以上版本连接uniCloud本地调试服务需要允许客户端查找并连接到本地网络上的设备(仅开发模式生效,发行模式会连接uniCloud云端服务)");
}
const t2 = e2.__dev__;
if (!t2.debugInfo)
return;
const { address: n2, servePort: s2 } = t2.debugInfo, { address: r2 } = await async function(e3, t3) {
let n3;
for (let s3 = 0; s3 < e3.length; s3++) {
const r3 = e3[s3];
if (await qs(r3, t3)) {
n3 = r3;
break;
}
}
return { address: n3, port: t3 };
}(n2, s2);
if (r2)
return t2.localAddress = r2, void (t2.localPort = s2);
const i2 = console["error"];
let o2 = "";
if ("remote" === t2.debugInfo.initialLaunchType ? (t2.debugInfo.forceRemote = true, o2 = "当前客户端和HBuilderX不在同一局域网下(或其他网络原因无法连接HBuilderX),uniCloud本地调试服务不对当前客户端生效。\n- 如果不使用uniCloud本地调试服务,请直接忽略此信息。\n- 如需使用uniCloud本地调试服务,请将客户端与主机连接到同一局域网下并重新运行到客户端。") : o2 = "无法连接uniCloud本地调试服务,请检查当前客户端是否与主机在同一局域网下。\n- 如需使用uniCloud本地调试服务,请将客户端与主机连接到同一局域网下并重新运行到客户端。", o2 += "\n- 如果在HBuilderX开启的状态下切换过网络环境,请重启HBuilderX后再试\n- 检查系统防火墙是否拦截了HBuilderX自带的nodejs\n- 检查是否错误的使用拦截器修改uni.request方法的参数", 0 === P.indexOf("mp-") && (o2 += "\n- 小程序中如何使用uniCloud,请参考:https://uniapp.dcloud.net.cn/uniCloud/publish.html#useinmp"), !t2.debugInfo.forceRemote)
throw new Error(o2);
i2(o2);
}
function Ks(e2) {
e2._initPromiseHub || (e2._initPromiseHub = new v({ createPromise: function() {
let t2 = Promise.resolve();
var n2;
n2 = 1, t2 = new Promise((e3) => {
setTimeout(() => {
e3();
}, n2);
});
const s2 = e2.auth();
return t2.then(() => s2.getLoginState()).then((e3) => e3 ? Promise.resolve() : s2.signInAnonymously());
} }));
}
const js = { tcb: St, tencent: St, aliyun: pe, private: kt, alipay: Et };
let Bs = new class {
init(e2) {
let t2 = {};
const n2 = js[e2.provider];
if (!n2)
throw new Error("未提供正确的provider参数");
t2 = n2.init(e2), function(e3) {
const t3 = {};
e3.__dev__ = t3, t3.debugLog = "app" === P;
const n3 = T;
n3 && !n3.code && (t3.debugInfo = n3);
const s2 = new v({ createPromise: function() {
return Fs(e3);
} });
t3.initLocalNetwork = function() {
return s2.exec();
};
}(t2), Ks(t2), Fn(t2), function(e3) {
const t3 = e3.uploadFile;
e3.uploadFile = function(e4) {
return t3.call(this, e4);
};
}(t2), function(e3) {
e3.database = function(t3) {
if (t3 && Object.keys(t3).length > 0)
return e3.init(t3).database();
if (this._database)
return this._database;
const n3 = Yn(Qn, { uniClient: e3 });
return this._database = n3, n3;
}, e3.databaseForJQL = function(t3) {
if (t3 && Object.keys(t3).length > 0)
return e3.init(t3).databaseForJQL();
if (this._databaseForJQL)
return this._databaseForJQL;
const n3 = Yn(Qn, { uniClient: e3, isJQL: true });
return this._databaseForJQL = n3, n3;
};
}(t2), function(e3) {
e3.getCurrentUserInfo = Ps, e3.chooseAndUploadFile = Cs.initChooseAndUploadFile(e3), Object.assign(e3, { get mixinDatacom() {
return Os(e3);
} }), e3.SSEChannel = Ms, e3.initSecureNetworkByWeixin = Ns(e3), e3.importObject = Es(e3);
}(t2);
return ["callFunction", "uploadFile", "deleteFile", "getTempFileURL", "downloadFile", "chooseAndUploadFile"].forEach((e3) => {
if (!t2[e3])
return;
const n3 = t2[e3];
t2[e3] = function() {
return n3.apply(t2, Array.from(arguments));
}, t2[e3] = function(e4, t3) {
return function(n4) {
let s2 = false;
if ("callFunction" === t3) {
const e5 = n4 && n4.type || c;
s2 = e5 !== c;
}
const r2 = "callFunction" === t3 && !s2, i2 = this._initPromiseHub.exec();
n4 = n4 || {};
const { success: o2, fail: a2, complete: u2 } = ee(n4), l2 = i2.then(() => s2 ? Promise.resolve() : M(q(t3, "invoke"), n4)).then(() => e4.call(this, n4)).then((e5) => s2 ? Promise.resolve(e5) : M(q(t3, "success"), e5).then(() => M(q(t3, "complete"), e5)).then(() => (r2 && Y(j, { type: H, content: e5 }), Promise.resolve(e5))), (e5) => s2 ? Promise.reject(e5) : M(q(t3, "fail"), e5).then(() => M(q(t3, "complete"), e5)).then(() => (Y(j, { type: H, content: e5 }), Promise.reject(e5))));
if (!(o2 || a2 || u2))
return l2;
l2.then((e5) => {
o2 && o2(e5), u2 && u2(e5), r2 && Y(j, { type: H, content: e5 });
}, (e5) => {
a2 && a2(e5), u2 && u2(e5), r2 && Y(j, { type: H, content: e5 });
});
};
}(t2[e3], e3).bind(t2);
}), t2.init = this.init, t2;
}
}();
(() => {
const e2 = C;
let t2 = {};
if (e2 && 1 === e2.length)
t2 = e2[0], Bs = Bs.init(t2), Bs._isDefault = true;
else {
const t3 = ["auth", "callFunction", "uploadFile", "deleteFile", "getTempFileURL", "downloadFile", "database", "getCurrentUSerInfo", "importObject"];
let n2;
n2 = e2 && e2.length > 0 ? "应用有多个服务空间,请通过uniCloud.init方法指定要使用的服务空间" : "应用未关联服务空间,请在uniCloud目录右键关联服务空间", t3.forEach((e3) => {
Bs[e3] = function() {
return console.error(n2), Promise.reject(new te({ code: "SYS_ERR", message: n2 }));
};
});
}
Object.assign(Bs, { get mixinDatacom() {
return Os(Bs);
} }), Ss(Bs), Bs.addInterceptor = N, Bs.removeInterceptor = D, Bs.interceptObject = F;
})();
var $s = Bs;
const icons = {
"id": "2852637",
"name": "uniui图标库",
"font_family": "uniicons",
"css_prefix_text": "uniui-",
"description": "",
"glyphs": [
{
"icon_id": "25027049",
"name": "yanse",
"font_class": "color",
"unicode": "e6cf",
"unicode_decimal": 59087
},
{
"icon_id": "25027048",
"name": "wallet",
"font_class": "wallet",
"unicode": "e6b1",
"unicode_decimal": 59057
},
{
"icon_id": "25015720",
"name": "settings-filled",
"font_class": "settings-filled",
"unicode": "e6ce",
"unicode_decimal": 59086
},
{
"icon_id": "25015434",
"name": "shimingrenzheng-filled",
"font_class": "auth-filled",
"unicode": "e6cc",
"unicode_decimal": 59084
},
{
"icon_id": "24934246",
"name": "shop-filled",
"font_class": "shop-filled",
"unicode": "e6cd",
"unicode_decimal": 59085
},
{
"icon_id": "24934159",
"name": "staff-filled-01",
"font_class": "staff-filled",
"unicode": "e6cb",
"unicode_decimal": 59083
},
{
"icon_id": "24932461",
"name": "VIP-filled",
"font_class": "vip-filled",
"unicode": "e6c6",
"unicode_decimal": 59078
},
{
"icon_id": "24932462",
"name": "plus_circle_fill",
"font_class": "plus-filled",
"unicode": "e6c7",
"unicode_decimal": 59079
},
{
"icon_id": "24932463",
"name": "folder_add-filled",
"font_class": "folder-add-filled",
"unicode": "e6c8",
"unicode_decimal": 59080
},
{
"icon_id": "24932464",
"name": "yanse-filled",
"font_class": "color-filled",
"unicode": "e6c9",
"unicode_decimal": 59081
},
{
"icon_id": "24932465",
"name": "tune-filled",
"font_class": "tune-filled",
"unicode": "e6ca",
"unicode_decimal": 59082
},
{
"icon_id": "24932455",
"name": "a-rilidaka-filled",
"font_class": "calendar-filled",
"unicode": "e6c0",
"unicode_decimal": 59072
},
{
"icon_id": "24932456",
"name": "notification-filled",
"font_class": "notification-filled",
"unicode": "e6c1",
"unicode_decimal": 59073
},
{
"icon_id": "24932457",
"name": "wallet-filled",
"font_class": "wallet-filled",
"unicode": "e6c2",
"unicode_decimal": 59074
},
{
"icon_id": "24932458",
"name": "paihangbang-filled",
"font_class": "medal-filled",
"unicode": "e6c3",
"unicode_decimal": 59075
},
{
"icon_id": "24932459",
"name": "gift-filled",
"font_class": "gift-filled",
"unicode": "e6c4",
"unicode_decimal": 59076
},
{
"icon_id": "24932460",
"name": "fire-filled",
"font_class": "fire-filled",
"unicode": "e6c5",
"unicode_decimal": 59077
},
{
"icon_id": "24928001",
"name": "refreshempty",
"font_class": "refreshempty",
"unicode": "e6bf",
"unicode_decimal": 59071
},
{
"icon_id": "24926853",
"name": "location-ellipse",
"font_class": "location-filled",
"unicode": "e6af",
"unicode_decimal": 59055
},
{
"icon_id": "24926735",
"name": "person-filled",
"font_class": "person-filled",
"unicode": "e69d",
"unicode_decimal": 59037
},
{
"icon_id": "24926703",
"name": "personadd-filled",
"font_class": "personadd-filled",
"unicode": "e698",
"unicode_decimal": 59032
},
{
"icon_id": "24923351",
"name": "back",
"font_class": "back",
"unicode": "e6b9",
"unicode_decimal": 59065
},
{
"icon_id": "24923352",
"name": "forward",
"font_class": "forward",
"unicode": "e6ba",
"unicode_decimal": 59066
},
{
"icon_id": "24923353",
"name": "arrowthinright",
"font_class": "arrow-right",
"unicode": "e6bb",
"unicode_decimal": 59067
},
{
"icon_id": "24923353",
"name": "arrowthinright",
"font_class": "arrowthinright",
"unicode": "e6bb",
"unicode_decimal": 59067
},
{
"icon_id": "24923354",
"name": "arrowthinleft",
"font_class": "arrow-left",
"unicode": "e6bc",
"unicode_decimal": 59068
},
{
"icon_id": "24923354",
"name": "arrowthinleft",
"font_class": "arrowthinleft",
"unicode": "e6bc",
"unicode_decimal": 59068
},
{
"icon_id": "24923355",
"name": "arrowthinup",
"font_class": "arrow-up",
"unicode": "e6bd",
"unicode_decimal": 59069
},
{
"icon_id": "24923355",
"name": "arrowthinup",
"font_class": "arrowthinup",
"unicode": "e6bd",
"unicode_decimal": 59069
},
{
"icon_id": "24923356",
"name": "arrowthindown",
"font_class": "arrow-down",
"unicode": "e6be",
"unicode_decimal": 59070
},
{
"icon_id": "24923356",
"name": "arrowthindown",
"font_class": "arrowthindown",
"unicode": "e6be",
"unicode_decimal": 59070
},
{
"icon_id": "24923349",
"name": "arrowdown",
"font_class": "bottom",
"unicode": "e6b8",
"unicode_decimal": 59064
},
{
"icon_id": "24923349",
"name": "arrowdown",
"font_class": "arrowdown",
"unicode": "e6b8",
"unicode_decimal": 59064
},
{
"icon_id": "24923346",
"name": "arrowright",
"font_class": "right",
"unicode": "e6b5",
"unicode_decimal": 59061
},
{
"icon_id": "24923346",
"name": "arrowright",
"font_class": "arrowright",
"unicode": "e6b5",
"unicode_decimal": 59061
},
{
"icon_id": "24923347",
"name": "arrowup",
"font_class": "top",
"unicode": "e6b6",
"unicode_decimal": 59062
},
{
"icon_id": "24923347",
"name": "arrowup",
"font_class": "arrowup",
"unicode": "e6b6",
"unicode_decimal": 59062
},
{
"icon_id": "24923348",
"name": "arrowleft",
"font_class": "left",
"unicode": "e6b7",
"unicode_decimal": 59063
},
{
"icon_id": "24923348",
"name": "arrowleft",
"font_class": "arrowleft",
"unicode": "e6b7",
"unicode_decimal": 59063
},
{
"icon_id": "24923334",
"name": "eye",
"font_class": "eye",
"unicode": "e651",
"unicode_decimal": 58961
},
{
"icon_id": "24923335",
"name": "eye-filled",
"font_class": "eye-filled",
"unicode": "e66a",
"unicode_decimal": 58986
},
{
"icon_id": "24923336",
"name": "eye-slash",
"font_class": "eye-slash",
"unicode": "e6b3",
"unicode_decimal": 59059
},
{
"icon_id": "24923337",
"name": "eye-slash-filled",
"font_class": "eye-slash-filled",
"unicode": "e6b4",
"unicode_decimal": 59060
},
{
"icon_id": "24923305",
"name": "info-filled",
"font_class": "info-filled",
"unicode": "e649",
"unicode_decimal": 58953
},
{
"icon_id": "24923299",
"name": "reload-01",
"font_class": "reload",
"unicode": "e6b2",
"unicode_decimal": 59058
},
{
"icon_id": "24923195",
"name": "mic_slash_fill",
"font_class": "micoff-filled",
"unicode": "e6b0",
"unicode_decimal": 59056
},
{
"icon_id": "24923165",
"name": "map-pin-ellipse",
"font_class": "map-pin-ellipse",
"unicode": "e6ac",
"unicode_decimal": 59052
},
{
"icon_id": "24923166",
"name": "map-pin",
"font_class": "map-pin",
"unicode": "e6ad",
"unicode_decimal": 59053
},
{
"icon_id": "24923167",
"name": "location",
"font_class": "location",
"unicode": "e6ae",
"unicode_decimal": 59054
},
{
"icon_id": "24923064",
"name": "starhalf",
"font_class": "starhalf",
"unicode": "e683",
"unicode_decimal": 59011
},
{
"icon_id": "24923065",
"name": "star",
"font_class": "star",
"unicode": "e688",
"unicode_decimal": 59016
},
{
"icon_id": "24923066",
"name": "star-filled",
"font_class": "star-filled",
"unicode": "e68f",
"unicode_decimal": 59023
},
{
"icon_id": "24899646",
"name": "a-rilidaka",
"font_class": "calendar",
"unicode": "e6a0",
"unicode_decimal": 59040
},
{
"icon_id": "24899647",
"name": "fire",
"font_class": "fire",
"unicode": "e6a1",
"unicode_decimal": 59041
},
{
"icon_id": "24899648",
"name": "paihangbang",
"font_class": "medal",
"unicode": "e6a2",
"unicode_decimal": 59042
},
{
"icon_id": "24899649",
"name": "font",
"font_class": "font",
"unicode": "e6a3",
"unicode_decimal": 59043
},
{
"icon_id": "24899650",
"name": "gift",
"font_class": "gift",
"unicode": "e6a4",
"unicode_decimal": 59044
},
{
"icon_id": "24899651",
"name": "link",
"font_class": "link",
"unicode": "e6a5",
"unicode_decimal": 59045
},
{
"icon_id": "24899652",
"name": "notification",
"font_class": "notification",
"unicode": "e6a6",
"unicode_decimal": 59046
},
{
"icon_id": "24899653",
"name": "staff",
"font_class": "staff",
"unicode": "e6a7",
"unicode_decimal": 59047
},
{
"icon_id": "24899654",
"name": "VIP",
"font_class": "vip",
"unicode": "e6a8",
"unicode_decimal": 59048
},
{
"icon_id": "24899655",
"name": "folder_add",
"font_class": "folder-add",
"unicode": "e6a9",
"unicode_decimal": 59049
},
{
"icon_id": "24899656",
"name": "tune",
"font_class": "tune",
"unicode": "e6aa",
"unicode_decimal": 59050
},
{
"icon_id": "24899657",
"name": "shimingrenzheng",
"font_class": "auth",
"unicode": "e6ab",
"unicode_decimal": 59051
},
{
"icon_id": "24899565",
"name": "person",
"font_class": "person",
"unicode": "e699",
"unicode_decimal": 59033
},
{
"icon_id": "24899566",
"name": "email-filled",
"font_class": "email-filled",
"unicode": "e69a",
"unicode_decimal": 59034
},
{
"icon_id": "24899567",
"name": "phone-filled",
"font_class": "phone-filled",
"unicode": "e69b",
"unicode_decimal": 59035
},
{
"icon_id": "24899568",
"name": "phone",
"font_class": "phone",
"unicode": "e69c",
"unicode_decimal": 59036
},
{
"icon_id": "24899570",
"name": "email",
"font_class": "email",
"unicode": "e69e",
"unicode_decimal": 59038
},
{
"icon_id": "24899571",
"name": "personadd",
"font_class": "personadd",
"unicode": "e69f",
"unicode_decimal": 59039
},
{
"icon_id": "24899558",
"name": "chatboxes-filled",
"font_class": "chatboxes-filled",
"unicode": "e692",
"unicode_decimal": 59026
},
{
"icon_id": "24899559",
"name": "contact",
"font_class": "contact",
"unicode": "e693",
"unicode_decimal": 59027
},
{
"icon_id": "24899560",
"name": "chatbubble-filled",
"font_class": "chatbubble-filled",
"unicode": "e694",
"unicode_decimal": 59028
},
{
"icon_id": "24899561",
"name": "contact-filled",
"font_class": "contact-filled",
"unicode": "e695",
"unicode_decimal": 59029
},
{
"icon_id": "24899562",
"name": "chatboxes",
"font_class": "chatboxes",
"unicode": "e696",
"unicode_decimal": 59030
},
{
"icon_id": "24899563",
"name": "chatbubble",
"font_class": "chatbubble",
"unicode": "e697",
"unicode_decimal": 59031
},
{
"icon_id": "24881290",
"name": "upload-filled",
"font_class": "upload-filled",
"unicode": "e68e",
"unicode_decimal": 59022
},
{
"icon_id": "24881292",
"name": "upload",
"font_class": "upload",
"unicode": "e690",
"unicode_decimal": 59024
},
{
"icon_id": "24881293",
"name": "weixin",
"font_class": "weixin",
"unicode": "e691",
"unicode_decimal": 59025
},
{
"icon_id": "24881274",
"name": "compose",
"font_class": "compose",
"unicode": "e67f",
"unicode_decimal": 59007
},
{
"icon_id": "24881275",
"name": "qq",
"font_class": "qq",
"unicode": "e680",
"unicode_decimal": 59008
},
{
"icon_id": "24881276",
"name": "download-filled",
"font_class": "download-filled",
"unicode": "e681",
"unicode_decimal": 59009
},
{
"icon_id": "24881277",
"name": "pengyouquan",
"font_class": "pyq",
"unicode": "e682",
"unicode_decimal": 59010
},
{
"icon_id": "24881279",
"name": "sound",
"font_class": "sound",
"unicode": "e684",
"unicode_decimal": 59012
},
{
"icon_id": "24881280",
"name": "trash-filled",
"font_class": "trash-filled",
"unicode": "e685",
"unicode_decimal": 59013
},
{
"icon_id": "24881281",
"name": "sound-filled",
"font_class": "sound-filled",
"unicode": "e686",
"unicode_decimal": 59014
},
{
"icon_id": "24881282",
"name": "trash",
"font_class": "trash",
"unicode": "e687",
"unicode_decimal": 59015
},
{
"icon_id": "24881284",
"name": "videocam-filled",
"font_class": "videocam-filled",
"unicode": "e689",
"unicode_decimal": 59017
},
{
"icon_id": "24881285",
"name": "spinner-cycle",
"font_class": "spinner-cycle",
"unicode": "e68a",
"unicode_decimal": 59018
},
{
"icon_id": "24881286",
"name": "weibo",
"font_class": "weibo",
"unicode": "e68b",
"unicode_decimal": 59019
},
{
"icon_id": "24881288",
"name": "videocam",
"font_class": "videocam",
"unicode": "e68c",
"unicode_decimal": 59020
},
{
"icon_id": "24881289",
"name": "download",
"font_class": "download",
"unicode": "e68d",
"unicode_decimal": 59021
},
{
"icon_id": "24879601",
"name": "help",
"font_class": "help",
"unicode": "e679",
"unicode_decimal": 59001
},
{
"icon_id": "24879602",
"name": "navigate-filled",
"font_class": "navigate-filled",
"unicode": "e67a",
"unicode_decimal": 59002
},
{
"icon_id": "24879603",
"name": "plusempty",
"font_class": "plusempty",
"unicode": "e67b",
"unicode_decimal": 59003
},
{
"icon_id": "24879604",
"name": "smallcircle",
"font_class": "smallcircle",
"unicode": "e67c",
"unicode_decimal": 59004
},
{
"icon_id": "24879605",
"name": "minus-filled",
"font_class": "minus-filled",
"unicode": "e67d",
"unicode_decimal": 59005
},
{
"icon_id": "24879606",
"name": "micoff",
"font_class": "micoff",
"unicode": "e67e",
"unicode_decimal": 59006
},
{
"icon_id": "24879588",
"name": "closeempty",
"font_class": "closeempty",
"unicode": "e66c",
"unicode_decimal": 58988
},
{
"icon_id": "24879589",
"name": "clear",
"font_class": "clear",
"unicode": "e66d",
"unicode_decimal": 58989
},
{
"icon_id": "24879590",
"name": "navigate",
"font_class": "navigate",
"unicode": "e66e",
"unicode_decimal": 58990
},
{
"icon_id": "24879591",
"name": "minus",
"font_class": "minus",
"unicode": "e66f",
"unicode_decimal": 58991
},
{
"icon_id": "24879592",
"name": "image",
"font_class": "image",
"unicode": "e670",
"unicode_decimal": 58992
},
{
"icon_id": "24879593",
"name": "mic",
"font_class": "mic",
"unicode": "e671",
"unicode_decimal": 58993
},
{
"icon_id": "24879594",
"name": "paperplane",
"font_class": "paperplane",
"unicode": "e672",
"unicode_decimal": 58994
},
{
"icon_id": "24879595",
"name": "close",
"font_class": "close",
"unicode": "e673",
"unicode_decimal": 58995
},
{
"icon_id": "24879596",
"name": "help-filled",
"font_class": "help-filled",
"unicode": "e674",
"unicode_decimal": 58996
},
{
"icon_id": "24879597",
"name": "plus-filled",
"font_class": "paperplane-filled",
"unicode": "e675",
"unicode_decimal": 58997
},
{
"icon_id": "24879598",
"name": "plus",
"font_class": "plus",
"unicode": "e676",
"unicode_decimal": 58998
},
{
"icon_id": "24879599",
"name": "mic-filled",
"font_class": "mic-filled",
"unicode": "e677",
"unicode_decimal": 58999
},
{
"icon_id": "24879600",
"name": "image-filled",
"font_class": "image-filled",
"unicode": "e678",
"unicode_decimal": 59e3
},
{
"icon_id": "24855900",
"name": "locked-filled",
"font_class": "locked-filled",
"unicode": "e668",
"unicode_decimal": 58984
},
{
"icon_id": "24855901",
"name": "info",
"font_class": "info",
"unicode": "e669",
"unicode_decimal": 58985
},
{
"icon_id": "24855903",
"name": "locked",
"font_class": "locked",
"unicode": "e66b",
"unicode_decimal": 58987
},
{
"icon_id": "24855884",
"name": "camera-filled",
"font_class": "camera-filled",
"unicode": "e658",
"unicode_decimal": 58968
},
{
"icon_id": "24855885",
"name": "chat-filled",
"font_class": "chat-filled",
"unicode": "e659",
"unicode_decimal": 58969
},
{
"icon_id": "24855886",
"name": "camera",
"font_class": "camera",
"unicode": "e65a",
"unicode_decimal": 58970
},
{
"icon_id": "24855887",
"name": "circle",
"font_class": "circle",
"unicode": "e65b",
"unicode_decimal": 58971
},
{
"icon_id": "24855888",
"name": "checkmarkempty",
"font_class": "checkmarkempty",
"unicode": "e65c",
"unicode_decimal": 58972
},
{
"icon_id": "24855889",
"name": "chat",
"font_class": "chat",
"unicode": "e65d",
"unicode_decimal": 58973
},
{
"icon_id": "24855890",
"name": "circle-filled",
"font_class": "circle-filled",
"unicode": "e65e",
"unicode_decimal": 58974
},
{
"icon_id": "24855891",
"name": "flag",
"font_class": "flag",
"unicode": "e65f",
"unicode_decimal": 58975
},
{
"icon_id": "24855892",
"name": "flag-filled",
"font_class": "flag-filled",
"unicode": "e660",
"unicode_decimal": 58976
},
{
"icon_id": "24855893",
"name": "gear-filled",
"font_class": "gear-filled",
"unicode": "e661",
"unicode_decimal": 58977
},
{
"icon_id": "24855894",
"name": "home",
"font_class": "home",
"unicode": "e662",
"unicode_decimal": 58978
},
{
"icon_id": "24855895",
"name": "home-filled",
"font_class": "home-filled",
"unicode": "e663",
"unicode_decimal": 58979
},
{
"icon_id": "24855896",
"name": "gear",
"font_class": "gear",
"unicode": "e664",
"unicode_decimal": 58980
},
{
"icon_id": "24855897",
"name": "smallcircle-filled",
"font_class": "smallcircle-filled",
"unicode": "e665",
"unicode_decimal": 58981
},
{
"icon_id": "24855898",
"name": "map-filled",
"font_class": "map-filled",
"unicode": "e666",
"unicode_decimal": 58982
},
{
"icon_id": "24855899",
"name": "map",
"font_class": "map",
"unicode": "e667",
"unicode_decimal": 58983
},
{
"icon_id": "24855825",
"name": "refresh-filled",
"font_class": "refresh-filled",
"unicode": "e656",
"unicode_decimal": 58966
},
{
"icon_id": "24855826",
"name": "refresh",
"font_class": "refresh",
"unicode": "e657",
"unicode_decimal": 58967
},
{
"icon_id": "24855808",
"name": "cloud-upload",
"font_class": "cloud-upload",
"unicode": "e645",
"unicode_decimal": 58949
},
{
"icon_id": "24855809",
"name": "cloud-download-filled",
"font_class": "cloud-download-filled",
"unicode": "e646",
"unicode_decimal": 58950
},
{
"icon_id": "24855810",
"name": "cloud-download",
"font_class": "cloud-download",
"unicode": "e647",
"unicode_decimal": 58951
},
{
"icon_id": "24855811",
"name": "cloud-upload-filled",
"font_class": "cloud-upload-filled",
"unicode": "e648",
"unicode_decimal": 58952
},
{
"icon_id": "24855813",
"name": "redo",
"font_class": "redo",
"unicode": "e64a",
"unicode_decimal": 58954
},
{
"icon_id": "24855814",
"name": "images-filled",
"font_class": "images-filled",
"unicode": "e64b",
"unicode_decimal": 58955
},
{
"icon_id": "24855815",
"name": "undo-filled",
"font_class": "undo-filled",
"unicode": "e64c",
"unicode_decimal": 58956
},
{
"icon_id": "24855816",
"name": "more",
"font_class": "more",
"unicode": "e64d",
"unicode_decimal": 58957
},
{
"icon_id": "24855817",
"name": "more-filled",
"font_class": "more-filled",
"unicode": "e64e",
"unicode_decimal": 58958
},
{
"icon_id": "24855818",
"name": "undo",
"font_class": "undo",
"unicode": "e64f",
"unicode_decimal": 58959
},
{
"icon_id": "24855819",
"name": "images",
"font_class": "images",
"unicode": "e650",
"unicode_decimal": 58960
},
{
"icon_id": "24855821",
"name": "paperclip",
"font_class": "paperclip",
"unicode": "e652",
"unicode_decimal": 58962
},
{
"icon_id": "24855822",
"name": "settings",
"font_class": "settings",
"unicode": "e653",
"unicode_decimal": 58963
},
{
"icon_id": "24855823",
"name": "search",
"font_class": "search",
"unicode": "e654",
"unicode_decimal": 58964
},
{
"icon_id": "24855824",
"name": "redo-filled",
"font_class": "redo-filled",
"unicode": "e655",
"unicode_decimal": 58965
},
{
"icon_id": "24841702",
"name": "list",
"font_class": "list",
"unicode": "e644",
"unicode_decimal": 58948
},
{
"icon_id": "24841489",
"name": "mail-open-filled",
"font_class": "mail-open-filled",
"unicode": "e63a",
"unicode_decimal": 58938
},
{
"icon_id": "24841491",
"name": "hand-thumbsdown-filled",
"font_class": "hand-down-filled",
"unicode": "e63c",
"unicode_decimal": 58940
},
{
"icon_id": "24841492",
"name": "hand-thumbsdown",
"font_class": "hand-down",
"unicode": "e63d",
"unicode_decimal": 58941
},
{
"icon_id": "24841493",
"name": "hand-thumbsup-filled",
"font_class": "hand-up-filled",
"unicode": "e63e",
"unicode_decimal": 58942
},
{
"icon_id": "24841494",
"name": "hand-thumbsup",
"font_class": "hand-up",
"unicode": "e63f",
"unicode_decimal": 58943
},
{
"icon_id": "24841496",
"name": "heart-filled",
"font_class": "heart-filled",
"unicode": "e641",
"unicode_decimal": 58945
},
{
"icon_id": "24841498",
"name": "mail-open",
"font_class": "mail-open",
"unicode": "e643",
"unicode_decimal": 58947
},
{
"icon_id": "24841488",
"name": "heart",
"font_class": "heart",
"unicode": "e639",
"unicode_decimal": 58937
},
{
"icon_id": "24839963",
"name": "loop",
"font_class": "loop",
"unicode": "e633",
"unicode_decimal": 58931
},
{
"icon_id": "24839866",
"name": "pulldown",
"font_class": "pulldown",
"unicode": "e632",
"unicode_decimal": 58930
},
{
"icon_id": "24813798",
"name": "scan",
"font_class": "scan",
"unicode": "e62a",
"unicode_decimal": 58922
},
{
"icon_id": "24813786",
"name": "bars",
"font_class": "bars",
"unicode": "e627",
"unicode_decimal": 58919
},
{
"icon_id": "24813788",
"name": "cart-filled",
"font_class": "cart-filled",
"unicode": "e629",
"unicode_decimal": 58921
},
{
"icon_id": "24813790",
"name": "checkbox",
"font_class": "checkbox",
"unicode": "e62b",
"unicode_decimal": 58923
},
{
"icon_id": "24813791",
"name": "checkbox-filled",
"font_class": "checkbox-filled",
"unicode": "e62c",
"unicode_decimal": 58924
},
{
"icon_id": "24813794",
"name": "shop",
"font_class": "shop",
"unicode": "e62f",
"unicode_decimal": 58927
},
{
"icon_id": "24813795",
"name": "headphones",
"font_class": "headphones",
"unicode": "e630",
"unicode_decimal": 58928
},
{
"icon_id": "24813796",
"name": "cart",
"font_class": "cart",
"unicode": "e631",
"unicode_decimal": 58929
}
]
};
const getVal = (val) => {
const reg = /^[0-9]*$/g;
return typeof val === "number" || reg.test(val) ? val + "px" : val;
};
const _sfc_main$d = {
name: "UniIcons",
emits: ["click"],
props: {
type: {
type: String,
default: ""
},
color: {
type: String,
default: "#333333"
},
size: {
type: [Number, String],
default: 16
},
customPrefix: {
type: String,
default: ""
}
},
data() {
return {
icons: icons.glyphs
};
},
computed: {
unicode() {
let code2 = this.icons.find((v2) => v2.font_class === this.type);
if (code2) {
return unescape(`%u${code2.unicode}`);
}
return "";
},
iconSize() {
return getVal(this.size);
}
},
methods: {
_onClick() {
this.$emit("click");
}
}
};
function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createElementBlock(
"text",
{
style: vue.normalizeStyle({ color: $props.color, "font-size": $options.iconSize }),
class: vue.normalizeClass(["uni-icons", ["uniui-" + $props.type, $props.customPrefix, $props.customPrefix ? $props.type : ""]]),
onClick: _cache[0] || (_cache[0] = (...args) => $options._onClick && $options._onClick(...args))
},
null,
6
/* CLASS, STYLE */
);
}
const __easycom_0$2 = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["render", _sfc_render$4], ["__scopeId", "data-v-d31e1c47"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/uni_modules/uni-icons/components/uni-icons/uni-icons.vue"]]);
const _sfc_main$c = {
name: "uni-data-select",
mixins: [$s.mixinDatacom || {}],
props: {
localdata: {
type: Array,
default() {
return [];
}
},
value: {
type: [String, Number],
default: ""
},
modelValue: {
type: [String, Number],
default: ""
},
label: {
type: String,
default: ""
},
placeholder: {
type: String,
default: "请选择"
},
emptyTips: {
type: String,
default: "无选项"
},
clear: {
type: Boolean,
default: true
},
defItem: {
type: Number,
default: 0
},
disabled: {
type: Boolean,
default: false
},
// 格式化输出 用法 field="_id as value, version as text, uni_platform as label" format="{label} - {text}"
format: {
type: String,
default: ""
}
},
data() {
return {
showSelector: false,
current: "",
mixinDatacomResData: [],
apps: [],
channels: [],
cacheKey: "uni-data-select-lastSelectedValue"
};
},
created() {
this.debounceGet = this.debounce(() => {
this.query();
}, 300);
if (this.collection && !this.localdata.length) {
this.debounceGet();
}
},
computed: {
typePlaceholder() {
const text = {
"opendb-stat-app-versions": "版本",
"opendb-app-channels": "渠道",
"opendb-app-list": "应用"
};
const common = this.placeholder;
const placeholder = text[this.collection];
return placeholder ? common + placeholder : common;
},
valueCom() {
return this.modelValue;
}
},
watch: {
localdata: {
immediate: true,
handler(val, old) {
if (Array.isArray(val) && old !== val) {
this.mixinDatacomResData = val;
}
}
},
valueCom(val, old) {
this.initDefVal();
},
mixinDatacomResData: {
immediate: true,
handler(val) {
if (val.length) {
this.initDefVal();
}
}
}
},
methods: {
debounce(fn, time = 100) {
let timer = null;
return function(...args) {
if (timer)
clearTimeout(timer);
timer = setTimeout(() => {
fn.apply(this, args);
}, time);
};
},
// 执行数据库查询
query() {
this.mixinDatacomEasyGet();
},
// 监听查询条件变更事件
onMixinDatacomPropsChange() {
if (this.collection) {
this.debounceGet();
}
},
initDefVal() {
let defValue = "";
if ((this.valueCom || this.valueCom === 0) && !this.isDisabled(this.valueCom)) {
defValue = this.valueCom;
} else {
let strogeValue;
if (this.collection) {
strogeValue = this.getCache();
}
if (strogeValue || strogeValue === 0) {
defValue = strogeValue;
} else {
let defItem = "";
if (this.defItem > 0 && this.defItem <= this.mixinDatacomResData.length) {
defItem = this.mixinDatacomResData[this.defItem - 1].value;
}
defValue = defItem;
}
if (defValue || defValue === 0) {
this.emit(defValue);
}
}
const def = this.mixinDatacomResData.find((item) => item.value === defValue);
this.current = def ? this.formatItemName(def) : "";
},
/**
* @param {[String, Number]} value
* 判断用户给的 value 是否同时为禁用状态
*/
isDisabled(value) {
let isDisabled = false;
this.mixinDatacomResData.forEach((item) => {
if (item.value === value) {
isDisabled = item.disable;
}
});
return isDisabled;
},
clearVal() {
this.emit("");
if (this.collection) {
this.removeCache();
}
},
change(item) {
if (!item.disable) {
this.showSelector = false;
this.current = this.formatItemName(item);
this.emit(item.value);
}
},
emit(val) {
this.$emit("input", val);
this.$emit("update:modelValue", val);
this.$emit("change", val);
if (this.collection) {
this.setCache(val);
}
},
toggleSelector() {
if (this.disabled) {
return;
}
this.showSelector = !this.showSelector;
},
formatItemName(item) {
let {
text,
value,
channel_code
} = item;
channel_code = channel_code ? `(${channel_code})` : "";
if (this.format) {
let str = "";
str = this.format;
for (let key in item) {
str = str.replace(new RegExp(`{${key}}`, "g"), item[key]);
}
return str;
} else {
return this.collection.indexOf("app-list") > 0 ? `${text}(${value})` : text ? text : `未命名${channel_code}`;
}
},
// 获取当前加载的数据
getLoadData() {
return this.mixinDatacomResData;
},
// 获取当前缓存key
getCurrentCacheKey() {
return this.collection;
},
// 获取缓存
getCache(name = this.getCurrentCacheKey()) {
let cacheData = uni.getStorageSync(this.cacheKey) || {};
return cacheData[name];
},
// 设置缓存
setCache(value, name = this.getCurrentCacheKey()) {
let cacheData = uni.getStorageSync(this.cacheKey) || {};
cacheData[name] = value;
uni.setStorageSync(this.cacheKey, cacheData);
},
// 删除缓存
removeCache(name = this.getCurrentCacheKey()) {
let cacheData = uni.getStorageSync(this.cacheKey) || {};
delete cacheData[name];
uni.setStorageSync(this.cacheKey, cacheData);
}
}
};
function _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {
const _component_uni_icons = resolveEasycom(vue.resolveDynamicComponent("uni-icons"), __easycom_0$2);
return vue.openBlock(), vue.createElementBlock("view", { class: "uni-stat__select" }, [
$props.label ? (vue.openBlock(), vue.createElementBlock(
"span",
{
key: 0,
class: "uni-label-text hide-on-phone"
},
vue.toDisplayString($props.label + ":"),
1
/* TEXT */
)) : vue.createCommentVNode("v-if", true),
vue.createElementVNode(
"view",
{
class: vue.normalizeClass(["uni-stat-box", { "uni-stat__actived": $data.current }])
},
[
vue.createElementVNode(
"view",
{
class: vue.normalizeClass(["uni-select", { "uni-select--disabled": $props.disabled }])
},
[
vue.createElementVNode("view", {
class: "uni-select__input-box",
onClick: _cache[1] || (_cache[1] = (...args) => $options.toggleSelector && $options.toggleSelector(...args))
}, [
$data.current ? (vue.openBlock(), vue.createElementBlock(
"view",
{
key: 0,
class: "uni-select__input-text"
},
vue.toDisplayString($data.current),
1
/* TEXT */
)) : (vue.openBlock(), vue.createElementBlock(
"view",
{
key: 1,
class: "uni-select__input-text uni-select__input-placeholder"
},
vue.toDisplayString($options.typePlaceholder),
1
/* TEXT */
)),
$data.current && $props.clear && !$props.disabled ? (vue.openBlock(), vue.createElementBlock("view", {
key: 2,
onClick: _cache[0] || (_cache[0] = vue.withModifiers((...args) => $options.clearVal && $options.clearVal(...args), ["stop"]))
}, [
vue.createVNode(_component_uni_icons, {
type: "clear",
color: "#c0c4cc",
size: "24"
})
])) : (vue.openBlock(), vue.createElementBlock("view", { key: 3 }, [
vue.createVNode(_component_uni_icons, {
type: $data.showSelector ? "top" : "bottom",
size: "14",
color: "#999"
}, null, 8, ["type"])
]))
]),
$data.showSelector ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "uni-select--mask",
onClick: _cache[2] || (_cache[2] = (...args) => $options.toggleSelector && $options.toggleSelector(...args))
})) : vue.createCommentVNode("v-if", true),
$data.showSelector ? (vue.openBlock(), vue.createElementBlock("view", {
key: 1,
class: "uni-select__selector"
}, [
vue.createElementVNode("view", { class: "uni-popper__arrow" }),
vue.createElementVNode("scroll-view", {
"scroll-y": "true",
class: "uni-select__selector-scroll"
}, [
$data.mixinDatacomResData.length === 0 ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "uni-select__selector-empty"
}, [
vue.createElementVNode(
"text",
null,
vue.toDisplayString($props.emptyTips),
1
/* TEXT */
)
])) : (vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
{ key: 1 },
vue.renderList($data.mixinDatacomResData, (item, index2) => {
return vue.openBlock(), vue.createElementBlock("view", {
class: "uni-select__selector-item",
key: index2,
onClick: ($event) => $options.change(item)
}, [
vue.createElementVNode(
"text",
{
class: vue.normalizeClass({ "uni-select__selector__disabled": item.disable })
},
vue.toDisplayString($options.formatItemName(item)),
3
/* TEXT, CLASS */
)
], 8, ["onClick"]);
}),
128
/* KEYED_FRAGMENT */
))
])
])) : vue.createCommentVNode("v-if", true)
],
2
/* CLASS */
)
],
2
/* CLASS */
)
]);
}
const __easycom_0$1 = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["render", _sfc_render$3], ["__scopeId", "data-v-ddf9e0a2"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue"]]);
const _sfc_main$b = {
__name: "irrigate",
setup(__props) {
const range2 = vue.reactive([
{
value: 0,
text: "喷灌"
},
{
value: 1,
text: "滴灌"
},
{
value: 2,
text: "沟灌"
}
]);
const calendar2 = vue.ref(null);
const form = vue.ref(null);
const openDate = () => {
calendar2.value.open();
};
const formData = vue.reactive({
breed: ""
});
const dateConfirmfn = (e2) => {
formatAppLog("log", "at pages/husbandryForm/irrigate.vue:112", e2);
};
const rules2 = {
"formData.breed": {
type: "string",
required: true,
message: "请填写姓名",
trigger: ["blur", "change"]
}
};
const addFn = () => {
form.value.validate().then((res) => {
formatAppLog("log", "at pages/husbandryForm/irrigate.vue:129", 6);
}).catch((errors) => {
uni.$u.toast("校验失败");
});
console.log();
return;
};
const updateImgFn = async () => {
if (mode.value == "detail")
return;
let res = await uplodeImg();
formData.buy_cert = res.data.image;
};
const mode = vue.ref("add");
onLoad((options) => {
if (options.task_id) {
mode.value = "detail";
}
});
return (_ctx, _cache) => {
const _component_uni_data_select = resolveEasycom(vue.resolveDynamicComponent("uni-data-select"), __easycom_0$1);
const _component_u_form_item = resolveEasycom(vue.resolveDynamicComponent("u-form-item"), __easycom_1$1);
const _component_up_input = resolveEasycom(vue.resolveDynamicComponent("up-input"), __easycom_0$3);
const _component_u__image = resolveEasycom(vue.resolveDynamicComponent("u--image"), __easycom_0$7);
const _component_u__textarea = resolveEasycom(vue.resolveDynamicComponent("u--textarea"), __easycom_3$1);
const _component_u__form = resolveEasycom(vue.resolveDynamicComponent("u--form"), __easycom_3);
const _component_uni_calendar = resolveEasycom(vue.resolveDynamicComponent("uni-calendar"), __easycom_5);
return vue.openBlock(), vue.createElementBlock(
vue.Fragment,
null,
[
vue.createCommentVNode(" 播种 "),
vue.createElementVNode("view", { class: "content" }, [
vue.createElementVNode("view", { class: "card" }, [
vue.createVNode(_component_u__form, {
labelPosition: "top",
labelWidth: "100",
model: formData,
rules: rules2,
ref_key: "form",
ref: form
}, {
default: vue.withCtx(() => [
vue.createVNode(
_component_u_form_item,
{
label: "灌溉方式",
prop: "formData.breed",
borderBottom: "",
ref: "item1",
required: ""
},
{
default: vue.withCtx(() => [
vue.createVNode(_component_uni_data_select, {
modelValue: formData.breed,
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => formData.breed = $event),
disabled: mode.value == "detail",
localdata: range2
}, null, 8, ["modelValue", "disabled", "localdata"])
]),
_: 1
/* STABLE */
},
512
/* NEED_PATCH */
),
vue.createVNode(_component_u_form_item, {
label: "开始日期",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请选择日期",
onBlur: openDate,
disabled: mode.value == "detail",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_u_form_item, {
label: "结束日期",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请选择日期",
onBlur: openDate,
disabled: mode.value == "detail",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_u_form_item, {
label: "作业地块",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入作业地块",
disabled: mode.value == "detail",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_u_form_item, {
label: "作业面积",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入作业面积",
disabled: mode.value == "detail",
type: "number",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_u_form_item, {
label: "参与人",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入参与人",
type: "number",
disabled: mode.value == "detail",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createElementVNode("view", { class: "card-li" }, [
vue.createElementVNode("view", { class: "card-li-tit" }, " 灌溉图片 "),
vue.createElementVNode("view", { class: "code-img" }, [
vue.createElementVNode("view", {
class: "",
onClick: updateImgFn
}, [
formData.buy_cert ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: ""
}, [
vue.createVNode(_component_u__image, {
src: formData.buy_cert,
width: "637.85rpx",
height: "350.47rpx"
}, null, 8, ["src"])
])) : (vue.openBlock(), vue.createElementBlock("view", {
key: 1,
class: "carime-icon"
}, [
vue.createVNode(_component_u__image, {
src: "/static/img/DJSC.png",
width: "91.12rpx",
height: "91.12rpx"
}),
vue.createElementVNode("view", { class: "" }, " 点击上传图片 ")
]))
])
])
]),
vue.createVNode(_component_u_form_item, {
label: "备注",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_u__textarea, {
modelValue: formData.breed,
"onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => formData.breed = $event),
disabled: mode.value == "detail",
placeholder: "请输入内容"
}, null, 8, ["modelValue", "disabled"])
]),
_: 1
/* STABLE */
})
]),
_: 1
/* STABLE */
}, 8, ["model"]),
vue.createElementVNode("view", null, [
vue.createVNode(
_component_uni_calendar,
{
ref_key: "calendar",
ref: calendar2,
showMonth: true,
lunar: true,
insert: false,
onConfirm: dateConfirmfn
},
null,
512
/* NEED_PATCH */
)
])
]),
mode.value == "add" ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "confirm"
}, [
vue.createElementVNode("view", {
class: "confirm-btn",
style: { "color": "white", "background-color": "#0AA565" },
onClick: addFn
}, " 完成添加 ")
])) : vue.createCommentVNode("v-if", true)
])
],
2112
/* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
);
};
}
};
const PagesHusbandryFormIrrigate = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-b8bc12f2"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/pages/husbandryForm/irrigate.vue"]]);
const _sfc_main$a = {
__name: "weeding",
setup(__props) {
const calendar2 = vue.ref(null);
const form = vue.ref(null);
const openDate = () => {
calendar2.value.open();
};
const formData = vue.reactive({
breed: ""
});
const dateConfirmfn = (e2) => {
formatAppLog("log", "at pages/husbandryForm/weeding.vue:106", e2);
};
const rules2 = {
"formData.breed": {
type: "string",
required: true,
message: "请填写姓名",
trigger: ["blur", "change"]
}
};
const addFn = () => {
form.value.validate().then((res) => {
formatAppLog("log", "at pages/husbandryForm/weeding.vue:123", 6);
}).catch((errors) => {
uni.$u.toast("校验失败");
});
console.log();
return;
};
const updateImgFn = async () => {
if (mode.value == "detail")
return;
let res = await uplodeImg();
formData.buy_cert = res.data.image;
};
const mode = vue.ref("add");
onLoad((options) => {
if (options.task_id) {
mode.value = "detail";
}
});
return (_ctx, _cache) => {
const _component_up_input = resolveEasycom(vue.resolveDynamicComponent("up-input"), __easycom_0$3);
const _component_u_form_item = resolveEasycom(vue.resolveDynamicComponent("u-form-item"), __easycom_1$1);
const _component_u__image = resolveEasycom(vue.resolveDynamicComponent("u--image"), __easycom_0$7);
const _component_u__textarea = resolveEasycom(vue.resolveDynamicComponent("u--textarea"), __easycom_3$1);
const _component_u__form = resolveEasycom(vue.resolveDynamicComponent("u--form"), __easycom_3);
const _component_uni_calendar = resolveEasycom(vue.resolveDynamicComponent("uni-calendar"), __easycom_5);
return vue.openBlock(), vue.createElementBlock(
vue.Fragment,
null,
[
vue.createCommentVNode(" 播种 "),
vue.createElementVNode("view", { class: "content" }, [
vue.createElementVNode("view", { class: "card" }, [
vue.createVNode(_component_u__form, {
labelPosition: "top",
labelWidth: "100",
model: formData,
rules: rules2,
ref_key: "form",
ref: form
}, {
default: vue.withCtx(() => [
vue.createVNode(
_component_u_form_item,
{
label: "除草剂种类",
prop: "formData.breed",
borderBottom: "",
ref: "item1",
required: ""
},
{
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入除草剂种类",
disabled: mode.value == "detail",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
},
512
/* NEED_PATCH */
),
vue.createVNode(_component_u_form_item, {
label: "除草剂品牌",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入除草剂品牌",
disabled: mode.value == "detail",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_u_form_item, {
label: "除草剂用量",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入除草剂用量",
disabled: mode.value == "detail",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_u_form_item, {
label: "开始日期",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请选择日期",
onBlur: openDate,
disabled: mode.value == "detail",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_u_form_item, {
label: "结束日期",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请选择日期",
onBlur: openDate,
disabled: mode.value == "detail",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_u_form_item, {
label: "作业地块",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入作业地块",
disabled: mode.value == "detail",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_u_form_item, {
label: "作业面积",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入作业面积",
disabled: mode.value == "detail",
type: "number",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_u_form_item, {
label: "参与人",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入参与人",
disabled: mode.value == "detail",
type: "number",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createElementVNode("view", { class: "card-li" }, [
vue.createElementVNode("view", { class: "card-li-tit" }, " 除草图片 "),
vue.createElementVNode("view", { class: "code-img" }, [
vue.createElementVNode("view", {
class: "",
onClick: updateImgFn
}, [
formData.buy_cert ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: ""
}, [
vue.createVNode(_component_u__image, {
src: formData.buy_cert,
width: "637.85rpx",
height: "350.47rpx"
}, null, 8, ["src"])
])) : (vue.openBlock(), vue.createElementBlock("view", {
key: 1,
class: "carime-icon"
}, [
vue.createVNode(_component_u__image, {
src: "/static/img/DJSC.png",
width: "91.12rpx",
height: "91.12rpx"
}),
vue.createElementVNode("view", { class: "" }, " 点击上传图片 ")
]))
])
])
]),
vue.createVNode(_component_u_form_item, {
label: "备注",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_u__textarea, {
modelValue: formData.breed,
"onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => formData.breed = $event),
disabled: mode.value == "detail",
placeholder: "请输入内容"
}, null, 8, ["modelValue", "disabled"])
]),
_: 1
/* STABLE */
})
]),
_: 1
/* STABLE */
}, 8, ["model"]),
vue.createElementVNode("view", null, [
vue.createVNode(
_component_uni_calendar,
{
ref_key: "calendar",
ref: calendar2,
showMonth: true,
lunar: true,
insert: false,
onConfirm: dateConfirmfn
},
null,
512
/* NEED_PATCH */
)
])
]),
mode.value == "add" ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "confirm"
}, [
vue.createElementVNode("view", {
class: "confirm-btn",
style: { "color": "white", "background-color": "#0AA565" },
onClick: addFn
}, " 完成添加 ")
])) : vue.createCommentVNode("v-if", true)
])
],
2112
/* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
);
};
}
};
const PagesHusbandryFormWeeding = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["__scopeId", "data-v-a985c0e4"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/pages/husbandryForm/weeding.vue"]]);
const _sfc_main$9 = {
__name: "fertilize",
setup(__props) {
const calendar2 = vue.ref(null);
const form = vue.ref(null);
const openDate = () => {
calendar2.value.open();
};
const formData = vue.reactive({
breed: ""
});
const dateConfirmfn = (e2) => {
formatAppLog("log", "at pages/husbandryForm/fertilize.vue:106", e2);
};
const rules2 = {
"formData.breed": {
type: "string",
required: true,
message: "请填写姓名",
trigger: ["blur", "change"]
}
};
const addFn = () => {
form.value.validate().then((res) => {
formatAppLog("log", "at pages/husbandryForm/fertilize.vue:123", 6);
}).catch((errors) => {
uni.$u.toast("校验失败");
});
console.log();
return;
};
const updateImgFn = async () => {
if (mode.value == "detail")
return;
let res = await uplodeImg();
formData.buy_cert = res.data.image;
};
const mode = vue.ref("add");
onLoad((options) => {
if (options.task_id) {
mode.value = "detail";
}
});
return (_ctx, _cache) => {
const _component_up_input = resolveEasycom(vue.resolveDynamicComponent("up-input"), __easycom_0$3);
const _component_u_form_item = resolveEasycom(vue.resolveDynamicComponent("u-form-item"), __easycom_1$1);
const _component_u__image = resolveEasycom(vue.resolveDynamicComponent("u--image"), __easycom_0$7);
const _component_u__textarea = resolveEasycom(vue.resolveDynamicComponent("u--textarea"), __easycom_3$1);
const _component_u__form = resolveEasycom(vue.resolveDynamicComponent("u--form"), __easycom_3);
const _component_uni_calendar = resolveEasycom(vue.resolveDynamicComponent("uni-calendar"), __easycom_5);
return vue.openBlock(), vue.createElementBlock(
vue.Fragment,
null,
[
vue.createCommentVNode(" 播种 "),
vue.createElementVNode("view", { class: "content" }, [
vue.createElementVNode("view", { class: "card" }, [
vue.createVNode(_component_u__form, {
labelPosition: "top",
labelWidth: "100",
model: formData,
rules: rules2,
ref_key: "form",
ref: form
}, {
default: vue.withCtx(() => [
vue.createVNode(
_component_u_form_item,
{
label: "肥料种类",
prop: "formData.breed",
borderBottom: "",
ref: "item1",
required: ""
},
{
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入肥料种类",
disabled: mode.value == "detail",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
},
512
/* NEED_PATCH */
),
vue.createVNode(_component_u_form_item, {
label: "肥料品牌",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入肥料品牌",
disabled: mode.value == "detail",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_u_form_item, {
label: "肥料用量",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入肥料用量",
border: "surround",
disabled: mode.value == "detail",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_u_form_item, {
label: "开始日期",
onClick: openDate,
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请选择日期",
onBlur: openDate,
disabled: mode.value == "detail",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_u_form_item, {
label: "结束日期",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请选择日期",
onBlur: openDate,
disabled: mode.value == "detail",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_u_form_item, {
label: "作业地块",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入作业地块",
disabled: mode.value == "detail",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_u_form_item, {
label: "作业面积",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入作业面积",
disabled: mode.value == "detail",
type: "number",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_u_form_item, {
label: "参与人",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入参与人",
disabled: mode.value == "detail",
type: "number",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createElementVNode("view", { class: "card-li" }, [
vue.createElementVNode("view", { class: "card-li-tit" }, " 施肥图片 "),
vue.createElementVNode("view", { class: "code-img" }, [
vue.createElementVNode("view", {
class: "",
onClick: updateImgFn
}, [
formData.buy_cert ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: ""
}, [
vue.createVNode(_component_u__image, {
src: formData.buy_cert,
width: "637.85rpx",
height: "350.47rpx"
}, null, 8, ["src"])
])) : (vue.openBlock(), vue.createElementBlock("view", {
key: 1,
class: "carime-icon"
}, [
vue.createVNode(_component_u__image, {
src: "/static/img/DJSC.png",
width: "91.12rpx",
height: "91.12rpx"
}),
vue.createElementVNode("view", { class: "" })
]))
])
])
]),
vue.createVNode(_component_u_form_item, {
label: "备注",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_u__textarea, {
modelValue: formData.breed,
"onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => formData.breed = $event),
disabled: mode.value == "detail",
placeholder: "请输入内容"
}, null, 8, ["modelValue", "disabled"])
]),
_: 1
/* STABLE */
})
]),
_: 1
/* STABLE */
}, 8, ["model"]),
vue.createElementVNode("view", null, [
vue.createVNode(
_component_uni_calendar,
{
ref_key: "calendar",
ref: calendar2,
showMonth: true,
lunar: true,
insert: false,
onConfirm: dateConfirmfn
},
null,
512
/* NEED_PATCH */
)
])
]),
mode.value == "add" ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "confirm"
}, [
vue.createElementVNode("view", {
class: "confirm-btn",
style: { "color": "white", "background-color": "#0AA565" },
onClick: addFn
}, " 完成添加 ")
])) : vue.createCommentVNode("v-if", true)
])
],
2112
/* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
);
};
}
};
const PagesHusbandryFormFertilize = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["__scopeId", "data-v-3fd07837"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/pages/husbandryForm/fertilize.vue"]]);
const _sfc_main$8 = {
__name: "sow",
setup(__props) {
const calendar2 = vue.ref(null);
const form = vue.ref(null);
const openDate = () => {
calendar2.value.open();
};
const formData = vue.reactive({
breed: ""
});
const dateConfirmfn = (e2) => {
formatAppLog("log", "at pages/husbandryForm/sow.vue:99", e2);
};
const rules2 = {
"formData.breed": {
type: "string",
required: true,
message: "请填写姓名",
trigger: ["blur", "change"]
}
};
const addFn = () => {
form.value.validate().then((res) => {
formatAppLog("log", "at pages/husbandryForm/sow.vue:116", 6);
}).catch((errors) => {
uni.$u.toast("校验失败");
});
console.log();
return;
};
const updateImgFn = async () => {
if (mode.value == "detail")
return;
let res = await uplodeImg();
formData.buy_cert = res.data.image;
};
const mode = vue.ref("add");
onLoad((options) => {
if (options.task_id) {
mode.value = "detail";
}
});
return (_ctx, _cache) => {
const _component_up_input = resolveEasycom(vue.resolveDynamicComponent("up-input"), __easycom_0$3);
const _component_u_form_item = resolveEasycom(vue.resolveDynamicComponent("u-form-item"), __easycom_1$1);
const _component_u__image = resolveEasycom(vue.resolveDynamicComponent("u--image"), __easycom_0$7);
const _component_u__textarea = resolveEasycom(vue.resolveDynamicComponent("u--textarea"), __easycom_3$1);
const _component_u__form = resolveEasycom(vue.resolveDynamicComponent("u--form"), __easycom_3);
const _component_uni_calendar = resolveEasycom(vue.resolveDynamicComponent("uni-calendar"), __easycom_5);
return vue.openBlock(), vue.createElementBlock(
vue.Fragment,
null,
[
vue.createCommentVNode(" 播种 "),
vue.createElementVNode("view", { class: "content" }, [
vue.createElementVNode("view", { class: "card" }, [
vue.createVNode(_component_u__form, {
labelPosition: "top",
labelWidth: "100",
model: formData,
rules: rules2,
ref_key: "form",
ref: form
}, {
default: vue.withCtx(() => [
vue.createVNode(
_component_u_form_item,
{
label: "种植种类",
prop: "formData.breed",
borderBottom: "",
ref: "item1",
required: ""
},
{
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入种植种类",
disabled: mode.value == "detail",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
},
512
/* NEED_PATCH */
),
vue.createVNode(_component_u_form_item, {
label: "种植品种",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入品种",
disabled: mode.value == "detail",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_u_form_item, {
label: "开始日期",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请选择日期",
onBlur: openDate,
disabled: mode.value == "detail",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_u_form_item, {
label: "作业地块",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入作业地块",
disabled: mode.value == "detail",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_u_form_item, {
label: "种植面积",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入种植面积",
disabled: mode.value == "detail",
type: "number",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_u_form_item, {
label: "参与人",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入参与人",
disabled: mode.value == "detail",
type: "number",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => formData.breed = $event)
}, null, 8, ["disabled", "modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createElementVNode("view", { class: "card-li" }, [
vue.createElementVNode("view", { class: "card-li-tit" }, " 种植图片 "),
vue.createElementVNode("view", { class: "code-img" }, [
vue.createElementVNode("view", {
class: "",
onClick: updateImgFn
}, [
formData.buy_cert ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: ""
}, [
vue.createVNode(_component_u__image, {
src: formData.buy_cert,
width: "637.85rpx",
height: "350.47rpx"
}, null, 8, ["src"])
])) : (vue.openBlock(), vue.createElementBlock("view", {
key: 1,
class: "carime-icon"
}, [
vue.createVNode(_component_u__image, {
src: "/static/img/DJSC.png",
width: "91.12rpx",
height: "91.12rpx"
}),
vue.createElementVNode("view", { class: "" }, " 点击上传图片 ")
]))
])
])
]),
vue.createVNode(_component_u_form_item, {
label: "备注",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_u__textarea, {
modelValue: formData.breed,
"onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => formData.breed = $event),
disabled: mode.value == "detail",
placeholder: "请输入内容"
}, null, 8, ["modelValue", "disabled"])
]),
_: 1
/* STABLE */
})
]),
_: 1
/* STABLE */
}, 8, ["model"]),
vue.createElementVNode("view", null, [
vue.createVNode(
_component_uni_calendar,
{
ref_key: "calendar",
ref: calendar2,
showMonth: true,
lunar: true,
insert: false,
onConfirm: dateConfirmfn
},
null,
512
/* NEED_PATCH */
)
])
]),
mode.value == "add" ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "confirm"
}, [
vue.createElementVNode("view", {
class: "confirm-btn",
style: { "color": "white", "background-color": "#0AA565" },
onClick: addFn
}, " 完成添加 ")
])) : vue.createCommentVNode("v-if", true)
])
],
2112
/* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
);
};
}
};
const PagesHusbandryFormSow = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-8efd73ec"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/pages/husbandryForm/sow.vue"]]);
const _sfc_main$7 = {
__name: "addLand",
setup(__props) {
const form = vue.ref(null);
const formData = vue.reactive({
breed: ""
});
const rules2 = {
"formData.breed": {
type: "string",
required: true,
message: "请填写姓名",
trigger: ["blur", "change"]
}
};
const addFn = () => {
form.value.validate().then((res) => {
formatAppLog("log", "at pages/addLand/addLand.vue:101", 6);
}).catch((errors) => {
uni.$u.toast("校验失败");
});
console.log();
return;
};
const updateImgFn = async () => {
let res = await uplodeImg();
formData.buy_cert = res.data.image;
};
onLoad((options) => {
});
return (_ctx, _cache) => {
const _component_up_input = resolveEasycom(vue.resolveDynamicComponent("up-input"), __easycom_0$3);
const _component_u_form_item = resolveEasycom(vue.resolveDynamicComponent("u-form-item"), __easycom_1$1);
const _component_u__image = resolveEasycom(vue.resolveDynamicComponent("u--image"), __easycom_0$7);
const _component_u__form = resolveEasycom(vue.resolveDynamicComponent("u--form"), __easycom_3);
return vue.openBlock(), vue.createElementBlock("view", { class: "content" }, [
vue.createElementVNode("view", { class: "card" }, [
vue.createVNode(_component_u__form, {
labelPosition: "top",
labelWidth: "100",
model: formData,
rules: rules2,
ref_key: "form",
ref: form
}, {
default: vue.withCtx(() => [
vue.createVNode(
_component_u_form_item,
{
label: "土地名称",
prop: "formData.breed",
borderBottom: "",
ref: "item1",
required: ""
},
{
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入土地名称",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => formData.breed = $event)
}, null, 8, ["modelValue"])
]),
_: 1
/* STABLE */
},
512
/* NEED_PATCH */
),
vue.createVNode(_component_u_form_item, {
label: "土地面积",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入土地面积",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => formData.breed = $event)
}, null, 8, ["modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_u_form_item, {
label: "土地地址",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请选择土地地址",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => formData.breed = $event)
}, null, 8, ["modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_u_form_item, {
label: "土地负责人",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入土地负责人",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => formData.breed = $event)
}, null, 8, ["modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_u_form_item, {
label: "负责人电话",
prop: "formData.breed",
borderBottom: "",
required: ""
}, {
default: vue.withCtx(() => [
vue.createVNode(_component_up_input, {
placeholder: "请输入负责人电话",
type: "number",
border: "surround",
modelValue: formData.breed,
"onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => formData.breed = $event)
}, null, 8, ["modelValue"])
]),
_: 1
/* STABLE */
}),
vue.createElementVNode("view", { class: "card-li" }, [
vue.createElementVNode("view", { class: "card-li-tit" }, " 土地图片 "),
vue.createElementVNode("view", { class: "code-img" }, [
vue.createElementVNode("view", {
class: "",
onClick: updateImgFn
}, [
formData.buy_cert ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: ""
}, [
vue.createVNode(_component_u__image, {
src: formData.buy_cert,
width: "637.85rpx",
height: "350.47rpx"
}, null, 8, ["src"])
])) : (vue.openBlock(), vue.createElementBlock("view", {
key: 1,
class: "carime-icon"
}, [
vue.createVNode(_component_u__image, {
src: "/static/img/DJSC.png",
width: "91.12rpx",
height: "91.12rpx"
}),
vue.createElementVNode("view", { class: "" }, " 点击上传图片 ")
]))
])
])
])
]),
_: 1
/* STABLE */
}, 8, ["model"])
]),
vue.createCommentVNode(' \r\n +上传播种图片\r\n '),
vue.createElementVNode("view", { class: "confirm" }, [
vue.createElementVNode("view", {
class: "confirm-btn",
style: { "color": "white", "background-color": "#0AA565" },
onClick: addFn
}, " 完成添加 ")
]),
vue.createCommentVNode(' \r\n 今日播种\r\n ')
]);
};
}
};
const PagesAddLandAddLand = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__scopeId", "data-v-7e8a1f14"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/pages/addLand/addLand.vue"]]);
const props$1 = {
props: {
// 是否细边框
hairline: {
type: Boolean,
default: props$i.button.hairline
},
// 按钮的预置样式,info,primary,error,warning,success
type: {
type: String,
default: props$i.button.type
},
// 按钮尺寸,large,normal,small,mini
size: {
type: String,
default: props$i.button.size
},
// 按钮形状,circle(两边为半圆),square(带圆角)
shape: {
type: String,
default: props$i.button.shape
},
// 按钮是否镂空
plain: {
type: Boolean,
default: props$i.button.plain
},
// 是否禁止状态
disabled: {
type: Boolean,
default: props$i.button.disabled
},
// 是否加载中
loading: {
type: Boolean,
default: props$i.button.loading
},
// 加载中提示文字
loadingText: {
type: [String, Number],
default: props$i.button.loadingText
},
// 加载状态图标类型
loadingMode: {
type: String,
default: props$i.button.loadingMode
},
// 加载图标大小
loadingSize: {
type: [String, Number],
default: props$i.button.loadingSize
},
// 开放能力,具体请看uniapp稳定关于button组件部分说明
// https://uniapp.dcloud.io/component/button
openType: {
type: String,
default: props$i.button.openType
},
// 用于