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 icons = {
"uicon-level": "",
"uicon-column-line": "",
"uicon-checkbox-mark": "",
"uicon-folder": "",
"uicon-movie": "",
"uicon-star-fill": "",
"uicon-star": "",
"uicon-phone-fill": "",
"uicon-phone": "",
"uicon-apple-fill": "",
"uicon-chrome-circle-fill": "",
"uicon-backspace": "",
"uicon-attach": "",
"uicon-cut": "",
"uicon-empty-car": "",
"uicon-empty-coupon": "",
"uicon-empty-address": "",
"uicon-empty-favor": "",
"uicon-empty-permission": "",
"uicon-empty-news": "",
"uicon-empty-search": "",
"uicon-github-circle-fill": "",
"uicon-rmb": "",
"uicon-person-delete-fill": "",
"uicon-reload": "",
"uicon-order": "",
"uicon-server-man": "",
"uicon-search": "",
"uicon-fingerprint": "",
"uicon-more-dot-fill": "",
"uicon-scan": "",
"uicon-share-square": "",
"uicon-map": "",
"uicon-map-fill": "",
"uicon-tags": "",
"uicon-tags-fill": "",
"uicon-bookmark-fill": "",
"uicon-bookmark": "",
"uicon-eye": "",
"uicon-eye-fill": "",
"uicon-mic": "",
"uicon-mic-off": "",
"uicon-calendar": "",
"uicon-calendar-fill": "",
"uicon-trash": "",
"uicon-trash-fill": "",
"uicon-play-left": "",
"uicon-play-right": "",
"uicon-minus": "",
"uicon-plus": "",
"uicon-info": "",
"uicon-info-circle": "",
"uicon-info-circle-fill": "",
"uicon-question": "",
"uicon-error": "",
"uicon-close": "",
"uicon-checkmark": "",
"uicon-android-circle-fill": "",
"uicon-android-fill": "",
"uicon-ie": "",
"uicon-IE-circle-fill": "",
"uicon-google": "",
"uicon-google-circle-fill": "",
"uicon-setting-fill": "",
"uicon-setting": "",
"uicon-minus-square-fill": "",
"uicon-plus-square-fill": "",
"uicon-heart": "",
"uicon-heart-fill": "",
"uicon-camera": "",
"uicon-camera-fill": "",
"uicon-more-circle": "",
"uicon-more-circle-fill": "",
"uicon-chat": "",
"uicon-chat-fill": "",
"uicon-bag-fill": "",
"uicon-bag": "",
"uicon-error-circle-fill": "",
"uicon-error-circle": "",
"uicon-close-circle": "",
"uicon-close-circle-fill": "",
"uicon-checkmark-circle": "",
"uicon-checkmark-circle-fill": "",
"uicon-question-circle-fill": "",
"uicon-question-circle": "",
"uicon-share": "",
"uicon-share-fill": "",
"uicon-shopping-cart": "",
"uicon-shopping-cart-fill": "",
"uicon-bell": "",
"uicon-bell-fill": "",
"uicon-list": "",
"uicon-list-dot": "",
"uicon-zhihu": "",
"uicon-zhihu-circle-fill": "",
"uicon-zhifubao": "",
"uicon-zhifubao-circle-fill": "",
"uicon-weixin-circle-fill": "",
"uicon-weixin-fill": "",
"uicon-twitter-circle-fill": "",
"uicon-twitter": "",
"uicon-taobao-circle-fill": "",
"uicon-taobao": "",
"uicon-weibo-circle-fill": "",
"uicon-weibo": "",
"uicon-qq-fill": "",
"uicon-qq-circle-fill": "",
"uicon-moments-circel-fill": "",
"uicon-moments": "",
"uicon-qzone": "",
"uicon-qzone-circle-fill": "",
"uicon-baidu-circle-fill": "",
"uicon-baidu": "",
"uicon-facebook-circle-fill": "",
"uicon-facebook": "",
"uicon-car": "",
"uicon-car-fill": "",
"uicon-warning-fill": "",
"uicon-warning": "",
"uicon-clock-fill": "",
"uicon-clock": "",
"uicon-edit-pen": "",
"uicon-edit-pen-fill": "",
"uicon-email": "",
"uicon-email-fill": "",
"uicon-minus-circle": "",
"uicon-minus-circle-fill": "",
"uicon-plus-circle": "",
"uicon-plus-circle-fill": "",
"uicon-file-text": "",
"uicon-file-text-fill": "",
"uicon-pushpin": "",
"uicon-pushpin-fill": "",
"uicon-grid": "",
"uicon-grid-fill": "",
"uicon-play-circle": "",
"uicon-play-circle-fill": "",
"uicon-pause-circle-fill": "",
"uicon-pause": "",
"uicon-pause-circle": "",
"uicon-eye-off": "",
"uicon-eye-off-outline": "",
"uicon-gift-fill": "",
"uicon-gift": "",
"uicon-rmb-circle-fill": "",
"uicon-rmb-circle": "",
"uicon-kefu-ermai": "",
"uicon-server-fill": "",
"uicon-coupon-fill": "",
"uicon-coupon": "",
"uicon-integral": "",
"uicon-integral-fill": "",
"uicon-home-fill": "",
"uicon-home": "",
"uicon-hourglass-half-fill": "",
"uicon-hourglass": "",
"uicon-account": "",
"uicon-plus-people-fill": "",
"uicon-minus-people-fill": "",
"uicon-account-fill": "",
"uicon-thumb-down-fill": "",
"uicon-thumb-down": "",
"uicon-thumb-up": "",
"uicon-thumb-up-fill": "",
"uicon-lock-fill": "",
"uicon-lock-open": "",
"uicon-lock-opened-fill": "",
"uicon-lock": "",
"uicon-red-packet-fill": "",
"uicon-photo-fill": "",
"uicon-photo": "",
"uicon-volume-off-fill": "",
"uicon-volume-off": "",
"uicon-volume-fill": "",
"uicon-volume": "",
"uicon-red-packet": "",
"uicon-download": "",
"uicon-arrow-up-fill": "",
"uicon-arrow-down-fill": "",
"uicon-play-left-fill": "",
"uicon-play-right-fill": "",
"uicon-rewind-left-fill": "",
"uicon-rewind-right-fill": "",
"uicon-arrow-downward": "",
"uicon-arrow-leftward": "",
"uicon-arrow-rightward": "",
"uicon-arrow-upward": "",
"uicon-arrow-down": "",
"uicon-arrow-right": "",
"uicon-arrow-left": "",
"uicon-arrow-up": "",
"uicon-skip-back-left": "",
"uicon-skip-forward-right": "",
"uicon-rewind-right": "",
"uicon-rewind-left": "",
"uicon-arrow-right-double": "",
"uicon-arrow-left-double": "",
"uicon-wifi-off": "",
"uicon-wifi": "",
"uicon-empty-data": "",
"uicon-empty-history": "",
"uicon-empty-list": "",
"uicon-empty-page": "",
"uicon-empty-order": "",
"uicon-man": "",
"uicon-woman": "",
"uicon-man-add": "",
"uicon-man-add-fill": "",
"uicon-man-delete": "",
"uicon-man-delete-fill": "",
"uicon-zh": "",
"uicon-en": ""
};
const ON_LOAD = "onLoad";
function formatAppLog(type, filename, ...args) {
if (uni.__log__) {
uni.__log__(type, filename, ...args);
} else {
console[type].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 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$5
} = config$1;
const Icon = {
// icon组件
icon: {
name: "",
color: color$5["u-content-color"],
size: "16px",
bold: false,
index: "",
hoverClass: "",
customPrefix: "uicon",
label: "",
labelPos: "right",
labelSize: "15px",
labelColor: color$5["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$4
} = config$1;
const Link = {
// link超链接组件props参数
link: {
color: color$4["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$3
} = config$1;
const LoadingIcon = {
// loading-icon加载中图标组件
loadingIcon: {
show: true,
color: color$3["u-tips-color"],
textColor: color$3["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$2 = {
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$2.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 = {
// 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,
...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$1k = {
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["uicon-" + this.name] || this.name;
}
},
methods: {
clickHandler(e2) {
this.$emit("click", this.index);
this.stop && this.preventEvent(e2);
}
}
};
function _sfc_render$z(_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_0$7 = /* @__PURE__ */ _export_sfc(_sfc_main$1k, [["render", _sfc_render$z], ["__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$1j = {
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$y(_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$1 = /* @__PURE__ */ _export_sfc(_sfc_main$1j, [["render", _sfc_render$y], ["__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$1i = {
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$x(_ctx, _cache, $props, $setup, $data, $options) {
const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$7);
const _component_u_transition = resolveEasycom(vue.resolveDynamicComponent("u-transition"), __easycom_4$1);
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$6 = /* @__PURE__ */ _export_sfc(_sfc_main$1i, [["render", _sfc_render$x], ["__scopeId", "data-v-9d58ba7c"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/node_modules/uview-plus/components/u-image/u-image.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, method, 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: method || "GET",
header: {
...header
},
data: method != "GET" ? data || {} : {},
params: method == "GET" ? data : {},
success: (res) => {
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) => {
uni.showToast({
title: "网络错误",
icon: "none"
});
reject("请求失败");
}
});
});
}
const syhttp = {};
["options", "get", "post", "put", "head", "delete", "trace", "connect"].forEach((method) => {
syhttp[method] = (api, data, opt) => baseRequest(api, method, data, opt || {});
});
const userInfoAPI = (data) => syhttp.get("/user/userInfo", data);
const landInfoAPI = (data) => syhttp.get("/LandPlant/landInfo", data);
const AddlandInfoAPI = (data) => syhttp.post("/LandPlant/addLandCrop", data);
const addLandCropPicAPI = (data) => syhttp.post("/LandPlant/addLandCropPic", data);
const landEnvDataCurrAPI = (data) => syhttp.get("/LandPlant/landEnvDataCurr", data);
const setLandCropRipeAPI = (data) => syhttp.get("/LandPlant/setLandCropRipe", data);
const landCropPicListAPI = (data) => syhttp.get("/LandPlant/landCropPicList", data);
const actionsListAPI = (data) => syhttp.get("/user/actions", data);
const actionsDetailAPI = (data) => syhttp.get("/user/actionsDetail", data);
const landEnvDataChartAPI = (data) => syhttp.get("/LandPlant/landEnvDataChart", data);
const _sfc_main$1h = {
name: "uniTh",
options: {
virtualHost: true
},
components: {},
emits: ["sort-change", "filter-change"],
props: {
width: {
type: [String, Number],
default: ""
},
align: {
type: String,
default: "left"
},
rowspan: {
type: [Number, String],
default: 1
},
colspan: {
type: [Number, String],
default: 1
},
sortable: {
type: Boolean,
default: false
},
filterType: {
type: String,
default: ""
},
filterData: {
type: Array,
default() {
return [];
}
},
filterDefaultValue: {
type: [Array, String],
default() {
return "";
}
}
},
data() {
return {
border: false,
ascending: false,
descending: false
};
},
computed: {
// 根据props中的width属性 自动匹配当前th的宽度(px)
customWidth() {
if (typeof this.width === "number") {
return this.width;
} else if (typeof this.width === "string") {
let regexHaveUnitPx = new RegExp(/^[1-9][0-9]*px$/g);
let regexHaveUnitRpx = new RegExp(/^[1-9][0-9]*rpx$/g);
let regexHaveNotUnit = new RegExp(/^[1-9][0-9]*$/g);
if (this.width.match(regexHaveUnitPx) !== null) {
return this.width.replace("px", "");
} else if (this.width.match(regexHaveUnitRpx) !== null) {
let numberRpx = Number(this.width.replace("rpx", ""));
let widthCoe = uni.getSystemInfoSync().screenWidth / 750;
return Math.round(numberRpx * widthCoe);
} else if (this.width.match(regexHaveNotUnit) !== null) {
return this.width;
} else {
return "";
}
} else {
return "";
}
},
contentAlign() {
let align = "left";
switch (this.align) {
case "left":
align = "flex-start";
break;
case "center":
align = "center";
break;
case "right":
align = "flex-end";
break;
}
return align;
}
},
created() {
this.root = this.getTable("uniTable");
this.rootTr = this.getTable("uniTr");
this.rootTr.minWidthUpdate(this.customWidth ? this.customWidth : 140);
this.border = this.root.border;
this.root.thChildren.push(this);
},
methods: {
sort() {
if (!this.sortable)
return;
this.clearOther();
if (!this.ascending && !this.descending) {
this.ascending = true;
this.$emit("sort-change", { order: "ascending" });
return;
}
if (this.ascending && !this.descending) {
this.ascending = false;
this.descending = true;
this.$emit("sort-change", { order: "descending" });
return;
}
if (!this.ascending && this.descending) {
this.ascending = false;
this.descending = false;
this.$emit("sort-change", { order: null });
}
},
ascendingFn() {
this.clearOther();
this.ascending = !this.ascending;
this.descending = false;
this.$emit("sort-change", { order: this.ascending ? "ascending" : null });
},
descendingFn() {
this.clearOther();
this.descending = !this.descending;
this.ascending = false;
this.$emit("sort-change", { order: this.descending ? "descending" : null });
},
clearOther() {
this.root.thChildren.map((item) => {
if (item !== this) {
item.ascending = false;
item.descending = false;
}
return item;
});
},
ondropdown(e2) {
this.$emit("filter-change", e2);
},
/**
* 获取父元素实例
*/
getTable(name) {
let parent = this.$parent;
let parentName = parent.$options.name;
while (parentName !== name) {
parent = parent.$parent;
if (!parent)
return false;
parentName = parent.$options.name;
}
return parent;
}
}
};
function _sfc_render$w(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createElementBlock(
"view",
{
class: vue.normalizeClass(["uni-table-th", { "table--border": $data.border }]),
style: vue.normalizeStyle({ width: $options.customWidth + "px", "text-align": $props.align })
},
[
vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
],
6
/* CLASS, STYLE */
);
}
const __easycom_0$5 = /* @__PURE__ */ _export_sfc(_sfc_main$1h, [["render", _sfc_render$w], ["__scopeId", "data-v-bf970acd"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/uni_modules/uni-table/components/uni-th/uni-th.vue"]]);
const _sfc_main$1g = {
name: "TableCheckbox",
emits: ["checkboxSelected"],
props: {
indeterminate: {
type: Boolean,
default: false
},
checked: {
type: [Boolean, String],
default: false
},
disabled: {
type: Boolean,
default: false
},
index: {
type: Number,
default: -1
},
cellData: {
type: Object,
default() {
return {};
}
}
},
watch: {
checked(newVal) {
if (typeof this.checked === "boolean") {
this.isChecked = newVal;
} else {
this.isChecked = true;
}
},
indeterminate(newVal) {
this.isIndeterminate = newVal;
}
},
data() {
return {
isChecked: false,
isDisabled: false,
isIndeterminate: false
};
},
created() {
if (typeof this.checked === "boolean") {
this.isChecked = this.checked;
}
this.isDisabled = this.disabled;
},
methods: {
selected() {
if (this.isDisabled)
return;
this.isIndeterminate = false;
this.isChecked = !this.isChecked;
this.$emit("checkboxSelected", {
checked: this.isChecked,
data: this.cellData
});
}
}
};
function _sfc_render$v(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createElementBlock("view", {
class: "uni-table-checkbox",
onClick: _cache[0] || (_cache[0] = (...args) => $options.selected && $options.selected(...args))
}, [
!$props.indeterminate ? (vue.openBlock(), vue.createElementBlock(
"view",
{
key: 0,
class: vue.normalizeClass(["checkbox__inner", { "is-checked": $data.isChecked, "is-disable": $data.isDisabled }])
},
[
vue.createElementVNode("view", { class: "checkbox__inner-icon" })
],
2
/* CLASS */
)) : (vue.openBlock(), vue.createElementBlock("view", {
key: 1,
class: "checkbox__inner checkbox--indeterminate"
}, [
vue.createElementVNode("view", { class: "checkbox__inner-icon" })
]))
]);
}
const tableCheckbox = /* @__PURE__ */ _export_sfc(_sfc_main$1g, [["render", _sfc_render$v], ["__scopeId", "data-v-25e435b1"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/uni_modules/uni-table/components/uni-tr/table-checkbox.vue"]]);
const _sfc_main$1f = {
name: "uniTr",
components: { tableCheckbox },
props: {
disabled: {
type: Boolean,
default: false
},
keyValue: {
type: [String, Number],
default: ""
}
},
options: {
virtualHost: true
},
data() {
return {
value: false,
border: false,
selection: false,
widthThArr: [],
ishead: true,
checked: false,
indeterminate: false
};
},
created() {
this.root = this.getTable();
this.head = this.getTable("uniThead");
if (this.head) {
this.ishead = false;
this.head.init(this);
}
this.border = this.root.border;
this.selection = this.root.type;
this.root.trChildren.push(this);
const rowData = this.root.data.find((v2) => v2[this.root.rowKey] === this.keyValue);
if (rowData) {
this.rowData = rowData;
}
this.root.isNodata();
},
mounted() {
if (this.widthThArr.length > 0) {
const selectionWidth = this.selection === "selection" ? 50 : 0;
this.root.minWidth = this.widthThArr.reduce((a2, b2) => Number(a2) + Number(b2)) + selectionWidth;
}
},
unmounted() {
const index2 = this.root.trChildren.findIndex((i2) => i2 === this);
this.root.trChildren.splice(index2, 1);
this.root.isNodata();
},
methods: {
minWidthUpdate(width) {
this.widthThArr.push(width);
},
// 选中
checkboxSelected(e2) {
let rootData = this.root.data.find((v2) => v2[this.root.rowKey] === this.keyValue);
this.checked = e2.checked;
this.root.check(rootData || this, e2.checked, rootData ? this.keyValue : null);
},
change(e2) {
this.root.trChildren.forEach((item) => {
if (item === this) {
this.root.check(this, e2.detail.value.length > 0 ? true : false);
}
});
},
/**
* 获取父元素实例
*/
getTable(name = "uniTable") {
let parent = this.$parent;
let parentName = parent.$options.name;
while (parentName !== name) {
parent = parent.$parent;
if (!parent)
return false;
parentName = parent.$options.name;
}
return parent;
}
}
};
function _sfc_render$u(_ctx, _cache, $props, $setup, $data, $options) {
const _component_table_checkbox = vue.resolveComponent("table-checkbox");
return vue.openBlock(), vue.createElementBlock("view", { class: "uni-table-tr" }, [
$data.selection === "selection" ? (vue.openBlock(), vue.createElementBlock(
"view",
{
key: 0,
class: vue.normalizeClass(["checkbox", { "tr-table--border": $data.border }])
},
[
vue.createVNode(_component_table_checkbox, {
checked: $data.checked,
indeterminate: $data.indeterminate,
disabled: $props.disabled,
onCheckboxSelected: $options.checkboxSelected
}, null, 8, ["checked", "indeterminate", "disabled", "onCheckboxSelected"])
],
2
/* CLASS */
)) : vue.createCommentVNode("v-if", true),
vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
]);
}
const __easycom_1$8 = /* @__PURE__ */ _export_sfc(_sfc_main$1f, [["render", _sfc_render$u], ["__scopeId", "data-v-b48b3e32"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/uni_modules/uni-table/components/uni-tr/uni-tr.vue"]]);
const _sfc_main$1e = {
name: "uniTd",
options: {
virtualHost: true
},
props: {
width: {
type: [String, Number],
default: ""
},
align: {
type: String,
default: "left"
},
rowspan: {
type: [Number, String],
default: 1
},
colspan: {
type: [Number, String],
default: 1
}
},
data() {
return {
border: false
};
},
created() {
this.root = this.getTable();
this.border = this.root.border;
},
methods: {
/**
* 获取父元素实例
*/
getTable() {
let parent = this.$parent;
let parentName = parent.$options.name;
while (parentName !== "uniTable") {
parent = parent.$parent;
if (!parent)
return false;
parentName = parent.$options.name;
}
return parent;
}
}
};
function _sfc_render$t(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createElementBlock(
vue.Fragment,
null,
[
vue.createCommentVNode(` :class="{'table--border':border}" `),
vue.createElementVNode(
"view",
{
class: vue.normalizeClass(["uni-table-td", { "table--border": $data.border }]),
style: vue.normalizeStyle({ width: $props.width + "px", "text-align": $props.align })
},
[
vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
],
6
/* CLASS, STYLE */
)
],
2112
/* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
);
}
const __easycom_2$2 = /* @__PURE__ */ _export_sfc(_sfc_main$1e, [["render", _sfc_render$t], ["__scopeId", "data-v-edae4802"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/uni_modules/uni-table/components/uni-td/uni-td.vue"]]);
const _sfc_main$1d = {
name: "uniTable",
options: {
virtualHost: true
},
emits: ["selection-change"],
props: {
data: {
type: Array,
default() {
return [];
}
},
// 是否有竖线
border: {
type: Boolean,
default: false
},
// 是否显示斑马线
stripe: {
type: Boolean,
default: false
},
// 多选
type: {
type: String,
default: ""
},
// 没有更多数据
emptyText: {
type: String,
default: "没有更多数据"
},
loading: {
type: Boolean,
default: false
},
rowKey: {
type: String,
default: ""
}
},
data() {
return {
noData: true,
minWidth: 0,
multiTableHeads: []
};
},
watch: {
loading(val) {
},
data(newVal) {
this.theadChildren;
if (this.theadChildren) {
this.theadChildren.rowspan;
}
this.noData = false;
}
},
created() {
this.trChildren = [];
this.thChildren = [];
this.theadChildren = null;
this.backData = [];
this.backIndexData = [];
},
methods: {
isNodata() {
this.theadChildren;
let rowspan = 1;
if (this.theadChildren) {
rowspan = this.theadChildren.rowspan;
}
this.noData = this.trChildren.length - rowspan <= 0;
},
/**
* 选中所有
*/
selectionAll() {
let startIndex = 1;
let theadChildren = this.theadChildren;
if (!this.theadChildren) {
theadChildren = this.trChildren[0];
} else {
startIndex = theadChildren.rowspan - 1;
}
let isHaveData = this.data && this.data.length > 0;
theadChildren.checked = true;
theadChildren.indeterminate = false;
this.trChildren.forEach((item, index2) => {
if (!item.disabled) {
item.checked = true;
if (isHaveData && item.keyValue) {
const row = this.data.find((v2) => v2[this.rowKey] === item.keyValue);
if (!this.backData.find((v2) => v2[this.rowKey] === row[this.rowKey])) {
this.backData.push(row);
}
}
if (index2 > startIndex - 1 && this.backIndexData.indexOf(index2 - startIndex) === -1) {
this.backIndexData.push(index2 - startIndex);
}
}
});
this.$emit("selection-change", {
detail: {
value: this.backData,
index: this.backIndexData
}
});
},
/**
* 用于多选表格,切换某一行的选中状态,如果使用了第二个参数,则是设置这一行选中与否(selected 为 true 则选中)
*/
toggleRowSelection(row, selected) {
row = [].concat(row);
this.trChildren.forEach((item, index2) => {
const select = row.findIndex((v2) => {
if (typeof v2 === "number") {
return v2 === index2 - 1;
} else {
return v2[this.rowKey] === item.keyValue;
}
});
let ischeck = item.checked;
if (select !== -1) {
if (typeof selected === "boolean") {
item.checked = selected;
} else {
item.checked = !item.checked;
}
if (ischeck !== item.checked) {
this.check(item.rowData || item, item.checked, item.rowData ? item.keyValue : null, true);
}
}
});
this.$emit("selection-change", {
detail: {
value: this.backData,
index: this.backIndexData
}
});
},
/**
* 用于多选表格,清空用户的选择
*/
clearSelection() {
let theadChildren = this.theadChildren;
if (!this.theadChildren) {
theadChildren = this.trChildren[0];
}
theadChildren.checked = false;
theadChildren.indeterminate = false;
this.trChildren.forEach((item) => {
item.checked = false;
});
this.backData = [];
this.backIndexData = [];
this.$emit("selection-change", {
detail: {
value: [],
index: []
}
});
},
/**
* 用于多选表格,切换所有行的选中状态
*/
toggleAllSelection() {
let list = [];
let startIndex = 1;
let theadChildren = this.theadChildren;
if (!this.theadChildren) {
theadChildren = this.trChildren[0];
} else {
startIndex = theadChildren.rowspan - 1;
}
this.trChildren.forEach((item, index2) => {
if (!item.disabled) {
if (index2 > startIndex - 1) {
list.push(index2 - startIndex);
}
}
});
this.toggleRowSelection(list);
},
/**
* 选中\取消选中
* @param {Object} child
* @param {Object} check
* @param {Object} rowValue
*/
check(child, check, keyValue, emit) {
let theadChildren = this.theadChildren;
if (!this.theadChildren) {
theadChildren = this.trChildren[0];
}
let childDomIndex = this.trChildren.findIndex((item, index2) => child === item);
if (childDomIndex < 0) {
childDomIndex = this.data.findIndex((v2) => v2[this.rowKey] === keyValue) + 1;
}
this.trChildren.filter((v2) => !v2.disabled && v2.keyValue).length;
if (childDomIndex === 0) {
check ? this.selectionAll() : this.clearSelection();
return;
}
if (check) {
if (keyValue) {
this.backData.push(child);
}
this.backIndexData.push(childDomIndex - 1);
} else {
const index2 = this.backData.findIndex((v2) => v2[this.rowKey] === keyValue);
const idx = this.backIndexData.findIndex((item) => item === childDomIndex - 1);
if (keyValue) {
this.backData.splice(index2, 1);
}
this.backIndexData.splice(idx, 1);
}
const domCheckAll = this.trChildren.find((item, index2) => index2 > 0 && !item.checked && !item.disabled);
if (!domCheckAll) {
theadChildren.indeterminate = false;
theadChildren.checked = true;
} else {
theadChildren.indeterminate = true;
theadChildren.checked = false;
}
if (this.backIndexData.length === 0) {
theadChildren.indeterminate = false;
}
if (!emit) {
this.$emit("selection-change", {
detail: {
value: this.backData,
index: this.backIndexData
}
});
}
}
}
};
function _sfc_render$s(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createElementBlock(
"view",
{
class: vue.normalizeClass(["uni-table-scroll", { "table--border": $props.border, "border-none": !$data.noData }])
},
[
vue.createElementVNode(
"view",
{
class: vue.normalizeClass(["uni-table", { "table--stripe": $props.stripe }]),
style: vue.normalizeStyle({ "min-width": $data.minWidth + "px" })
},
[
vue.renderSlot(_ctx.$slots, "default", {}, void 0, true),
$data.noData ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "uni-table-loading"
}, [
vue.createElementVNode(
"view",
{
class: vue.normalizeClass(["uni-table-text", { "empty-border": $props.border }])
},
vue.toDisplayString($props.emptyText),
3
/* TEXT, CLASS */
)
])) : vue.createCommentVNode("v-if", true),
$props.loading ? (vue.openBlock(), vue.createElementBlock(
"view",
{
key: 1,
class: vue.normalizeClass(["uni-table-mask", { "empty-border": $props.border }])
},
[
vue.createElementVNode("div", { class: "uni-table--loader" })
],
2
/* CLASS */
)) : vue.createCommentVNode("v-if", true)
],
6
/* CLASS, STYLE */
)
],
2
/* CLASS */
);
}
const __easycom_4 = /* @__PURE__ */ _export_sfc(_sfc_main$1d, [["render", _sfc_render$s], ["__scopeId", "data-v-c1ea9b5d"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/uni_modules/uni-table/components/uni-table/uni-table.vue"]]);
const _sfc_main$1c = {
__name: "index",
props: {
dataList: Object,
tit: String,
route: String
},
setup(__props) {
const props2 = __props;
const tit_b = vue.ref(props2.tit);
const navgo = () => {
uni.navigateTo({
url: props2.route
});
};
const objFn = (obj) => {
if (typeof obj == "object") {
for (const [key, value] of Object.entries(obj)) {
return `${key}: ${value}`;
}
} else {
for (const [key, value] of Object.entries(JSON.parse(obj))) {
return `${key}: ${value}`;
}
}
};
return (_ctx, _cache) => {
const _component_uni_th = resolveEasycom(vue.resolveDynamicComponent("uni-th"), __easycom_0$5);
const _component_uni_tr = resolveEasycom(vue.resolveDynamicComponent("uni-tr"), __easycom_1$8);
const _component_uni_td = resolveEasycom(vue.resolveDynamicComponent("uni-td"), __easycom_2$2);
const _component_u__image = resolveEasycom(vue.resolveDynamicComponent("u--image"), __easycom_0$6);
const _component_uni_table = resolveEasycom(vue.resolveDynamicComponent("uni-table"), __easycom_4);
return vue.openBlock(), vue.createElementBlock("view", { class: "card" }, [
vue.createVNode(_component_uni_table, {
border: "",
emptyText: "暂无更多数据",
width: "600rpx"
}, {
default: vue.withCtx(() => [
vue.createCommentVNode(" 表头行 "),
vue.createVNode(_component_uni_tr, null, {
default: vue.withCtx(() => [
vue.createVNode(_component_uni_th, {
width: "120rpx",
align: "center"
}, {
default: vue.withCtx(() => [
vue.createTextVNode("日期")
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_uni_th, {
width: "200rpx",
align: "center"
}, {
default: vue.withCtx(() => [
vue.createTextVNode("操作")
]),
_: 1
/* STABLE */
}),
vue.createVNode(_component_uni_th, {
width: "300.22rpx",
align: "center"
}, {
default: vue.withCtx(() => [
vue.createTextVNode("相关信息")
]),
_: 1
/* STABLE */
})
]),
_: 1
/* STABLE */
}),
vue.createCommentVNode(" 表格数据行 "),
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList(props2.dataList, (item, index2) => {
return vue.openBlock(), vue.createBlock(
_component_uni_tr,
{ key: index2 },
{
default: vue.withCtx(() => [
vue.createCommentVNode(" {(item.create_time).slice(5,11)}} "),
vue.createVNode(_component_uni_td, null, {
default: vue.withCtx(() => [
vue.createTextVNode("5,11")
]),
_: 1
/* STABLE */
}),
vue.createVNode(
_component_uni_td,
{ style: { "text-align": "center" } },
{
default: vue.withCtx(() => [
vue.createTextVNode(
vue.toDisplayString(item.action_name),
1
/* TEXT */
)
]),
_: 2
/* DYNAMIC */
},
1024
/* DYNAMIC_SLOTS */
),
item.img ? (vue.openBlock(), vue.createBlock(_component_uni_td, { key: 0 }, {
default: vue.withCtx(() => [
vue.createVNode(_component_u__image, {
src: "/static/img/GJ.jpg",
width: "100%",
height: "210.28rpx",
alt: ""
})
]),
_: 1
/* STABLE */
})) : (vue.openBlock(), vue.createBlock(
_component_uni_td,
{ key: 1 },
{
default: vue.withCtx(() => [
vue.createTextVNode(
vue.toDisplayString(objFn(item.action_content)),
1
/* TEXT */
)
]),
_: 2
/* DYNAMIC */
},
1024
/* DYNAMIC_SLOTS */
))
]),
_: 2
/* DYNAMIC */
},
1024
/* DYNAMIC_SLOTS */
);
}),
128
/* KEYED_FRAGMENT */
))
]),
_: 1
/* STABLE */
}),
vue.withDirectives(vue.createElementVNode(
"view",
{
class: "tit_b",
onClick: navgo
},
[
vue.createTextVNode(
vue.toDisplayString(tit_b.value) + " ",
1
/* TEXT */
),
vue.createVNode(_component_u__image, {
src: "/static/img/CKGD.png",
style: { "margin-left": "5rpx" },
width: "31.54rpx",
height: "31.54rpx"
})
],
512
/* NEED_PATCH */
), [
[vue.vShow, tit_b.value]
])
]);
};
}
};
const myTable = /* @__PURE__ */ _export_sfc(_sfc_main$1c, [["__scopeId", "data-v-90822214"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/components/myTable/index.vue"]]);
const animalListAPI$1 = (data) => syhttp.get("/AnimalBreed/animalList", data);
const animalEnvDataAPI$1 = (data) => syhttp.get("/AnimalBreed/animalEnvData", data);
const actionsAPI$1 = (data) => syhttp.get("/user/actions", data);
const animalInfoAPI$1 = (data) => syhttp.get("/AnimalBreed/animalInfo", data);
const animalPicListAPI$1 = (data) => syhttp.get("/AnimalBreed/animalPicList", data);
const addAnimalPicAPI$1 = (data) => syhttp.post("/AnimalBreed/addAnimalPic", data);
const animalStatusAPI = (data) => syhttp.post("/AnimalBreed/animalStatus", data);
const animalChangeListAPI = (data) => syhttp.get("/AnimalBreed/animalChangeList", data);
const animalSellAPI = (data) => syhttp.post("/AnimalBreed/animalSell", data);
var isVue2 = false;
function set(target, key, val) {
if (Array.isArray(target)) {
target.length = Math.max(target.length, key);
target.splice(key, 1, val);
return val;
}
target[key] = val;
return val;
}
function del(target, key) {
if (Array.isArray(target)) {
target.splice(key, 1);
return;
}
delete target[key];
}
function getDevtoolsGlobalHook() {
return getTarget().__VUE_DEVTOOLS_GLOBAL_HOOK__;
}
function getTarget() {
return typeof navigator !== "undefined" && typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : {};
}
const isProxyAvailable = typeof Proxy === "function";
const HOOK_SETUP = "devtools-plugin:setup";
const HOOK_PLUGIN_SETTINGS_SET = "plugin:settings:set";
let supported;
let perf;
function isPerformanceSupported() {
var _a;
if (supported !== void 0) {
return supported;
}
if (typeof window !== "undefined" && window.performance) {
supported = true;
perf = window.performance;
} else if (typeof global !== "undefined" && ((_a = global.perf_hooks) === null || _a === void 0 ? void 0 : _a.performance)) {
supported = true;
perf = global.perf_hooks.performance;
} else {
supported = false;
}
return supported;
}
function now() {
return isPerformanceSupported() ? perf.now() : Date.now();
}
class ApiProxy {
constructor(plugin, hook) {
this.target = null;
this.targetQueue = [];
this.onQueue = [];
this.plugin = plugin;
this.hook = hook;
const defaultSettings = {};
if (plugin.settings) {
for (const id in plugin.settings) {
const item = plugin.settings[id];
defaultSettings[id] = item.defaultValue;
}
}
const localSettingsSaveId = `__vue-devtools-plugin-settings__${plugin.id}`;
let currentSettings = Object.assign({}, defaultSettings);
try {
const raw = localStorage.getItem(localSettingsSaveId);
const data = JSON.parse(raw);
Object.assign(currentSettings, data);
} catch (e2) {
}
this.fallbacks = {
getSettings() {
return currentSettings;
},
setSettings(value) {
try {
localStorage.setItem(localSettingsSaveId, JSON.stringify(value));
} catch (e2) {
}
currentSettings = value;
},
now() {
return now();
}
};
if (hook) {
hook.on(HOOK_PLUGIN_SETTINGS_SET, (pluginId, value) => {
if (pluginId === this.plugin.id) {
this.fallbacks.setSettings(value);
}
});
}
this.proxiedOn = new Proxy({}, {
get: (_target, prop) => {
if (this.target) {
return this.target.on[prop];
} else {
return (...args) => {
this.onQueue.push({
method: prop,
args
});
};
}
}
});
this.proxiedTarget = new Proxy({}, {
get: (_target, prop) => {
if (this.target) {
return this.target[prop];
} else if (prop === "on") {
return this.proxiedOn;
} else if (Object.keys(this.fallbacks).includes(prop)) {
return (...args) => {
this.targetQueue.push({
method: prop,
args,
resolve: () => {
}
});
return this.fallbacks[prop](...args);
};
} else {
return (...args) => {
return new Promise((resolve) => {
this.targetQueue.push({
method: prop,
args,
resolve
});
});
};
}
}
});
}
async setRealTarget(target) {
this.target = target;
for (const item of this.onQueue) {
this.target.on[item.method](...item.args);
}
for (const item of this.targetQueue) {
item.resolve(await this.target[item.method](...item.args));
}
}
}
function setupDevtoolsPlugin(pluginDescriptor, setupFn) {
const descriptor = pluginDescriptor;
const target = getTarget();
const hook = getDevtoolsGlobalHook();
const enableProxy = isProxyAvailable && descriptor.enableEarlyProxy;
if (hook && (target.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__ || !enableProxy)) {
hook.emit(HOOK_SETUP, pluginDescriptor, setupFn);
} else {
const proxy = enableProxy ? new ApiProxy(descriptor, hook) : null;
const list = target.__VUE_DEVTOOLS_PLUGINS__ = target.__VUE_DEVTOOLS_PLUGINS__ || [];
list.push({
pluginDescriptor: descriptor,
setupFn,
proxy
});
if (proxy)
setupFn(proxy.proxiedTarget);
}
}
/*!
* pinia v2.0.33
* (c) 2023 Eduardo San Martin Morote
* @license MIT
*/
let activePinia;
const setActivePinia = (pinia) => activePinia = pinia;
const piniaSymbol = Symbol("pinia");
function isPlainObject$1(o2) {
return o2 && typeof o2 === "object" && Object.prototype.toString.call(o2) === "[object Object]" && typeof o2.toJSON !== "function";
}
var MutationType;
(function(MutationType2) {
MutationType2["direct"] = "direct";
MutationType2["patchObject"] = "patch object";
MutationType2["patchFunction"] = "patch function";
})(MutationType || (MutationType = {}));
const IS_CLIENT = typeof window !== "undefined";
const USE_DEVTOOLS = IS_CLIENT;
const _global = /* @__PURE__ */ (() => typeof window === "object" && window.window === window ? window : typeof self === "object" && self.self === self ? self : typeof global === "object" && global.global === global ? global : typeof globalThis === "object" ? globalThis : { HTMLElement: null })();
function bom(blob, { autoBom = false } = {}) {
if (autoBom && /^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) {
return new Blob([String.fromCharCode(65279), blob], { type: blob.type });
}
return blob;
}
function download(url2, name, opts) {
const xhr = new XMLHttpRequest();
xhr.open("GET", url2);
xhr.responseType = "blob";
xhr.onload = function() {
saveAs(xhr.response, name, opts);
};
xhr.onerror = function() {
console.error("could not download file");
};
xhr.send();
}
function corsEnabled(url2) {
const xhr = new XMLHttpRequest();
xhr.open("HEAD", url2, false);
try {
xhr.send();
} catch (e2) {
}
return xhr.status >= 200 && xhr.status <= 299;
}
function click(node) {
try {
node.dispatchEvent(new MouseEvent("click"));
} catch (e2) {
const evt = document.createEvent("MouseEvents");
evt.initMouseEvent("click", true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null);
node.dispatchEvent(evt);
}
}
const _navigator = typeof navigator === "object" ? navigator : { userAgent: "" };
const isMacOSWebView = /* @__PURE__ */ (() => /Macintosh/.test(_navigator.userAgent) && /AppleWebKit/.test(_navigator.userAgent) && !/Safari/.test(_navigator.userAgent))();
const saveAs = !IS_CLIENT ? () => {
} : (
// Use download attribute first if possible (#193 Lumia mobile) unless this is a macOS WebView or mini program
typeof HTMLAnchorElement !== "undefined" && "download" in HTMLAnchorElement.prototype && !isMacOSWebView ? downloadSaveAs : (
// Use msSaveOrOpenBlob as a second approach
"msSaveOrOpenBlob" in _navigator ? msSaveAs : (
// Fallback to using FileReader and a popup
fileSaverSaveAs
)
)
);
function downloadSaveAs(blob, name = "download", opts) {
const a2 = document.createElement("a");
a2.download = name;
a2.rel = "noopener";
if (typeof blob === "string") {
a2.href = blob;
if (a2.origin !== location.origin) {
if (corsEnabled(a2.href)) {
download(blob, name, opts);
} else {
a2.target = "_blank";
click(a2);
}
} else {
click(a2);
}
} else {
a2.href = URL.createObjectURL(blob);
setTimeout(function() {
URL.revokeObjectURL(a2.href);
}, 4e4);
setTimeout(function() {
click(a2);
}, 0);
}
}
function msSaveAs(blob, name = "download", opts) {
if (typeof blob === "string") {
if (corsEnabled(blob)) {
download(blob, name, opts);
} else {
const a2 = document.createElement("a");
a2.href = blob;
a2.target = "_blank";
setTimeout(function() {
click(a2);
});
}
} else {
navigator.msSaveOrOpenBlob(bom(blob, opts), name);
}
}
function fileSaverSaveAs(blob, name, opts, popup) {
popup = popup || open("", "_blank");
if (popup) {
popup.document.title = popup.document.body.innerText = "downloading...";
}
if (typeof blob === "string")
return download(blob, name, opts);
const force = blob.type === "application/octet-stream";
const isSafari = /constructor/i.test(String(_global.HTMLElement)) || "safari" in _global;
const isChromeIOS = /CriOS\/[\d]+/.test(navigator.userAgent);
if ((isChromeIOS || force && isSafari || isMacOSWebView) && typeof FileReader !== "undefined") {
const reader = new FileReader();
reader.onloadend = function() {
let url2 = reader.result;
if (typeof url2 !== "string") {
popup = null;
throw new Error("Wrong reader.result type");
}
url2 = isChromeIOS ? url2 : url2.replace(/^data:[^;]*;/, "data:attachment/file;");
if (popup) {
popup.location.href = url2;
} else {
location.assign(url2);
}
popup = null;
};
reader.readAsDataURL(blob);
} else {
const url2 = URL.createObjectURL(blob);
if (popup)
popup.location.assign(url2);
else
location.href = url2;
popup = null;
setTimeout(function() {
URL.revokeObjectURL(url2);
}, 4e4);
}
}
function toastMessage(message, type) {
const piniaMessage = "🍍 " + message;
if (typeof __VUE_DEVTOOLS_TOAST__ === "function") {
__VUE_DEVTOOLS_TOAST__(piniaMessage, type);
} else if (type === "error") {
console.error(piniaMessage);
} else if (type === "warn") {
console.warn(piniaMessage);
} else {
console.log(piniaMessage);
}
}
function isPinia(o2) {
return "_a" in o2 && "install" in o2;
}
function checkClipboardAccess() {
if (!("clipboard" in navigator)) {
toastMessage(`Your browser doesn't support the Clipboard API`, "error");
return true;
}
}
function checkNotFocusedError(error2) {
if (error2 instanceof Error && error2.message.toLowerCase().includes("document is not focused")) {
toastMessage('You need to activate the "Emulate a focused page" setting in the "Rendering" panel of devtools.', "warn");
return true;
}
return false;
}
async function actionGlobalCopyState(pinia) {
if (checkClipboardAccess())
return;
try {
await navigator.clipboard.writeText(JSON.stringify(pinia.state.value));
toastMessage("Global state copied to clipboard.");
} catch (error2) {
if (checkNotFocusedError(error2))
return;
toastMessage(`Failed to serialize the state. Check the console for more details.`, "error");
console.error(error2);
}
}
async function actionGlobalPasteState(pinia) {
if (checkClipboardAccess())
return;
try {
pinia.state.value = JSON.parse(await navigator.clipboard.readText());
toastMessage("Global state pasted from clipboard.");
} catch (error2) {
if (checkNotFocusedError(error2))
return;
toastMessage(`Failed to deserialize the state from clipboard. Check the console for more details.`, "error");
console.error(error2);
}
}
async function actionGlobalSaveState(pinia) {
try {
saveAs(new Blob([JSON.stringify(pinia.state.value)], {
type: "text/plain;charset=utf-8"
}), "pinia-state.json");
} catch (error2) {
toastMessage(`Failed to export the state as JSON. Check the console for more details.`, "error");
console.error(error2);
}
}
let fileInput;
function getFileOpener() {
if (!fileInput) {
fileInput = document.createElement("input");
fileInput.type = "file";
fileInput.accept = ".json";
}
function openFile() {
return new Promise((resolve, reject) => {
fileInput.onchange = async () => {
const files = fileInput.files;
if (!files)
return resolve(null);
const file = files.item(0);
if (!file)
return resolve(null);
return resolve({ text: await file.text(), file });
};
fileInput.oncancel = () => resolve(null);
fileInput.onerror = reject;
fileInput.click();
});
}
return openFile;
}
async function actionGlobalOpenStateFile(pinia) {
try {
const open2 = await getFileOpener();
const result = await open2();
if (!result)
return;
const { text, file } = result;
pinia.state.value = JSON.parse(text);
toastMessage(`Global state imported from "${file.name}".`);
} catch (error2) {
toastMessage(`Failed to export the state as JSON. Check the console for more details.`, "error");
console.error(error2);
}
}
function formatDisplay(display) {
return {
_custom: {
display
}
};
}
const PINIA_ROOT_LABEL = "🍍 Pinia (root)";
const PINIA_ROOT_ID = "_root";
function formatStoreForInspectorTree(store) {
return isPinia(store) ? {
id: PINIA_ROOT_ID,
label: PINIA_ROOT_LABEL
} : {
id: store.$id,
label: store.$id
};
}
function formatStoreForInspectorState(store) {
if (isPinia(store)) {
const storeNames = Array.from(store._s.keys());
const storeMap = store._s;
const state2 = {
state: storeNames.map((storeId) => ({
editable: true,
key: storeId,
value: store.state.value[storeId]
})),
getters: storeNames.filter((id) => storeMap.get(id)._getters).map((id) => {
const store2 = storeMap.get(id);
return {
editable: false,
key: id,
value: store2._getters.reduce((getters, key) => {
getters[key] = store2[key];
return getters;
}, {})
};
})
};
return state2;
}
const state = {
state: Object.keys(store.$state).map((key) => ({
editable: true,
key,
value: store.$state[key]
}))
};
if (store._getters && store._getters.length) {
state.getters = store._getters.map((getterName) => ({
editable: false,
key: getterName,
value: store[getterName]
}));
}
if (store._customProperties.size) {
state.customProperties = Array.from(store._customProperties).map((key) => ({
editable: true,
key,
value: store[key]
}));
}
return state;
}
function formatEventData(events) {
if (!events)
return {};
if (Array.isArray(events)) {
return events.reduce((data, event) => {
data.keys.push(event.key);
data.operations.push(event.type);
data.oldValue[event.key] = event.oldValue;
data.newValue[event.key] = event.newValue;
return data;
}, {
oldValue: {},
keys: [],
operations: [],
newValue: {}
});
} else {
return {
operation: formatDisplay(events.type),
key: formatDisplay(events.key),
oldValue: events.oldValue,
newValue: events.newValue
};
}
}
function formatMutationType(type) {
switch (type) {
case MutationType.direct:
return "mutation";
case MutationType.patchFunction:
return "$patch";
case MutationType.patchObject:
return "$patch";
default:
return "unknown";
}
}
let isTimelineActive = true;
const componentStateTypes = [];
const MUTATIONS_LAYER_ID = "pinia:mutations";
const INSPECTOR_ID = "pinia";
const { assign: assign$1 } = Object;
const getStoreType = (id) => "🍍 " + id;
function registerPiniaDevtools(app, pinia) {
setupDevtoolsPlugin({
id: "dev.esm.pinia",
label: "Pinia 🍍",
logo: "https://pinia.vuejs.org/logo.svg",
packageName: "pinia",
homepage: "https://pinia.vuejs.org",
componentStateTypes,
app
}, (api) => {
if (typeof api.now !== "function") {
toastMessage("You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html.");
}
api.addTimelineLayer({
id: MUTATIONS_LAYER_ID,
label: `Pinia 🍍`,
color: 15064968
});
api.addInspector({
id: INSPECTOR_ID,
label: "Pinia 🍍",
icon: "storage",
treeFilterPlaceholder: "Search stores",
actions: [
{
icon: "content_copy",
action: () => {
actionGlobalCopyState(pinia);
},
tooltip: "Serialize and copy the state"
},
{
icon: "content_paste",
action: async () => {
await actionGlobalPasteState(pinia);
api.sendInspectorTree(INSPECTOR_ID);
api.sendInspectorState(INSPECTOR_ID);
},
tooltip: "Replace the state with the content of your clipboard"
},
{
icon: "save",
action: () => {
actionGlobalSaveState(pinia);
},
tooltip: "Save the state as a JSON file"
},
{
icon: "folder_open",
action: async () => {
await actionGlobalOpenStateFile(pinia);
api.sendInspectorTree(INSPECTOR_ID);
api.sendInspectorState(INSPECTOR_ID);
},
tooltip: "Import the state from a JSON file"
}
],
nodeActions: [
{
icon: "restore",
tooltip: "Reset the state (option store only)",
action: (nodeId) => {
const store = pinia._s.get(nodeId);
if (!store) {
toastMessage(`Cannot reset "${nodeId}" store because it wasn't found.`, "warn");
} else if (!store._isOptionsAPI) {
toastMessage(`Cannot reset "${nodeId}" store because it's a setup store.`, "warn");
} else {
store.$reset();
toastMessage(`Store "${nodeId}" reset.`);
}
}
}
]
});
api.on.inspectComponent((payload, ctx) => {
const proxy = payload.componentInstance && payload.componentInstance.proxy;
if (proxy && proxy._pStores) {
const piniaStores = payload.componentInstance.proxy._pStores;
Object.values(piniaStores).forEach((store) => {
payload.instanceData.state.push({
type: getStoreType(store.$id),
key: "state",
editable: true,
value: store._isOptionsAPI ? {
_custom: {
value: vue.toRaw(store.$state),
actions: [
{
icon: "restore",
tooltip: "Reset the state of this store",
action: () => store.$reset()
}
]
}
} : (
// NOTE: workaround to unwrap transferred refs
Object.keys(store.$state).reduce((state, key) => {
state[key] = store.$state[key];
return state;
}, {})
)
});
if (store._getters && store._getters.length) {
payload.instanceData.state.push({
type: getStoreType(store.$id),
key: "getters",
editable: false,
value: store._getters.reduce((getters, key) => {
try {
getters[key] = store[key];
} catch (error2) {
getters[key] = error2;
}
return getters;
}, {})
});
}
});
}
});
api.on.getInspectorTree((payload) => {
if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {
let stores = [pinia];
stores = stores.concat(Array.from(pinia._s.values()));
payload.rootNodes = (payload.filter ? stores.filter((store) => "$id" in store ? store.$id.toLowerCase().includes(payload.filter.toLowerCase()) : PINIA_ROOT_LABEL.toLowerCase().includes(payload.filter.toLowerCase())) : stores).map(formatStoreForInspectorTree);
}
});
api.on.getInspectorState((payload) => {
if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {
const inspectedStore = payload.nodeId === PINIA_ROOT_ID ? pinia : pinia._s.get(payload.nodeId);
if (!inspectedStore) {
return;
}
if (inspectedStore) {
payload.state = formatStoreForInspectorState(inspectedStore);
}
}
});
api.on.editInspectorState((payload, ctx) => {
if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {
const inspectedStore = payload.nodeId === PINIA_ROOT_ID ? pinia : pinia._s.get(payload.nodeId);
if (!inspectedStore) {
return toastMessage(`store "${payload.nodeId}" not found`, "error");
}
const { path } = payload;
if (!isPinia(inspectedStore)) {
if (path.length !== 1 || !inspectedStore._customProperties.has(path[0]) || path[0] in inspectedStore.$state) {
path.unshift("$state");
}
} else {
path.unshift("state");
}
isTimelineActive = false;
payload.set(inspectedStore, path, payload.state.value);
isTimelineActive = true;
}
});
api.on.editComponentState((payload) => {
if (payload.type.startsWith("🍍")) {
const storeId = payload.type.replace(/^🍍\s*/, "");
const store = pinia._s.get(storeId);
if (!store) {
return toastMessage(`store "${storeId}" not found`, "error");
}
const { path } = payload;
if (path[0] !== "state") {
return toastMessage(`Invalid path for store "${storeId}":
${path}
Only state can be modified.`);
}
path[0] = "$state";
isTimelineActive = false;
payload.set(store, path, payload.state.value);
isTimelineActive = true;
}
});
});
}
function addStoreToDevtools(app, store) {
if (!componentStateTypes.includes(getStoreType(store.$id))) {
componentStateTypes.push(getStoreType(store.$id));
}
setupDevtoolsPlugin({
id: "dev.esm.pinia",
label: "Pinia 🍍",
logo: "https://pinia.vuejs.org/logo.svg",
packageName: "pinia",
homepage: "https://pinia.vuejs.org",
componentStateTypes,
app,
settings: {
logStoreChanges: {
label: "Notify about new/deleted stores",
type: "boolean",
defaultValue: true
}
// useEmojis: {
// label: 'Use emojis in messages ⚡️',
// type: 'boolean',
// defaultValue: true,
// },
}
}, (api) => {
const now2 = typeof api.now === "function" ? api.now.bind(api) : Date.now;
store.$onAction(({ after, onError, name, args }) => {
const groupId = runningActionId++;
api.addTimelineEvent({
layerId: MUTATIONS_LAYER_ID,
event: {
time: now2(),
title: "🛫 " + name,
subtitle: "start",
data: {
store: formatDisplay(store.$id),
action: formatDisplay(name),
args
},
groupId
}
});
after((result) => {
activeAction = void 0;
api.addTimelineEvent({
layerId: MUTATIONS_LAYER_ID,
event: {
time: now2(),
title: "🛬 " + name,
subtitle: "end",
data: {
store: formatDisplay(store.$id),
action: formatDisplay(name),
args,
result
},
groupId
}
});
});
onError((error2) => {
activeAction = void 0;
api.addTimelineEvent({
layerId: MUTATIONS_LAYER_ID,
event: {
time: now2(),
logType: "error",
title: "💥 " + name,
subtitle: "end",
data: {
store: formatDisplay(store.$id),
action: formatDisplay(name),
args,
error: error2
},
groupId
}
});
});
}, true);
store._customProperties.forEach((name) => {
vue.watch(() => vue.unref(store[name]), (newValue, oldValue) => {
api.notifyComponentUpdate();
api.sendInspectorState(INSPECTOR_ID);
if (isTimelineActive) {
api.addTimelineEvent({
layerId: MUTATIONS_LAYER_ID,
event: {
time: now2(),
title: "Change",
subtitle: name,
data: {
newValue,
oldValue
},
groupId: activeAction
}
});
}
}, { deep: true });
});
store.$subscribe(({ events, type }, state) => {
api.notifyComponentUpdate();
api.sendInspectorState(INSPECTOR_ID);
if (!isTimelineActive)
return;
const eventData = {
time: now2(),
title: formatMutationType(type),
data: assign$1({ store: formatDisplay(store.$id) }, formatEventData(events)),
groupId: activeAction
};
activeAction = void 0;
if (type === MutationType.patchFunction) {
eventData.subtitle = "⤵️";
} else if (type === MutationType.patchObject) {
eventData.subtitle = "🧩";
} else if (events && !Array.isArray(events)) {
eventData.subtitle = events.type;
}
if (events) {
eventData.data["rawEvent(s)"] = {
_custom: {
display: "DebuggerEvent",
type: "object",
tooltip: "raw DebuggerEvent[]",
value: events
}
};
}
api.addTimelineEvent({
layerId: MUTATIONS_LAYER_ID,
event: eventData
});
}, { detached: true, flush: "sync" });
const hotUpdate = store._hotUpdate;
store._hotUpdate = vue.markRaw((newStore) => {
hotUpdate(newStore);
api.addTimelineEvent({
layerId: MUTATIONS_LAYER_ID,
event: {
time: now2(),
title: "🔥 " + store.$id,
subtitle: "HMR update",
data: {
store: formatDisplay(store.$id),
info: formatDisplay(`HMR update`)
}
}
});
api.notifyComponentUpdate();
api.sendInspectorTree(INSPECTOR_ID);
api.sendInspectorState(INSPECTOR_ID);
});
const { $dispose } = store;
store.$dispose = () => {
$dispose();
api.notifyComponentUpdate();
api.sendInspectorTree(INSPECTOR_ID);
api.sendInspectorState(INSPECTOR_ID);
api.getSettings().logStoreChanges && toastMessage(`Disposed "${store.$id}" store 🗑`);
};
api.notifyComponentUpdate();
api.sendInspectorTree(INSPECTOR_ID);
api.sendInspectorState(INSPECTOR_ID);
api.getSettings().logStoreChanges && toastMessage(`"${store.$id}" store installed 🆕`);
});
}
let runningActionId = 0;
let activeAction;
function patchActionForGrouping(store, actionNames) {
const actions = actionNames.reduce((storeActions, actionName) => {
storeActions[actionName] = vue.toRaw(store)[actionName];
return storeActions;
}, {});
for (const actionName in actions) {
store[actionName] = function() {
const _actionId = runningActionId;
const trackedStore = new Proxy(store, {
get(...args) {
activeAction = _actionId;
return Reflect.get(...args);
},
set(...args) {
activeAction = _actionId;
return Reflect.set(...args);
}
});
return actions[actionName].apply(trackedStore, arguments);
};
}
}
function devtoolsPlugin({ app, store, options }) {
if (store.$id.startsWith("__hot:")) {
return;
}
if (options.state) {
store._isOptionsAPI = true;
}
if (typeof options.state === "function") {
patchActionForGrouping(
// @ts-expect-error: can cast the store...
store,
Object.keys(options.actions)
);
const originalHotUpdate = store._hotUpdate;
vue.toRaw(store)._hotUpdate = function(newStore) {
originalHotUpdate.apply(this, arguments);
patchActionForGrouping(store, Object.keys(newStore._hmrPayload.actions));
};
}
addStoreToDevtools(
app,
// FIXME: is there a way to allow the assignment from Store to StoreGeneric?
store
);
}
function createPinia() {
const scope = vue.effectScope(true);
const state = scope.run(() => vue.ref({}));
let _p = [];
let toBeInstalled = [];
const pinia = vue.markRaw({
install(app) {
setActivePinia(pinia);
{
pinia._a = app;
app.provide(piniaSymbol, pinia);
app.config.globalProperties.$pinia = pinia;
if (USE_DEVTOOLS) {
registerPiniaDevtools(app, pinia);
}
toBeInstalled.forEach((plugin) => _p.push(plugin));
toBeInstalled = [];
}
},
use(plugin) {
if (!this._a && !isVue2) {
toBeInstalled.push(plugin);
} else {
_p.push(plugin);
}
return this;
},
_p,
// it's actually undefined here
// @ts-expect-error
_a: null,
_e: scope,
_s: /* @__PURE__ */ new Map(),
state
});
if (USE_DEVTOOLS && typeof Proxy !== "undefined") {
pinia.use(devtoolsPlugin);
}
return pinia;
}
function patchObject(newState, oldState) {
for (const key in oldState) {
const subPatch = oldState[key];
if (!(key in newState)) {
continue;
}
const targetValue = newState[key];
if (isPlainObject$1(targetValue) && isPlainObject$1(subPatch) && !vue.isRef(subPatch) && !vue.isReactive(subPatch)) {
newState[key] = patchObject(targetValue, subPatch);
} else {
{
newState[key] = subPatch;
}
}
}
return newState;
}
const noop = () => {
};
function addSubscription(subscriptions, callback, detached, onCleanup = noop) {
subscriptions.push(callback);
const removeSubscription = () => {
const idx = subscriptions.indexOf(callback);
if (idx > -1) {
subscriptions.splice(idx, 1);
onCleanup();
}
};
if (!detached && vue.getCurrentScope()) {
vue.onScopeDispose(removeSubscription);
}
return removeSubscription;
}
function triggerSubscriptions(subscriptions, ...args) {
subscriptions.slice().forEach((callback) => {
callback(...args);
});
}
function mergeReactiveObjects(target, patchToApply) {
if (target instanceof Map && patchToApply instanceof Map) {
patchToApply.forEach((value, key) => target.set(key, value));
}
if (target instanceof Set && patchToApply instanceof Set) {
patchToApply.forEach(target.add, target);
}
for (const key in patchToApply) {
if (!patchToApply.hasOwnProperty(key))
continue;
const subPatch = patchToApply[key];
const targetValue = target[key];
if (isPlainObject$1(targetValue) && isPlainObject$1(subPatch) && target.hasOwnProperty(key) && !vue.isRef(subPatch) && !vue.isReactive(subPatch)) {
target[key] = mergeReactiveObjects(targetValue, subPatch);
} else {
target[key] = subPatch;
}
}
return target;
}
const skipHydrateSymbol = Symbol("pinia:skipHydration");
function shouldHydrate(obj) {
return !isPlainObject$1(obj) || !obj.hasOwnProperty(skipHydrateSymbol);
}
const { assign } = Object;
function isComputed(o2) {
return !!(vue.isRef(o2) && o2.effect);
}
function createOptionsStore(id, options, pinia, hot) {
const { state, actions, getters } = options;
const initialState = pinia.state.value[id];
let store;
function setup() {
if (!initialState && !hot) {
{
pinia.state.value[id] = state ? state() : {};
}
}
const localState = hot ? (
// use ref() to unwrap refs inside state TODO: check if this is still necessary
vue.toRefs(vue.ref(state ? state() : {}).value)
) : vue.toRefs(pinia.state.value[id]);
return assign(localState, actions, Object.keys(getters || {}).reduce((computedGetters, name) => {
if (name in localState) {
console.warn(`[🍍]: A getter cannot have the same name as another state property. Rename one of them. Found with "${name}" in store "${id}".`);
}
computedGetters[name] = vue.markRaw(vue.computed(() => {
setActivePinia(pinia);
const store2 = pinia._s.get(id);
return getters[name].call(store2, store2);
}));
return computedGetters;
}, {}));
}
store = createSetupStore(id, setup, options, pinia, hot, true);
return store;
}
function createSetupStore($id, setup, options = {}, pinia, hot, isOptionsStore) {
let scope;
const optionsForPlugin = assign({ actions: {} }, options);
if (!pinia._e.active) {
throw new Error("Pinia destroyed");
}
const $subscribeOptions = {
deep: true
// flush: 'post',
};
{
$subscribeOptions.onTrigger = (event) => {
if (isListening) {
debuggerEvents = event;
} else if (isListening == false && !store._hotUpdating) {
if (Array.isArray(debuggerEvents)) {
debuggerEvents.push(event);
} else {
console.error("🍍 debuggerEvents should be an array. This is most likely an internal Pinia bug.");
}
}
};
}
let isListening;
let isSyncListening;
let subscriptions = vue.markRaw([]);
let actionSubscriptions = vue.markRaw([]);
let debuggerEvents;
const initialState = pinia.state.value[$id];
if (!isOptionsStore && !initialState && !hot) {
{
pinia.state.value[$id] = {};
}
}
const hotState = vue.ref({});
let activeListener;
function $patch(partialStateOrMutator) {
let subscriptionMutation;
isListening = isSyncListening = false;
{
debuggerEvents = [];
}
if (typeof partialStateOrMutator === "function") {
partialStateOrMutator(pinia.state.value[$id]);
subscriptionMutation = {
type: MutationType.patchFunction,
storeId: $id,
events: debuggerEvents
};
} else {
mergeReactiveObjects(pinia.state.value[$id], partialStateOrMutator);
subscriptionMutation = {
type: MutationType.patchObject,
payload: partialStateOrMutator,
storeId: $id,
events: debuggerEvents
};
}
const myListenerId = activeListener = Symbol();
vue.nextTick().then(() => {
if (activeListener === myListenerId) {
isListening = true;
}
});
isSyncListening = true;
triggerSubscriptions(subscriptions, subscriptionMutation, pinia.state.value[$id]);
}
const $reset = isOptionsStore ? function $reset2() {
const { state } = options;
const newState = state ? state() : {};
this.$patch(($state) => {
assign($state, newState);
});
} : (
/* istanbul ignore next */
() => {
throw new Error(`🍍: Store "${$id}" is built using the setup syntax and does not implement $reset().`);
}
);
function $dispose() {
scope.stop();
subscriptions = [];
actionSubscriptions = [];
pinia._s.delete($id);
}
function wrapAction(name, action) {
return function() {
setActivePinia(pinia);
const args = Array.from(arguments);
const afterCallbackList = [];
const onErrorCallbackList = [];
function after(callback) {
afterCallbackList.push(callback);
}
function onError(callback) {
onErrorCallbackList.push(callback);
}
triggerSubscriptions(actionSubscriptions, {
args,
name,
store,
after,
onError
});
let ret;
try {
ret = action.apply(this && this.$id === $id ? this : store, args);
} catch (error2) {
triggerSubscriptions(onErrorCallbackList, error2);
throw error2;
}
if (ret instanceof Promise) {
return ret.then((value) => {
triggerSubscriptions(afterCallbackList, value);
return value;
}).catch((error2) => {
triggerSubscriptions(onErrorCallbackList, error2);
return Promise.reject(error2);
});
}
triggerSubscriptions(afterCallbackList, ret);
return ret;
};
}
const _hmrPayload = /* @__PURE__ */ vue.markRaw({
actions: {},
getters: {},
state: [],
hotState
});
const partialStore = {
_p: pinia,
// _s: scope,
$id,
$onAction: addSubscription.bind(null, actionSubscriptions),
$patch,
$reset,
$subscribe(callback, options2 = {}) {
const removeSubscription = addSubscription(subscriptions, callback, options2.detached, () => stopWatcher());
const stopWatcher = scope.run(() => vue.watch(() => pinia.state.value[$id], (state) => {
if (options2.flush === "sync" ? isSyncListening : isListening) {
callback({
storeId: $id,
type: MutationType.direct,
events: debuggerEvents
}, state);
}
}, assign({}, $subscribeOptions, options2)));
return removeSubscription;
},
$dispose
};
const store = vue.reactive(
assign(
{
_hmrPayload,
_customProperties: vue.markRaw(/* @__PURE__ */ new Set())
// devtools custom properties
},
partialStore
// must be added later
// setupStore
)
);
pinia._s.set($id, store);
const setupStore = pinia._e.run(() => {
scope = vue.effectScope();
return scope.run(() => setup());
});
for (const key in setupStore) {
const prop = setupStore[key];
if (vue.isRef(prop) && !isComputed(prop) || vue.isReactive(prop)) {
if (hot) {
set(hotState.value, key, vue.toRef(setupStore, key));
} else if (!isOptionsStore) {
if (initialState && shouldHydrate(prop)) {
if (vue.isRef(prop)) {
prop.value = initialState[key];
} else {
mergeReactiveObjects(prop, initialState[key]);
}
}
{
pinia.state.value[$id][key] = prop;
}
}
{
_hmrPayload.state.push(key);
}
} else if (typeof prop === "function") {
const actionValue = hot ? prop : wrapAction(key, prop);
{
setupStore[key] = actionValue;
}
{
_hmrPayload.actions[key] = prop;
}
optionsForPlugin.actions[key] = prop;
} else {
if (isComputed(prop)) {
_hmrPayload.getters[key] = isOptionsStore ? (
// @ts-expect-error
options.getters[key]
) : prop;
if (IS_CLIENT) {
const getters = setupStore._getters || // @ts-expect-error: same
(setupStore._getters = vue.markRaw([]));
getters.push(key);
}
}
}
}
{
assign(store, setupStore);
assign(vue.toRaw(store), setupStore);
}
Object.defineProperty(store, "$state", {
get: () => hot ? hotState.value : pinia.state.value[$id],
set: (state) => {
if (hot) {
throw new Error("cannot set hotState");
}
$patch(($state) => {
assign($state, state);
});
}
});
{
store._hotUpdate = vue.markRaw((newStore) => {
store._hotUpdating = true;
newStore._hmrPayload.state.forEach((stateKey) => {
if (stateKey in store.$state) {
const newStateTarget = newStore.$state[stateKey];
const oldStateSource = store.$state[stateKey];
if (typeof newStateTarget === "object" && isPlainObject$1(newStateTarget) && isPlainObject$1(oldStateSource)) {
patchObject(newStateTarget, oldStateSource);
} else {
newStore.$state[stateKey] = oldStateSource;
}
}
set(store, stateKey, vue.toRef(newStore.$state, stateKey));
});
Object.keys(store.$state).forEach((stateKey) => {
if (!(stateKey in newStore.$state)) {
del(store, stateKey);
}
});
isListening = false;
isSyncListening = false;
pinia.state.value[$id] = vue.toRef(newStore._hmrPayload, "hotState");
isSyncListening = true;
vue.nextTick().then(() => {
isListening = true;
});
for (const actionName in newStore._hmrPayload.actions) {
const action = newStore[actionName];
set(store, actionName, wrapAction(actionName, action));
}
for (const getterName in newStore._hmrPayload.getters) {
const getter = newStore._hmrPayload.getters[getterName];
const getterValue = isOptionsStore ? (
// special handling of options api
vue.computed(() => {
setActivePinia(pinia);
return getter.call(store, store);
})
) : getter;
set(store, getterName, getterValue);
}
Object.keys(store._hmrPayload.getters).forEach((key) => {
if (!(key in newStore._hmrPayload.getters)) {
del(store, key);
}
});
Object.keys(store._hmrPayload.actions).forEach((key) => {
if (!(key in newStore._hmrPayload.actions)) {
del(store, key);
}
});
store._hmrPayload = newStore._hmrPayload;
store._getters = newStore._getters;
store._hotUpdating = false;
});
}
if (USE_DEVTOOLS) {
const nonEnumerable = {
writable: true,
configurable: true,
// avoid warning on devtools trying to display this property
enumerable: false
};
["_p", "_hmrPayload", "_getters", "_customProperties"].forEach((p2) => {
Object.defineProperty(store, p2, assign({ value: store[p2] }, nonEnumerable));
});
}
pinia._p.forEach((extender) => {
if (USE_DEVTOOLS) {
const extensions = scope.run(() => extender({
store,
app: pinia._a,
pinia,
options: optionsForPlugin
}));
Object.keys(extensions || {}).forEach((key) => store._customProperties.add(key));
assign(store, extensions);
} else {
assign(store, scope.run(() => extender({
store,
app: pinia._a,
pinia,
options: optionsForPlugin
})));
}
});
if (store.$state && typeof store.$state === "object" && typeof store.$state.constructor === "function" && !store.$state.constructor.toString().includes("[native code]")) {
console.warn(`[🍍]: The "state" must be a plain object. It cannot be
state: () => new MyClass()
Found in store "${store.$id}".`);
}
if (initialState && isOptionsStore && options.hydrate) {
options.hydrate(store.$state, initialState);
}
isListening = true;
isSyncListening = true;
return store;
}
function defineStore(idOrOptions, setup, setupOptions) {
let id;
let options;
const isSetupStore = typeof setup === "function";
if (typeof idOrOptions === "string") {
id = idOrOptions;
options = isSetupStore ? setupOptions : setup;
} else {
options = idOrOptions;
id = idOrOptions.id;
}
function useStore(pinia, hot) {
const currentInstance = vue.getCurrentInstance();
pinia = // in test mode, ignore the argument provided as we can always retrieve a
// pinia instance with getActivePinia()
pinia || currentInstance && vue.inject(piniaSymbol, null);
if (pinia)
setActivePinia(pinia);
if (!activePinia) {
throw new Error(`[🍍]: getActivePinia was called with no active Pinia. Did you forget to install pinia?
const pinia = createPinia()
app.use(pinia)
This will fail in production.`);
}
pinia = activePinia;
if (!pinia._s.has(id)) {
if (isSetupStore) {
createSetupStore(id, setup, options, pinia);
} else {
createOptionsStore(id, options, pinia);
}
{
useStore._pinia = pinia;
}
}
const store = pinia._s.get(id);
if (hot) {
const hotId = "__hot:" + id;
const newStore = isSetupStore ? createSetupStore(hotId, setup, options, pinia, true) : createOptionsStore(hotId, assign({}, options), pinia, true);
hot._hotUpdate(newStore);
delete pinia.state.value[hotId];
pinia._s.delete(hotId);
}
if (IS_CLIENT && currentInstance && currentInstance.proxy && // avoid adding stores that are just built for hot module replacement
!hot) {
const vm = currentInstance.proxy;
const cache = "_pStores" in vm ? vm._pStores : vm._pStores = {};
cache[id] = store;
}
return store;
}
useStore.$id = id;
return useStore;
}
const userInfoStore = defineStore("counter", {
state: () => ({
userInfo: {}
}),
getters: {},
actions: {
saveUserInfo(userInfo) {
this.userInfo = userInfo;
}
}
});
const _sfc_main$1b = {
__name: "farmersCard",
setup(__props) {
const userInfoStores = userInfoStore();
const userInfo = vue.reactive({});
const objFn = (res, data) => {
for (let key in res) {
data[key] = res[key];
}
};
objFn(userInfoStores.userInfo, userInfo);
return (_ctx, _cache) => {
return userInfo.animal_detail ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "card"
}, [
vue.createCommentVNode(" {{userInfo.animal_detail.total_count}} "),
vue.createElementVNode("view", { class: "tit" }, [
vue.createElementVNode(
"view",
{ class: "" },
" 农户名称: " + vue.toDisplayString(userInfo.name),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "card-li" }, [
vue.createElementVNode("view", { class: "" }, " 种养殖类型: 养殖户 "),
vue.createElementVNode(
"view",
{ class: "" },
" 养殖头数: " + vue.toDisplayString(userInfo.animal_detail.total_count) + "头 ",
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "card-li" }, [
vue.createElementVNode(
"view",
{ class: "" },
" 土地面积:" + vue.toDisplayString(userInfo.total_land_area) + "亩 ",
1
/* TEXT */
),
vue.createElementVNode(
"view",
{ class: "" },
" 公: " + vue.toDisplayString(userInfo.animal_detail.male_count) + "头 ",
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "card-li" }, [
vue.createElementVNode(
"view",
{ class: "" },
" 养殖种类: " + vue.toDisplayString(userInfo.animal_detail.kind[0]) + "," + vue.toDisplayString(userInfo.animal_detail.kind[1]),
1
/* TEXT */
),
vue.createElementVNode(
"view",
{ class: "" },
" 母: " + vue.toDisplayString(userInfo.animal_detail.maternal_count) + "头 ",
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "card-li" }, [
vue.createElementVNode(
"view",
{ class: "" },
" 具体种类: " + vue.toDisplayString(userInfo.animal_detail.breed[0]),
1
/* TEXT */
)
])
])) : vue.createCommentVNode("v-if", true);
};
}
};
const farmersCard$1 = /* @__PURE__ */ _export_sfc(_sfc_main$1b, [["__scopeId", "data-v-853f8e7d"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/components/animal/farmersCard.vue"]]);
const _sfc_main$1a = {
__name: "cultivation",
props: {
userInfo: Object
},
setup(__props) {
const props2 = __props;
vue.reactive(props2.userInfo);
const data = vue.reactive([
{
tit: "环境温度",
icon: "WD",
dw: "℃",
cont: "hj_temp",
flag: false
},
{
tit: "环境湿度",
icon: "JYL",
dw: "%RH",
cont: "hj_humi"
},
{
tit: "氧气浓度",
icon: "FX",
cont: "o_content",
dw: "%"
},
{
tit: "二氧化碳含量",
icon: "FS",
dw: "mg/L",
cont: "c_content"
},
{
tit: "光照强度",
icon: "JYL",
dw: "lux",
cont: "light"
},
{
tit: "大气压强",
icon: "GZ",
dw: "hpa",
cont: "dqy"
},
{
tit: "有害气体",
icon: "EYHT",
cont: "yhqt"
}
]);
const baseData = vue.reactive({});
const urlFn = (name) => {
return `/static/img/${name}.png`;
};
const navgo = (url2) => {
uni.navigateTo({
url: url2
});
};
const animalList = vue.reactive([]);
animalListAPI$1({
user_id: 307,
page_no: 1,
page_size: 3
}).then((res) => {
res.data.forEach((item) => {
animalList.push(item);
});
});
animalEnvDataAPI$1({
user_id: 307
}).then((res) => {
for (let key in res.data) {
baseData[key] = res.data[key];
}
});
const actionList = vue.reactive({});
actionsAPI$1({
type: 3
}).then((res) => {
for (let key in res.data) {
actionList[key] = res.data[key];
}
});
return (_ctx, _cache) => {
const _component_u__image = resolveEasycom(vue.resolveDynamicComponent("u--image"), __easycom_0$6);
return vue.openBlock(), vue.createElementBlock("view", { class: "content" }, [
vue.createCommentVNode(' \r\n \r\n \r\n 农户名称: {{userInfo.name}}\r\n \r\n \r\n \r\n \r\n 种养殖类型: 养殖户\r\n \r\n \r\n 养殖头数: {{userInfo.animal_detail.total_count}}头\r\n \r\n \r\n \r\n \r\n 土地面积:{{userInfo.total_land_area}}亩\r\n \r\n \r\n 公: {{userInfo.animal_detail.male_count}}头\r\n \r\n \r\n \r\n \r\n 养殖种类: {{userInfo.animal_detail.kind[0]}},{{userInfo.animal_detail.kind[1]}}\r\n \r\n \r\n 母: {{userInfo.animal_detail.maternal_count}}头\r\n \r\n \r\n \r\n \r\n 具体种类: {{userInfo.animal_detail.breed[0]}}\r\n \r\n\r\n \r\n '),
vue.createVNode(farmersCard$1),
vue.createElementVNode("view", { class: "circumstance" }, [
vue.createElementVNode("view", { class: "card-tit" }, [
vue.createElementVNode("view", { class: "" }, " 养殖情况 ")
]),
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList(animalList, (item, index2) => {
return vue.openBlock(), vue.createElementBlock("view", {
class: "card",
key: index2,
onClick: ($event) => navgo(`/pages/feedIng/feedDetail?id=${item.id}`)
}, [
vue.createElementVNode("view", { class: "tit" }, [
vue.createElementVNode(
"view",
{ class: "" },
" 编号: " + vue.toDisplayString(item.animal_code),
1
/* TEXT */
),
item.animal_status == 1 ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "",
style: { "color": "#00A15E" }
}, " 健康 ")) : vue.createCommentVNode("v-if", true),
item.animal_status == 2 ? (vue.openBlock(), vue.createElementBlock("view", {
key: 1,
class: "",
style: { "color": "#FFD736" }
}, " 怀孕中 ")) : vue.createCommentVNode("v-if", true),
item.animal_status == 4 ? (vue.openBlock(), vue.createElementBlock("view", {
key: 2,
class: "",
style: { "color": "#3274F9" }
}, " 可出栏 ")) : vue.createCommentVNode("v-if", true),
item.animal_status == 3 ? (vue.openBlock(), vue.createElementBlock("view", {
key: 3,
class: "",
style: { "color": "#F84221" }
}, " 生病隔离中 ")) : vue.createCommentVNode("v-if", true)
]),
vue.createElementVNode("view", { class: "card-li" }, [
vue.createElementVNode(
"view",
{ class: "" },
" 养殖类型: " + vue.toDisplayString(item.animal_kind),
1
/* TEXT */
),
vue.createElementVNode(
"view",
{ class: "" },
" 年龄: " + vue.toDisplayString(item.animal_age) + "年 ",
1
/* TEXT */
),
vue.createElementVNode(
"view",
{ class: "" },
" 体重: " + vue.toDisplayString(item.animal_weight) + "kg ",
1
/* TEXT */
)
])
], 8, ["onClick"]);
}),
128
/* KEYED_FRAGMENT */
)),
vue.createElementVNode("view", {
class: "check",
onClick: _cache[0] || (_cache[0] = ($event) => navgo("/pages/feedIng/feedList"))
}, [
vue.createTextVNode(" 查看全部养殖动物"),
vue.createVNode(_component_u__image, {
src: "/static/img/CKGD.png",
style: { "margin-left": "5rpx" },
width: "31.54rpx",
height: "31.54rpx"
})
])
]),
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList(actionList, (item, index2) => {
return vue.openBlock(), vue.createElementBlock("view", {
class: "circumstance",
key: index2
}, [
vue.createElementVNode("view", { class: "card-tit" }, [
vue.createElementVNode(
"view",
{ class: "" },
vue.toDisplayString(index2),
1
/* TEXT */
),
vue.createElementVNode(
"view",
{
class: "updata-btn",
onClick: _cache[1] || (_cache[1] = ($event) => navgo("/pages/growRecord/index?type=3"))
},
" 更新" + vue.toDisplayString(index2.slice(0, -2)),
1
/* TEXT */
)
]),
vue.createVNode(myTable, {
tit: `查看${index2.slice(0, -2)}`,
dataList: item.action_record,
route: "/pages/feedIng/allRecordTable"
}, {
default: vue.withCtx(() => [
vue.createTextVNode("> ")
]),
_: 2
/* DYNAMIC */
}, 1032, ["tit", "dataList"])
]);
}),
128
/* KEYED_FRAGMENT */
)),
vue.createElementVNode("view", { class: "data" }, [
vue.createElementVNode("view", { class: "tit" }, [
vue.createElementVNode("view", {
class: "",
style: { "display": "flex", "justify-content": "space-between", "font-size": "29.79rpx" }
}, [
vue.createElementVNode("view", { class: "" }, " 环境监测数据 ")
]),
vue.createElementVNode("view", { class: "tit-b" }, [
vue.createVNode(_component_u__image, {
src: urlFn("sj"),
style: { "margin": "0 5rpx" },
width: "28.04rpx",
height: "28.04rpx"
}, null, 8, ["src"]),
vue.createElementVNode("text", null, "刷新时间: 2022-3-3")
])
]),
vue.createElementVNode("view", { class: "data-cont" }, [
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList(data, (item, index2) => {
return vue.openBlock(), vue.createElementBlock("view", {
class: "data-cont-li center",
key: index2
}, [
vue.createElementVNode("view", { style: { "margin": "0 20rpx" } }, [
vue.createElementVNode("view", { class: "center" }, [
vue.createVNode(_component_u__image, {
src: urlFn(item.icon),
style: { "margin": "0 5rpx" },
width: "38.55rpx",
height: "38.54rpx"
}, null, 8, ["src"]),
vue.createTextVNode(
" " + vue.toDisplayString(item.tit),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "b-cls" }, [
vue.createElementVNode(
"view",
{
class: "",
style: vue.normalizeStyle({ color: item.flag ? "#0095FF" : "" })
},
[
vue.createElementVNode(
"text",
{ style: { "font-size": "70.09rpx" } },
vue.toDisplayString(baseData[item.cont]),
1
/* TEXT */
),
vue.createTextVNode(
vue.toDisplayString(item.dw),
1
/* TEXT */
)
],
4
/* STYLE */
),
item.flag ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "",
style: { "display": "flex", "align-items": "center" }
}, [
vue.createVNode(_component_u__image, {
src: urlFn("D"),
style: { "margin": "0 5rpx" },
width: "31.54rpx",
height: "31.54rpx"
}, null, 8, ["src"]),
vue.createElementVNode("text", { style: { "color": "#0095FF" } }, "5")
])) : vue.createCommentVNode("v-if", true)
])
])
]);
}),
128
/* KEYED_FRAGMENT */
))
])
])
]);
};
}
};
const cultivation = /* @__PURE__ */ _export_sfc(_sfc_main$1a, [["__scopeId", "data-v-91fd8d70"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/components/index/cultivation.vue"]]);
const _sfc_main$19 = {
__name: "planting",
props: {
userInfo: Object
},
setup(__props) {
const props2 = __props;
const userInfo = vue.reactive(props2.userInfo);
const navgo = (url2) => {
uni.navigateTo({
url: url2
});
};
const navgoFn = (is_cropped, land_id) => {
if (!is_cropped) {
navgo(`/pages/InformationAdd/index?land_id=${land_id}`);
} else if (is_cropped) {
navgo(`/pages/detail/plant?land_id=${land_id}`);
}
if (is_cropped == 2) {
navgo("/pages/detail/plant");
}
};
return (_ctx, _cache) => {
return vue.openBlock(), vue.createElementBlock("view", { class: "" }, [
vue.createElementVNode("view", { class: "content" }, [
vue.createElementVNode("view", { class: "border-bgc" }),
vue.createElementVNode("view", {
class: "",
style: { "height": "30rpx" }
}),
vue.createElementVNode("view", { class: "card" }, [
vue.createElementVNode(
"view",
{ class: "card-li" },
" 农户名称: " + vue.toDisplayString(userInfo.name),
1
/* TEXT */
),
vue.createElementVNode("view", { class: "card-li" }, " 种养殖类型: 种植户 "),
vue.createElementVNode(
"view",
{ class: "card-li" },
" 土地面积: " + vue.toDisplayString(userInfo.total_land_area) + "亩 ",
1
/* TEXT */
),
vue.createElementVNode(
"view",
{ class: "card-li" },
" 地址: " + vue.toDisplayString(userInfo.area_name) + vue.toDisplayString(userInfo.street_name) + vue.toDisplayString(userInfo.village_name) + vue.toDisplayString(userInfo.brigade_name),
1
/* TEXT */
)
]),
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList(userInfo.land_detail, (item, index2) => {
return vue.openBlock(), vue.createElementBlock("view", {
class: "card",
key: index2,
onClick: ($event) => navgoFn(item.is_cropped, item.land_id)
}, [
vue.createElementVNode("view", { class: "tit card-li" }, [
vue.createElementVNode(
"view",
{ class: "" },
vue.toDisplayString(item.land_notes),
1
/* TEXT */
),
item.is_cropped ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "",
style: { "color": "#00A15E" }
}, " 已种植 ")) : (vue.openBlock(), vue.createElementBlock("view", {
key: 1,
class: "",
style: { "color": "#00A15E" }
}, " 未种植 "))
]),
vue.createElementVNode("view", { class: "card-li" }, [
vue.createElementVNode(
"view",
{ class: "" },
" 面积: " + vue.toDisplayString(item.land_area) + "亩 ",
1
/* TEXT */
)
]),
item.crop_name ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "card-li tit"
}, [
vue.createElementVNode(
"view",
{
class: "",
style: { "font-weight": "normal" }
},
" 农作物: " + vue.toDisplayString(item.crop_name),
1
/* TEXT */
),
item.ripe_time ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "",
style: { "color": "#FF9B66" }
}, " 已成熟 ")) : vue.createCommentVNode("v-if", true)
])) : vue.createCommentVNode("v-if", true),
vue.withDirectives(vue.createElementVNode(
"view",
{
class: "card-li tit",
style: { "font-weight": "normal" }
},
[
vue.createElementVNode(
"view",
{ class: "" },
" 预计产量: " + vue.toDisplayString(item.crop_yield) + "kg ",
1
/* TEXT */
),
vue.createCommentVNode("v-if", true)
],
512
/* NEED_PATCH */
), [
[vue.vShow, item.crop_yield]
])
], 8, ["onClick"]);
}),
128
/* KEYED_FRAGMENT */
)),
vue.createElementVNode("view", { style: { "height": "170rpx" } })
]),
vue.createElementVNode("view", { class: "bottom" }, [
vue.createElementVNode("view", {
class: "add-btn",
onClick: _cache[0] || (_cache[0] = ($event) => navgo("/pages/growRecord/index"))
}, " 批量处理 "),
vue.createCommentVNode(` \r
增加种植\r
`)
])
]);
};
}
};
const planting = /* @__PURE__ */ _export_sfc(_sfc_main$19, [["__scopeId", "data-v-093aaff7"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/components/index/planting.vue"]]);
const _sfc_main$18 = {
__name: "fishing",
props: {
userInfo: Object
},
setup(__props) {
const props2 = __props;
const userInfo = vue.reactive(props2.userInfo);
const navgo = (url2) => {
uni.navigateTo({
url: url2
});
};
const navgoFn = (is_cropped, pond_id) => {
if (!is_cropped) {
navgo(`/pages/aquatic/addPond?pond_id=${pond_id}`);
} else if (is_cropped) {
navgo(`/pages/aquatic/detail?pond_id=${pond_id}`);
}
};
return (_ctx, _cache) => {
return vue.openBlock(), vue.createElementBlock("view", { class: "" }, [
vue.createElementVNode("view", { class: "content" }, [
vue.createElementVNode("view", { class: "border-bgc" }),
vue.createElementVNode("view", {
class: "",
style: { "height": "30rpx" }
}),
vue.createElementVNode("view", { class: "card" }, [
vue.createElementVNode(
"view",
{ class: "card-li" },
" 农户名称: " + vue.toDisplayString(userInfo.name),
1
/* TEXT */
),
vue.createElementVNode("view", { class: "card-li" }, " 种养殖类型: 养殖户 "),
vue.createElementVNode("view", { class: "card-li" }, [
vue.createCommentVNode(" 养殖种类: {{userInfo.}} ")
]),
vue.createElementVNode(
"view",
{ class: "card-li" },
" 土地面积: " + vue.toDisplayString(userInfo.total_land_area) + "亩 ",
1
/* TEXT */
),
vue.createElementVNode(
"view",
{ class: "card-li" },
" 地址: " + vue.toDisplayString(userInfo.area_name) + vue.toDisplayString(userInfo.street_name) + vue.toDisplayString(userInfo.village_name) + vue.toDisplayString(userInfo.brigade_name),
1
/* TEXT */
)
]),
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList(userInfo.pond_detail, (item, index2) => {
return vue.openBlock(), vue.createElementBlock("view", {
class: "card",
key: index2,
onClick: ($event) => navgoFn(item.is_culture, item.pond_id)
}, [
vue.createElementVNode("view", { class: "tit card-li" }, [
vue.createElementVNode(
"view",
{ class: "" },
vue.toDisplayString(item.pond_notes),
1
/* TEXT */
),
item.is_culture ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "",
style: { "color": "#00A15E" }
}, " 已养殖 ")) : (vue.openBlock(), vue.createElementBlock("view", {
key: 1,
class: "",
style: { "color": "#00A15E" }
}, " 未养殖 "))
]),
vue.createElementVNode("view", { class: "card-li" }, [
vue.createElementVNode(
"view",
{ class: "" },
" 面积: " + vue.toDisplayString(item.pond_area) + "亩 ",
1
/* TEXT */
)
]),
item.is_culture ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "card-li"
}, [
vue.createElementVNode(
"view",
{ class: "" },
" 养殖品种: " + vue.toDisplayString(item.pond_area) + "亩 ",
1
/* TEXT */
)
])) : vue.createCommentVNode("v-if", true),
item.is_culture ? (vue.openBlock(), vue.createElementBlock("view", {
key: 1,
class: "card-li"
}, [
vue.createElementVNode(
"view",
{ class: "" },
" 养殖数量: " + vue.toDisplayString(item.total_num),
1
/* TEXT */
)
])) : vue.createCommentVNode("v-if", true)
], 8, ["onClick"]);
}),
128
/* KEYED_FRAGMENT */
)),
vue.createElementVNode("view", { style: { "height": "170rpx" } })
]),
vue.createElementVNode("view", { class: "bottom" }, [
vue.createElementVNode("view", {
class: "add-btn",
onClick: _cache[0] || (_cache[0] = ($event) => navgo("/pages/growRecord/index"))
}, " 批量处理 "),
vue.createCommentVNode(` \r
增加种植\r
`)
])
]);
};
}
};
const fishing = /* @__PURE__ */ _export_sfc(_sfc_main$18, [["__scopeId", "data-v-bdc223d1"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/components/index/fishing.vue"]]);
const _sfc_main$17 = {
__name: "farmersCard",
setup(__props) {
const userInfoStores = userInfoStore();
const userInfo = vue.reactive({});
const objFn = (res, data) => {
for (let key in res) {
data[key] = res[key];
}
};
objFn(userInfoStores.userInfo, userInfo);
return (_ctx, _cache) => {
return vue.openBlock(), vue.createElementBlock(
vue.Fragment,
null,
[
vue.createCommentVNode(" {{userInfo.poultry_detail}} "),
userInfo.poultry_detail ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "card"
}, [
vue.createCommentVNode(" {{userInfo.animal_detail.total_count}} "),
vue.createElementVNode("view", { class: "tit" }, [
vue.createElementVNode(
"view",
{ class: "" },
" 农户名称: " + vue.toDisplayString(userInfo.name),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "card-li" }, [
vue.createElementVNode("view", { class: "" }, " 种养殖类型: 养殖户 "),
vue.createElementVNode(
"view",
{ class: "" },
" 养殖头数: " + vue.toDisplayString(userInfo.poultry_detail.total_count) + "头 ",
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "card-li" }, [
vue.createElementVNode(
"view",
{ class: "" },
" 土地面积:" + vue.toDisplayString(userInfo.total_land_area) + "亩 ",
1
/* TEXT */
),
vue.createElementVNode(
"view",
{ class: "" },
" 公: " + vue.toDisplayString(userInfo.poultry_detail.male_count) + "头 ",
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "card-li" }, [
vue.createElementVNode(
"view",
{ class: "" },
" 养殖种类: " + vue.toDisplayString(userInfo.poultry_detail.kind[0]) + "," + vue.toDisplayString(userInfo.poultry_detail.kind[1]),
1
/* TEXT */
),
vue.createElementVNode(
"view",
{ class: "" },
" 母: " + vue.toDisplayString(userInfo.poultry_detail.maternal_count) + "头 ",
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "card-li" }, [
vue.createElementVNode(
"view",
{ class: "" },
" 具体种类: " + vue.toDisplayString(userInfo.poultry_detail.breed[0]),
1
/* TEXT */
)
])
])) : vue.createCommentVNode("v-if", true)
],
2112
/* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
);
};
}
};
const farmersCard = /* @__PURE__ */ _export_sfc(_sfc_main$17, [["__scopeId", "data-v-7a12289e"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/components/poultry/farmersCard.vue"]]);
const animalListAPI = (data) => syhttp.get("/PoultryBreed/poultryList", data);
const animalEnvDataAPI = (data) => syhttp.get("/PoultryBreed/poultryEnvData", data);
const addAnimalAPI = (data) => syhttp.post("/PoultryBreed/addPoultry", data);
const actionsAPI = (data) => syhttp.get("/user/actions", data);
const animalInfoAPI = (data) => syhttp.get("/PoultryBreed/poultryInfo", data);
const animalPicListAPI = (data) => syhttp.get("/PoultryBreed/poultryPicList", data);
const addAnimalPicAPI = (data) => syhttp.post("/PoultryBreed/addPoultryPic", data);
const poultryInfoAPI = (data) => syhttp.get("/PoultryBreed/poultryInfo", data);
const poultryStatusAPI = (data) => syhttp.post("/PoultryBreed/poultryStatus", data);
const _sfc_main$16 = {
__name: "chick",
props: {
userInfo: Object
},
setup(__props) {
const props2 = __props;
vue.reactive(props2.userInfo);
const data = vue.reactive([
{
tit: "环境温度",
icon: "WD",
dw: "℃",
cont: "hj_temp",
flag: false
},
{
tit: "环境湿度",
icon: "JYL",
dw: "%RH",
cont: "hj_humi"
},
{
tit: "氧气浓度",
icon: "FX",
cont: "o_content",
dw: "%"
},
{
tit: "二氧化碳含量",
icon: "FS",
dw: "mg/L",
cont: "c_content"
},
{
tit: "光照强度",
icon: "JYL",
dw: "lux",
cont: "light"
},
{
tit: "大气压强",
icon: "GZ",
dw: "hpa",
cont: "dqy"
},
{
tit: "有害气体",
icon: "EYHT",
cont: "yhqt"
}
]);
const baseData = vue.reactive({});
const urlFn = (name) => {
return `/static/img/${name}.png`;
};
const navgo = (url2) => {
uni.navigateTo({
url: url2
});
};
const animalList = vue.reactive([]);
animalListAPI({
user_id: 307,
page_no: 1,
page_size: 3
}).then((res) => {
res.data.forEach((item) => {
animalList.push(item);
});
formatAppLog("log", "at components/index/chick.vue:237", animalList);
});
animalEnvDataAPI({
user_id: 307
}).then((res) => {
for (let key in res.data) {
baseData[key] = res.data[key];
}
});
const actionList = vue.reactive({});
actionsAPI({
type: 2
}).then((res) => {
for (let key in res.data) {
actionList[key] = res.data[key];
}
});
return (_ctx, _cache) => {
const _component_u__image = resolveEasycom(vue.resolveDynamicComponent("u--image"), __easycom_0$6);
return vue.openBlock(), vue.createElementBlock("view", { class: "content" }, [
vue.createCommentVNode(' \r\n \r\n \r\n 农户名称: {{userInfo.name}}\r\n \r\n \r\n \r\n \r\n 种养殖类型: 养殖户\r\n \r\n \r\n 养殖头数: {{userInfo.poultry_detail.total_count}}头\r\n \r\n \r\n \r\n \r\n 土地面积:{{userInfo.total_land_area}}亩\r\n \r\n \r\n 公: {{userInfo.poultry_detail.male_count}}头\r\n \r\n \r\n \r\n \r\n 养殖种类: {{userInfo.poultry_detail.kind[0]}},{{userInfo.poultry_detail.kind[1]}}\r\n \r\n \r\n 母: {{userInfo.poultry_detail.maternal_count}}头\r\n \r\n \r\n \r\n \r\n 具体种类: {{userInfo.poultry_detail.breed[0]}}\r\n \r\n\r\n \r\n '),
vue.createVNode(farmersCard),
vue.createElementVNode("view", { class: "circumstance" }, [
vue.createElementVNode("view", { class: "card-tit" }, [
vue.createElementVNode("view", { class: "" }, " 养殖情况 ")
]),
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList(animalList, (item, index2) => {
return vue.openBlock(), vue.createElementBlock("view", {
class: "card",
key: index2,
onClick: ($event) => navgo(`/pages/poultry/feedDetail?id=${item.id}`)
}, [
vue.createElementVNode("view", { class: "tit" }, [
vue.createElementVNode(
"view",
{ class: "" },
" 编号: " + vue.toDisplayString(item.code),
1
/* TEXT */
),
item.status == 1 ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "",
style: { "color": "#00A15E" }
}, " 健康 ")) : vue.createCommentVNode("v-if", true),
item.status == 2 ? (vue.openBlock(), vue.createElementBlock("view", {
key: 1,
class: "",
style: { "color": "#FFD736" }
}, " 产蛋期 ")) : vue.createCommentVNode("v-if", true),
item.status == 4 ? (vue.openBlock(), vue.createElementBlock("view", {
key: 2,
class: "",
style: { "color": "#3274F9" }
}, " 可出栏 ")) : vue.createCommentVNode("v-if", true),
item.status == 3 ? (vue.openBlock(), vue.createElementBlock("view", {
key: 3,
class: "",
style: { "color": "#F84221" }
}, " 生病隔离中 ")) : vue.createCommentVNode("v-if", true)
]),
vue.createElementVNode("view", { class: "card-li" }, [
vue.createElementVNode(
"view",
{ class: "" },
" 养殖类型: " + vue.toDisplayString(item.kind),
1
/* TEXT */
),
vue.createElementVNode(
"view",
{ class: "" },
" 年龄: " + vue.toDisplayString(item.age) + "年 ",
1
/* TEXT */
),
vue.createElementVNode(
"view",
{ class: "" },
" 体重: " + vue.toDisplayString(item.weight) + "kg ",
1
/* TEXT */
)
])
], 8, ["onClick"]);
}),
128
/* KEYED_FRAGMENT */
)),
vue.createElementVNode("view", {
class: "check",
onClick: _cache[0] || (_cache[0] = ($event) => navgo("/pages/poultry/feedList"))
}, [
vue.createTextVNode(" 查看全部养殖动物"),
vue.createVNode(_component_u__image, {
src: "/static/img/CKGD.png",
style: { "margin-left": "5rpx" },
width: "31.54rpx",
height: "31.54rpx"
})
])
]),
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList(actionList, (item, index2) => {
return vue.openBlock(), vue.createElementBlock("view", {
class: "circumstance",
key: index2
}, [
vue.createCommentVNode(" {{item.action_record}} "),
vue.createElementVNode("view", { class: "card-tit" }, [
vue.createElementVNode(
"view",
{ class: "" },
vue.toDisplayString(index2),
1
/* TEXT */
),
vue.createElementVNode(
"view",
{
class: "updata-btn",
onClick: _cache[1] || (_cache[1] = ($event) => navgo("/pages/growRecord/index?type=2"))
},
" 更新" + vue.toDisplayString(index2.slice(0, -2)),
1
/* TEXT */
)
]),
vue.createVNode(myTable, {
tit: `查看${index2.slice(0, -2)}`,
dataList: item.action_record,
route: "/pages/poultry/allRecording"
}, null, 8, ["tit", "dataList"])
]);
}),
128
/* KEYED_FRAGMENT */
)),
vue.createCommentVNode(` \r
\r
\r
消毒情况\r
\r
\r
更新消毒情况\r
\r
\r
\r
`),
vue.createElementVNode("view", { class: "data" }, [
vue.createElementVNode("view", { class: "tit" }, [
vue.createElementVNode("view", {
class: "",
style: { "display": "flex", "justify-content": "space-between", "font-size": "29.79rpx" }
}, [
vue.createElementVNode("view", { class: "" }, " 环境监测数据 ")
]),
vue.createElementVNode("view", { class: "tit-b" }, [
vue.createVNode(_component_u__image, {
src: urlFn("sj"),
style: { "margin": "0 5rpx" },
width: "28.04rpx",
height: "28.04rpx"
}, null, 8, ["src"]),
vue.createElementVNode("text", null, "刷新时间: 2022-3-3")
])
]),
vue.createElementVNode("view", { class: "data-cont" }, [
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList(data, (item, index2) => {
return vue.openBlock(), vue.createElementBlock("view", {
class: "data-cont-li center",
key: index2
}, [
vue.createElementVNode("view", { style: { "margin": "0 20rpx" } }, [
vue.createElementVNode("view", { class: "center" }, [
vue.createVNode(_component_u__image, {
src: urlFn(item.icon),
style: { "margin": "0 5rpx" },
width: "38.55rpx",
height: "38.54rpx"
}, null, 8, ["src"]),
vue.createTextVNode(
" " + vue.toDisplayString(item.tit),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "b-cls" }, [
vue.createElementVNode(
"view",
{
class: "",
style: vue.normalizeStyle({ color: item.flag ? "#0095FF" : "" })
},
[
vue.createElementVNode(
"text",
{ style: { "font-size": "70.09rpx" } },
vue.toDisplayString(baseData[item.cont]),
1
/* TEXT */
),
vue.createTextVNode(
vue.toDisplayString(item.dw),
1
/* TEXT */
)
],
4
/* STYLE */
),
item.flag ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "",
style: { "display": "flex", "align-items": "center" }
}, [
vue.createVNode(_component_u__image, {
src: urlFn("D"),
style: { "margin": "0 5rpx" },
width: "31.54rpx",
height: "31.54rpx"
}, null, 8, ["src"]),
vue.createElementVNode("text", { style: { "color": "#0095FF" } }, "5")
])) : vue.createCommentVNode("v-if", true)
])
])
]);
}),
128
/* KEYED_FRAGMENT */
))
])
])
]);
};
}
};
const chick = /* @__PURE__ */ _export_sfc(_sfc_main$16, [["__scopeId", "data-v-c4e0dba5"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/components/index/chick.vue"]]);
const _sfc_main$15 = {
__name: "index",
setup(__props) {
const userInfoStores = userInfoStore();
const flag2 = vue.ref(1);
const scollChangeFn = (index2) => {
flag2.value = index2;
};
const list = vue.reactive([]);
const userInfo = vue.reactive({});
const initUserinfoFn = () => {
for (const key in userInfoStores.userInfo) {
userInfo[key] = userInfoStores.userInfo[key];
if (key == "land_detail") {
list.push({
tit: "土地种植管理",
id: 1
});
} else if (key == "animal_detail") {
list.push({
tit: "家畜养殖管理",
id: 2
});
} else if (key == "poultry_detail") {
list.push({
tit: "家禽养殖管理",
id: 3
});
} else if (key == "pond_detail") {
list.push({
tit: "水产养殖管理",
id: 4
});
}
}
list.sort(function(a2, b2) {
return a2.id - b2.id;
});
};
initUserinfoFn();
return (_ctx, _cache) => {
const _component_u__image = resolveEasycom(vue.resolveDynamicComponent("u--image"), __easycom_0$6);
return vue.openBlock(), vue.createElementBlock("view", { class: "" }, [
vue.createElementVNode("view", { class: "tabbar" }, [
vue.createElementVNode("view", {
class: "",
style: { "padding-top": "var(--status-bar-height)" }
}),
vue.createElementVNode("view", {
class: "",
style: { "display": "flex" }
}, [
vue.createVNode(_component_u__image, {
src: "/static/img/FH.png",
width: "50.82rpx",
height: "50.82rpx",
alt: ""
}),
vue.createElementVNode("view", { class: "scoll-list" }, [
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList(list, (item, index2) => {
return vue.openBlock(), vue.createElementBlock("view", {
key: index2,
class: "scoll-list-li",
style: vue.normalizeStyle({ color: flag2.value == item.id ? "white" : "" }),
onClick: ($event) => scollChangeFn(item.id)
}, vue.toDisplayString(item.tit), 13, ["onClick"]);
}),
128
/* KEYED_FRAGMENT */
))
])
])
]),
vue.createElementVNode("view", { style: { "background-color": "#34D190" } }, [
vue.createElementVNode("view", {
class: "",
style: { "padding-top": "var(--status-bar-height)" }
}),
vue.createElementVNode("view", {
class: "",
style: { "height": "100rpx" }
})
]),
vue.createCommentVNode(" 种植户首页 "),
flag2.value == 1 ? (vue.openBlock(), vue.createBlock(planting, {
key: 0,
userInfo
}, null, 8, ["userInfo"])) : vue.createCommentVNode("v-if", true),
vue.createCommentVNode(" 养猪的 "),
flag2.value == 2 ? (vue.openBlock(), vue.createBlock(cultivation, {
key: 1,
userInfo
}, null, 8, ["userInfo"])) : vue.createCommentVNode("v-if", true),
vue.createCommentVNode(" 养鸡的 "),
flag2.value == 3 ? (vue.openBlock(), vue.createBlock(chick, {
key: 2,
userInfo
}, null, 8, ["userInfo"])) : vue.createCommentVNode("v-if", true),
vue.createCommentVNode(" 卖鱼的首页 "),
flag2.value == 4 ? (vue.openBlock(), vue.createBlock(fishing, {
key: 3,
userInfo
}, null, 8, ["userInfo"])) : vue.createCommentVNode("v-if", true)
]);
};
}
};
const PagesIndexIndex = /* @__PURE__ */ _export_sfc(_sfc_main$15, [["__file", "D:/zmj/uniapp/TraceabilityAPP/pages/index/index.vue"]]);
const props$e = {
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$14 = {
name: "u-input",
mixins: [mpMixin, mixin, props$e],
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$r(_ctx, _cache, $props, $setup, $data, $options) {
const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$7);
return vue.openBlock(), vue.createElementBlock(
"view",
{
class: vue.normalizeClass(["u-input", $options.inputClass]),
style: vue.normalizeStyle([$options.wrapperStyle])
},
[
vue.createElementVNode("view", { class: "u-input__content" }, [
_ctx.prefixIcon || _ctx.$slots.prefix ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "u-input__content__prefix-icon"
}, [
vue.renderSlot(_ctx.$slots, "prefix", {}, () => [
vue.createVNode(_component_u_icon, {
name: _ctx.prefixIcon,
size: "18",
customStyle: _ctx.prefixIconStyle
}, null, 8, ["name", "customStyle"])
], true)
])) : vue.createCommentVNode("v-if", true),
vue.createElementVNode("view", {
class: "u-input__content__field-wrapper",
onClick: _cache[5] || (_cache[5] = (...args) => $options.clickHandler && $options.clickHandler(...args))
}, [
vue.createCommentVNode(" 根据uni-app的input组件文档,H5和APP中只要声明了password参数(无论true还是false),type均失效,此时\n 为了防止type=number时,又存在password属性,type无效,此时需要设置password为undefined\n "),
vue.createElementVNode("input", {
class: "u-input__content__field-wrapper__field",
style: vue.normalizeStyle([$options.inputStyle]),
type: _ctx.type,
focus: _ctx.focus,
cursor: _ctx.cursor,
value: $data.innerValue,
"auto-blur": _ctx.autoBlur,
disabled: _ctx.disabled || _ctx.readonly,
maxlength: _ctx.maxlength,
placeholder: _ctx.placeholder,
"placeholder-style": _ctx.placeholderStyle,
"placeholder-class": _ctx.placeholderClass,
"confirm-type": _ctx.confirmType,
"confirm-hold": _ctx.confirmHold,
"hold-keyboard": _ctx.holdKeyboard,
"cursor-spacing": _ctx.cursorSpacing,
"adjust-position": _ctx.adjustPosition,
"selection-end": _ctx.selectionEnd,
"selection-start": _ctx.selectionStart,
password: _ctx.password || _ctx.type === "password" || 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_1$7 = /* @__PURE__ */ _export_sfc(_sfc_main$14, [["render", _sfc_render$r], ["__scopeId", "data-v-5904192e"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/node_modules/uview-plus/components/u-input/u-input.vue"]]);
const props$d = {
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$13 = {
name: "u-loading-icon",
mixins: [mpMixin, mixin, props$d],
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$q(_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_1$6 = /* @__PURE__ */ _export_sfc(_sfc_main$13, [["render", _sfc_render$q], ["__scopeId", "data-v-00752c6d"], ["__file", "D:/zmj/uniapp/TraceabilityAPP/node_modules/uview-plus/components/u-loading-icon/u-loading-icon.vue"]]);
const props$c = {
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
},
// 用于