var __defProp = Object.defineProperty; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __publicField = (obj, key, value) => { __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); return value; }; if (typeof Promise !== "undefined" && !Promise.prototype.finally) { Promise.prototype.finally = function(callback) { const promise = this.constructor; return this.then( (value) => promise.resolve(callback()).then(() => value), (reason) => promise.resolve(callback()).then(() => { throw reason; }) ); }; } ; if (typeof uni !== "undefined" && uni && uni.requireGlobal) { const global2 = uni.requireGlobal(); ArrayBuffer = global2.ArrayBuffer; Int8Array = global2.Int8Array; Uint8Array = global2.Uint8Array; Uint8ClampedArray = global2.Uint8ClampedArray; Int16Array = global2.Int16Array; Uint16Array = global2.Uint16Array; Int32Array = global2.Int32Array; Uint32Array = global2.Uint32Array; Float32Array = global2.Float32Array; Float64Array = global2.Float64Array; BigInt64Array = global2.BigInt64Array; BigUint64Array = global2.BigUint64Array; } ; if (uni.restoreGlobal) { uni.restoreGlobal(Vue, weex, plus, setTimeout, clearTimeout, setInterval, clearInterval); } (function(vue) { "use strict"; const ON_SHOW = "onShow"; const ON_HIDE = "onHide"; const ON_LAUNCH = "onLaunch"; const ON_LOAD = "onLoad"; const ON_UNLOAD = "onUnload"; function requireNativePlugin(name) { return weex.requireModule(name); } function formatAppLog(type2, filename, ...args) { if (uni.__log__) { uni.__log__(type2, filename, ...args); } else { console[type2].apply(console, [...args, filename]); } } function resolveEasycom(component, easycom) { return typeof component === "string" ? easycom : component; } const createHook = (lifecycle) => (hook, target = vue.getCurrentInstance()) => { !vue.isInSSRComponentSetup && vue.injectHook(lifecycle, hook, target); }; const onShow = /* @__PURE__ */ createHook(ON_SHOW); const onHide = /* @__PURE__ */ createHook(ON_HIDE); const onLaunch = /* @__PURE__ */ createHook(ON_LAUNCH); const onLoad = /* @__PURE__ */ createHook(ON_LOAD); const onUnload = /* @__PURE__ */ createHook(ON_UNLOAD); const icons$1 = { "uicon-level": "", "uicon-column-line": "", "uicon-checkbox-mark": "", "uicon-folder": "", "uicon-movie": "", "uicon-star-fill": "", "uicon-star": "", "uicon-phone-fill": "", "uicon-phone": "", "uicon-apple-fill": "", "uicon-chrome-circle-fill": "", "uicon-backspace": "", "uicon-attach": "", "uicon-cut": "", "uicon-empty-car": "", "uicon-empty-coupon": "", "uicon-empty-address": "", "uicon-empty-favor": "", "uicon-empty-permission": "", "uicon-empty-news": "", "uicon-empty-search": "", "uicon-github-circle-fill": "", "uicon-rmb": "", "uicon-person-delete-fill": "", "uicon-reload": "", "uicon-order": "", "uicon-server-man": "", "uicon-search": "", "uicon-fingerprint": "", "uicon-more-dot-fill": "", "uicon-scan": "", "uicon-share-square": "", "uicon-map": "", "uicon-map-fill": "", "uicon-tags": "", "uicon-tags-fill": "", "uicon-bookmark-fill": "", "uicon-bookmark": "", "uicon-eye": "", "uicon-eye-fill": "", "uicon-mic": "", "uicon-mic-off": "", "uicon-calendar": "", "uicon-calendar-fill": "", "uicon-trash": "", "uicon-trash-fill": "", "uicon-play-left": "", "uicon-play-right": "", "uicon-minus": "", "uicon-plus": "", "uicon-info": "", "uicon-info-circle": "", "uicon-info-circle-fill": "", "uicon-question": "", "uicon-error": "", "uicon-close": "", "uicon-checkmark": "", "uicon-android-circle-fill": "", "uicon-android-fill": "", "uicon-ie": "", "uicon-IE-circle-fill": "", "uicon-google": "", "uicon-google-circle-fill": "", "uicon-setting-fill": "", "uicon-setting": "", "uicon-minus-square-fill": "", "uicon-plus-square-fill": "", "uicon-heart": "", "uicon-heart-fill": "", "uicon-camera": "", "uicon-camera-fill": "", "uicon-more-circle": "", "uicon-more-circle-fill": "", "uicon-chat": "", "uicon-chat-fill": "", "uicon-bag-fill": "", "uicon-bag": "", "uicon-error-circle-fill": "", "uicon-error-circle": "", "uicon-close-circle": "", "uicon-close-circle-fill": "", "uicon-checkmark-circle": "", "uicon-checkmark-circle-fill": "", "uicon-question-circle-fill": "", "uicon-question-circle": "", "uicon-share": "", "uicon-share-fill": "", "uicon-shopping-cart": "", "uicon-shopping-cart-fill": "", "uicon-bell": "", "uicon-bell-fill": "", "uicon-list": "", "uicon-list-dot": "", "uicon-zhihu": "", "uicon-zhihu-circle-fill": "", "uicon-zhifubao": "", "uicon-zhifubao-circle-fill": "", "uicon-weixin-circle-fill": "", "uicon-weixin-fill": "", "uicon-twitter-circle-fill": "", "uicon-twitter": "", "uicon-taobao-circle-fill": "", "uicon-taobao": "", "uicon-weibo-circle-fill": "", "uicon-weibo": "", "uicon-qq-fill": "", "uicon-qq-circle-fill": "", "uicon-moments-circel-fill": "", "uicon-moments": "", "uicon-qzone": "", "uicon-qzone-circle-fill": "", "uicon-baidu-circle-fill": "", "uicon-baidu": "", "uicon-facebook-circle-fill": "", "uicon-facebook": "", "uicon-car": "", "uicon-car-fill": "", "uicon-warning-fill": "", "uicon-warning": "", "uicon-clock-fill": "", "uicon-clock": "", "uicon-edit-pen": "", "uicon-edit-pen-fill": "", "uicon-email": "", "uicon-email-fill": "", "uicon-minus-circle": "", "uicon-minus-circle-fill": "", "uicon-plus-circle": "", "uicon-plus-circle-fill": "", "uicon-file-text": "", "uicon-file-text-fill": "", "uicon-pushpin": "", "uicon-pushpin-fill": "", "uicon-grid": "", "uicon-grid-fill": "", "uicon-play-circle": "", "uicon-play-circle-fill": "", "uicon-pause-circle-fill": "", "uicon-pause": "", "uicon-pause-circle": "", "uicon-eye-off": "", "uicon-eye-off-outline": "", "uicon-gift-fill": "", "uicon-gift": "", "uicon-rmb-circle-fill": "", "uicon-rmb-circle": "", "uicon-kefu-ermai": "", "uicon-server-fill": "", "uicon-coupon-fill": "", "uicon-coupon": "", "uicon-integral": "", "uicon-integral-fill": "", "uicon-home-fill": "", "uicon-home": "", "uicon-hourglass-half-fill": "", "uicon-hourglass": "", "uicon-account": "", "uicon-plus-people-fill": "", "uicon-minus-people-fill": "", "uicon-account-fill": "", "uicon-thumb-down-fill": "", "uicon-thumb-down": "", "uicon-thumb-up": "", "uicon-thumb-up-fill": "", "uicon-lock-fill": "", "uicon-lock-open": "", "uicon-lock-opened-fill": "", "uicon-lock": "", "uicon-red-packet-fill": "", "uicon-photo-fill": "", "uicon-photo": "", "uicon-volume-off-fill": "", "uicon-volume-off": "", "uicon-volume-fill": "", "uicon-volume": "", "uicon-red-packet": "", "uicon-download": "", "uicon-arrow-up-fill": "", "uicon-arrow-down-fill": "", "uicon-play-left-fill": "", "uicon-play-right-fill": "", "uicon-rewind-left-fill": "", "uicon-rewind-right-fill": "", "uicon-arrow-downward": "", "uicon-arrow-leftward": "", "uicon-arrow-rightward": "", "uicon-arrow-upward": "", "uicon-arrow-down": "", "uicon-arrow-right": "", "uicon-arrow-left": "", "uicon-arrow-up": "", "uicon-skip-back-left": "", "uicon-skip-forward-right": "", "uicon-rewind-right": "", "uicon-rewind-left": "", "uicon-arrow-right-double": "", "uicon-arrow-left-double": "", "uicon-wifi-off": "", "uicon-wifi": "", "uicon-empty-data": "", "uicon-empty-history": "", "uicon-empty-list": "", "uicon-empty-page": "", "uicon-empty-order": "", "uicon-man": "", "uicon-woman": "", "uicon-man-add": "", "uicon-man-add-fill": "", "uicon-man-delete": "", "uicon-man-delete-fill": "", "uicon-zh": "", "uicon-en": "" }; const version = "3"; { formatAppLog("log", "at uni_modules/uview-plus/libs/config/config.js:5", ` %c uview-plus V${version} %c https://ijry.github.io/uview-plus/ `, "color: #ffffff; background: #3c9cff; padding:5px 0;", "color: #3c9cff;background: #ffffff; padding:5px 0;"); } const config = { 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$2 = { // calendar 组件 calendar: { title: "日期选择", showTitle: true, showSubtitle: true, mode: "single", startText: "开始", endText: "结束", customList: () => [], color: "#3c9cff", minDate: 0, maxDate: 0, defaultDate: null, maxCount: Number.MAX_SAFE_INTEGER, // Infinity rowHeight: 56, formatter: null, showLunar: false, showMark: true, confirmText: "确定", confirmDisabledText: "确定", show: false, closeOnClickOverlay: false, readonly: false, showConfirm: true, maxRange: Number.MAX_SAFE_INTEGER, // Infinity rangePrompt: "", showRangePrompt: true, allowSameDay: false, round: 0, monthNum: 3 } }; const CarKeyboard = { // 车牌号键盘 carKeyboard: { random: false } }; const Cell = { // cell组件的props cell: { customClass: "", title: "", label: "", value: "", icon: "", disabled: false, border: true, center: false, url: "", linkType: "navigateTo", clickable: false, isLink: false, required: false, arrowDirection: "", iconStyle: {}, rightIconStyle: {}, rightIcon: "arrow-right", titleStyle: {}, size: "", stop: true, name: "" } }; const CellGroup = { // cell-group组件的props cellGroup: { title: "", border: true, customStyle: {} } }; const Checkbox = { // checkbox组件 checkbox: { name: "", shape: "", size: "", checkbox: false, disabled: "", activeColor: "", inactiveColor: "", iconSize: "", iconColor: "", label: "", labelSize: "", labelColor: "", labelDisabled: "" } }; const CheckboxGroup = { // checkbox-group组件 checkboxGroup: { name: "", value: () => [], shape: "square", disabled: false, activeColor: "#2979ff", inactiveColor: "#c8c9cc", size: 18, placement: "row", labelSize: 14, labelColor: "#303133", labelDisabled: false, iconColor: "#ffffff", iconSize: 12, iconPlacement: "left", borderBottom: false } }; const CircleProgress = { // circleProgress 组件 circleProgress: { percentage: 30 } }; const Code = { // code 组件 code: { seconds: 60, startText: "获取验证码", changeText: "X秒重新获取", endText: "重新获取", keepRunning: false, uniqueKey: "" } }; const CodeInput = { // codeInput 组件 codeInput: { adjustPosition: true, maxlength: 6, dot: false, mode: "box", hairline: false, space: 10, value: "", focus: false, bold: false, color: "#606266", fontSize: 18, size: 35, disabledKeyboard: false, borderColor: "#c9cacc", disabledDot: true } }; const Col = { // col 组件 col: { span: 12, offset: 0, justify: "start", align: "stretch", textAlign: "left" } }; const Collapse = { // collapse 组件 collapse: { value: null, accordion: false, border: true } }; const CollapseItem = { // collapseItem 组件 collapseItem: { title: "", value: "", label: "", disabled: false, isLink: true, clickable: true, border: true, align: "left", name: "", icon: "", duration: 300 } }; const ColumnNotice = { // columnNotice 组件 columnNotice: { text: "", icon: "volume", mode: "", color: "#f9ae3d", bgColor: "#fdf6ec", fontSize: 14, speed: 80, step: false, duration: 1500, disableTouch: true } }; const CountDown = { // u-count-down 计时器组件 countDown: { time: 0, format: "HH:mm:ss", autoStart: true, millisecond: false } }; const CountTo = { // countTo 组件 countTo: { startVal: 0, endVal: 0, duration: 2e3, autoplay: true, decimals: 0, useEasing: true, decimal: ".", color: "#606266", fontSize: 22, bold: false, separator: "" } }; const DatetimePicker = { // datetimePicker 组件 datetimePicker: { show: false, showToolbar: true, value: "", title: "", mode: "datetime", maxDate: new Date((/* @__PURE__ */ new Date()).getFullYear() + 10, 0, 1).getTime(), minDate: new Date((/* @__PURE__ */ new Date()).getFullYear() - 10, 0, 1).getTime(), minHour: 0, maxHour: 23, minMinute: 0, maxMinute: 59, filter: null, formatter: null, loading: false, itemHeight: 44, cancelText: "取消", confirmText: "确认", cancelColor: "#909193", confirmColor: "#3c9cff", visibleItemCount: 5, closeOnClickOverlay: false, defaultIndex: () => [] } }; const Divider = { // divider组件 divider: { dashed: false, hairline: true, dot: false, textPosition: "center", text: "", textSize: 14, textColor: "#909399", lineColor: "#dcdfe6" } }; const Empty = { // empty组件 empty: { icon: "", text: "", textColor: "#c0c4cc", textSize: 14, iconColor: "#c0c4cc", iconSize: 90, mode: "data", width: 160, height: 160, show: true, marginTop: 0 } }; const Form = { // form 组件 form: { model: () => ({}), rules: () => ({}), errorType: "message", borderBottom: true, labelPosition: "left", labelWidth: 45, labelAlign: "left", labelStyle: () => ({}) } }; const GormItem = { // formItem 组件 formItem: { label: "", prop: "", borderBottom: "", labelWidth: "", rightIcon: "", leftIcon: "", required: false, leftIconStyle: "" } }; const Gap = { // gap组件 gap: { bgColor: "transparent", height: 20, marginTop: 0, marginBottom: 0, customStyle: {} } }; const Grid = { // grid组件 grid: { col: 3, border: false, align: "left" } }; const GridItem = { // grid-item组件 gridItem: { name: null, bgColor: "transparent" } }; const { color: color$3 } = config; const Icon = { // icon组件 icon: { name: "", color: color$3["u-content-color"], size: "16px", bold: false, index: "", hoverClass: "", customPrefix: "uicon", label: "", labelPos: "right", labelSize: "15px", labelColor: color$3["u-content-color"], space: "3px", imgMode: "", width: "", height: "", top: 0, stop: false } }; const Image = { // image组件 image: { src: "", mode: "aspectFill", width: "300", height: "225", shape: "square", radius: 0, lazyLoad: true, showMenuByLongpress: true, loadingIcon: "photo", errorIcon: "error-circle", showLoading: true, showError: true, fade: true, webp: false, duration: 500, bgColor: "#f3f4f6" } }; const IndexAnchor = { // indexAnchor 组件 indexAnchor: { text: "", color: "#606266", size: 14, bgColor: "#dedede", height: 32 } }; const IndexList = { // indexList 组件 indexList: { inactiveColor: "#606266", activeColor: "#5677fc", indexList: () => [], sticky: true, customNavHeight: 0 } }; const Input = { // index 组件 input: { value: "", type: "text", fixed: false, disabled: false, disabledColor: "#f5f7fa", clearable: false, password: false, maxlength: -1, placeholder: null, placeholderClass: "input-placeholder", placeholderStyle: "color: #c0c4cc", showWordLimit: false, confirmType: "done", confirmHold: false, holdKeyboard: false, focus: false, autoBlur: false, disableDefaultPadding: false, cursor: -1, cursorSpacing: 30, selectionStart: -1, selectionEnd: -1, adjustPosition: true, inputAlign: "left", fontSize: "15px", color: "#303133", prefixIcon: "", prefixIconStyle: "", suffixIcon: "", suffixIconStyle: "", border: "surround", readonly: false, shape: "square", formatter: null } }; const Keyboard = { // 键盘组件 keyboard: { mode: "number", dotDisabled: false, tooltip: true, showTips: true, tips: "", showCancel: true, showConfirm: true, random: false, safeAreaInsetBottom: true, closeOnClickOverlay: true, show: false, overlay: true, zIndex: 10075, cancelText: "取消", confirmText: "确定", autoChange: false } }; const Line = { // line组件 line: { color: "#d6d7d9", length: "100%", direction: "row", hairline: true, margin: 0, dashed: false } }; const LineProgress = { // lineProgress 组件 lineProgress: { activeColor: "#19be6b", inactiveColor: "#ececec", percentage: 0, showText: true, height: 12 } }; const { color: color$2 } = config; const Link = { // link超链接组件props参数 link: { color: color$2["u-primary"], fontSize: 15, underLine: false, href: "", mpTips: "链接已复制,请在浏览器打开", lineColor: "", text: "" } }; const List = { // list 组件 list: { showScrollbar: false, lowerThreshold: 50, upperThreshold: 0, scrollTop: 0, offsetAccuracy: 10, enableFlex: false, pagingEnabled: false, scrollable: true, scrollIntoView: "", scrollWithAnimation: false, enableBackToTop: false, height: 0, width: 0, preLoadScreen: 1 } }; const ListItem = { // listItem 组件 listItem: { anchor: "" } }; const { color: color$1 } = config; const LoadingIcon = { // loading-icon加载中图标组件 loadingIcon: { show: true, color: color$1["u-tips-color"], textColor: color$1["u-tips-color"], vertical: false, mode: "spinner", size: 24, textSize: 15, text: "", timingFunction: "ease-in-out", duration: 1200, inactiveColor: "" } }; const LoadingPage = { // loading-page组件 loadingPage: { loadingText: "正在加载", image: "", loadingMode: "circle", loading: false, bgColor: "#ffffff", color: "#C8C8C8", fontSize: 19, iconSize: 28, loadingColor: "#C8C8C8" } }; const Loadmore = { // loadmore 组件 loadmore: { status: "loadmore", bgColor: "transparent", icon: true, fontSize: 14, iconSize: 17, color: "#606266", loadingIcon: "spinner", loadmoreText: "加载更多", loadingText: "正在加载...", nomoreText: "没有更多了", isDot: false, iconColor: "#b7b7b7", marginTop: 10, marginBottom: 10, height: "auto", line: false, lineColor: "#E6E8EB", dashed: false } }; const Modal = { // modal 组件 modal: { show: false, title: "", content: "", confirmText: "确认", cancelText: "取消", showConfirmButton: true, showCancelButton: false, confirmColor: "#2979ff", cancelColor: "#606266", buttonReverse: false, zoom: true, asyncClose: false, closeOnClickOverlay: false, negativeTop: 0, width: "650rpx", confirmButtonShape: "" } }; const color = { primary: "#3c9cff", info: "#909399", default: "#909399", warning: "#f9ae3d", error: "#f56c6c", success: "#5ac725", mainColor: "#303133", contentColor: "#606266", tipsColor: "#909399", lightColor: "#c0c4cc", borderColor: "#e4e7ed" }; const Navbar = { // navbar 组件 navbar: { safeAreaInsetTop: true, placeholder: false, fixed: true, border: false, leftIcon: "arrow-left", leftText: "", rightText: "", rightIcon: "", title: "", bgColor: "#ffffff", titleWidth: "400rpx", height: "44px", leftIconSize: 20, leftIconColor: color.mainColor, autoBack: false, titleStyle: "" } }; const NoNetwork = { // noNetwork noNetwork: { tips: "哎呀,网络信号丢失", zIndex: "", image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAYAAAB5fY51AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAABLKADAAQAAAABAAABLAAAAADYYILnAABAAElEQVR4Ae29CZhkV3kefNeq6m2W7tn3nl0aCbHIAgmQPGB+sLCNzSID9g9PYrAf57d/+4+DiW0cy8QBJ06c2In/PLFDHJ78+MGCGNsYgyxwIwktwEijAc1ohtmnZ+2Z7p5eq6vu9r/vuXWrq25VdVV1V3dXVX9Hmj73nv285963vvOd75yraeIEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQaD8E9PbrkvRopSMwMBBYRs+5O/yJS68cPnzYXel4tFP/jXbqjPRFEAiCQNe6Bw/6gdFn9Oy9Q90LLG2DgBBW2wyldIQIPPPCte2a5q3jtR+4ff/4wuBuXotrDwSEsNpjHKUXQODppy+udYJMEUEZgbd94DvnNwlA7YGAEFZ7jOOK78Xp06eTTkq7sxwQhmXuf/754VXl4iSstRAQwmqt8ZLWlkHg0UcD49qYfUjXfLtMtOZ7npExJu4iqZWLl7DWQUAIq3XGSlpaAYHD77q8xwuCOSUoXw8Sl0eMux977DGzQjES3AIICGG1wCBJEysj8PXnz230XXdr5RQFMYbRvWnv6w8UhMhliyGwYghr4Pjg3oEXL34ey9zyC9tiD2ml5h47dr1LN7S6CMjz/A3PvHh1Z6UyJby5EVgRhKUe7Kz/JU0LfvrJo5f+Y3MPibSuFgQGBgasYSd9l6GDsup0WS/T/9RTp9fXmU2SNwECdQ92E7S57iaMeJnPQLK6ixkDLfjlb7546RfrLkQyNBcC3dsP6oHWMd9G+V3JgwPHh7rnm1/yLQ8CbU9Y33zp0j+nZFUMb/DHmB7+SHGY3LUKAk8cObtD00xlHDrfNge+Z2ozU3c9dvx4Yr5lSL6lR6CtCWvg6OAPw9z538ZhhZRl6XrwhW8du1KX/iNejtwvPQIDR8+vSRqJ/obU7GupjdNdh2gW0ZDypJBFR6BtB2rg2OVtuub9JcmpHIpBoK1xfffLzx4f7C0XL2HNiYDp6bs9z23Ypn1fC1Y/9PCFDc3ZW2lVHIG2JKzTp4Ok7nv/G6Q054MIvda+bNb74pEgKGtwGAdL7pcfAa8vOKEZ2kyjWuLr7uDh+/qvN6o8KWdxEWhLwroyeek/g4zuqwU6kNrhyZcu/UktaSXN8iNwuL9/RuvVXtJ9PbPQ1vhmcP6t9+47u9ByJP/SIdB2hDVw9MJHQFYfrQdCph84evFX68kjaZcPAZJWwjMXRFpJ2zr91tfuvrh8vZCa54NA2xGWrunvmg8QWCJ/N4ir7fCYDxatkOeBB7an501agXbygVdvv9IK/ZQ2FiPQdi9osGbH+zRNf7y4m9Xu9Me7N9nv0HXdr5ZS4psHgXpJC9P/wDRTx0Vn1TxjWG9LGrbaUm/Fi5meSvcrkxf/Cg/ow9XqAUk91v3qHT97r6471dJKfHMi8Oyzgx1Z03t1YAQVT2MwgsC3u+yXHzi0faQ5eyGtqgWBtpOw2Ol9+/TM+sTOn8L08MtzgQCy+tOHXr3jA0JWc6HU/HF5Scssr4jXcYqfP6V/T8iq+ceyWgvbUsKKOn38eJAYyl56TAuCEr2WYei//9Crd/5GlFb81kdASVopSFrerKRlaoZj9HR+700H10+0fg+lB21NWBxe2lhNHsUpDZr27mi4dV379R9+za4/iO7Fbx8ECknLCPTsTDJ17O33bJpqnx6u7J60PWFxeAcCbMV56dJfQKf1bkMLfuGh1+76zMoe9vbuPUnLsb2DtmOe5HSxvXsrvWtLBEhaTx29+Ma27Jx0ShAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQaEsEVoQdVluO3BJ06ptHL34b1XRjp4Ch6Rq24+kmjG4Nwwg+9uA9u/73EjRBqhAEihAoe3xwUQq5WTYEzp0b3ZnV/Ncf6O/9AvY9wlh/6dy3X7ncN512Zw9BVLXjuAP4np44vnQtkZoEgVkEhLBmsWiKqwsXpjbPBOn3gRfenwnc+7GBe+zsjclvonFDS9nA9Iy/u3x9+vAP3735VPk4CRUEFhcBIazFxbfm0k9fHD7k+v4nQFaPQIrx8Gmyx/GJ0J/t7ez7mw0b9MmaC2pQQgh0/ZSm4g5TwueWWtqLt0HuVy4CQljLPPYnB0depTn+b3t+8B4t0AdBUv93h2H9xc6da0aXs2m+r1WQsLRnl7NdUvfKRkAIa5nG//r1oGtsZvjTgev/kqYHF/TA+AXoqv4npJemOEiQU1Eo2l+G0movBK1UBBPU7s9E1+ILAkuNgKwSLjXiqO/khVtvARH8dxDBRkMzPrF/V+9/BlG5y9CUqlXinHv9mRPXtvuus88L9H3JPv2zD2yXExCqAicJBIFWRwAvv3Xqwq0/Pnn+lv/K+ZvfPH3p9p5W75O0fxaBp793ce3AwIDMWmYhafiVgNtwSMsXeHp4eNXJC8Nf0PAdRCiuf/XgrnWUqsqotcvnl9DmRkCdweX4b9N7+m/ih+mbMraLM14yJVwcXItKpT1VRve+ArC3Qqn+3gM7132jKEGZm6tXg86J7OhDfuA/iHwPUpfUZSfu2L59tXxEoQxeyxkEgjKeOnLxHb4RqC+NY5H3+2953d4XlrNN7Vq3ENYij+yZwbG9jpt9GkBPQ5H9zgP9607OVeWp87cOQtn9zwJf+xDMNFfj+jryPqXpxj8c2Nn7P+SXey70lidu4IXzb0DNB4tr9751+HV7zxSHyd1CERDCWiiCc+QPjUCnsaqmZ62O5IN7N/VUNP48ee7mAZDTf4Tt049iUG4Guv4ZfNLos9UIbo7qJWoJEHjy+bP7fNsoOcnW0A0/aacef8PdG28sQTNWTBVCWIs01OfPj66BpfqTmq732UnjgT1bei+Vq4pTv7HM8Ceg2/o1qLQug7T+FaaM3IqTLZdewpoHgYEjV9fphvOj+OShWa5V+CxvZtpzv/LwG/aNl4uXsPoRwI+4uEYjAJ2GmdG8L0FK2mYa+tsrkdXZy+P7x2ZuHdW14P+BLdank9q6Qwd3rf+ckFWjR6Tx5Q2cP58K9Jm3VCIr1ogt48lO237r3//96YofeG18y9q7RFklXITxPXV+5DchKb3ZDMy37Nu5tuxG4R9cHH6b42QfAzlds+3EPXu2rfrBIjRFilwkBIIR7SHoJDurFU89ZOd680Gke6JaWomvjoBIWNUxqivFD87fej0e0n8Fwvr0/t1rnyqX+QfnRz7g+8FX8Rv8vL3auF/IqhxKzR2WCPxXqKeq3krDTdj2ierpJEUtCIgOqxaUakwzNBR0D09yiqePHOjveyOkpxLr9VMXb73V97S/h3nDXx7Y2fdPkAYbncW1IgIDxy5vM7LZt/hgrnLtxyaBrJNxv/72N+6tuNhSLp+EVUZACKsyNnXHvHL+1qcgNf2KbSXu2bt9dcmS9qlzo/fARgcmCtpzB3b1/Vg5QiuslLowENyDWDn8cSjl98PgdBviu03N+rl9/WufLEwr18uDwLdevLTF1YK3xnVZ2HI1bUxrT7z5zTuXdRP78qCyeLUKYTUI25OXbm4JPO00TBj+6I7+db8ZL3ZwMOiYdG4dA1lN9HWte2iuI2NAVPapC8O/CGPR34Ip/AZIbIMo7yX8G9QMbcS09P+2b1vf5XgdrXaPfiYns9oeLLEd8D1/B7Dp0E1jGP042pXQj7RKf546cmGzp+tv1TRf6YQD35/QO3seP3xow5IfC9QqmM23naJ0ny9ysXwgq98BWc0kVhv/Nhalbqe8kd/Fr8MOSEr3zEVWrwyO3I29hl+E9LUHGf+nAXI6sGPdd8uV2YphIKnE5IyL6bLxk7cn3bdkHHefrpvJAExMZ1uBZmqeNzXtfzUzk/m/ens7LjV7Px+8d9e1579/44l0duZtge+Np5zEEw8c2pBu9na3YvtEwmrAqNE8IZvNHsep5//yjl3r/0O8yFOXbv0QCO05gP0JGIL+fjw+uj91YeRh/Dp/PtCDM7Zpfmjvjt6Xo7hW9ycmJjaYduf7Hdf/8HTGfa3rG9rYxLSWnsloPg7fijZV8oFM2Ja2a9t6EJd7bCztvHP7us4rrdD/r3/7ct9I99jEI4cOiQ3dIg2YEFYDgOUJDFj1e8TqX7cT4kImXuQr5279A4DeBEX8ayvprU4N3rovcALot/TH13T0fXDTJn0qXk4r3k9OTm4y7a6PzjjORzOOvn1kbEqbnEprPhRzwAKzwFLHk05hv6Yd6N+o3R6beG50aPSdr3qV6IJKkVp5ITIlXOCYn4Yexr0w/DO6YXymHFlR0e5r7tsM3fxgJbI6fW1ivTeT+SsYmr54cFff+5Cu5X+hb94Merp6/J/PusGvTE6724eGJ7RpSFOkKPCUZvBPBccoHBet3Rwe13rX9tw/PjXzZ5hKvr8SfhWKkeA2REAIa4GD6p0feRdWBnvxjv2PckVhVfBf4A29uG/X2i+Ui2eYn8n8NryuDr3jPfWSFV5k44UT137eshIP2K7/64cObbheqZ6lCp+Ydt8TBO7vTM5od1+/NR4SFVhoLpKKt410lnE8LTMzo3V2dLznxLkhYgQ9obiVjEDln7mVjEodfYcpw+MAsftg/7qSDbAnb97sCSb0Yei2fqOcbovVqKNnNO8HmAE9Cv3Wp+uoWjt27HpXNqH9WTKR+kBHKqEFbvo5y3N/avfu4g23R45f3WGa1k9ZicTd0zPTf/f6O7f8dT311Jp2fHzmgJlI/N70jPPe4bEZ6Kg4qw0lqlrLiNKBiLWerpTW25PUbkPXZViW62ecHz+4d8PXojTirzwEyhq8rTwYFtRjvpX/rlwJ+iSXugPbMuyKBOHo3geRJtuT7PujcmVUCuPJlhnL/9NUqvMD2eyM5sxMaIlE4n7XML907tyNjcxHQjty4sZv66Z1xEok/xNW5n4uZSf+8sT5m++vVO58wkEu5sR09pd9w/rWyET2vReujiqygrSopn/zKZN5qMeirotKeTyolm7p/+X06Wvr51ue5Gt9BISwFjiGsLl6N6SrvylXDNTK70D4mX071pwtF88w6Jd/DG/1E1u26NOV0pQL71y3/8PJVOcHMzPTWkcCH2YGOaTTaS2RTN6f1fQvvvDK1bdnbO2JZCr1SeRfn05Pa1PTU0gXJBKW+ecnzlxvCGndhFQ1NRP8bcY1/vjS9bF1V26MwHwsVKiXa3etYVw1TNhYJ3TDjQCO42jJVMcez7J+t9YyJF37ISCEtahjGjxkGDr2DJZ31D8h5vUQJL5RPkXlUMM07u3qSGidICvkzzuSlmlZb0olrK9hD9v9JCrPC196JoPMAolFg6CV+PPj54YeyWecx8Vk2v1Q0rSfhFT18LnBmzBRyNalp5qrSuq7kiAsh4SFa7oZ9M0wzI+cPHOjZPo9V1kS1z4ICGEt4lhiCvZrSa2jol7qzPXJPk6nIGbVbWfUvcr7hO9MP97ZVXpggOu6ajplYStj7l1XvbRMXbPAbp6HzSSBlkraNknrvfVCcPt2sHYi7f3pTDb47KUbYxuvKqkKpYBXKBnV869c3WgbDEixAck0FGFFfEzJzbIsO9C1TyrcymWWsLZGIHoW2rqTzdo5dXyykz0NC8l779i5vu4zwM+eHVntGP5jqVTq/6AkVc5NZ3wNH2lVxNWZNIukMSjiNd9z0+CHp5DXAdX4SAg203w8GB5IATtODHzdK8C15kEjhXvNS9rWA11dnfcMDY9prscss48RySakrOLWqODCoIKAgkuVgsS0urtD60haeV1YYVbbtjUn6/74HXvW/11huFy3PwKzT1r797Upe3jq4sib9u9Y+wxe+vh7W1N7jx49v6ZzbffnQD4/Cj1Pfjx54XiBls6GVuTUc9mQsOIO9mPQFdkIRlz4fy5JLm2ZMOqTcJaXIqpcqnixVe+rdbZ3dbc2OT0D0wZIibHSksmklslknvx+//q3PiKnXcTQae/b+LPQ3r1t0969cOL6G7o6E09qgZegdMJBpVQ1DbKCpyUt6oPKz/4NEJalCAuZFIuEVBJd+jgLh4rvAiFqUVGkhJZMWFp3Z0obGSu/d5gSnWmavuO6h+/cvYHSobgVgoAYjrb4QPMUiGtj1/79jBMkLBwiTlMASlYzTkhWCJyTrGAyMOFkst/BoYMmuIIyGJYcMXMMdNwHPhYN1qWS1t6ZLGaKZL8yzFXTr15BooLLMugHMBRNKgW+It8y9TEcJGt4rvcRFCCEVQbFdg0Swmrxkb0+cf2XOzq73kgdFieEXF2jdEUJKQH6SVWQrNjtZDKlpTPp38U58iUbthk/Ph7sN6zg/xudSGvD4xkq6otcnnjyF0XRRTflkyC0IIJE1JG0QbqGNpMNp5xFhRTcZDNoj66988SFm5vv3LX+WkGUXLYxAuXnCW3c4XbqGs9hwjv+a9lsuN+ahOJSCoLjNDAFvVUll0p1aNPp6adTweSflEszPO48oFn+4yOTmR+6enOshKyYhzWpf/jDuuf6x2aV/qNRaPG/1d0gUXWCA0uu7GhMmkqmerEc8KOVU0lMuyFQ+Ylut562YX9Sncmf7Ojo3BDZWbGLtMkiUVXSWTFNuMqWuYG530f7+/tnGFboxsfdd9mm8XdDo9O7rg6NFq0CFqZr5DWlK9qV0fZqGvZchSuPlevB2VmG/hOV4yWm3RAQwmrhEcW64qu4ykfJho52Vp3J8quBYQooqWDKADftBd6HD+5efyoKj/zR8ew/hWXY56/cnFh7a3RCTTGjuMX0SVB9qzu1qfQM+jO3dBW1g6uVSHv/qVNX10Vh4rc3AkJYLTy+WA/8ou9kJjo7bOh+DLVFZ64TEbCyBktxI5PJZj56R//Gx+NdH5vM4vuI+p8NXh9LjU1iw3EZhXc8TyPuuV9wDaaCfBjTM06N0hVWQmHBDzvSDZ5tvqYR7ZAymh8BIazmH6OKLbzv0KZvJEz3ZzEFnEolaEtV2XEaCLKadrIz//TQnk1/EU85NuH8th8Yf4j9gMZUOrNkZEVZCnsbtTU9KW18GqcKFyjh420sd2+j33pg3F8uTsLaDwEhrBYf04O7N/2t7/o/C2FoGnsIy/YGlvAwSfCvZzLOe+8oR1ZT3u/5uvHJC9dGtJlMrfqjslXVHwjpat2aLi2rjFFLjUSrFUjlO0juddXSSXx7ICCE1QbjiHO0/hofbPgwpnDTOR2V6hWNQqGUx34890noet5yaO+Gko3Y45PO7/uB/lvnrwxrWdha1absbgxo1FWtwplXqYSJY5Nn5lU3bLHQmGA/yko0plVSSjMjIITVzKNTR9sO7dv8RSeb/T9BWmMkKv4D+YzBXuljV7yxd+zfte6VeHGKrHTz4+cv38JWmyUmKzSGG5z7VndoE7kz3uPtq+Welvhwm39weVjOyaoFsBZPI4TV4gNY2Pw79mz8KyebeRIH+VEZTaX0sf27+v794TKmCxNTzr/2NOPj5wZBVjjdYSklq6jN69dyKuhqmWztivYob+RTSkPbe/xMdlMUJn77IiCE1W5jq+s4dYEO6mzsYAmvi/+CrH7LDYxPcBq4HGTFVcG1ULLT5orS1ULIkoSFI2cMHKG8obiXcteOCAhhtdmo6gaOh4EWWlkyYU9gvHswXfgV19d/7+LVkSWfBrItJJhObL/p7elQR8fUZnEV70XxPc01sM+xrzhU7toRgZIHuh07uZL6xA3LBaYB+Ar8rBsfz34YX1j+D5eu317QNGy2xPquSE4mDuXb2IujY2AgytNE67RiKFshzuwCR5s9ZSMlsK0QEMJqq+GkBKOF5yFzRoidK5BoFCeMjM/8mG+a//Xy0Li55KYLBRiTrGjwOQ1br4VMBQuKVJeQKVPxMLlvPwSEsNpsTEECmBLSgbHUpwD1YGwse59l2p+9fmuig4fiNZIowrqq/6Xeqm9Vh9JbjcOKvqFtACX7gV8kTVZvkaRoRQSEsFpx1OZoM2iKxxuHLtDcsZlgLzYZfv7m7XSv+r7fIm234XSP/8o5ktWqzqSyZr89PoXPYDTYkZvziw0NLluKayoEyq4iNVULpTF1IaDjHHZmoAW4aep9geN8fiLt998cGYdtVp7K6iqzXGJFUCAi7jdkuapsBJKcPBwgyP8YRyV7B04Q3dDbpY3jg6gupoMNla5U41BbUN9n0sr1ScKaHwEhrOYfo7paCAW0WiWknihhW/0Tabf/6tDtxpIVSIhGnz1dSXUkDL8fSHKi4/lWPId9Kp3Vxqegp8J/m9f14D6DQ/nmb281FwgkZ1Dj7bnSSFx7ICCE1R7jmO8FJJr8jCvjeNrIxFjDJBpKVaSlXhwDw384MyucBoLAGEfHI5ptO6n1YAq4FjorH9IWjUOnFlF3pj62aui3whbI33ZGQAir/UY3XCVEvzgdw/8NcSyGUhSlpVWQrFg2p39xp0JYLyIohaXxdZ2FGofG6yi85/QS32F0Asu8URgu1+2JgCjd22xcsVElPC85169Gaa1YTkRWJKpSqooBiQQzONvq9sRULKKxtzzAEJw1api2EFZjoW3K0oSwmnJY5tcoSD09HanEDztubnfO/IopyUWC6sUmZUpW5aSqkgwgK04DxxaZrFivacCaIdAuH9zaM1rSDgloOwSEsNpoSMenvU93dXb+EE5taFivKElRqd67qrNmsqIF+yjMF/i56MV2JqadYKxXMDXM6+4Wu04pf/kQEMJaPuwbWvPticwj4Il/NnTrdl7JrqaDC5wTUle1GmdWWVCw1+JotjA6PgnThsIdQrXknF8arkJi/+R355dbcrUaArU9ha3WqxXW3tHR9C5dN//T9eEJ3aGdUwP7T0V7F86Mr0VW4mF6o2NTS/ilaB2HDmb8wA2+08AuS1FNjIAQVhMPTi1NgwRkGKbxRxMz3uaJSRzVUkumOtLwo6Zc7aOkVdEhynN9NQ1cyuNqeEqD67mX9TXGyxXbJhFthYAQVosP58S0909czfqJqzdGODVqaG/IUbCWr2p0yukfp4FUtDfeir1yl8IPUGjPHFy/fqJyKolpJwSEsFp4NEfT6Z3YBvOp8MvMc0hAi9hHNQ1cBrJil5TUZxhfXsTuSdFNhoAQVpMNSD3NMTzzU1PZYAM/ProYkg3UV5rHT8lXmA7SwnwEq4FLLVkRI04HM+n0LdvzvlEPZpK2tREQwmrR8ZucCd7hePr7rw2N5PfxLUZXON1zHKz4kb0KnIttP6Njk8tyaimbwXPrsW/yq3v3bhoqaJZctjkCQlgtOMCYCnU4GedTI+NpQ32XbxH7QOmKG5nzdIWZJz8HNkKygqI9TmSL2JSiovGVn0A39c8WBcpN2yMghNWCQ4zPc0HRbr6GEs6chJFnmfl3knZO4/hmII1B6fiFG9br0s6qAeXPp2WUrhzHeXH/jr6n5pNf8rQuAkJYLTZ2kK7Wul7w6zeGx9DyUsZovOodOizosTg1TM9k1Wogpa7lIisOF+w48E/7E5B1Y/cgtdizsBKbK6c1tNioT6X9n3MDcyePOo7OoJqrC6S0+ZIYV+GSOHxvc18PJCxXG4ed13I727axqTp9yk9rX1jutkj9S4+ASFhLj/m8axwdDdbgELxfGsLpoZyqVXPVU1QugVJUV0dC27p+FaaBWWxknq6ceAljTNMiAf/BoUMbJpewWqmqSRAQCatJBqKWZpgJ731Zx9pJM4aK0hXe5vlKVFEbKFlxs3PvqpSSqpbzKztRm+gnEkktnU6/2GFMfa4wXK5XDgJCWC0y1iAR6/Z49iOjY7C5qkG6mk+3SFQGlEP8FFdnygrNFqBsn1OxP5+K5pGHbcBhqhT8fqu/v39mHkVIljZAQAirRQYx7Wj3Zj3tddQjVVJ4l50CMjHe8mqOTJCCvmoTyIrENXx7Uinbm4Gs2PZUqkObnp76i0N7N36tWl8kvn0RaGnCGhgILKPn3B3+xKVXDh8+nPseX3sOlpt13+P4uonv71WeDqLr1ampFB8S1JrulNaHc9rTMxltcpofOeWns0rTLkeIZUHRnpm5YibMf7kc9UudzYNAyyrd8ZLpWvfgQT8w+oyevXeo++bBtaEtQd9s1/ffRsV3I6eDJCp+nourgH04UZQnhIYfWm1o8xdUGCU8/E/bil89sH3dlQUVJplbHoGWJaxnXri2HTvd1nEEcCBS3z++MLi75UejQgcmJjL92ax/gNJPo6QekhVXAbdvXI3D+XQ1Bcxiu02zTAEjKFIdHTQS/S8Hd2/4YhQm/spFoCUJ6+mnL651gkwRQRmBt33gO+c3teNQYin/oG6aKX5rcKEukqqoWN+Ij5vy81v8UATDG0WGC21jlJ96K6wKPpWd8H8jChN/ZSPQcoR1+vTppJPS7iw3bIZl7n/++eFV5eJaOczX9Z2YvM1LPxWpocBHKv8qHHdMqSphGUqqahaThfj40ITBcbLnsDj6oXvu2bS4n96JVy73TYtASxHWo48GxrUx+5Cu+XY5RH3PMzLGxF0ktXLxrRoGNVPPfNtOolIrgElLGYH2wbZqcipdIFVFlDbfGhqfj9bskCaHHS/7gTt3r73Y+BqkxFZFoKUI6/C7Lu/Bl1jmlKB8PUhcHjHufuyxx/g5lbZw+BL7bX4EoiZqyS0T0uM0j1+82QSl+ua+bhxj7GjD2LicwWkLzaarigbKsmDJ7gcTmezMBw/t3ixntUfAiK8QaBmzhq8/f26j77pbaxo3w+jetPf1B5D2RE3pmzyR4/nH+Mti4Wx1dUrCHO0lSVGqskFUnakkpn6mhu086jgYHkWTW3Wbo4Tli6L5gqYHE47vfeDufVv+YflaIjU3KwItIWEdO3a9Szc0ElDNDqcLbHjmxas7a87QxAnX9ljfxcr+Mzs29ykpi1O8iJjoR/cm5o7dnUl89LRLW93dyWmVIip+Kp7pmlWqIvQ8Mga9Gslm3Efu3LX+K008HNK0ZUSgplnGMrZPGxgYsIKeXa/TA61jPu0w0+7xBx/cd3M+eZspD0wbDgWm+RXP13cODY/jWGKuGAb48jG+agNpilbqlKZoWDqDY2AyjtNUlupzYZlKpXgaxIVMNv0zd+/d+uxcaSVuZSPQ/IT13TN34QRvZW81n6HSDdMLUqmjh9tgd//Fi8OHEl3JL3Z2dh3MzGA7XU664llVWRz/QhLjNYmsmaWp/DjCjqIDdlaZTOZZ1/A+fGj7hjP5OLkQBMog0NSE9cSRszuswNhdpt31BRnazM3U9IuPHDrUuG+419eChqU+cvzqjp7u5P9KJpMPpqc51Zv9QntLkFQBEqZluVCw/7nhaP9i376+8YIouRQEyiLQtIQ1cPT8GjOw7vE8tyFtxBrb2MBXdh579FF99g0vC0nzB548ebNHT2l/aFmJj1BPBYyav9EFLaQ+jdPAVNL8/pZ13a8qiJLLOhAAjvrTRy/d0enbF+69d0tzHFhWR/vnk7Rple6mp+9uFFkRGF8LVj/08IUN8wGp2fIcPLh+4sCu9R+F3ucj0MLf4vaVVnChqYWmdaQS2jpY2vd0djh86Vqh7c3Yxm8dudTPxaW0lrn7yJEjZW0Tm7HdC2lT0xKW1xecgHE3FDWNcb7uDh6+r/96Y0prjlIO7ur7TOD5b3ayzt9ylY0Gl83qKFXZsCXrXdOlrV3djf2LBr556JOshLDmMWhPPXV6vav5O5jVxYLUhNl3iIbV8yiqpbI0bQcP85C2Xu0l3dczC0XUN4Pzb71339mFltOM+Q/0rzu5f2fvu1zH+QDOt3uZ0pbVRMRFouJK5qqeTkhVqyBdtdUmhGV5JI4cudrpd5kHiyp3tTU/8s6r+4rC2vCmaQmLWJO0Ep65INJK2tbpt75298U2HLuiLh3oX/95L+0/kHUyvwTieiUJHVEimVzy1UKeWMqv2pCoKEVFRNXT1aHawnBx80eAZj7TwcxdAc5Gi5fiaNnNT37nCk4xaV/X1IRF2B94YHt63qQVaCcfePX2K+07fMU9U7qtHev+xE/7r3cc70O+6w1gxuV0dHZiusgvJS/O7IskRXLs6KCxqj+B26t9a3uUREWi4plbQlTFYzXvu+7tB3EIUGel/L6e3TNw5NS8zYAqldss4YvzBC9C7559drAja3qvDoyg6pwCP+KBZaVOPPjazS1vMLpQKE9fuPnawDB+EqehPwzWuAuSl8LPg90WVxhJJPWQCUmPBAWTBEz1TFUGpqO3wYYvIPgr2az35a2b1/50V6f1e1NTlVcvEzB0xRekj67usu5FmS2/crvQcaol/zeeObfTSOj91dIq28PxiaOHDx9quy8LtQxhcZBqIS0Dhkl2l/3yA4e2j1Qb2JUUD1Iyz1waOQib0vsxKXsAFvH3wMB0JySwtZC+DBPTN5BOCEnhrI1BuKe9l6tIzsVCiD6E0DOabrwI2elZ09aP7N3aNxjheXvK+a1OENa0EFYEyYL9rz072Ju03ZpNQKj7Xd899cKhNrA9LASvZTY/s9GcHoK0XsrakLS8UklLxyl+/rj+/Qfu2367sJNyTS7SuZfneO7ffweBGScu3NwAqWgrTvTc5jjBZmw87tMCfRXYKQWOgula4OiBOQUZ7DZuhrAGdQXxV0zPuCaGnkv3VPGHOpPw7+QPR62OM5HhdNddGOeX2kmCbSnC4mDlSStVTFr4eLljdHV+702vWz9R66Cu5HS5h5hmHvz3QiOxwJTRo2BGgY06dm7OVhewYGAY6s75oD+ZDs4JPY9JyqSCQ7ABqftd5VFM3/j2Ja4mtsWpJQSq6ZXu5UZTKeJnsHpohiYPRqBn04nkS2+CQWW59BK2dAjwS0Y4IHDz2ERWG8Gnwm7iK9W3sFmbvrqGPzw6gW8eTmvTM07XmTPX28KYd7EQ3rjnvv1QFHbPt3zT9DcMPHd+13zzN1s+/hC2rKOo7NjeQdsxT5LEWrYjbdLw05eHtwWe9jl0542u62HZHZIVpalY/yIlP5X3MHYddLLZfy4fmYiBhNuB509vw+rG3tKY+kOwGHLi7W/cS91jS7v4s9TSnZHGLx8CICH9lXNDX+zpWfXuycnaBV2e3e567nAm4973qv0bzy1fD5qr5oEB7KXt0u7B3Loh7yhWVfypbOalh9+wr6U3mbfklLC5Hi1pDRE4ef7Wj+EEiZ+amqpvJT2bzWjJRLIPR3n9riA5i4DZg720DSIrlsrvHXSZ9p7ZGlrzSgirNcetqVp9/vz5FJTqj6JRejTdq6eBMzNpHP9s//QrF4bvrydfO6f1JrCX1mvcXlo98Kembjotr3wXwmrnp36J+pYNeh5JdqRem83O77gxkpxtW3bgOZ/g1HKJmt3U1Rw+3D+zrc89aunagnWzpq6PdxujLz388L4F78tdbtCEsJZ7BFq8/sHBoMPX/I9hyrGgnuDUUZzrnnz7yQu3HlxQQW2Ued++fZmJ1e5LoPB5k5ZpWCPXz+08du+99zrtAI0QVjuM4jL2YcIZeh+2+9wF49MFtYJSlgmHE0g/JlLWLJQPg7RmhtyXsJ18eja0tivsXhj6xy9ve/mRR5TRcG2ZmjyViN9NPkDN3Dz1FW5z9XM4i+s1ME1YcFNpUIrVLHzJzHnwjl0bn1twgW1UwPHjxxPXpztejR0HFTc+F3YXRwxdfdM9W08D0zrs4wtLaM5rkbCac1xaolWOvurhZIPIih0OdVm2haNTfqUlAFjCRnJP4HBn+iUqz6tVa2nGpTe/etsP2o2s2G8hrGqjL/FlEQC5GHghfplSUSMdvwaEA/9+4vjpa3c2stx2KIsfUek2dr+EuXNF2xEjSJx98w/tbFt7NiGsdniSl6EPp84O3W/Z1oPzXRms1GRKWdCJdeCIlJ+vlGYlh997r+70+EPH8NHJEtLCauCph+7bmj81ox1xEsJqx1Fdij4Zxi9AT2KSYBrtslgxhOD2gWOyz7AstFzx6zFHj1mGobYUYAgC9cHge3ddK5uhjQKFsNpoMJeqK6+8cm0X6noXiWUxHA8WxAdWNyQM45HFKL8dyiRpueM7jllmMGpnjO+1w9fNaxmXxiogaqlR0jQdAkeOBPjczrnOiQ6jw88ESSOA6KT7iQzOHEvavu1pZsLQg4QPP/DdZG9Xx/vWrOr+mfR03SvtNffdxleAQIgvTzjBT0w409Mpu2faufZy+vDhw5WPMa25dEnYqggIYbXqyNXY7i/jCyvdfmaVb5hdVsLp9LJGp43j1/1A7/RdvdMwPRzEboRnLVHe9vEvL3eXBOB4ZMta22H+TiqV2LJQ26u5u6Bju44Z3J7O/Lvp6cwPmBanOwQ4uNHRTWMK21bSvh1Mm642nTWCtKkH07rnTE72aOO0XZq7bIltVQSEsFp15HLthg5J/+aJE12m3tVjOPYq1/dW4cTjHnwMYhXOce8xDd3y/PJW6OpMdsTRVy4iK/rKMR/jwvz825VIHFzT3fkx13UW/dnhRy3GJyeeHEs7n1XNibUPFvY6vtGDw5vV9w0Vofn81qGhZfDhi3HX8SfQ/3HPMse9CWcCX0gel2OIFJIt+2fRH7qWRaYJG85NxldGzV4tGayFSLQ24+q9ULyu9gJfMU5ELTn6wUISTl03NHz1KzyiJLqmX657OLLdSJgoXTO7cBxyN172blier4YCvBsFdSNXV2dC35tKJrbzfPfFdjwvC/qs9MSMxxNRsSqmT6LhUDQHE+jUBE7UnATXTuLsrRn01K2l/x6+qItiR3TNG8V59KNB0DGSfNXGUXwJY2Gm+osNhpSvEBDCasIHgVLTt75/aQ0MnXpBNb2QgNYEntfr4wu/nBYpKQLtxtdwAh0SBX3VDe7nM/Ha5vf1Fb/CURS2bCTAWWuxR229qRsbQQQbUed61LfW14JVKKsTJ5sk8WUcHbtlNANyTOhgcmAGKH7p3m1FWpqtuZCu+LByVdKHVMjpKEQrBwIW9tnpXOIH+QTDSH/D9f0bmCLewDn1I4HmwtAypPDZ/oe9oXKf/aMPsWxSs/RR13FHrURiZE1gDR86tKHEdCDMKX+XCwEhrOVCvqBeHNaW6ui11/mWDtLQ1kEiWodXE4rwYgepAPssTPCMOjIdAk94TZ8pMZjch8HjDorGFUTUAwlkh64be0A9/ZCatiDZWtOyE7ClQmIdJICJFYhA+TRV4Fo5/QIHiUvrTEbkVRCxiJfsSBbfYk87OTExXxdazY5yUgiRKfpHQ1YSkONmAZY+gV4NIeVFfCXoLNA5h/Plb5LzWAyzF+IVXdNnvO/6GcsyhjC1vmWZ7s2pO3fdOqzriy9asnJxZREoerDLppDAhiIAEtCfO3F5rW0a6z1PX4/nf53nG5RqqrpieSnULEVh8cx4E7ugH78H8tG9eP/24oVezY+pkpA8b/abhPF8le75BqdsXUtaFeaTlTI2IByEoU1l8oq1mkokcZHElIRoWmpejMMCMyCvQXyy7JjjuUcgOl4tLCzCMpTHgFpcgkViX/dH/ax2Szf8m2Yqc/MN+1r7BM/C/rfCtRDWEozSkbMjq7NTY5t13dqE6dhG3wsSqlp+C9DDi0ifLrqmT1f6BgUaPjiHN0lJAGAfvpWcI4XjiHIMF6ocO/EjmMa9HeelQ1LT1PRpoce/sJwOTCQtc+kfGQp6Uxl+9JWtmL+jNEaJ0gKBgbsygR58B4sHfwV5aliVWg3vCHv6ymHcdG868IzrVsK6pnd71+/dsmXxbD3m3/W2ybn0T1/bQFe5I8euX+9ybuqbXMPbDA7ZCKV4uMOecyz+9OfmWvj9x9zEw6JW+JuOX298WhE6qtwLEV3TL1tb/AWj7sqwfqaro/sdmcyM+vBp2XzzDEzaBiQsNH+e+eeTjQ+ohwqnG0BYhfVzNYKrkOmpyauYYH8KvD8G6RPBszrC6Jq+ystl0ghzXEZjR5+O4+iZwTh+eG7Yqa5rq/3hGzzTSkXKn4YgIITVABjBP+ZzP7i8ydasrZCetuCHvIvFRs92SEdlpnCYE2LOQi12OA7RNf1yjrphHIyE9yOXPnfNMDg70DpdTf8DWDKs5rRvMVwChAWrUgh21HzllD0NrigqlxKVC7bKQuOOWeGiuI7OTkhb6T8C/Xw3xkel9cXxj6eIxiY3Hhx3X9dHsWJwDaa3l1+zd9Mt/F4tUk/ijWnP+/DBb8++LWqvnh0c7NDGta0pO7kl6zpb8AJzEUr91kYEFdeBRCt69Nm4+AsSl6jwjVGckY6VwPwUpLhLURx9xliWvxFHi/w+zB0SWCnLsVpxnoXesSI2ngp4zmRJXPgf/0IleGH51R6uwjeX5MR76qtITh7+8N9Cp4GF7Sm8Zl1s35pVXVomm/5c1vG+Wm284njHJeJq44/FjixUAld8w7uijW6+xo3MhW2S6+oIVHumqpewglJ87+LFtcFUcqur+1vxwPcZJqYPMOyhXw6GKI4+4/GwQpjCBhe+6XDIpFb06PM+np5hhS5eXzw9bLJ2pBLGv4Fe36BU4kA6IQGw8MUY6MJywVeqDs54Z69zrWdY7jI3G1ZtUiSV6zzDI3IqLLew/wu9jspl+yywrA1pEed5QceXPT3jBb/DLrA5ua5UHZ/4eMTbFx+fwvE3DJO8fANrjlctL7giJhRx9MrfR89R+VgJ1Y6currONuwd0FNsxwtV02mPlWGLy1TxlPHf6Hh8PH9xesvw9yRM+5PIRT2ZIgVKKZxWUY/PT8aTFPji0i3m4Ed1hDWV/7uY9bNGtiGqAyorJRWSqCgdkrQiR5KddrwPlsq8xfhG6efvx8dvtiQczDdmmPaldDBxSVYeZ3GJXxUMWzxq5d4fPz7Ym7X1HTAL2A7NqtJHEQ3qtCPjw3LoxB/v+OMZ5VVzR5aHWRuErYA+y4uu6fM+Xl9J/lh7bFvbY+vmv0bWos9tsXAWSLIiaSnyApHxJz6SbFSFuXTw8i86r5vVRW1m+6IHmUREAuI0lcREP5q2ztWPrO9/YK54xsXHI56+cePvj3qBfimZNS+J5FWMcrjptThsRd4dPX9+DcwEd5iQphwozfkCwJKaLv9ewHYKeicfSudwShcnJDBBOD3MTwGRO0cqLIj73jQTaejDBYaPHTBgJ/i5+HyYijd95sFhRzkzB7yL2IrCtGwezj9nOQVTUlfPwiicifnu5J0qHHd8mXHIG6ZD7JQqIk9kJK6QwAokMWRUhMaSeJ0vcfaiXNhs7PyuwpYV51Vh+EM/Pu2M9GckpyiOuZm2Wvtom+Y4me8xPbvIIujzPu6Wbvyt1ejL3U7Sv/v754ZHsORwaX3KGdwiJhO5pzY+Mivk/urVq52jTnIXlEc78LKu8qAMx/G8kHhyOicosz0ovM3IrIDKb15HSvDoOoqv+hMLYCOWI8ash0vmufryZVcqLz4u8fym3ov1xT/EVp4UDUTn4/iS0xW+sZTMojASmLqGp64iH4FRXJQ2TKj+lv7JVRTVxwQkm9APyaboGnGMzSVR6VR87ipsVT645ovOzi5tamb6zzB1/nqzjz+s9YetwLioZW5C8jq08K9+1IxS8yQsfF6ap1WL2BK8VOaJc6NbPcPrx7wJ++hmHQUPvOaQgMJ3ETtVlERDP0wVsQ19uPgcLQyt/Dc+p4jlL6k/1xa2qVyh5ApEzEoErm/DsPOTXV3de6anq36roFyRdYWVbVSshHJEMt98saIXfIu9koplYZL6m/hUz7kS/Jt0/PE8+Jj6X/Y6k+fv2tA1BKIvB/OC8WnGAmp5dpqx3XW36fjgYK/upXbhFd+BrRlqn16MfkrspkoC4hnirYjbUVWzs4rHx8uL3cerjwt0TA4RcBcsuX8Rn97q54okVsCKJJ9YkSvy1gJR4aOtnAr6OJP+L13d+BKBKMEzHhAfgDh6yzD+vqHjTDDvYpAxLqwEfVdbE9bpIEi6V27tdLP+LnzPrWS/XrRTnz5d4e79+LNY7r4kP+Z7Jv7z1LyPL0B4Tb+ci9cXLy+eJ54e8Rw//rqqcUR+HOrgYVprJbBl5E2w63oI64J7k8mUDZLGhmAXs19ucVkxP8gKQu4ptCxbMy2TW3KAGI4u1P207ztH3CDx/7bL+Cdse8h1Zy5ev7Dp8uHD7blJuy0J69TV8XW6l92Dl3cbLG6g98idbhDgdANcY1ZY9o2N4mpNr96GRf1Da3Wui0RW69F1bWslvp81LD2xDTOGu9DhQzBc7AcYfYlkAqo6A6ozqHNBYJTESGitTGShsp0qQSxT4AcoPJQw0LBlEPhBFakHDjoLvY+XgVIyg7WK77tG8n9pvpHXBbXL+OMBd7FN6KLu+uf27esbX9RHdIkLbxvCGhgYsDb3v2a7obt7YHakpKmYiqgE2ioqJbzIOszXcSov/DAzRRNehyJKvPx4+igv/ZLKEaCkoZxUFMYXE1I8f7Xyq/UHp9CkAlfbCF3NdlhS7IQguA0N2wiJYy1ktC5IISb1Okr5jSYruy2SGlYkIkKLSC3yy/WrUWGzSnjaTUX/QEhYQuNewLCdwBFKRkpOuAfr4sBnwwfDg6B0MHagORhBHNqHw5WxTwYav6lAt/42MBLfrYZXHO9w3Ftr/B0Hp0pY+tkD29ddAz5ln8NGjddSlNPyhHV8aKjbzAS7Dd3egRcvgRHJWyrHASw9Pyp+vlSxEluH0jWAGQF9VVZMpxHVRZ/xSKQU4PR5Xy0+/sLQZCFS9DN/XKtSeh5WrL2x+sMyZv+W67+vwz5eC7oDx12rm9pakNg639B68XL3Qh+2Bm94DySxHhg0daBHSQhiCbyyyMS9SDi8RhEHyYP1qD9qak0S4VGn5VYrSTRKEkKHWYYiHuQmCYb/YKYLqS+3H5LYckxJmz6qhSYJ5yNgzgtuclESpncBfN8Fj3lgJdCSGpHcGECoxrouMoHjzO+4evLLMB1VKxJV8Wyj8Q80Ix043jnTu32hlTdkh08Yn7UWcnio9Qs3pzZm0lN7LCOxIdIZxbuQ1+lAVFFxJB7aMeUIiPkiPRPjo2v6dPF4FVjHnxi/oQK0Az/bymf5uI7ayGLj6eM63nrbF5VNXzV7nv3HViQL3JAEaSV1z0iBNJIgJBCYkSKJYbdjEiSHw7a0BI5s6QBBbINUswMUsQ6E11UojZGccA9dcZDBdQY+TgyFTgkiEKYyIBvstAQzIRk8cBJ+A2j4gZFDFWAqjAp3V5IhQYYwwUJ57ByS0QINzMYK8FyrRxt3KNbXb2qG/UVNT5wDyCt6/A0boGbdqzPA4tD21SPquWihPy1FWHjQzYs3xnZkM95ePIZd8RccBx1xez/UPowp46I4+uVcLD9/8Plq0Gfy6Jp+uez5uqPyY+UtNN5DuVQc06drpv4bIDXsjtsMpdkOSC79QK4Xog3PzwF4IBNCBiIhpBSpoE8jioqWaM2KCRuOqwLXgIQItKIe0lCYD/lZjoqgGIo0+J++SsmMKA8eqQ21qHuUh2PfzQHN6vgG6vVK8GfmQhcbr3Yff+AEi3rtdCtNF8u/eIWD2ATXx4Mg0XH1Vr/hm7sDQw8PvyvTrriKWocEE0C6oM/kJRJHrAykgj6WGlq+JUifu6YfS6pu4/UVa6AgQcXKi78ApekhcWFBwMstEkTX9MvVHw+Lt2ex+4+Pg62CxgsHEwZbAdgWIJfA+ICkfDRYtyAwWWB7Ay8F8VT/KB0bOJ4Gx/CQfUKSwZGrJJs8iZHYgB0zMB+zk8hopQ8hEcEog2ERASIBAOL5fIrVIKLxXKtzKPZLgZUckvGf+/nH5HsK0+Uz3316zeAjj3D23Lwu90w0ZwNpiZ72UnvwfO/AXIFnXfLBxLOsHn6yiLqmr3oQ04LHX9hq6TFHI6txrlYWkHj98UT1lh8vryR/rIKq6aO204drdP8hRWF3itmLUw42QnW1CSTSA2IAIXkWOBYKLWw8wjVqNkEaFqjFwLQNJhWI4ZiFoiq6QX0SbsEo6HMoWVFCYprwjw6FP65BXCSoXJwiOwpnFK9A6yiWkQhRDwA9XAfpwLS/AqnqSKP7jwapquiznXFXMn6x8Yg/X/HySvLHKqiaPlZfvf0H6BloAM/v3tpzHkJwUx59Uxb4GE5Lfnt2ZGS16SX3+F5mq4llfegtwnaSR6J5EC8hPUV6IDaS6aDnoZ5DpYe6AtdgOr4pyhXLNPH0KKCo/DDP7N+S+mI6qHzbQr7AbdgW+iylWn0l5cf6E29ftfSN6L9lGl04x30tOtMHklmLhxpClW9BL4S1T+i2uNPRp+0FflD0AN9A9LHnmHGBBfJCE3QL9ALiguoJqiu+64gDzWGIIAlhzhaSDsMV/yjJi3BxyY9khP9BXBSzEMY/AFORGMmM1yyKZfmm+ZKuJf4uMHV1THEj+o+S864E7zYd/8Dliqp2MamvPbt9uw4dY/M4DnXTuMuXx/scK9iHLcbryzfKwvOJBSGNPl10Tb8WV0xYyMFymDdXXv46Kq+ueChJQI4WlSUqf8StOf5CNdXqr9afxe8/Gm6AoLAqGKyCGLSG350ACFzKM2FvaeOseEhFOsjItdQ2S6wYYmkOdl2+CfLBvmpIV55vYY2Qn6uAxAWC40zbhxSmWArcQj0TSIiSU37mx0kgVesgLereOSz8E5EWJa6Qzyh1hZEcO7xY4Ct9WLfNvwa+5xA2h6uGP6vMPxMsZ8WNf0Gf+cOCw9usq51a5+kNG9Sn1IjJsjoO0LI7EpVra/vxhPdFs7JyjYriohlbTAKGxO1C6oJEljseOLqmTxfPX66OucJK66OUNzuDjK7p05UIbGwX25I/vrj4BYrnD0uZ/Rtvfzz9fPsPIkgkbL0DZNMFRVEHFEY2ZCBTcwMLdfCsCCVN4SwpE9YG+ARNgD24IDHYSYB1yNCYDkLRFoC8oOUG40AKQx5IYyAmlQ6SF7dDoSof0hbJiApzqLs43aPc5UG+AvVQ/4T7nGQFQiJ5kdbAkmgH2Sz0FaWB4gLrad22v4nmuvPt/yzCc1+V4t0e4z93r8PYwDCvNANxLSthkai0jmCf5+jq6y6Y4SkjTfoKprgWufj9Dg3AozBmiK7pl3H8WDH3u0YfLY6u6c/HVS2vSvsxoygyTF2q/qNenEyjJ5NJPYGPRidME1M1/JYqwyoNq32Ihu4J0z5M+WA2DoqwEI9wfmEaEhQJzPNsKNOh0jJwrfRVJqbnNOrC6IGwQFzgHiKrpCuq2kE+FizrMXWE7IWCEKemg7hSiimOQchNIC3EchqpHlBO95TshQThkwF5TL9k+Mm/MZLGzVo3AlQdLzagDle1vCYd/wU9/5Z5ZcyZPnNow/J8ZHZZCGtsbKw3rdn7nIzTx42o0WfP1cPKuYJ6XPFs5q7p8zmKx5v8cdcxDeMPOR1fj+gh4X10TV/dukiC+nJPeLy8eH1hrtm/UVvpKxcrP2oL/dlcs1eQ9PCeo73wGcp+R2Xyvlp74vH19B9EkoA2CYKUlcQqJCQj6vkoyBjh/IurcJiy4Zxy2FMptRBO7sK3kClR0UYUZAX+wMqfC1ICiYHMYBsKSQsSFKaAUEqZLoiK00ASFsgpN0UEUWE6yOkiiArE6NmUb91OWwAAEuNJREFUszCNxA0c/uBoF04W86YOarWQAYjGmHBBEIkUiXEqib025hNmInWknv6zKo77Sh3/RvcfSx5Xl4O4yr5Y7NxiuEEQFT4uvs8yrF5VvosX28LLS185vsiRHkc9YPiJtrCbJIzHyx3gJdfpl80flZWPR6qIxJghus7xjSqj4E9UNn2VvN76Csqq6XIR+48OYEeGlcAaXhLfQwxNQcgQEI9IErOOxBUuCuDLz9Arm5iyOTaYy7Jty8hAb2VCm43ZmwnwQTbgFpAWyA4SGEKhaMdgYNpngKAcpeMCAfFjYGE4yAqco3RZ0LorUqOkxVkf6AgzvFBPFbISSsOUD+WRrWijpcwbmI4Gomj4yxAIv4bPVU+q9sfxk/EP36UlfP49N3vNWr/m9CZdX/zzjDDofAoW3XHVr9NPHdB8p2+uORl/mjFLUktMbBTtkSJbpLCRxYyD5OpJps/4+DJuvq5IIgoLqfi3pLzcRuloM7QSzKImsBSWG80LVKkxkSvOkFHaCjL5QvrPN9rwvaSVtEg2ICmQCNRQkGjwnlOpNktMxdds+GxcRFrIyCmhTQMEUJjl4qwtzPbAOVC8o0DUZroGiMmBpEUfRBZ4DvRUJC4/1GOpij1ML9XU0PJdFxIZGsOpJkkOQ0YdFh5CPodKl0WfRqQkVUhTIEf1iN4GkdJU4Rx/xsJfHkpfMv4cd+IAUJb1+YdkfSU7NXp6+/bti7qquKiEdfVq0Gl2TO2DonYzAcUTCv0slCB8FuGia/q8j7iAPl30aNIPHVKq55w+00MvjFLo05WmV8H5P9XLzydVF/H0xbGl9UGfjm226B98po2u6fO+0f3H9M7SbT1h+FoS00ybSmm+5/RZHxzbwWvVHtSvNuLRR4BKl0vPtHRhWh1SESUsNBkH0qjvNiAx4MA1JDBc4yBmTPmwJArJCFM+dA1SE5XsmFIqRTzKUrZYkMio78IUkauFoW6Mcbin1GWrOR8nqOEUEUQFmuK3ZdEw6NFg92s9j3XLp0CIsAuS8VdPkcKhCZ9/KAc81x/c3NdzFjy6KHZc0YPNh7VhDg9jYnh4co9n2dvx1nLalys7Rimx2xLGigfEJBQ0Xr149FkBVb04BQiTlPAFbTiDxRGKM1pJf5AgarPKG0sQu413N07hkCANO5m0fSebtCwziW5DqMISHTRMJCDF23inYbmsauNCHq+Vn1ta5dErzKN8psP/RiIXVpAegKJQ30Y06AQSEXdAIpdL0wbTNsLpoSIeCwRJHZYBpTusIFAIlPC0iqL5AxoCcmLPQkkLdITRCc0dSFqQD1A51g4pLOXmhZCwDMO2BpH9q6ZtDoU4oKQIy5yEynFnv+mzw+0+/q3Sf5yT4aYs89zq1alLIK7wYeQANcCpgW5AOaqIARzxcudrXrMTz+cuFAxBI1Rw06eLKz3xsnDikt+Mmr9mWBlXrbySeJAlTt8MXJImXHRNv0zx2GpWZ3r0KKqzXHlRHH26+fQf+mkbg56ADjppUuihMJl7BEhGtmnj+4Phj1lEUAzjaQcgJkzcqPPmlI/yjdJV8Trf/+hbeYyP0uMS0zSVF8SEaSELxkhR6a7IC1IVHkNMBWEkCljxYQ7YXgWKrDCHw2ohJDDKSkr5Tst3TANBp7DdgkTFKSOpxYMtV2i3hXQoJjwbBo3L4oibAajdXmSbCl01PEvi6x3PetMvwfi3cv+xHpPRk8GZvo6Oq5y5FvZlvtfqQZ5v5igfH7iRdHqrn/H24McyEb6ejCUxkCwqEATi8JDNKtWRIxI6wrLj+aOyQgIqLT/KTZ+OLYnCFGHE60PdSgzIgVmcfrbt5evjYkB97VeNyv8plx/UYoChElhYgB7KtD3PAUWRpejIVNzNAjNzyDuYRqnrMF5dIx4CkTrlAJQRps2FhZIX5lqYwfFLOygTBeSmkUhDEgNvIC7MR5ML6JhozoCpn+858G1utbH4j7BRT0Z9VlZzbTyOKJCKeCjkqYbkFBJh+DXCPVcKuXKIFURlm8WBoZSFOBCYmk6i33ioT+Kw1CegEMspcFfe+M8+rRySNum/YUwm9I7TPT04NWOBDg/nwtz16xMbEp3mPswIOuI6G7wBSlynz1pQWZEIP0smIcEEWN3QsfJDn+nj9FFSPh73wilgdE2f+eOumo4pPqWI2kI/LKu4RVXLq7H/kJopRUFhnkj4joNT9KC/BlZgAIVD1I+cwASVUBgCIsF1KEQxJLpGPKHGP5LYrAs5ikREnmJ61KF4K5cG1+REVS6HC1JauGroYYcOrLWUEp6MSF0UpoZgK5hV2dgEzeNLYbMBnRQZEUPnOwGMT6GOp57Kg/0WTCMYjnsQHpDmlJFTR5IcNt/alvV1PdF5NsKcLSpGG03L6QcjnWDpeIXqgFYb//A9wGi1+fMPDeqY7nae6uvT530KKp+JebkhHJyX6Fqz33X83tCgRr1d6gXBH+XnFtEwDmEVMBfAtbK7UvHxVTb1gGLQokbFVBZMDtUJHmT+dsPxmqSRU2nkrxkWxhfbOfEVwLov4sIaonSRr1qZy6vy8xliPbn+qPjYHxSm6mJwdB357DfaVtJ/BMLeW0/ayVQSR6TA5AB7h8kwmFeRrFBUSFYkJk7GsM+F5SuiCQmFBEriCskHYcxfEM9ozBjBS/yaKD//rBzndjD3BHswAcmqwFdhOWGugCw5owwpEt9sxMlVGWQEK4GlcAOi1XAcL6eLICfdcMFmNDnH7xdO/YTCHTkxM2B6EiSPbuXmHrZO5eJy4Iu6lfo2Gu8orFfA+PM9UMjnHpBIx9v+/Q9Wm8nMfcMTE1d7u7vP4Ec6fzy1wqOGP3xI63JHjgT2/rsy/boTbMP0pe78dVUWS5wjK0VUjIqNN3kA62ZYeIcfxofXDFNFUZBTT4W6m71mWBlXrb4yWSoEYWh0jVIUdJEmzA6o18mRDN7dCplCEkK8IiP4WRAU9OO8j5wimZB3SAhKYlJEphLkJCaSEP7PEdxsfVG5UWFxP6qPPngTlvBED6IWLN8dTPmg8ocFPPRXWBdlFWqqCEmLlhAgLRtKdLaAkpQNfRUM6DUQGOUiTimNEaT7FvRVw/F6K91XG4/mHf9KPaovvJ36jzfSS1mpc6mUdhnvhZL4a0GjZsKBKK+n0+kt0AHvztCAsIzjeeAeUKVPF1l101cBWCICxcGmcPalUeHRnyguIsJYej79fFnpKxdjrKhu+spVK69Ke+OW6SXlh7Xk/8b7D5umJKY6nUiQAEmp5ZKoD5Ay8kTFzcAsJIrL+ZREYCWAaU4ubXRNP8wfpuSuGubHMwCJhSuGPCiYJIMw5GV6xkfY0Wd+WoPiBAlEhvnzNluw3SKZYTkQHIQ5J1RQDg7Lw/QQGUIdFp4wcC9KgQ/7KkxjucEHROVmc3ZaCFfEjMxUvlPvBZ0WhT1Q1zG06hQKyGPA9qEh4bPRJuO/0p//WvoPyXpa77BPr9L1mn64QiJRT0vlP3jg1oyn0/th1dnN6VOkQyh8wVRuPpLUH9GHi+sckD4vLaj43NSHLwfv8cKjbGxdgc97JUpFpIRbpovKYHTUltkpHYkyEqNYf1gWfZU+Vn+JiMZERS4qKyTAMv1hmwoItLT/aL6OL9cn8A4mknhDkR5CUuh43ExhAXjnIQVxRQ9UwnU1JM73meHISINzlY/1Ir3jwNQBtui5IpU3K2mFZbEUEhgJiHlZhkqI8rws7hPFxBHlZ5romu1CGRSv2HyQEQiLPkwefJcSk2o0mU+F8Z46KswbKd8qvRUWiq7BsuoYlF/q+Jd839p4/KNnFHhw+Fbc819r/y3dHO7qsk9D2lLPBvEq59SLXC6CYSCq1OTk5F48g+FxLyQSvvyzhFK8taaYL1ACiYdkkSOg/HVO4irmAySLlR8+yHy5wnaWysTF7YmnRxdyecMXFDcxx3KjNCUEGUtb2r4Iixwh5qebxEG58v2Hkh0ERqlLp5kClNLkngLSyF8XExrZi089SYbFm9DRg1FCbEKyoxQE8sqFkTOgTwrDVIPCP/k8qpRcGrxMEXmxnpwjUeXbhjpgA2bBNsp0HPQWOiwNOnddw5YcNIdSFyzTlUKehEbrLDxDNn7osjCXPw5FO22qgPfKHn/pf8XxxxetvSvYlX8BxBVKCdGDmPPDhz0W+Oijjxof//jHt+Hh2oko/qKqFx4l0BJQmQIwS3RNn/fxZXqGFbq4nQzimI9tKFs+S1S1KJ9XoQkEfUQwtKg98fSzefMMwmx5F28/IqK2RLjM2b54/gX0H0v6+IiDZSVgHJogfYWNzDMUpCtsUkKg4pKIUJAsnNTlkjNWzfBCPMOhi8JAiCSqPBmyMFVQ1OdctQwLywNZ5cPCpDl80D6IhjzBASQF0sUeREpSJCyE4ceSpJXbEO2612AHepaTSRn/YrtEAD3n8xV/ntv4+S96nyGRO9gccQZmEPiBK3bRi5kPHcG+v2T32n2+53bxNY8oQyWIB0SR9OmqxMeTh5lm/8azx8srEbCQNSqTpUTX+eagwCiPqiWeQAXO/olHV2tPaYUFjWCxsQJjt7MV564K6iOB2Xj1adNGa3PqDMFl4XwSSnAQCUIibqFPlwtTwbiOkoSR+JvLx3KYv9BXaSrlLyifSegQBNMFTAWhiIeFArRZnoX+8Y2EzKhbnuNlYO9wFpZXkwoH5Kmj/6qOFTz+0n8+Y4Y/2pVIcJqY35+YJ6wjEN33ZzL9kPY3hWjx6Sv+RcByLIQAZZYQJSn2C944FRF/QkvjQ31XZDcV04GVPOGl+WdJEhVGbaNPV3d7Va7ZP83U/1ACgzTjkg4gjUFvHhGWkrPAPnnBLNeFSEKKfAbzOu9yBAUdVj6cZURpZuU3XOUILioD93x2IEnxxFGc9c6M+M93cHSNZVzHquBQDeMn4x898wQ2us7pgGvAbyU8/z5e5EupVEqtJirCgp4KHxVI7sbrQIYKHyKF3+yvIvEEX8FsQNk9qXwgBpgQwNo7p9OKrukzfdzF08+WTmYrV35YF+tU8bEpYImInGtLVH+8PkzZ8iQcVpjrawXCLOHH5uo/9JmWjbXHJMQcNhVW8bOklbsumnJw7Q+cgtVK2mJxAUNNKKncp54KHuzAwnjCE01B1UIHA1A80ik/IkdIfTj6mE8MXh2sSKZhdHUd+IcDykwFLj4eMv7Fv+il75c8/xEmeHaojD+jZ4LgbsPVVvO5iutg4oSAFCCiAqVp/jrUKRU8mzVexsube05ff3tiD0Q1wkP/ojrYgeiaftiheHsjLKL4GrudTxYvb0H9h94bpzeAwCD4cAqJf5SmlBjFH5D8ChVC1Q8KyIkrjtgbE64y4lqtINJHel5Hq4q4ZdsYzsWBWaU+rkFWtFzQbiNNnWciNbT/qD4+Hitq/FdE/3mWzmvQU+W4hZZPenQuRHRNfylcvfVjpUqz0Tj6dNE1/fm4euufTx1z5am3/hr6z6lj9A9ElneKwPJ3IYEVEpqKys0YFeUhoDBP4TV/+bjVIkfqKuu8/ixC/+tqR73111V4DYnrrb+G8a+h1tkk9dY/m7MxV7XUzwdP3ApBgCYG6Co+L6/+kcB4X0g0ERFFzwXjojBc5q8ZhqOKtWEoROmLEwSWBIHowVySyqSS5kIABEYhisRFEov8SgRWGD6K9OMgq8IwBIkTBBYXASGsxcW3pUoHgfF5iIiLPv9x+03kuLxMqaqsUj1KJL4gsFgICGEtFrJtUG6OwDhtJHHhqLOl+dBAG0AnXRAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBIGVhMD/D0fV/fpMMM+gAAAAAElFTkSuQmCC" } }; 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 drawer = { // 抽屉组件 drawer: { // 是否显示 show: false, // 点击遮罩是否关闭 mask: true, // // 是否显示关闭按钮 // closeBtn:true, // 抽屉宽度 width: "40%", // 抽屉位置 placement: "left", // 权重 zIndex: 100 } }; const props$E = { ...ActionSheet, ...Album, ...Alert, ...Avatar, ...AvatarGroup, ...Backtop, ...Badge, ...Button, ...Calendar$2, ...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, ...drawer }; const props$D = { props: { // 图标类名 name: { type: String, default: props$E.icon.name }, // 图标颜色,可接受主题色 color: { type: String, default: props$E.icon.color }, // 字体大小,单位px size: { type: [String, Number], default: props$E.icon.size }, // 是否显示粗体 bold: { type: Boolean, default: props$E.icon.bold }, // 点击图标的时候传递事件出去的index(用于区分点击了哪一个) index: { type: [String, Number], default: props$E.icon.index }, // 触摸图标时的类名 hoverClass: { type: String, default: props$E.icon.hoverClass }, // 自定义扩展前缀,方便用户扩展自己的图标库 customPrefix: { type: String, default: props$E.icon.customPrefix }, // 图标右边或者下面的文字 label: { type: [String, Number], default: props$E.icon.label }, // label的位置,只能右边或者下边 labelPos: { type: String, default: props$E.icon.labelPos }, // label的大小 labelSize: { type: [String, Number], default: props$E.icon.labelSize }, // label的颜色 labelColor: { type: String, default: props$E.icon.labelColor }, // label与图标的距离 space: { type: [String, Number], default: props$E.icon.space }, // 图片的mode imgMode: { type: String, default: props$E.icon.imgMode }, // 用于显示图片小图标时,图片的宽度 width: { type: [String, Number], default: props$E.icon.width }, // 用于显示图片小图标时,图片的高度 height: { type: [String, Number], default: props$E.icon.height }, // 用于解决某些情况下,让图标垂直居中的用途 top: { type: [String, Number], default: props$E.icon.top }, // 是否阻止事件传播 stop: { type: Boolean, default: props$E.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(e) { e && typeof e.stopPropagation === "function" && e.stopPropagation(); }, // 空操作 noop(e) { this.preventEvent(e); } }, 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$23 = { name: "u-icon", data() { return {}; }, emits: ["click"], mixins: [mpMixin, mixin, props$D], computed: { uClasses() { let classes = []; classes.push(this.customPrefix + "-" + this.name); if (this.color && uni.$u.config.type.includes(this.color)) classes.push("u-icon__icon--" + this.color); return classes; }, iconStyle() { let style = {}; style = { fontSize: uni.$u.addUnit(this.size), lineHeight: uni.$u.addUnit(this.size), fontWeight: this.bold ? "bold" : "normal", // 某些特殊情况需要设置一个到顶部的距离,才能更好的垂直居中 top: uni.$u.addUnit(this.top) }; if (this.color && !uni.$u.config.type.includes(this.color)) style.color = this.color; return style; }, // 判断传入的name属性,是否图片路径,只要带有"/"均认为是图片形式 isImg() { return this.name.indexOf("/") !== -1; }, imgStyle() { let style = {}; style.width = this.width ? uni.$u.addUnit(this.width) : uni.$u.addUnit(this.size); style.height = this.height ? uni.$u.addUnit(this.height) : uni.$u.addUnit(this.size); return style; }, // 通过图标名,查找对应的图标 icon() { return icons$1["uicon-" + this.name] || this.name; } }, methods: { clickHandler(e) { this.$emit("click", this.index); this.stop && this.preventEvent(e); } } }; function _sfc_render$22(_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$g = /* @__PURE__ */ _export_sfc(_sfc_main$23, [["render", _sfc_render$22], ["__scopeId", "data-v-ac70166d"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-icon/u-icon.vue"]]); const props$C = { props: { // 绑定的值 modelValue: { type: [String, Number], default: props$E.input.value }, // number-数字输入键盘,app-vue下可以输入浮点数,app-nvue和小程序平台下只能输入整数 // idcard-身份证输入键盘,微信、支付宝、百度、QQ小程序 // digit-带小数点的数字键盘,App的nvue页面、微信、支付宝、百度、头条、QQ小程序 // text-文本输入键盘 type: { type: String, default: props$E.input.type }, // 如果 textarea 是在一个 position:fixed 的区域,需要显示指定属性 fixed 为 true, // 兼容性:微信小程序、百度小程序、字节跳动小程序、QQ小程序 fixed: { type: Boolean, default: props$E.input.fixed }, // 是否禁用输入框 disabled: { type: Boolean, default: props$E.input.disabled }, // 禁用状态时的背景色 disabledColor: { type: String, default: props$E.input.disabledColor }, // 是否显示清除控件 clearable: { type: Boolean, default: props$E.input.clearable }, // 是否密码类型 password: { type: Boolean, default: props$E.input.password }, // 最大输入长度,设置为 -1 的时候不限制最大长度 maxlength: { type: [String, Number], default: props$E.input.maxlength }, // 输入框为空时的占位符 placeholder: { type: String, default: props$E.input.placeholder }, // 指定placeholder的样式类,注意页面或组件的style中写了scoped时,需要在类名前写/deep/ placeholderClass: { type: String, default: props$E.input.placeholderClass }, // 指定placeholder的样式 placeholderStyle: { type: [String, Object], default: props$E.input.placeholderStyle }, // 是否显示输入字数统计,只在 type ="text"或type ="textarea"时有效 showWordLimit: { type: Boolean, default: props$E.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$E.input.confirmType }, // 点击键盘右下角按钮时是否保持键盘不收起,H5无效 confirmHold: { type: Boolean, default: props$E.input.confirmHold }, // focus时,点击页面的时候不收起键盘,微信小程序有效 holdKeyboard: { type: Boolean, default: props$E.input.holdKeyboard }, // 自动获取焦点 // 在 H5 平台能否聚焦以及软键盘是否跟随弹出,取决于当前浏览器本身的实现。nvue 页面不支持,需使用组件的 focus()、blur() 方法控制焦点 focus: { type: Boolean, default: props$E.input.focus }, // 键盘收起时,是否自动失去焦点,目前仅App3.0.0+有效 autoBlur: { type: Boolean, default: props$E.input.autoBlur }, // 是否去掉 iOS 下的默认内边距,仅微信小程序,且type=textarea时有效 disableDefaultPadding: { type: Boolean, default: props$E.input.disableDefaultPadding }, // 指定focus时光标的位置 cursor: { type: [String, Number], default: props$E.input.cursor }, // 输入框聚焦时底部与键盘的距离 cursorSpacing: { type: [String, Number], default: props$E.input.cursorSpacing }, // 光标起始位置,自动聚集时有效,需与selection-end搭配使用 selectionStart: { type: [String, Number], default: props$E.input.selectionStart }, // 光标结束位置,自动聚集时有效,需与selection-start搭配使用 selectionEnd: { type: [String, Number], default: props$E.input.selectionEnd }, // 键盘弹起时,是否自动上推页面 adjustPosition: { type: Boolean, default: props$E.input.adjustPosition }, // 输入框内容对齐方式,可选值为:left|center|right inputAlign: { type: String, default: props$E.input.inputAlign }, // 输入框字体的大小 fontSize: { type: [String, Number], default: "34rpx" }, // 输入框字体颜色 color: { type: String, default: props$E.input.color }, // 输入框前置图标 prefixIcon: { type: String, default: props$E.input.prefixIcon }, // 前置图标样式,对象或字符串 prefixIconStyle: { type: [String, Object], default: props$E.input.prefixIconStyle }, // 输入框后置图标 suffixIcon: { type: String, default: props$E.input.suffixIcon }, // 后置图标样式,对象或字符串 suffixIconStyle: { type: [String, Object], default: props$E.input.suffixIconStyle }, // 边框类型,surround-四周边框,bottom-底部边框,none-无边框 border: { type: String, default: props$E.input.border }, // 是否只读,与disabled不同之处在于disabled会置灰组件,而readonly则不会 readonly: { type: Boolean, default: props$E.input.readonly }, // 输入框形状,circle-圆形,square-方形 shape: { type: String, default: props$E.input.shape }, // 用于处理或者过滤输入框内容的方法 formatter: { type: [Function, null], default: props$E.input.formatter }, // 是否忽略组件内对文本合成系统事件的处理 ignoreCompositionEvent: { type: Boolean, default: true } } }; const _sfc_main$22 = { name: "u-input", mixins: [mpMixin, mixin, props$C], data() { return { // 输入框的值 innerValue: "", // 是否处于获得焦点状态 focused: false, // value是否第一次变化,在watch中,由于加入immediate属性,会在第一次触发,此时不应该认为value发生了变化 firstChange: true, // value绑定值的变化是由内部还是外部引起的 changeFromInner: false, // 过滤处理方法 innerFormatter: (value2) => value2 }; }, watch: { modelValue: { immediate: true, handler(newVal, oldVal) { this.innerValue = newVal; this.firstChange = false; this.changeFromInner = false; } } }, computed: { // 是否显示清除控件 isShowClear() { const { clearable, readonly, focused, innerValue } = this; return !!clearable && !readonly && !!focused && innerValue !== ""; }, // 组件的类名 inputClass() { let classes = [], { border, disabled, shape } = this; border === "surround" && (classes = classes.concat(["u-border", "u-input--radius"])); classes.push(`u-input--${shape}`); border === "bottom" && (classes = classes.concat([ "u-border-bottom", "u-input--no-radius" ])); return classes.join(" "); }, // 组件的样式 wrapperStyle() { const style = {}; if (this.disabled) { style.backgroundColor = this.disabledColor; } if (this.border === "none") { style.padding = "0"; } else { style.paddingTop = "6px"; style.paddingBottom = "6px"; style.paddingLeft = "9px"; style.paddingRight = "9px"; } return 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(e) { this.innerFormatter = e; }, // 当键盘输入时,触发input事件 onInput(e) { let { value: value2 = "" } = e.detail || {}; const formatter = this.formatter || this.innerFormatter; const formatValue = formatter(value2); this.innerValue = value2; this.$nextTick(() => { this.innerValue = formatValue; this.valueChange(); }); }, // 输入框失去焦点时触发 onBlur(event) { this.$emit("blur", event.detail.value); 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() { this.$emit("keyboardheightchange"); }, // 内容发生变化,进行处理 valueChange() { const value2 = this.innerValue; this.$nextTick(() => { this.$emit("update:modelValue", value2); this.changeFromInner = true; this.$emit("change", value2); 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$21(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); return vue.openBlock(), vue.createElementBlock( "view", { class: vue.normalizeClass(["u-input", $options.inputClass]), style: vue.normalizeStyle([$options.wrapperStyle]) }, [ vue.createElementVNode("view", { class: "u-input__content" }, [ _ctx.prefixIcon || _ctx.$slots.prefix ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "u-input__content__prefix-icon" }, [ vue.renderSlot(_ctx.$slots, "prefix", {}, () => [ vue.createVNode(_component_u_icon, { name: _ctx.prefixIcon, size: "18", customStyle: _ctx.prefixIconStyle }, null, 8, ["name", "customStyle"]) ], true) ])) : vue.createCommentVNode("v-if", true), vue.createElementVNode("view", { class: "u-input__content__field-wrapper", onClick: _cache[5] || (_cache[5] = (...args) => $options.clickHandler && $options.clickHandler(...args)) }, [ vue.createCommentVNode(" 根据uni-app的input组件文档,H5和APP中只要声明了password参数(无论true还是false),type均失效,此时\r\n 为了防止type=number时,又存在password属性,type无效,此时需要设置password为undefined\r\n "), vue.createElementVNode("input", { class: "u-input__content__field-wrapper__field", style: vue.normalizeStyle([$options.inputStyle]), type: _ctx.type, focus: _ctx.focus, cursor: _ctx.cursor, value: $data.innerValue, "auto-blur": _ctx.autoBlur, disabled: _ctx.disabled || _ctx.readonly, maxlength: _ctx.maxlength, placeholder: _ctx.placeholder, "placeholder-style": _ctx.placeholderStyle, "placeholder-class": _ctx.placeholderClass, "confirm-type": _ctx.confirmType, "confirm-hold": _ctx.confirmHold, "hold-keyboard": _ctx.holdKeyboard, "cursor-spacing": _ctx.cursorSpacing, "adjust-position": _ctx.adjustPosition, "selection-end": _ctx.selectionEnd, "selection-start": _ctx.selectionStart, password: _ctx.password || _ctx.type === "password" || void 0, ignoreCompositionEvent: _ctx.ignoreCompositionEvent, onInput: _cache[0] || (_cache[0] = (...args) => $options.onInput && $options.onInput(...args)), onBlur: _cache[1] || (_cache[1] = (...args) => $options.onBlur && $options.onBlur(...args)), onFocus: _cache[2] || (_cache[2] = (...args) => $options.onFocus && $options.onFocus(...args)), onConfirm: _cache[3] || (_cache[3] = (...args) => $options.onConfirm && $options.onConfirm(...args)), onKeyboardheightchange: _cache[4] || (_cache[4] = (...args) => $options.onkeyboardheightchange && $options.onkeyboardheightchange(...args)) }, null, 44, ["type", "focus", "cursor", "value", "auto-blur", "disabled", "maxlength", "placeholder", "placeholder-style", "placeholder-class", "confirm-type", "confirm-hold", "hold-keyboard", "cursor-spacing", "adjust-position", "selection-end", "selection-start", "password", "ignoreCompositionEvent"]) ]), $options.isShowClear ? (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "u-input__content__clear", onClick: _cache[6] || (_cache[6] = (...args) => $options.onClear && $options.onClear(...args)) }, [ vue.createVNode(_component_u_icon, { name: "close", size: "11", color: "#ffffff", customStyle: "line-height: 12px" }) ])) : vue.createCommentVNode("v-if", true), _ctx.suffixIcon || _ctx.$slots.suffix ? (vue.openBlock(), vue.createElementBlock("view", { key: 2, class: "u-input__content__subfix-icon" }, [ vue.renderSlot(_ctx.$slots, "suffix", {}, () => [ vue.createVNode(_component_u_icon, { name: _ctx.suffixIcon, size: "18", customStyle: _ctx.suffixIconStyle }, null, 8, ["name", "customStyle"]) ], true) ])) : vue.createCommentVNode("v-if", true) ]) ], 6 /* CLASS, STYLE */ ); } const __easycom_0$f = /* @__PURE__ */ _export_sfc(_sfc_main$22, [["render", _sfc_render$21], ["__scopeId", "data-v-df79975b"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-input/u-input.vue"]]); const props$B = { props: { color: { type: String, default: props$E.line.color }, // 长度,竖向时表现为高度,横向时表现为长度,可以为百分比,带px单位的值等 length: { type: [String, Number], default: props$E.line.length }, // 线条方向,col-竖向,row-横向 direction: { type: String, default: props$E.line.direction }, // 是否显示细边框 hairline: { type: Boolean, default: props$E.line.hairline }, // 线条与上下左右元素的间距,字符串形式,如"30px"、"20px 30px" margin: { type: [String, Number], default: props$E.line.margin }, // 是否虚线,true-虚线,false-实线 dashed: { type: Boolean, default: props$E.line.dashed } } }; const _sfc_main$21 = { name: "u-line", mixins: [mpMixin, mixin, props$B], computed: { lineStyle() { const style = {}; style.margin = this.margin; if (this.direction === "row") { style.borderBottomWidth = "1px"; style.borderBottomStyle = this.dashed ? "dashed" : "solid"; style.width = uni.$u.addUnit(this.length); if (this.hairline) style.transform = "scaleY(0.5)"; } else { style.borderLeftWidth = "1px"; style.borderLeftStyle = this.dashed ? "dashed" : "solid"; style.height = uni.$u.addUnit(this.length); if (this.hairline) style.transform = "scaleX(0.5)"; } style.borderColor = this.color; return uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle)); } } }; function _sfc_render$20(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock( "view", { class: "u-line", style: vue.normalizeStyle([$options.lineStyle]) }, null, 4 /* STYLE */ ); } const __easycom_0$e = /* @__PURE__ */ _export_sfc(_sfc_main$21, [["render", _sfc_render$20], ["__scopeId", "data-v-72791e59"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-line/u-line.vue"]]); const props$A = { props: { // input的label提示语 label: { type: String, default: props$E.formItem.label }, // 绑定的值 prop: { type: String, default: props$E.formItem.prop }, // 是否显示表单域的下划线边框 borderBottom: { type: [String, Boolean], default: props$E.formItem.borderBottom }, // label的宽度,单位px labelWidth: { type: [String, Number], default: props$E.formItem.labelWidth }, // 右侧图标 rightIcon: { type: String, default: props$E.formItem.rightIcon }, // 左侧图标 leftIcon: { type: String, default: props$E.formItem.leftIcon }, // 是否显示左边的必填星号,只作显示用,具体校验必填的逻辑,请在rules中配置 required: { type: Boolean, default: props$E.formItem.required }, leftIconStyle: { type: [String, Object], default: props$E.formItem.leftIconStyle } } }; const _sfc_main$20 = { name: "u-form-item", mixins: [mpMixin, mixin, props$A], data() { return { // 错误提示语 message: "", parentData: { // 提示文本的位置 labelPosition: "left", // 提示文本对齐方式 labelAlign: "left", // 提示文本的样式 labelStyle: {}, // 提示文本的宽度 labelWidth: 45, // 错误提示方式 errorType: "message" } }; }, // 组件创建完成时,将当前实例保存到u-form中 computed: { propsLine() { return uni.$u.props.line; } }, mounted() { this.init(); }, methods: { init() { this.updateParentData(); if (!this.parent) { uni.$u.error("u-form-item需要结合u-form组件使用"); } }, // 获取父组件的参数 updateParentData() { this.getParentData("u-form"); }, // 移除u-form-item的校验结果 clearValidate() { this.message = null; }, // 清空当前的组件的校验结果,并重置为初始值 resetField() { const value2 = uni.$u.getProperty(this.parent.originalModel, this.prop); uni.$u.setProperty(this.parent.model, this.prop, value2); this.message = null; }, // 点击组件 clickHandler() { this.$emit("click"); } } }; function _sfc_render$1$(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); const _component_u_line = resolveEasycom(vue.resolveDynamicComponent("u-line"), __easycom_0$e); return vue.openBlock(), vue.createElementBlock("view", { class: "u-form-item" }, [ vue.createElementVNode( "view", { class: "u-form-item__body", onClick: _cache[0] || (_cache[0] = (...args) => $options.clickHandler && $options.clickHandler(...args)), style: vue.normalizeStyle([_ctx.$u.addStyle(_ctx.customStyle), { flexDirection: $data.parentData.labelPosition === "left" ? "row" : "column" }]) }, [ vue.createCommentVNode(' 微信小程序中,将一个参数设置空字符串,结果会变成字符串"true" '), vue.renderSlot(_ctx.$slots, "label", {}, () => [ vue.createCommentVNode(" {{required}} "), _ctx.required || _ctx.leftIcon || _ctx.label ? (vue.openBlock(), vue.createElementBlock( "view", { key: 0, class: "u-form-item__body__left", style: vue.normalizeStyle({ width: _ctx.$u.addUnit(_ctx.labelWidth || $data.parentData.labelWidth), marginBottom: $data.parentData.labelPosition === "left" ? 0 : "5px" }) }, [ vue.createCommentVNode(" 为了块对齐 "), vue.createElementVNode("view", { class: "u-form-item__body__left__content" }, [ vue.createCommentVNode(" nvue不支持伪元素before "), _ctx.required ? (vue.openBlock(), vue.createElementBlock("text", { key: 0, class: "u-form-item__body__left__content__required" }, "*")) : vue.createCommentVNode("v-if", true), _ctx.leftIcon ? (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "u-form-item__body__left__content__icon" }, [ vue.createVNode(_component_u_icon, { name: _ctx.leftIcon, "custom-style": _ctx.leftIconStyle }, null, 8, ["name", "custom-style"]) ])) : vue.createCommentVNode("v-if", true), vue.createElementVNode( "text", { class: "u-form-item__body__left__content__label", style: vue.normalizeStyle([$data.parentData.labelStyle, { justifyContent: $data.parentData.labelAlign === "left" ? "flex-start" : $data.parentData.labelAlign === "center" ? "center" : "flex-end" }]) }, vue.toDisplayString(_ctx.label), 5 /* TEXT, STYLE */ ) ]) ], 4 /* STYLE */ )) : vue.createCommentVNode("v-if", true) ], true), vue.createElementVNode("view", { class: "u-form-item__body__right" }, [ vue.createElementVNode("view", { class: "u-form-item__body__right__content" }, [ vue.createElementVNode("view", { class: "u-form-item__body__right__content__slot" }, [ vue.renderSlot(_ctx.$slots, "default", {}, void 0, true) ]), _ctx.$slots.right ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "item__body__right__content__icon" }, [ vue.renderSlot(_ctx.$slots, "right", {}, void 0, true) ])) : vue.createCommentVNode("v-if", true) ]) ]) ], 4 /* STYLE */ ), vue.renderSlot(_ctx.$slots, "error", {}, () => [ !!$data.message && $data.parentData.errorType === "message" ? (vue.openBlock(), vue.createElementBlock( "text", { key: 0, class: "u-form-item__body__right__message", style: vue.normalizeStyle({ marginLeft: _ctx.$u.addUnit($data.parentData.labelPosition === "top" ? 0 : _ctx.labelWidth || $data.parentData.labelWidth) }) }, vue.toDisplayString($data.message), 5 /* TEXT, STYLE */ )) : vue.createCommentVNode("v-if", true) ], true), _ctx.borderBottom ? (vue.openBlock(), vue.createBlock(_component_u_line, { key: 0, color: $data.message && $data.parentData.errorType === "border-bottom" ? _ctx.$u.color.error : $options.propsLine.color, customStyle: `margin-top: ${$data.message && $data.parentData.errorType === "message" ? "5px" : 0}` }, null, 8, ["color", "customStyle"])) : vue.createCommentVNode("v-if", true) ]); } const __easycom_1$a = /* @__PURE__ */ _export_sfc(_sfc_main$20, [["render", _sfc_render$1$], ["__scopeId", "data-v-42bac3de"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-form-item/u-form-item.vue"]]); const props$z = { props: { // 是否显示组件 show: { type: Boolean, default: props$E.loadingIcon.show }, // 颜色 color: { type: String, default: props$E.loadingIcon.color }, // 提示文字颜色 textColor: { type: String, default: props$E.loadingIcon.textColor }, // 文字和图标是否垂直排列 vertical: { type: Boolean, default: props$E.loadingIcon.vertical }, // 模式选择,circle-圆形,spinner-花朵形,semicircle-半圆形 mode: { type: String, default: props$E.loadingIcon.mode }, // 图标大小,单位默认px size: { type: [String, Number], default: props$E.loadingIcon.size }, // 文字大小 textSize: { type: [String, Number], default: props$E.loadingIcon.textSize }, // 文字内容 text: { type: [String, Number], default: props$E.loadingIcon.text }, // 动画模式 timingFunction: { type: String, default: props$E.loadingIcon.timingFunction }, // 动画执行周期时间 duration: { type: [String, Number], default: props$E.loadingIcon.duration }, // mode=circle时的暗边颜色 inactiveColor: { type: String, default: props$E.loadingIcon.inactiveColor } } }; const _sfc_main$1$ = { name: "u-loading-icon", mixins: [mpMixin, mixin, props$z], 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(n) { } }, 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$1_(_ctx, _cache, $props, $setup, $data, $options) { return _ctx.show ? (vue.openBlock(), vue.createElementBlock( "view", { key: 0, class: vue.normalizeClass(["u-loading-icon", [_ctx.vertical && "u-loading-icon--vertical"]]), style: vue.normalizeStyle([_ctx.$u.addStyle(_ctx.customStyle)]) }, [ !$data.webviewHide ? (vue.openBlock(), vue.createElementBlock( "view", { key: 0, class: vue.normalizeClass(["u-loading-icon__spinner", [`u-loading-icon__spinner--${_ctx.mode}`]]), ref: "ani", style: vue.normalizeStyle({ color: _ctx.color, width: _ctx.$u.addUnit(_ctx.size), height: _ctx.$u.addUnit(_ctx.size), borderTopColor: _ctx.color, borderBottomColor: $options.otherBorderColor, borderLeftColor: $options.otherBorderColor, borderRightColor: $options.otherBorderColor, "animation-duration": `${_ctx.duration}ms`, "animation-timing-function": _ctx.mode === "semicircle" || _ctx.mode === "circle" ? _ctx.timingFunction : "" }) }, [ _ctx.mode === "spinner" ? (vue.openBlock(true), vue.createElementBlock( vue.Fragment, { key: 0 }, vue.renderList($data.array12, (item, index2) => { return vue.openBlock(), vue.createElementBlock("view", { key: index2, class: "u-loading-icon__dot" }); }), 128 /* KEYED_FRAGMENT */ )) : vue.createCommentVNode("v-if", true) ], 6 /* CLASS, STYLE */ )) : vue.createCommentVNode("v-if", true), _ctx.text ? (vue.openBlock(), vue.createElementBlock( "text", { key: 1, class: "u-loading-icon__text", style: vue.normalizeStyle({ fontSize: _ctx.$u.addUnit(_ctx.textSize), color: _ctx.textColor }) }, vue.toDisplayString(_ctx.text), 5 /* TEXT, STYLE */ )) : vue.createCommentVNode("v-if", true) ], 6 /* CLASS, STYLE */ )) : vue.createCommentVNode("v-if", true); } const __easycom_0$d = /* @__PURE__ */ _export_sfc(_sfc_main$1$, [["render", _sfc_render$1_], ["__scopeId", "data-v-2af81691"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-loading-icon/u-loading-icon.vue"]]); const props$y = { props: { // 是否细边框 hairline: { type: Boolean, default: props$E.button.hairline }, // 按钮的预置样式,info,primary,error,warning,success type: { type: String, default: props$E.button.type }, // 按钮尺寸,large,normal,small,mini size: { type: String, default: props$E.button.size }, // 按钮形状,circle(两边为半圆),square(带圆角) shape: { type: String, default: props$E.button.shape }, // 按钮是否镂空 plain: { type: Boolean, default: props$E.button.plain }, // 是否禁止状态 disabled: { type: Boolean, default: props$E.button.disabled }, // 是否加载中 loading: { type: Boolean, default: props$E.button.loading }, // 加载中提示文字 loadingText: { type: [String, Number], default: props$E.button.loadingText }, // 加载状态图标类型 loadingMode: { type: String, default: props$E.button.loadingMode }, // 加载图标大小 loadingSize: { type: [String, Number], default: props$E.button.loadingSize }, // 开放能力,具体请看uniapp稳定关于button组件部分说明 // https://uniapp.dcloud.io/component/button openType: { type: String, default: props$E.button.openType }, // 用于
组件,点击分别会触发 组件的 submit/reset 事件 // 取值为submit(提交表单),reset(重置表单) formType: { type: String, default: props$E.button.formType }, // 打开 APP 时,向 APP 传递的参数,open-type=launchApp时有效 // 只微信小程序、QQ小程序有效 appParameter: { type: String, default: props$E.button.appParameter }, // 指定是否阻止本节点的祖先节点出现点击态,微信小程序有效 hoverStopPropagation: { type: Boolean, default: props$E.button.hoverStopPropagation }, // 指定返回用户信息的语言,zh_CN 简体中文,zh_TW 繁体中文,en 英文。只微信小程序有效 lang: { type: String, default: props$E.button.lang }, // 会话来源,open-type="contact"时有效。只微信小程序有效 sessionFrom: { type: String, default: props$E.button.sessionFrom }, // 会话内消息卡片标题,open-type="contact"时有效 // 默认当前标题,只微信小程序有效 sendMessageTitle: { type: String, default: props$E.button.sendMessageTitle }, // 会话内消息卡片点击跳转小程序路径,open-type="contact"时有效 // 默认当前分享路径,只微信小程序有效 sendMessagePath: { type: String, default: props$E.button.sendMessagePath }, // 会话内消息卡片图片,open-type="contact"时有效 // 默认当前页面截图,只微信小程序有效 sendMessageImg: { type: String, default: props$E.button.sendMessageImg }, // 是否显示会话内消息卡片,设置此参数为 true,用户进入客服会话会在右下角显示"可能要发送的小程序"提示, // 用户点击后可以快速发送小程序消息,open-type="contact"时有效 showMessageCard: { type: Boolean, default: props$E.button.showMessageCard }, // 额外传参参数,用于小程序的data-xxx属性,通过target.dataset.name获取 dataName: { type: String, default: props$E.button.dataName }, // 节流,一定时间内只能触发一次 throttleTime: { type: [String, Number], default: props$E.button.throttleTime }, // 按住后多久出现点击态,单位毫秒 hoverStartTime: { type: [String, Number], default: props$E.button.hoverStartTime }, // 手指松开后点击态保留时间,单位毫秒 hoverStayTime: { type: [String, Number], default: props$E.button.hoverStayTime }, // 按钮文字,之所以通过props传入,是因为slot传入的话 // nvue中无法控制文字的样式 text: { type: [String, Number], default: props$E.button.text }, // 按钮图标 icon: { type: String, default: props$E.button.icon }, // 按钮图标 iconColor: { type: String, default: props$E.button.icon }, // 按钮颜色,支持传入linear-gradient渐变色 color: { type: String, default: props$E.button.color } } }; const _sfc_main$1_ = { name: "u-button", mixins: [mpMixin, mixin, props$y], data() { return {}; }, computed: { // 生成bem风格的类名 bemClass() { if (!this.color) { return this.bem( "button", ["type", "shape", "size"], ["disabled", "plain", "hairline"] ); } else { return this.bem( "button", ["shape", "size"], ["disabled", "plain", "hairline"] ); } }, loadingColor() { if (this.plain) { return this.color ? this.color : uni.$u.config.color[`u-${this.type}`]; } if (this.type === "info") { return "#c9c9c9"; } return "rgb(200, 200, 200)"; }, iconColorCom() { if (this.iconColor) return this.iconColor; if (this.plain) { return this.color ? this.color : this.type; } else { return this.type === "info" ? "#000000" : "#ffffff"; } }, baseColor() { let style = {}; if (this.color) { style.color = this.plain ? this.color : "white"; if (!this.plain) { style["background-color"] = this.color; } if (this.color.indexOf("gradient") !== -1) { style.borderTopWidth = 0; style.borderRightWidth = 0; style.borderBottomWidth = 0; style.borderLeftWidth = 0; if (!this.plain) { style.backgroundImage = this.color; } } else { style.borderColor = this.color; style.borderWidth = "1px"; style.borderStyle = "solid"; } } return style; }, // nvue版本按钮的字体不会继承父组件的颜色,需要对每一个text组件进行单独的设置 nvueTextStyle() { let style = {}; if (this.type === "info") { style.color = "#323233"; } if (this.color) { style.color = this.plain ? this.color : "white"; } style.fontSize = this.textSize + "px"; return style; }, // 字体大小 textSize() { let fontSize = 16, { size } = this; if (size === "large") fontSize = 20; if (size === "normal") fontSize = 16; if (size === "small") fontSize = 14; if (size === "mini") fontSize = 12; return fontSize; } }, emits: [ "click", "getphonenumber", "getuserinfo", "error", "opensetting", "launchapp" ], methods: { clickHandler() { if (!this.disabled && !this.loading) { uni.$u.throttle(() => { this.$emit("click"); }, this.throttleTime); } }, // 下面为对接uniapp官方按钮开放能力事件回调的对接 getphonenumber(res2) { this.$emit("getphonenumber", res2); }, getuserinfo(res2) { this.$emit("getuserinfo", res2); }, error(res2) { this.$emit("error", res2); }, opensetting(res2) { this.$emit("opensetting", res2); }, launchapp(res2) { this.$emit("launchapp", res2); } } }; function _sfc_render$1Z(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_loading_icon = resolveEasycom(vue.resolveDynamicComponent("u-loading-icon"), __easycom_0$d); const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); return vue.openBlock(), vue.createElementBlock("button", { "hover-start-time": Number(_ctx.hoverStartTime), "hover-stay-time": Number(_ctx.hoverStayTime), "form-type": _ctx.formType, "open-type": _ctx.openType, "app-parameter": _ctx.appParameter, "hover-stop-propagation": _ctx.hoverStopPropagation, "send-message-title": _ctx.sendMessageTitle, "send-message-path": _ctx.sendMessagePath, lang: _ctx.lang, "data-name": _ctx.dataName, "session-from": _ctx.sessionFrom, "send-message-img": _ctx.sendMessageImg, "show-message-card": _ctx.showMessageCard, onGetphonenumber: _cache[0] || (_cache[0] = (...args) => $options.getphonenumber && $options.getphonenumber(...args)), onGetuserinfo: _cache[1] || (_cache[1] = (...args) => $options.getuserinfo && $options.getuserinfo(...args)), onError: _cache[2] || (_cache[2] = (...args) => $options.error && $options.error(...args)), onOpensetting: _cache[3] || (_cache[3] = (...args) => $options.opensetting && $options.opensetting(...args)), onLaunchapp: _cache[4] || (_cache[4] = (...args) => $options.launchapp && $options.launchapp(...args)), "hover-class": !_ctx.disabled && !_ctx.loading ? "u-button--active" : "", class: vue.normalizeClass(["u-button u-reset-button", $options.bemClass]), style: vue.normalizeStyle([$options.baseColor, _ctx.$u.addStyle(_ctx.customStyle)]), onClick: _cache[5] || (_cache[5] = (...args) => $options.clickHandler && $options.clickHandler(...args)) }, [ _ctx.loading ? (vue.openBlock(), vue.createElementBlock( vue.Fragment, { key: 0 }, [ vue.createVNode(_component_u_loading_icon, { mode: _ctx.loadingMode, size: _ctx.loadingSize * 1.15, color: $options.loadingColor }, null, 8, ["mode", "size", "color"]), vue.createElementVNode( "text", { class: "u-button__loading-text", style: vue.normalizeStyle([{ fontSize: $options.textSize + "px" }]) }, vue.toDisplayString(_ctx.loadingText || _ctx.text), 5 /* TEXT, STYLE */ ) ], 64 /* STABLE_FRAGMENT */ )) : (vue.openBlock(), vue.createElementBlock( vue.Fragment, { key: 1 }, [ _ctx.icon ? (vue.openBlock(), vue.createBlock(_component_u_icon, { key: 0, name: _ctx.icon, color: $options.iconColorCom, size: $options.textSize * 1.35, customStyle: { marginRight: "2px" } }, null, 8, ["name", "color", "size"])) : vue.createCommentVNode("v-if", true), vue.renderSlot(_ctx.$slots, "default", {}, () => [ vue.createElementVNode( "text", { class: "u-button__text", style: vue.normalizeStyle([{ fontSize: $options.textSize + "px" }]) }, vue.toDisplayString(_ctx.text), 5 /* TEXT, STYLE */ ) ], true) ], 64 /* STABLE_FRAGMENT */ )) ], 46, ["hover-start-time", "hover-stay-time", "form-type", "open-type", "app-parameter", "hover-stop-propagation", "send-message-title", "send-message-path", "lang", "data-name", "session-from", "send-message-img", "show-message-card", "hover-class"]); } const __easycom_3$6 = /* @__PURE__ */ _export_sfc(_sfc_main$1_, [["render", _sfc_render$1Z], ["__scopeId", "data-v-5ce41ee6"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-button/u-button.vue"]]); const props$x = { props: { // 当前form的需要验证字段的集合 model: { type: Object, default: props$E.form.model }, // 验证规则 rules: { type: [Object, Function, Array], default: props$E.form.rules }, // 有错误时的提示方式,message-提示信息,toast-进行toast提示 // border-bottom-下边框呈现红色,none-无提示 errorType: { type: String, default: props$E.form.errorType }, // 是否显示表单域的下划线边框 borderBottom: { type: Boolean, default: props$E.form.borderBottom }, // label的位置,left-左边,top-上边 labelPosition: { type: String, default: props$E.form.labelPosition }, // label的宽度,单位px labelWidth: { type: [String, Number], default: props$E.form.labelWidth }, // lable字体的对齐方式 labelAlign: { type: String, default: props$E.form.labelAlign }, // lable的样式,对象形式 labelStyle: { type: Object, default: props$E.form.labelStyle } } }; var define_process_env_default = {}; const formatRegExp = /%[sdj%]/g; let warning = function warning2() { }; if (typeof process !== "undefined" && define_process_env_default && true && typeof window !== "undefined" && typeof document !== "undefined") { warning = function warning3(type2, errors) { if (typeof console !== "undefined" && console.warn) { if (errors.every((e) => typeof e === "string")) { formatAppLog("warn", "at uni_modules/uview-plus/libs/util/async-validator.js:28", type2, errors); } } }; } function convertFieldsError(errors) { if (!errors || !errors.length) return null; const fields = {}; errors.forEach((error2) => { const { field } = error2; fields[field] = fields[field] || []; fields[field].push(error2); }); return fields; } function format() { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } let i = 1; const f = args[0]; const len = args.length; if (typeof f === "function") { return f.apply(null, args.slice(1)); } if (typeof f === "string") { let str = String(f).replace(formatRegExp, (x) => { if (x === "%%") { return "%"; } if (i >= len) { return x; } switch (x) { case "%s": return String(args[i++]); case "%d": return Number(args[i++]); case "%j": try { return JSON.stringify(args[i++]); } catch (_) { return "[Circular]"; } break; default: return x; } }); for (let arg = args[i]; i < len; arg = args[++i]) { str += ` ${arg}`; } return str; } return f; } function isNativeStringType(type2) { return type2 === "string" || type2 === "url" || type2 === "hex" || type2 === "email" || type2 === "pattern"; } function isEmptyValue(value2, type2) { if (value2 === void 0 || value2 === null) { return true; } if (type2 === "array" && Array.isArray(value2) && !value2.length) { return true; } if (isNativeStringType(type2) && typeof value2 === "string" && !value2) { return true; } return false; } function asyncParallelArray(arr, func2, callback) { const results = []; let total = 0; const arrLength = arr.length; function count(errors) { results.push.apply(results, errors); total++; if (total === arrLength) { callback(results); } } arr.forEach((a) => { func2(a, count); }); } function asyncSerialArray(arr, func2, callback) { let index2 = 0; const arrLength = arr.length; function next(errors) { if (errors && errors.length) { callback(errors); return; } const original = index2; index2 += 1; if (original < arrLength) { func2(arr[original], next); } else { callback([]); } } next([]); } function flattenObjArr(objArr) { const ret = []; Object.keys(objArr).forEach((k) => { ret.push.apply(ret, objArr[k]); }); return ret; } function asyncMap(objArr, option, func2, callback) { if (option.first) { const _pending = new Promise((resolve, reject) => { const next = function next2(errors) { callback(errors); return errors.length ? reject({ errors, fields: convertFieldsError(errors) }) : resolve(); }; const flattenArr = flattenObjArr(objArr); asyncSerialArray(flattenArr, func2, next); }); _pending.catch((e) => e); return _pending; } let firstFields = option.firstFields || []; if (firstFields === true) { firstFields = Object.keys(objArr); } const objArrKeys = Object.keys(objArr); const objArrLength = objArrKeys.length; let total = 0; const results = []; const pending = new Promise((resolve, reject) => { const next = function next2(errors) { results.push.apply(results, errors); total++; if (total === objArrLength) { callback(results); return results.length ? reject({ errors: results, fields: convertFieldsError(results) }) : resolve(); } }; if (!objArrKeys.length) { callback(results); resolve(); } objArrKeys.forEach((key) => { const arr = objArr[key]; if (firstFields.indexOf(key) !== -1) { asyncSerialArray(arr, func2, next); } else { asyncParallelArray(arr, func2, next); } }); }); pending.catch((e) => e); return pending; } function complementError(rule) { return function(oe) { if (oe && oe.message) { oe.field = oe.field || rule.fullField; return oe; } return { message: typeof oe === "function" ? oe() : oe, field: oe.field || rule.fullField }; }; } function deepMerge$2(target, source) { if (source) { for (const s in source) { if (source.hasOwnProperty(s)) { const value2 = source[s]; if (typeof value2 === "object" && typeof target[s] === "object") { target[s] = { ...target[s], ...value2 }; } else { target[s] = value2; } } } } return target; } function required(rule, value2, source, errors, options, type2) { if (rule.required && (!source.hasOwnProperty(rule.field) || isEmptyValue(value2, type2 || rule.type))) { errors.push(format(options.messages.required, rule.fullField)); } } function whitespace(rule, value2, source, errors, options) { if (/^\s+$/.test(value2) || value2 === "") { errors.push(format(options.messages.whitespace, rule.fullField)); } } const pattern = { // http://emailregex.com/ email: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, url: new RegExp( "^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$", "i" ), hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i }; var types = { integer: function integer(value2) { return /^(-)?\d+$/.test(value2); }, float: function float(value2) { return /^(-)?\d+(\.\d+)?$/.test(value2); }, array: function array3(value2) { return Array.isArray(value2); }, regexp: function regexp(value2) { if (value2 instanceof RegExp) { return true; } try { return !!new RegExp(value2); } catch (e) { return false; } }, date: function date3(value2) { return typeof value2.getTime === "function" && typeof value2.getMonth === "function" && typeof value2.getYear === "function"; }, number: function number3(value2) { if (isNaN(value2)) { return false; } return typeof +value2 === "number"; }, object: function object3(value2) { return typeof value2 === "object" && !types.array(value2); }, method: function method(value2) { return typeof value2 === "function"; }, email: function email2(value2) { return typeof value2 === "string" && !!value2.match(pattern.email) && value2.length < 255; }, url: function url2(value2) { return typeof value2 === "string" && !!value2.match(pattern.url); }, hex: function hex(value2) { return typeof value2 === "string" && !!value2.match(pattern.hex); } }; function type(rule, value2, source, errors, options) { if (rule.required && value2 === void 0) { required(rule, value2, source, errors, options); return; } const custom = ["integer", "float", "array", "regexp", "object", "method", "email", "number", "date", "url", "hex"]; const ruleType = rule.type; if (custom.indexOf(ruleType) > -1) { if (!types[ruleType](value2)) { errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type)); } } else if (ruleType && typeof value2 !== rule.type) { errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type)); } } function range$2(rule, value2, source, errors, options) { const len = typeof rule.len === "number"; const min = typeof rule.min === "number"; const max = typeof rule.max === "number"; const spRegexp = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; let val = value2; let key = null; const num = typeof value2 === "number"; const str = typeof value2 === "string"; const arr = Array.isArray(value2); if (num) { key = "number"; } else if (str) { key = "string"; } else if (arr) { key = "array"; } if (!key) { return false; } if (arr) { val = value2.length; } if (str) { val = value2.replace(spRegexp, "_").length; } if (len) { if (val !== rule.len) { errors.push(format(options.messages[key].len, rule.fullField, rule.len)); } } else if (min && !max && val < rule.min) { errors.push(format(options.messages[key].min, rule.fullField, rule.min)); } else if (max && !min && val > rule.max) { errors.push(format(options.messages[key].max, rule.fullField, rule.max)); } else if (min && max && (val < rule.min || val > rule.max)) { errors.push(format(options.messages[key].range, rule.fullField, rule.min, rule.max)); } } const ENUM = "enum"; function enumerable(rule, value2, source, errors, options) { rule[ENUM] = Array.isArray(rule[ENUM]) ? rule[ENUM] : []; if (rule[ENUM].indexOf(value2) === -1) { errors.push(format(options.messages[ENUM], rule.fullField, rule[ENUM].join(", "))); } } function pattern$1(rule, value2, source, errors, options) { if (rule.pattern) { if (rule.pattern instanceof RegExp) { rule.pattern.lastIndex = 0; if (!rule.pattern.test(value2)) { errors.push(format(options.messages.pattern.mismatch, rule.fullField, value2, rule.pattern)); } } else if (typeof rule.pattern === "string") { const _pattern = new RegExp(rule.pattern); if (!_pattern.test(value2)) { errors.push(format(options.messages.pattern.mismatch, rule.fullField, value2, rule.pattern)); } } } } const rules = { required, whitespace, type, range: range$2, enum: enumerable, pattern: pattern$1 }; function string$1(rule, value2, callback, source, options) { const errors = []; const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field); if (validate2) { if (isEmptyValue(value2, "string") && !rule.required) { return callback(); } rules.required(rule, value2, source, errors, options, "string"); if (!isEmptyValue(value2, "string")) { rules.type(rule, value2, source, errors, options); rules.range(rule, value2, source, errors, options); rules.pattern(rule, value2, source, errors, options); if (rule.whitespace === true) { rules.whitespace(rule, value2, source, errors, options); } } } callback(errors); } function method2(rule, value2, callback, source, options) { const errors = []; const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field); if (validate2) { if (isEmptyValue(value2) && !rule.required) { return callback(); } rules.required(rule, value2, source, errors, options); if (value2 !== void 0) { rules.type(rule, value2, source, errors, options); } } callback(errors); } function number2(rule, value2, callback, source, options) { const errors = []; const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field); if (validate2) { if (value2 === "") { value2 = void 0; } if (isEmptyValue(value2) && !rule.required) { return callback(); } rules.required(rule, value2, source, errors, options); if (value2 !== void 0) { rules.type(rule, value2, source, errors, options); rules.range(rule, value2, source, errors, options); } } callback(errors); } function _boolean(rule, value2, callback, source, options) { const errors = []; const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field); if (validate2) { if (isEmptyValue(value2) && !rule.required) { return callback(); } rules.required(rule, value2, source, errors, options); if (value2 !== void 0) { rules.type(rule, value2, source, errors, options); } } callback(errors); } function regexp2(rule, value2, callback, source, options) { const errors = []; const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field); if (validate2) { if (isEmptyValue(value2) && !rule.required) { return callback(); } rules.required(rule, value2, source, errors, options); if (!isEmptyValue(value2)) { rules.type(rule, value2, source, errors, options); } } callback(errors); } function integer2(rule, value2, callback, source, options) { const errors = []; const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field); if (validate2) { if (isEmptyValue(value2) && !rule.required) { return callback(); } rules.required(rule, value2, source, errors, options); if (value2 !== void 0) { rules.type(rule, value2, source, errors, options); rules.range(rule, value2, source, errors, options); } } callback(errors); } function floatFn(rule, value2, callback, source, options) { const errors = []; const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field); if (validate2) { if (isEmptyValue(value2) && !rule.required) { return callback(); } rules.required(rule, value2, source, errors, options); if (value2 !== void 0) { rules.type(rule, value2, source, errors, options); rules.range(rule, value2, source, errors, options); } } callback(errors); } function array2(rule, value2, callback, source, options) { const errors = []; const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field); if (validate2) { if (isEmptyValue(value2, "array") && !rule.required) { return callback(); } rules.required(rule, value2, source, errors, options, "array"); if (!isEmptyValue(value2, "array")) { rules.type(rule, value2, source, errors, options); rules.range(rule, value2, source, errors, options); } } callback(errors); } function object2(rule, value2, callback, source, options) { const errors = []; const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field); if (validate2) { if (isEmptyValue(value2) && !rule.required) { return callback(); } rules.required(rule, value2, source, errors, options); if (value2 !== void 0) { rules.type(rule, value2, source, errors, options); } } callback(errors); } const ENUM$1 = "enum"; function enumerable$1(rule, value2, callback, source, options) { const errors = []; const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field); if (validate2) { if (isEmptyValue(value2) && !rule.required) { return callback(); } rules.required(rule, value2, source, errors, options); if (value2 !== void 0) { rules[ENUM$1](rule, value2, source, errors, options); } } callback(errors); } function pattern$2(rule, value2, callback, source, options) { const errors = []; const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field); if (validate2) { if (isEmptyValue(value2, "string") && !rule.required) { return callback(); } rules.required(rule, value2, source, errors, options); if (!isEmptyValue(value2, "string")) { rules.pattern(rule, value2, source, errors, options); } } callback(errors); } function date2(rule, value2, callback, source, options) { const errors = []; const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field); if (validate2) { if (isEmptyValue(value2) && !rule.required) { return callback(); } rules.required(rule, value2, source, errors, options); if (!isEmptyValue(value2)) { let dateObject; if (typeof value2 === "number") { dateObject = new Date(value2); } else { dateObject = value2; } rules.type(rule, dateObject, source, errors, options); if (dateObject) { rules.range(rule, dateObject.getTime(), source, errors, options); } } } callback(errors); } function required$1(rule, value2, callback, source, options) { const errors = []; const type2 = Array.isArray(value2) ? "array" : typeof value2; rules.required(rule, value2, source, errors, options, type2); callback(errors); } function type$1(rule, value2, callback, source, options) { const ruleType = rule.type; const errors = []; const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field); if (validate2) { if (isEmptyValue(value2, ruleType) && !rule.required) { return callback(); } rules.required(rule, value2, source, errors, options, ruleType); if (!isEmptyValue(value2, ruleType)) { rules.type(rule, value2, source, errors, options); } } callback(errors); } function any(rule, value2, callback, source, options) { const errors = []; const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field); if (validate2) { if (isEmptyValue(value2) && !rule.required) { return callback(); } rules.required(rule, value2, source, errors, options); } callback(errors); } const validators = { string: string$1, method: method2, number: number2, boolean: _boolean, regexp: regexp2, integer: integer2, float: floatFn, array: array2, object: object2, enum: enumerable$1, pattern: pattern$2, date: date2, url: type$1, hex: type$1, email: type$1, required: required$1, any }; function newMessages() { return { default: "Validation error on field %s", required: "%s is required", enum: "%s must be one of %s", whitespace: "%s cannot be empty", date: { format: "%s date %s is invalid for format %s", parse: "%s date could not be parsed, %s is invalid ", invalid: "%s date %s is invalid" }, types: { string: "%s is not a %s", method: "%s is not a %s (function)", array: "%s is not an %s", object: "%s is not an %s", number: "%s is not a %s", date: "%s is not a %s", boolean: "%s is not a %s", integer: "%s is not an %s", float: "%s is not a %s", regexp: "%s is not a valid %s", email: "%s is not a valid %s", url: "%s is not a valid %s", hex: "%s is not a valid %s" }, string: { len: "%s must be exactly %s characters", min: "%s must be at least %s characters", max: "%s cannot be longer than %s characters", range: "%s must be between %s and %s characters" }, number: { len: "%s must equal %s", min: "%s cannot be less than %s", max: "%s cannot be greater than %s", range: "%s must be between %s and %s" }, array: { len: "%s must be exactly %s in length", min: "%s cannot be less than %s in length", max: "%s cannot be greater than %s in length", range: "%s must be between %s and %s in length" }, pattern: { mismatch: "%s value %s does not match pattern %s" }, clone: function clone2() { const cloned = JSON.parse(JSON.stringify(this)); cloned.clone = this.clone; return cloned; } }; } const messages = newMessages(); function Schema(descriptor) { this.rules = null; this._messages = messages; this.define(descriptor); } Schema.prototype = { messages: function messages2(_messages) { if (_messages) { this._messages = deepMerge$2(newMessages(), _messages); } return this._messages; }, define: function define(rules2) { if (!rules2) { throw new Error("Cannot configure a schema with no rules"); } if (typeof rules2 !== "object" || Array.isArray(rules2)) { throw new Error("Rules must be an object"); } this.rules = {}; let z; let item; for (z in rules2) { if (rules2.hasOwnProperty(z)) { item = rules2[z]; this.rules[z] = Array.isArray(item) ? item : [item]; } } }, validate: function validate(source_, o, oc) { const _this = this; if (o === void 0) { o = {}; } if (oc === void 0) { oc = function oc2() { }; } let source = source_; let options = o; let callback = oc; if (typeof options === "function") { callback = options; options = {}; } if (!this.rules || Object.keys(this.rules).length === 0) { if (callback) { callback(); } return Promise.resolve(); } function complete(results) { let i; let errors = []; let fields = {}; function add(e) { if (Array.isArray(e)) { let _errors; errors = (_errors = errors).concat.apply(_errors, e); } else { errors.push(e); } } for (i = 0; i < results.length; i++) { add(results[i]); } if (!errors.length) { errors = null; fields = null; } else { fields = convertFieldsError(errors); } callback(errors, fields); } if (options.messages) { let messages$1 = this.messages(); if (messages$1 === messages) { messages$1 = newMessages(); } deepMerge$2(messages$1, options.messages); options.messages = messages$1; } else { options.messages = this.messages(); } let arr; let value2; const series = {}; const keys = options.keys || Object.keys(this.rules); keys.forEach((z) => { arr = _this.rules[z]; value2 = source[z]; arr.forEach((r) => { let rule = r; if (typeof rule.transform === "function") { if (source === source_) { source = { ...source }; } value2 = source[z] = rule.transform(value2); } if (typeof rule === "function") { rule = { validator: rule }; } else { rule = { ...rule }; } rule.validator = _this.getValidationMethod(rule); rule.field = z; rule.fullField = rule.fullField || z; rule.type = _this.getType(rule); if (!rule.validator) { return; } series[z] = series[z] || []; series[z].push({ rule, value: value2, source, field: z }); }); }); const errorFields = {}; return asyncMap(series, options, (data, doIt) => { const { rule } = data; let deep = (rule.type === "object" || rule.type === "array") && (typeof rule.fields === "object" || typeof rule.defaultField === "object"); deep = deep && (rule.required || !rule.required && data.value); rule.field = data.field; function addFullfield(key, schema) { return { ...schema, fullField: `${rule.fullField}.${key}` }; } function cb(e) { if (e === void 0) { e = []; } let errors = e; if (!Array.isArray(errors)) { errors = [errors]; } if (!options.suppressWarning && errors.length) { Schema.warning("async-validator:", errors); } if (errors.length && rule.message) { errors = [].concat(rule.message); } errors = errors.map(complementError(rule)); if (options.first && errors.length) { errorFields[rule.field] = 1; return doIt(errors); } if (!deep) { doIt(errors); } else { if (rule.required && !data.value) { if (rule.message) { errors = [].concat(rule.message).map(complementError(rule)); } else if (options.error) { errors = [options.error(rule, format(options.messages.required, rule.field))]; } else { errors = []; } return doIt(errors); } let fieldsSchema = {}; if (rule.defaultField) { for (const k in data.value) { if (data.value.hasOwnProperty(k)) { fieldsSchema[k] = rule.defaultField; } } } fieldsSchema = { ...fieldsSchema, ...data.rule.fields }; for (const f in fieldsSchema) { if (fieldsSchema.hasOwnProperty(f)) { const fieldSchema = Array.isArray(fieldsSchema[f]) ? fieldsSchema[f] : [fieldsSchema[f]]; fieldsSchema[f] = fieldSchema.map(addFullfield.bind(null, f)); } } const schema = new Schema(fieldsSchema); schema.messages(options.messages); if (data.rule.options) { data.rule.options.messages = options.messages; data.rule.options.error = options.error; } schema.validate(data.value, data.rule.options || options, (errs) => { const finalErrors = []; if (errors && errors.length) { finalErrors.push.apply(finalErrors, errors); } if (errs && errs.length) { finalErrors.push.apply(finalErrors, errs); } doIt(finalErrors.length ? finalErrors : null); }); } } let res2; if (rule.asyncValidator) { res2 = rule.asyncValidator(rule, data.value, cb, data.source, options); } else if (rule.validator) { res2 = rule.validator(rule, data.value, cb, data.source, options); if (res2 === true) { cb(); } else if (res2 === false) { cb(rule.message || `${rule.field} fails`); } else if (res2 instanceof Array) { cb(res2); } else if (res2 instanceof Error) { cb(res2.message); } } if (res2 && res2.then) { res2.then(() => cb(), (e) => cb(e)); } }, (results) => { complete(results); }); }, getType: function getType(rule) { if (rule.type === void 0 && rule.pattern instanceof RegExp) { rule.type = "pattern"; } if (typeof rule.validator !== "function" && rule.type && !validators.hasOwnProperty(rule.type)) { throw new Error(format("Unknown rule type %s", rule.type)); } return rule.type || "string"; }, getValidationMethod: function getValidationMethod(rule) { if (typeof rule.validator === "function") { return rule.validator; } const keys = Object.keys(rule); const messageIndex = keys.indexOf("message"); if (messageIndex !== -1) { keys.splice(messageIndex, 1); } if (keys.length === 1 && keys[0] === "required") { return validators.required; } return validators[this.getType(rule)] || false; } }; Schema.register = function register(type2, validator) { if (typeof validator !== "function") { throw new Error("Cannot register a validator by type, validator is not a function"); } validators[type2] = validator; }; Schema.warning = warning; Schema.messages = messages; Schema.warning = function() { }; const _sfc_main$1Z = { name: "u-form", mixins: [mpMixin, mixin, props$x], provide() { return { uForm: this }; }, data() { return { formRules: {}, // 规则校验器 validator: {}, // 原始的model快照,用于resetFields方法重置表单时使用 originalModel: null }; }, watch: { // 监听规则的变化 rules: { immediate: true, handler(n) { this.setRules(n); } }, // 监听属性的变化,通知子组件u-form-item重新获取信息 propsChange(n) { var _a; if ((_a = this.children) == null ? void 0 : _a.length) { this.children.map((child) => { typeof child.updateParentData == "function" && child.updateParentData(); }); } }, // 监听model的初始值作为重置表单的快照 model: { immediate: true, handler(n) { if (!this.originalModel) { this.originalModel = uni.$u.deepClone(n); } } } }, computed: { propsChange() { return [ this.errorType, this.borderBottom, this.labelPosition, this.labelWidth, this.labelAlign, this.labelStyle ]; } }, created() { this.children = []; }, methods: { // 手动设置校验的规则,如果规则中有函数的话,微信小程序中会过滤掉,所以只能手动调用设置规则 setRules(rules2) { if (Object.keys(rules2).length === 0) return; if (Object.keys(this.model).length === 0) { uni.$u.error("设置rules,model必须设置!如果已经设置,请刷新页面。"); return; } this.formRules = rules2; this.validator = new Schema(rules2); }, // 清空所有u-form-item组件的内容,本质上是调用了u-form-item组件中的resetField()方法 resetFields() { this.resetModel(); }, // 重置model为初始值的快照 resetModel(obj) { this.children.map((child) => { const prop = child == null ? void 0 : child.prop; const value2 = uni.$u.getProperty(this.originalModel, prop); uni.$u.setProperty(this.model, prop, value2); }); }, // 清空校验结果 clearValidate(props2) { props2 = [].concat(props2); this.children.map((child) => { if (props2[0] === void 0 || props2.includes(child.prop)) { child.message = null; } }); }, // 对部分表单字段进行校验 async validateField(value2, callback, event = null) { this.$nextTick(() => { const errorsRes = []; value2 = [].concat(value2); this.children.map((child) => { const childErrors = []; if (value2.includes(child.prop)) { const propertyVal = uni.$u.getProperty( this.model, child.prop ); const propertyChain = child.prop.split("."); const propertyName = propertyChain[propertyChain.length - 1]; const rule = this.formRules[child.prop]; if (!rule) return; const rules2 = [].concat(rule); for (let i = 0; i < rules2.length; i++) { const ruleItem = rules2[i]; const trigger = [].concat(ruleItem == null ? void 0 : ruleItem.trigger); if (event && !trigger.includes(event)) continue; const validator = new Schema({ [propertyName]: ruleItem }); validator.validate( { [propertyName]: propertyVal }, (errors, fields) => { var _a; if (uni.$u.test.array(errors)) { errorsRes.push(...errors); childErrors.push(...errors); } child.message = ((_a = childErrors[0]) == null ? void 0 : _a.message) ?? null; } ); } } }); typeof callback === "function" && callback(errorsRes); }); }, // 校验全部数据 validate(callback) { if (Object.keys(this.formRules).length === 0) { uni.$u.error("未设置rules,请看文档说明!如果已经设置,请刷新页面。"); return; } return new Promise((resolve, reject) => { this.$nextTick(() => { const formItemProps = this.children.map( (item) => item.prop ); this.validateField(formItemProps, (errors) => { if (errors.length) { this.errorType === "toast" && uni.$u.toast(errors[0].message); reject(errors); } else { resolve(true); } }); }); }); } } }; function _sfc_render$1Y(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "u-form" }, [ vue.renderSlot(_ctx.$slots, "default") ]); } const __easycom_2$7 = /* @__PURE__ */ _export_sfc(_sfc_main$1Z, [["render", _sfc_render$1Y], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-form/u-form.vue"]]); const _sfc_main$1Y = { name: "u--form", mixins: [mpMixin, props$x, mixin], components: { uvForm: __easycom_2$7 }, created() { this.children = []; }, methods: { // 手动设置校验的规则,如果规则中有函数的话,微信小程序中会过滤掉,所以只能手动调用设置规则 setRules(rules2) { this.$refs.uForm.setRules(rules2); }, validate() { return this.$refs.uForm.validate(); }, validateField(value2, callback) { return this.$refs.uForm.validateField(value2, callback); }, resetFields() { return this.$refs.uForm.resetFields(); }, clearValidate(props2) { return this.$refs.uForm.clearValidate(props2); }, setMpData() { this.$refs.uForm.children = this.children; } } }; function _sfc_render$1X(_ctx, _cache, $props, $setup, $data, $options) { const _component_uvForm = vue.resolveComponent("uvForm"); return vue.openBlock(), vue.createBlock(_component_uvForm, { ref: "uForm", model: _ctx.model, rules: _ctx.rules, errorType: _ctx.errorType, borderBottom: _ctx.borderBottom, labelPosition: _ctx.labelPosition, labelWidth: _ctx.labelWidth, labelAlign: _ctx.labelAlign, labelStyle: _ctx.labelStyle, customStyle: _ctx.customStyle }, { default: vue.withCtx(() => [ vue.renderSlot(_ctx.$slots, "default") ]), _: 3 /* FORWARDED */ }, 8, ["model", "rules", "errorType", "borderBottom", "labelPosition", "labelWidth", "labelAlign", "labelStyle", "customStyle"]); } const __easycom_2$6 = /* @__PURE__ */ _export_sfc(_sfc_main$1Y, [["render", _sfc_render$1X], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u--form/u--form.vue"]]); const _imports_0$2 = "/static/img/logo.png"; const prefixIconStyle = "font-size:50rpx"; const placeholderStyle$3 = "font-size:32rpx"; const _sfc_main$1X = { __name: "login", setup(__props, { expose: __expose }) { __expose(); const customStyle = vue.reactive({ "font-size": "40rpx", height: "90rpx" }); let { proxy } = vue.getCurrentInstance(); const formData = vue.reactive({ username: "", password: "", code: "" }); const uForm = vue.ref(null); const isCountingDown = vue.ref(false); const countdown = vue.ref(60); const countDownText = vue.ref("获取验证码"); const startCountDown = () => { isCountingDown.value = true; countdown.value = 60; countDownText.value = `${countdown.value}秒重发`; const timer = setInterval(() => { countdown.value--; countDownText.value = `${countdown.value}秒重发`; if (countdown.value <= 0) { clearInterval(timer); isCountingDown.value = false; countDownText.value = "重新发送"; } }, 1e3); }; const getVerifyCode = () => { if (isCountingDown.value) return; if (!formData.username) return uni.$u.toast("请输入用户名"); if (!formData.password) return uni.$u.toast("请输入密码"); let data = { username: formData.username, password: formData.password }; uni.showLoading({ mask: true, title: "发送中..." }); uni.$u.http.post("/app/appUser/sendMobileCode", data).then((res2) => { if (res2.code == 200) { uni.showToast({ title: "验证码发送成功,请注意查收", icon: "none" }); startCountDown(); } else { uni.$u.toast(res2.msg); } }).finally(() => uni.hideLoading()); }; const handleLogin = () => { if (!formData.username) return uni.$u.toast("请输入用户名"); if (!formData.password) return uni.$u.toast("请输入密码"); uni.showLoading({ mask: true, title: "登录中..." }); uni.$u.http.post("/actuator/debug/loginNotCode", formData).then((res2) => { if (res2.code == 200) { uni.$u.toast("登录成功"); uni.switchTab({ url: "/pages/index/index" }); formatAppLog("log", "at pages/login/login.vue:137", res2, "xxxxx"); uni.setStorageSync("token", res2.data); getUserInfo(); uni.$u.ttsModule.speak("书嗨,不辜负每一个爱书的人"); } else { uni.$u.toast(res2.msg); } }).finally(() => uni.hideLoading()); }; function getUserInfo() { uni.$u.http.get("/app/appUser/getUserInfoById").then((res2) => { if (res2.code == 200) { uni.setStorageSync("userInfo", res2.data); } }); } function checkToken() { uni.showLoading({ title: "检测登录状态..." }); uni.$u.http.get("/app/appUser/checkToken").then((res2) => { if (res2.code == 200) { uni.$u.toast("登录成功"); uni.switchTab({ url: "/pages/index/index" }); } else { uni.$u.toast("请先登录"); } }).finally(() => uni.hideLoading()); } onLoad(() => { let token = uni.getStorageSync("token"); if (token) { checkToken(); } }); const __returned__ = { prefixIconStyle, placeholderStyle: placeholderStyle$3, customStyle, get proxy() { return proxy; }, set proxy(v) { proxy = v; }, formData, uForm, isCountingDown, countdown, countDownText, startCountDown, getVerifyCode, handleLogin, getUserInfo, checkToken, ref: vue.ref, reactive: vue.reactive, getCurrentInstance: vue.getCurrentInstance, get onLoad() { return onLoad; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$1W(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_input = resolveEasycom(vue.resolveDynamicComponent("u-input"), __easycom_0$f); const _component_u_form_item = resolveEasycom(vue.resolveDynamicComponent("u-form-item"), __easycom_1$a); const _component_u_button = resolveEasycom(vue.resolveDynamicComponent("u-button"), __easycom_3$6); const _component_u__form = resolveEasycom(vue.resolveDynamicComponent("u--form"), __easycom_2$6); return vue.openBlock(), vue.createElementBlock("view", { class: "login-container" }, [ vue.createCommentVNode(" Logo和标题区域 "), vue.createElementVNode("view", { class: "logo-section" }, [ vue.createElementVNode("image", { class: "logo", src: _imports_0$2, mode: "aspectFit" }) ]), vue.createCommentVNode(" 表单区域 "), vue.createElementVNode("view", { class: "form-section" }, [ vue.createVNode(_component_u__form, { model: $setup.formData, ref: "uForm" }, { default: vue.withCtx(() => [ vue.createVNode(_component_u_form_item, null, { default: vue.withCtx(() => [ vue.createVNode(_component_u_input, { prefixIconStyle: $setup.prefixIconStyle, "placeholder-style": $setup.placeholderStyle, "custom-style": $setup.customStyle, modelValue: $setup.formData.username, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.formData.username = $event), placeholder: "请输入用户名", prefixIcon: "account" }, null, 8, ["custom-style", "modelValue"]) ]), _: 1 /* STABLE */ }), vue.createVNode(_component_u_form_item, null, { default: vue.withCtx(() => [ vue.createVNode(_component_u_input, { prefixIconStyle: $setup.prefixIconStyle, "placeholder-style": $setup.placeholderStyle, "custom-style": $setup.customStyle, modelValue: $setup.formData.password, "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.formData.password = $event), type: "password", placeholder: "请输入密码", prefixIcon: "lock" }, null, 8, ["custom-style", "modelValue"]) ]), _: 1 /* STABLE */ }), vue.createVNode(_component_u_form_item, null, { default: vue.withCtx(() => [ vue.createVNode(_component_u_input, { prefixIconStyle: $setup.prefixIconStyle, "placeholder-style": $setup.placeholderStyle, "custom-style": $setup.customStyle, modelValue: $setup.formData.code, "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $setup.formData.code = $event), placeholder: "请输入验证码", prefixIcon: "chat" }, { suffix: vue.withCtx(() => [ vue.createVNode(_component_u_button, { "custom-style": "width:200rpx", color: "#22ac38", size: "small", onClick: $setup.getVerifyCode, disabled: $setup.isCountingDown }, { default: vue.withCtx(() => [ vue.createTextVNode( vue.toDisplayString($setup.countDownText), 1 /* TEXT */ ) ]), _: 1 /* STABLE */ }, 8, ["disabled"]) ]), _: 1 /* STABLE */ }, 8, ["custom-style", "modelValue"]) ]), _: 1 /* STABLE */ }) ]), _: 1 /* STABLE */ }, 8, ["model"]), vue.createVNode(_component_u_button, { "custom-style": "margin-top:5%", type: "primary", block: "", onClick: $setup.handleLogin, color: "#22ac38", shape: "circle" }, { default: vue.withCtx(() => [ vue.createTextVNode("登录") ]), _: 1 /* STABLE */ }) ]) ]); } const PagesLoginLogin = /* @__PURE__ */ _export_sfc(_sfc_main$1X, [["render", _sfc_render$1W], ["__scopeId", "data-v-e4e4508d"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/login/login.vue"]]); const _sfc_main$1W = { __name: "index", setup(__props, { expose: __expose }) { __expose(); const expressOperations = vue.ref([ { name: "中转\n\r签收", path: "/pages/index/express/transfer-sign", type: "primary" }, { name: "到仓\n\r签收", path: "/pages/index/express/warehouse-sign", type: "warning" }, { name: "重量\n\r修改", path: "/pages/index/express/weight-modify", type: "primary" }, { name: "快递\n\r验收", path: "/pages/index/express/quick-check", type: "warning" }, { name: "路由签收\n\r异常", path: "/pages/index/express/route-exception", type: "primary" }, { name: "快速\n\r拆包", path: "/pages/index/express/quick-unpack", type: "warning" } ]); const auditOperations = vue.ref([ { name: "确认\n\r收货", path: "/pages/index/audit/confirm-receipt", type: "primary" }, { name: "扫书\n\r查单", path: "/pages/index/audit/scan-order", type: "warning" }, { name: "根据快递单\n\r或订单", path: "/pages/index/audit/express-order", type: "warning" }, { name: "根据\n\r发件人", path: "/pages/index/audit/sender", type: "primary" } ]); const wmsOperations = vue.ref([ { name: "中等\n\r入库", path: "/pages/index/wms/medium-in", type: "primary" }, { name: "良品\n\r入库", path: "/pages/index/wms/good-in", type: "warning" }, { name: "次品\n\r入库", path: "/pages/index/wms/secondary-in", type: "primary" }, { name: "不良\n\r入库", path: "/pages/index/wms/bad-in", type: "warning" }, { name: "不良\n\r出库", path: "/pages/index/wms/bad-out", type: "primary" }, { name: "不良\n\r下架", path: "/pages/index/wms/bad-off", type: "warning" }, { name: "订单\n\r查询", path: "/pages/index/wms/order-query", type: "primary" }, { name: "库位\n\r订单", path: "/pages/index/wms/location-order", type: "warning" }, { name: "快速盘点", path: "/pages/index/wms/speedy-check", type: "primary", span: 24 } ]); const statisticsOperations = vue.ref([ { name: "审核统计", path: "/pages/index/statistic/audit", type: "warning", span: 24 }, { name: "售后\n\r统计", path: "/pages/index/statistic/after-sale", type: "primary" }, { name: "打包\n\r统计", path: "/pages/index/statistic/package", type: "warning" } ]); const offlineOperations = vue.ref([ { name: "线下\n\r核单", path: "/pages/index/offline/check-order", type: "primary" }, { name: "核单\n\r记录", path: "/pages/index/offline/check-record", type: "warning" } ]); const entryOperations = vue.ref([ { name: "扫码\n\r查书", path: "/pages/index/entry/scan-book", type: "primary" }, { name: "录入\n\r书籍重量", path: "/pages/index/entry/book-weight", type: "warning" } ]); const handleNavigation = (path) => { uni.navigateTo({ url: path, fail: () => { uni.showToast({ title: "页面跳转失败", icon: "none" }); } }); }; const __returned__ = { expressOperations, auditOperations, wmsOperations, statisticsOperations, offlineOperations, entryOperations, handleNavigation, ref: vue.ref }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$1V(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "operation-container" }, [ vue.createCommentVNode(" 快递操作区域 "), vue.createElementVNode("view", { class: "section" }, [ vue.createElementVNode("view", { class: "section-title" }, "快递"), vue.createElementVNode("view", { class: "grid-container" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.expressOperations, (item, index2) => { return vue.openBlock(), vue.createElementBlock("view", { key: index2, class: vue.normalizeClass(["grid-item", item.type]), onClick: ($event) => $setup.handleNavigation(item.path) }, vue.toDisplayString(item.name), 11, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ]) ]), vue.createCommentVNode(" 审核操作区域 "), vue.createElementVNode("view", { class: "section" }, [ vue.createElementVNode("view", { class: "section-title" }, "审核"), vue.createElementVNode("view", { class: "grid-container" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.auditOperations, (item, index2) => { return vue.openBlock(), vue.createElementBlock("view", { key: index2, class: vue.normalizeClass(["grid-item", item.type]), onClick: ($event) => $setup.handleNavigation(item.path) }, vue.toDisplayString(item.name), 11, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ]) ]), vue.createCommentVNode(" 统计操作区域 "), vue.createElementVNode("view", { class: "section" }, [ vue.createElementVNode("view", { class: "section-title" }, "统计"), vue.createElementVNode("view", { class: "grid-container" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.statisticsOperations, (item, index2) => { return vue.openBlock(), vue.createElementBlock("view", { key: index2, class: vue.normalizeClass(["grid-item", item.type]), style: vue.normalizeStyle({ gridColumn: item.span ? "span 2" : "span 1" }), onClick: ($event) => $setup.handleNavigation(item.path) }, vue.toDisplayString(item.name), 15, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ]) ]), vue.createCommentVNode(" WMS操作区域 "), vue.createElementVNode("view", { class: "section" }, [ vue.createElementVNode("view", { class: "section-title" }, "WMS操作"), vue.createElementVNode("view", { class: "grid-container" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.wmsOperations, (item, index2) => { return vue.openBlock(), vue.createElementBlock("view", { key: index2, class: vue.normalizeClass(["grid-item", item.type]), style: vue.normalizeStyle({ gridColumn: item.span ? "span 2" : "span 1" }), onClick: ($event) => $setup.handleNavigation(item.path) }, vue.toDisplayString(item.name), 15, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ]) ]), vue.createCommentVNode(" 线下核单 "), vue.createElementVNode("view", { class: "section" }, [ vue.createElementVNode("view", { class: "section-title" }, "线下核单"), vue.createElementVNode("view", { class: "grid-container" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.offlineOperations, (item, index2) => { return vue.openBlock(), vue.createElementBlock("view", { key: index2, class: vue.normalizeClass(["grid-item", item.type]), onClick: ($event) => $setup.handleNavigation(item.path) }, vue.toDisplayString(item.name), 11, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ]) ]), vue.createCommentVNode(" 录入信息 "), vue.createElementVNode("view", { class: "section" }, [ vue.createElementVNode("view", { class: "section-title" }, "录入信息"), vue.createElementVNode("view", { class: "grid-container" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.entryOperations, (item, index2) => { return vue.openBlock(), vue.createElementBlock("view", { key: index2, class: vue.normalizeClass(["grid-item", item.type]), onClick: ($event) => $setup.handleNavigation(item.path) }, vue.toDisplayString(item.name), 11, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ]) ]) ]); } const PagesIndexIndex = /* @__PURE__ */ _export_sfc(_sfc_main$1W, [["render", _sfc_render$1V], ["__scopeId", "data-v-1cf27b2a"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/index.vue"]]); const props$w = { props: { // 文字颜色 color: { type: String, default: props$E.link.color }, // 字体大小,单位px fontSize: { type: [String, Number], default: props$E.link.fontSize }, // 是否显示下划线 underLine: { type: Boolean, default: props$E.link.underLine }, // 要跳转的链接 href: { type: String, default: props$E.link.href }, // 小程序中复制到粘贴板的提示语 mpTips: { type: String, default: props$E.link.mpTips }, // 下划线颜色 lineColor: { type: String, default: props$E.link.lineColor }, // 超链接的问题,不使用slot形式传入,是因为nvue下无法修改颜色 text: { type: String, default: props$E.link.text } } }; const _sfc_main$1V = { name: "u-link", mixins: [mpMixin, mixin, props$w], computed: { linkStyle() { const style = { color: this.color, fontSize: uni.$u.addUnit(this.fontSize), // line-height设置为比字体大小多2px lineHeight: uni.$u.addUnit(uni.$u.getPx(this.fontSize) + 2), textDecoration: this.underLine ? "underline" : "none" }; return style; } }, methods: { openLink() { plus.runtime.openURL(this.href); this.$emit("click"); } } }; function _sfc_render$1U(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock( "text", { class: "u-link", onClick: _cache[0] || (_cache[0] = vue.withModifiers((...args) => $options.openLink && $options.openLink(...args), ["stop"])), style: vue.normalizeStyle([$options.linkStyle, _ctx.$u.addStyle(_ctx.customStyle)]) }, vue.toDisplayString(_ctx.text), 5 /* TEXT, STYLE */ ); } const __easycom_1$9 = /* @__PURE__ */ _export_sfc(_sfc_main$1V, [["render", _sfc_render$1U], ["__scopeId", "data-v-12f6646d"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-link/u-link.vue"]]); const value = { computed: { // 经处理后需要显示的值 value() { const { text, mode, format: format2, href } = this; if (mode === "price") { if (!/^\d+(\.\d+)?$/.test(text)) { uni.$u.error("金额模式下,text参数需要为金额格式"); } if (uni.$u.test.func(format2)) { return format2(text); } return uni.$u.priceFormat(text, 2); } if (mode === "date") { !uni.$u.test.date(text) && uni.$u.error("日期模式下,text参数需要为日期或时间戳格式"); if (uni.$u.test.func(format2)) { return format2(text); } if (format2) { return uni.$u.timeFormat(text, format2); } return uni.$u.timeFormat(text, "yyyy-mm-dd"); } if (mode === "phone") { if (uni.$u.test.func(format2)) { return format2(text); } if (format2 === "encrypt") { return `${text.substr(0, 3)}****${text.substr(7)}`; } return text; } if (mode === "name") { !(typeof text === "string") && uni.$u.error("姓名模式下,text参数需要为字符串格式"); if (uni.$u.test.func(format2)) { return format2(text); } if (format2 === "encrypt") { return this.formatName(text); } return text; } if (mode === "link") { !uni.$u.test.url(href) && uni.$u.error("超链接模式下,href参数需要为URL格式"); return text; } return text; } }, methods: { // 默认的姓名脱敏规则 formatName(name) { let value2 = ""; if (name.length === 2) { value2 = name.substr(0, 1) + "*"; } else if (name.length > 2) { let char = ""; for (let i = 0, len = name.length - 2; i < len; i++) { char += "*"; } value2 = name.substr(0, 1) + char + name.substr(-1, 1); } else { value2 = name; } return value2; } } }; const props$v = { props: { // 主题颜色 type: { type: String, default: props$E.text.type }, // 是否显示 show: { type: Boolean, default: props$E.text.show }, // 显示的值 text: { type: [String, Number], default: props$E.text.text }, // 前置图标 prefixIcon: { type: String, default: props$E.text.prefixIcon }, // 后置图标 suffixIcon: { type: String, default: props$E.text.suffixIcon }, // 文本处理的匹配模式 // text-普通文本,price-价格,phone-手机号,name-姓名,date-日期,link-超链接 mode: { type: String, default: props$E.text.mode }, // mode=link下,配置的链接 href: { type: String, default: props$E.text.href }, // 格式化规则 format: { type: [String, Function], default: props$E.text.format }, // mode=phone时,点击文本是否拨打电话 call: { type: Boolean, default: props$E.text.call }, // 小程序的打开方式 openType: { type: String, default: props$E.text.openType }, // 是否粗体,默认normal bold: { type: Boolean, default: props$E.text.bold }, // 是否块状 block: { type: Boolean, default: props$E.text.block }, // 文本显示的行数,如果设置,超出此行数,将会显示省略号 lines: { type: [String, Number], default: props$E.text.lines }, // 文本颜色 color: { type: String, default: props$E.text.color }, // 字体大小 size: { type: [String, Number], default: props$E.text.size }, // 图标的样式 iconStyle: { type: [Object, String], default: props$E.text.iconStyle }, // 文字装饰,下划线,中划线等,可选值 none|underline|line-through decoration: { tepe: String, default: props$E.text.decoration }, // 外边距,对象、字符串,数值形式均可 margin: { type: [Object, String, Number], default: props$E.text.margin }, // 文本行高 lineHeight: { type: [String, Number], default: props$E.text.lineHeight }, // 文本对齐方式,可选值left|center|right align: { type: String, default: props$E.text.align }, // 文字换行,可选值break-word|normal|anywhere wordWrap: { type: String, default: props$E.text.wordWrap } } }; const _sfc_main$1U = { name: "u--text", mixins: [mpMixin, mixin, value, props$v], emits: ["click"], computed: { valueStyle() { const style = { textDecoration: this.decoration, fontWeight: this.bold ? "bold" : "normal", wordWrap: this.wordWrap, fontSize: uni.$u.addUnit(this.size) }; !this.type && (style.color = this.color); this.isNvue && this.lines && (style.lines = this.lines); this.lineHeight && (style.lineHeight = uni.$u.addUnit(this.lineHeight)); !this.isNvue && this.block && (style.display = "block"); return uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle)); }, isNvue() { let nvue = false; return nvue; }, isMp() { let mp = false; return mp; } }, data() { return {}; }, methods: { clickHandler() { if (this.call && this.mode === "phone") { uni.makePhoneCall({ phoneNumber: this.text }); } this.$emit("click"); } } }; function _sfc_render$1T(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); const _component_u_link = resolveEasycom(vue.resolveDynamicComponent("u-link"), __easycom_1$9); return _ctx.show ? (vue.openBlock(), vue.createElementBlock( "view", { key: 0, class: vue.normalizeClass(["u-text", []]), style: vue.normalizeStyle({ margin: _ctx.margin, justifyContent: _ctx.align === "left" ? "flex-start" : _ctx.align === "center" ? "center" : "flex-end" }), onClick: _cache[6] || (_cache[6] = (...args) => $options.clickHandler && $options.clickHandler(...args)) }, [ _ctx.mode === "price" ? (vue.openBlock(), vue.createElementBlock( "text", { key: 0, class: vue.normalizeClass(["u-text__price", _ctx.type && `u-text__value--${_ctx.type}`]), style: vue.normalizeStyle([$options.valueStyle]) }, "¥", 6 /* CLASS, STYLE */ )) : vue.createCommentVNode("v-if", true), _ctx.prefixIcon ? (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "u-text__prefix-icon" }, [ vue.createVNode(_component_u_icon, { name: _ctx.prefixIcon, customStyle: _ctx.$u.addStyle(_ctx.iconStyle) }, null, 8, ["name", "customStyle"]) ])) : vue.createCommentVNode("v-if", true), _ctx.mode === "link" ? (vue.openBlock(), vue.createBlock(_component_u_link, { key: 2, text: _ctx.value, href: _ctx.href, underLine: "" }, null, 8, ["text", "href"])) : _ctx.openType && $options.isMp ? (vue.openBlock(), vue.createElementBlock("button", { key: 3, class: "u-reset-button u-text__value", style: vue.normalizeStyle([$options.valueStyle]), "data-index": _ctx.index, openType: _ctx.openType, onGetuserinfo: _cache[0] || (_cache[0] = (...args) => _ctx.onGetUserInfo && _ctx.onGetUserInfo(...args)), onContact: _cache[1] || (_cache[1] = (...args) => _ctx.onContact && _ctx.onContact(...args)), onGetphonenumber: _cache[2] || (_cache[2] = (...args) => _ctx.onGetPhoneNumber && _ctx.onGetPhoneNumber(...args)), onError: _cache[3] || (_cache[3] = (...args) => _ctx.onError && _ctx.onError(...args)), onLaunchapp: _cache[4] || (_cache[4] = (...args) => _ctx.onLaunchApp && _ctx.onLaunchApp(...args)), onOpensetting: _cache[5] || (_cache[5] = (...args) => _ctx.onOpenSetting && _ctx.onOpenSetting(...args)), lang: _ctx.lang, "session-from": _ctx.sessionFrom, "send-message-title": _ctx.sendMessageTitle, "send-message-path": _ctx.sendMessagePath, "send-message-img": _ctx.sendMessageImg, "show-message-card": _ctx.showMessageCard, "app-parameter": _ctx.appParameter }, vue.toDisplayString(_ctx.value), 45, ["data-index", "openType", "lang", "session-from", "send-message-title", "send-message-path", "send-message-img", "show-message-card", "app-parameter"])) : (vue.openBlock(), vue.createElementBlock( "text", { key: 4, class: vue.normalizeClass(["u-text__value", [ _ctx.type && `u-text__value--${_ctx.type}`, _ctx.lines && `u-line-${_ctx.lines}` ]]), style: vue.normalizeStyle([$options.valueStyle]) }, vue.toDisplayString(_ctx.value), 7 /* TEXT, CLASS, STYLE */ )), _ctx.suffixIcon ? (vue.openBlock(), vue.createElementBlock("view", { key: 5, class: "u-text__suffix-icon" }, [ vue.createVNode(_component_u_icon, { name: _ctx.suffixIcon, customStyle: _ctx.$u.addStyle(_ctx.iconStyle) }, null, 8, ["name", "customStyle"]) ])) : vue.createCommentVNode("v-if", true) ], 4 /* STYLE */ )) : vue.createCommentVNode("v-if", true); } const __easycom_1$8 = /* @__PURE__ */ _export_sfc(_sfc_main$1U, [["render", _sfc_render$1T], ["__scopeId", "data-v-0a574502"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-text/u-text.vue"]]); const _sfc_main$1T = { name: "u--text", mixins: [mpMixin, mixin, props$v], components: { uvText: __easycom_1$8 } }; function _sfc_render$1S(_ctx, _cache, $props, $setup, $data, $options) { const _component_uvText = vue.resolveComponent("uvText"); return vue.openBlock(), vue.createBlock(_component_uvText, { type: _ctx.type, show: _ctx.show, text: _ctx.text, prefixIcon: _ctx.prefixIcon, suffixIcon: _ctx.suffixIcon, mode: _ctx.mode, href: _ctx.href, format: _ctx.format, call: _ctx.call, openType: _ctx.openType, bold: _ctx.bold, block: _ctx.block, lines: _ctx.lines, color: _ctx.color, decoration: _ctx.decoration, size: _ctx.size, iconStyle: _ctx.iconStyle, margin: _ctx.margin, lineHeight: _ctx.lineHeight, align: _ctx.align, wordWrap: _ctx.wordWrap, customStyle: _ctx.customStyle }, null, 8, ["type", "show", "text", "prefixIcon", "suffixIcon", "mode", "href", "format", "call", "openType", "bold", "block", "lines", "color", "decoration", "size", "iconStyle", "margin", "lineHeight", "align", "wordWrap", "customStyle"]); } const __easycom_1$7 = /* @__PURE__ */ _export_sfc(_sfc_main$1T, [["render", _sfc_render$1S], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u--text/u--text.vue"]]); const props$u = { props: { // 头像图片路径(不能为相对路径) src: { type: String, default: props$E.avatar.src }, // 头像形状,circle-圆形,square-方形 shape: { type: String, default: props$E.avatar.shape }, // 头像尺寸 size: { type: [String, Number], default: props$E.avatar.size }, // 裁剪模式 mode: { type: String, default: props$E.avatar.mode }, // 显示的文字 text: { type: String, default: props$E.avatar.text }, // 背景色 bgColor: { type: String, default: props$E.avatar.bgColor }, // 文字颜色 color: { type: String, default: props$E.avatar.color }, // 文字大小 fontSize: { type: [String, Number], default: props$E.avatar.fontSize }, // 显示的图标 icon: { type: String, default: props$E.avatar.icon }, // 显示小程序头像,只对百度,微信,QQ小程序有效 mpAvatar: { type: Boolean, default: props$E.avatar.mpAvatar }, // 是否使用随机背景色 randomBgColor: { type: Boolean, default: props$E.avatar.randomBgColor }, // 加载失败的默认头像(组件有内置默认图片) defaultUrl: { type: String, default: props$E.avatar.defaultUrl }, // 如果配置了randomBgColor为true,且配置了此值,则从默认的背景色数组中取出对应索引的颜色值,取值0-19之间 colorIndex: { type: [String, Number], // 校验参数规则,索引在0-19之间 validator(n) { return uni.$u.test.range(n, [0, 19]) || n === ""; }, default: props$E.avatar.colorIndex }, // 组件标识符 name: { type: String, default: props$E.avatar.name } } }; const base64Avatar = "data:image/jpg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAA8AAD/4QMraHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjMtYzAxMSA2Ni4xNDU2NjEsIDIwMTIvMDIvMDYtMTQ6NTY6MjcgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjREMEQwRkY0RjgwNDExRUE5OTY2RDgxODY3NkJFODMxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjREMEQwRkY1RjgwNDExRUE5OTY2RDgxODY3NkJFODMxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NEQwRDBGRjJGODA0MTFFQTk5NjZEODE4Njc2QkU4MzEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NEQwRDBGRjNGODA0MTFFQTk5NjZEODE4Njc2QkU4MzEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAGBAQEBQQGBQUGCQYFBgkLCAYGCAsMCgoLCgoMEAwMDAwMDBAMDg8QDw4MExMUFBMTHBsbGxwfHx8fHx8fHx8fAQcHBw0MDRgQEBgaFREVGh8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx//wAARCADIAMgDAREAAhEBAxEB/8QAcQABAQEAAwEBAAAAAAAAAAAAAAUEAQMGAgcBAQAAAAAAAAAAAAAAAAAAAAAQAAIBAwICBgkDBQAAAAAAAAABAhEDBCEFMVFBYXGREiKBscHRMkJSEyOh4XLxYjNDFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8A/fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHbHFyZ/Dam+yLA+Z2L0Pjtyj2poD4AAAAAAAAAAAAAAAAAAAAAAAAKWFs9y6lcvvwQeqj8z9wFaziY1n/HbUX9XF97A7QAGXI23EvJ1goyfzR0YEfN269jeZ+a03pNe0DIAAAAAAAAAAAAAAAAAAAACvtO3RcVkXlWutuL9YFYAAAAAOJRjKLjJVi9GmB5/csH/mu1h/in8PU+QGMAAAAAAAAAAAAAAAAAAaMDG/6MmMH8C80+xAelSSVFolwQAAAAAAAHVlWI37ErUulaPk+hgeYnCUJuElSUXRrrQHAAAAAAAAAAAAAAAAABa2Oz4bM7r4zdF2ICmAAAAAAAAAg7zZ8GX41wuJP0rRgYAAAAAAAAAAAAAAAAAD0m2R8ODaXU33tsDSAAAAAAAAAlb9HyWZcnJd9PcBHAAAAAAAAAAAAAAAAAPS7e64Vn+KA0AAAAAAAAAJm+v8Ftf3ewCKAAAAAAAAAAAAAAAAAX9muqeGo9NttP06+0DcAAAAAAAAAjb7dTu2ra+VOT9P8AQCWAAAAAAAAAAAAAAAAAUNmyPt5Ltv4bui/kuAF0AAAAAAADiUlGLlJ0SVW+oDzOXfd/Ind6JPRdS0QHSAAAAAAAAAAAAAAAAAE2nVaNcGB6Lbs6OTao9LsF51z60BrAAAAAABJ3jOVHjW3r/sa9QEgAAAAAAAAAAAAAAAAAAAPu1duWriuW34ZR4MC9hbnZyEoy8l36XwfYBsAAADaSq9EuLAlZ+7xSdrGdW9Hc5dgEdtt1erfFgAAAAAAAAAAAAAAAAADVjbblX6NR8MH80tEBRs7HYivyzlN8lovaBPzduvY0m6eK10TXtAyAarO55lpJK54orolr+4GqO/Xaea1FvqbXvA+Z77kNeW3GPbV+4DJfzcm/pcm3H6Vou5AdAFLC2ed2Pjv1txa8sV8T6wOL+yZEKu1JXFy4MDBOE4ScZxcZLinoB8gAAAAAAAAAAAB242LeyJ+C3GvN9C7QLmJtePYpKS+5c+p8F2IDYAANJqj1T4oCfk7Nj3G5Wn9qXJax7gJ93Z82D8sVNc4v30A6Xg5i42Z+iLfqARwcyT0sz9MWvWBps7LlTf5Grce9/oBTxdtxseklHxT+uWr9AGoAB138ezfj4bsFJdD6V2MCPm7RdtJzs1uW1xXzL3gTgAAAAAAAAADRhYc8q74I6RWs5ckB6GxYtWLat21SK731sDsAAAAAAAAAAAAAAAASt021NO/YjrxuQXT1oCOAAAAAAABzGLlJRSq26JAelwsWONYjbXxcZvmwO8AAAAAAAAAAAAAAAAAAef3TEWPkVivx3NY9T6UBiAAAAAABo2+VmGXblddIJ8eivRUD0oAAAAAAAAAAAAAAAAAAAYt4tKeFKVNYNSXfRgefAAAAAAAAr7VuSSWPedKaW5v1MCsAAAAAAAAAAAAAAAAAAIe6bj96Ts2n+JPzSXzP3ATgAAAAAAAAFbbt1UUrOQ9FpC4/UwK6aaqtU+DAAAAAAAAAAAAAAA4lKMIuUmoxWrb4ARNx3R3q2rLpa4Sl0y/YCcAAAAAAAAAAANmFud7G8r89r6X0dgFvGzLGRGtuWvTF6NAdwAAAAAAAAAAAy5W442PVN+K59EePp5ARMvOv5MvO6QXCC4AZwAAAAAAAAAAAAAcxlKLUotprg1owN+PvORborq+7Hnwl3gUbO74VzRydt8pKn68ANcJwmqwkpLmnUDkAAAAfNy9atqtyagut0AxXt5xIV8Fbj6lRd7Am5G65V6qUvtwfyx94GMAAAAAAAAAAAAAAAAAAAOU2nVOj5gdsc3LiqRvTpyqwOxbnnrhdfpSfrQB7pnv/AGvuS9gHXPMy5/Fem1yq0v0A6W29XqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//Z"; const _sfc_main$1S = { name: "u-avatar", mixins: [mpMixin, mixin, props$u], data() { return { // 如果配置randomBgColor参数为true,在图标或者文字的模式下,会随机从中取出一个颜色值当做背景色 colors: [ "#ffb34b", "#f2bba9", "#f7a196", "#f18080", "#88a867", "#bfbf39", "#89c152", "#94d554", "#f19ec2", "#afaae4", "#e1b0df", "#c38cc1", "#72dcdc", "#9acdcb", "#77b1cc", "#448aca", "#86cefa", "#98d1ee", "#73d1f1", "#80a7dc" ], avatarUrl: this.src, allowMp: false }; }, watch: { // 监听头像src的变化,赋值给内部的avatarUrl变量,因为图片加载失败时,需要修改图片的src为默认值 // 而组件内部不能直接修改props的值,所以需要一个中间变量 src: { immediate: true, handler(newVal) { this.avatarUrl = newVal; if (!newVal) { this.errorHandler(); } } } }, computed: { imageStyle() { const style = {}; return style; } }, created() { this.init(); }, methods: { init() { }, // 判断传入的name属性,是否图片路径,只要带有"/"均认为是图片形式 isImg() { return this.src.indexOf("/") !== -1; }, // 图片加载时失败时触发 errorHandler() { this.avatarUrl = this.defaultUrl || base64Avatar; }, clickHandler() { this.$emit("click", this.name); } } }; function _sfc_render$1R(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); const _component_u__text = resolveEasycom(vue.resolveDynamicComponent("u--text"), __easycom_1$7); return vue.openBlock(), vue.createElementBlock( "view", { class: vue.normalizeClass(["u-avatar", [`u-avatar--${_ctx.shape}`]]), style: vue.normalizeStyle([{ backgroundColor: _ctx.text || _ctx.icon ? _ctx.randomBgColor ? $data.colors[_ctx.colorIndex !== "" ? _ctx.colorIndex : _ctx.$u.random(0, 19)] : _ctx.bgColor : "transparent", width: _ctx.$u.addUnit(_ctx.size), height: _ctx.$u.addUnit(_ctx.size) }, _ctx.$u.addStyle(_ctx.customStyle)]), onClick: _cache[1] || (_cache[1] = (...args) => $options.clickHandler && $options.clickHandler(...args)) }, [ vue.renderSlot(_ctx.$slots, "default", {}, () => [ _ctx.mpAvatar && $data.allowMp ? (vue.openBlock(), vue.createElementBlock( vue.Fragment, { key: 0 }, [], 64 /* STABLE_FRAGMENT */ )) : _ctx.icon ? (vue.openBlock(), vue.createBlock(_component_u_icon, { key: 1, name: _ctx.icon, size: _ctx.fontSize, color: _ctx.color }, null, 8, ["name", "size", "color"])) : _ctx.text ? (vue.openBlock(), vue.createBlock(_component_u__text, { key: 2, text: _ctx.text, size: _ctx.fontSize, color: _ctx.color, align: "center", customStyle: "justify-content: center" }, null, 8, ["text", "size", "color"])) : (vue.openBlock(), vue.createElementBlock("image", { key: 3, class: vue.normalizeClass(["u-avatar__image", [`u-avatar__image--${_ctx.shape}`]]), src: $data.avatarUrl || _ctx.defaultUrl, mode: _ctx.mode, onError: _cache[0] || (_cache[0] = (...args) => $options.errorHandler && $options.errorHandler(...args)), style: vue.normalizeStyle([{ width: _ctx.$u.addUnit(_ctx.size), height: _ctx.$u.addUnit(_ctx.size) }]) }, null, 46, ["src", "mode"])) ], true) ], 6 /* CLASS, STYLE */ ); } const __easycom_0$c = /* @__PURE__ */ _export_sfc(_sfc_main$1S, [["render", _sfc_render$1R], ["__scopeId", "data-v-34d954f9"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-avatar/u-avatar.vue"]]); const props$t = { props: { // 标题 title: { type: [String, Number], default: props$E.cell.title }, // 标题下方的描述信息 label: { type: [String, Number], default: props$E.cell.label }, // 右侧的内容 value: { type: [String, Number], default: props$E.cell.value }, // 左侧图标名称,或者图片链接(本地文件建议使用绝对地址) icon: { type: String, default: props$E.cell.icon }, // 是否禁用cell disabled: { type: Boolean, default: props$E.cell.disabled }, // 是否显示下边框 border: { type: Boolean, default: props$E.cell.border }, // 内容是否垂直居中(主要是针对右侧的value部分) center: { type: Boolean, default: props$E.cell.center }, // 点击后跳转的URL地址 url: { type: String, default: props$E.cell.url }, // 链接跳转的方式,内部使用的是uView封装的route方法,可能会进行拦截操作 linkType: { type: String, default: props$E.cell.linkType }, // 是否开启点击反馈(表现为点击时加上灰色背景) clickable: { type: Boolean, default: props$E.cell.clickable }, // 是否展示右侧箭头并开启点击反馈 isLink: { type: Boolean, default: props$E.cell.isLink }, // 是否显示表单状态下的必填星号(此组件可能会内嵌入input组件) required: { type: Boolean, default: props$E.cell.required }, // 右侧的图标箭头 rightIcon: { type: String, default: props$E.cell.rightIcon }, // 右侧箭头的方向,可选值为:left,up,down arrowDirection: { type: String, default: props$E.cell.arrowDirection }, // 左侧图标样式 iconStyle: { type: [Object, String], default: () => { return uni.$u.props.cell.iconStyle; } }, // 右侧箭头图标的样式 rightIconStyle: { type: [Object, String], default: () => { return uni.$u.props.cell.rightIconStyle; } }, // 标题的样式 titleStyle: { type: [Object, String], default: () => { return uni.$u.props.cell.titleStyle; } }, // 单位元的大小,可选值为large size: { type: String, default: props$E.cell.size }, // 点击cell是否阻止事件传播 stop: { type: Boolean, default: props$E.cell.stop }, // 标识符,cell被点击时返回 name: { type: [Number, String], default: props$E.cell.name } } }; const _sfc_main$1R = { name: "u-cell", data() { return {}; }, mixins: [mpMixin, mixin, props$t], computed: { titleTextStyle() { return uni.$u.addStyle(this.titleStyle); } }, emits: ["click"], methods: { // 点击cell clickHandler(e) { if (this.disabled) return; this.$emit("click", { name: this.name }); this.openPage(); this.stop && this.preventEvent(e); } } }; function _sfc_render$1Q(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); const _component_u_line = resolveEasycom(vue.resolveDynamicComponent("u-line"), __easycom_0$e); return vue.openBlock(), vue.createElementBlock("view", { class: vue.normalizeClass(["u-cell", [_ctx.customClass]]), style: vue.normalizeStyle([_ctx.$u.addStyle(_ctx.customStyle)]), "hover-class": !_ctx.disabled && (_ctx.clickable || _ctx.isLink) ? "u-cell--clickable" : "", "hover-stay-time": 250, onClick: _cache[0] || (_cache[0] = (...args) => $options.clickHandler && $options.clickHandler(...args)) }, [ vue.createElementVNode( "view", { class: vue.normalizeClass(["u-cell__body", [_ctx.center && "u-cell--center", _ctx.size === "large" && "u-cell__body--large"]]) }, [ vue.createElementVNode("view", { class: "u-cell__body__content" }, [ vue.createElementVNode("view", { class: "u-cell__left-icon-wrap" }, [ vue.renderSlot(_ctx.$slots, "icon", {}, () => [ _ctx.icon ? (vue.openBlock(), vue.createBlock(_component_u_icon, { key: 0, name: _ctx.icon, "custom-style": _ctx.iconStyle, size: _ctx.size === "large" ? 22 : 18 }, null, 8, ["name", "custom-style", "size"])) : vue.createCommentVNode("v-if", true) ], true) ]), vue.createElementVNode("view", { class: "u-cell__title" }, [ vue.renderSlot(_ctx.$slots, "title", {}, () => [ _ctx.title ? (vue.openBlock(), vue.createElementBlock( "text", { key: 0, class: vue.normalizeClass(["u-cell__title-text", [_ctx.disabled && "u-cell--disabled", _ctx.size === "large" && "u-cell__title-text--large"]]), style: vue.normalizeStyle([$options.titleTextStyle]) }, vue.toDisplayString(_ctx.title), 7 /* TEXT, CLASS, STYLE */ )) : vue.createCommentVNode("v-if", true) ], true), vue.renderSlot(_ctx.$slots, "label", {}, () => [ _ctx.label ? (vue.openBlock(), vue.createElementBlock( "text", { key: 0, class: vue.normalizeClass(["u-cell__label", [_ctx.disabled && "u-cell--disabled", _ctx.size === "large" && "u-cell__label--large"]]) }, vue.toDisplayString(_ctx.label), 3 /* TEXT, CLASS */ )) : vue.createCommentVNode("v-if", true) ], true) ]) ]), vue.renderSlot(_ctx.$slots, "value", {}, () => [ !_ctx.$u.test.empty(_ctx.value) ? (vue.openBlock(), vue.createElementBlock( "text", { key: 0, class: vue.normalizeClass(["u-cell__value", [_ctx.disabled && "u-cell--disabled", _ctx.size === "large" && "u-cell__value--large"]]) }, vue.toDisplayString(_ctx.value), 3 /* TEXT, CLASS */ )) : vue.createCommentVNode("v-if", true) ], true), vue.createElementVNode( "view", { class: vue.normalizeClass(["u-cell__right-icon-wrap", [`u-cell__right-icon-wrap--${_ctx.arrowDirection}`]]) }, [ vue.renderSlot(_ctx.$slots, "right-icon", {}, () => [ _ctx.isLink ? (vue.openBlock(), vue.createBlock(_component_u_icon, { key: 0, name: _ctx.rightIcon, "custom-style": _ctx.rightIconStyle, color: _ctx.disabled ? "#c8c9cc" : "info", size: _ctx.size === "large" ? 18 : 16 }, null, 8, ["name", "custom-style", "color", "size"])) : vue.createCommentVNode("v-if", true) ], true) ], 2 /* CLASS */ ) ], 2 /* CLASS */ ), _ctx.border ? (vue.openBlock(), vue.createBlock(_component_u_line, { key: 0 })) : vue.createCommentVNode("v-if", true) ], 14, ["hover-class"]); } const __easycom_1$6 = /* @__PURE__ */ _export_sfc(_sfc_main$1R, [["render", _sfc_render$1Q], ["__scopeId", "data-v-3fd6feca"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-cell/u-cell.vue"]]); const props$s = { props: { // 分组标题 title: { type: String, default: props$E.cellGroup.title }, // 是否显示外边框 border: { type: Boolean, default: props$E.cellGroup.border } } }; const _sfc_main$1Q = { name: "u-cell-group", mixins: [mpMixin, mixin, props$s] }; function _sfc_render$1P(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_line = resolveEasycom(vue.resolveDynamicComponent("u-line"), __easycom_0$e); return vue.openBlock(), vue.createElementBlock( "view", { style: vue.normalizeStyle([_ctx.$u.addStyle(_ctx.customStyle)]), class: vue.normalizeClass([[_ctx.customClass], "u-cell-group"]) }, [ _ctx.title ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "u-cell-group__title" }, [ vue.renderSlot(_ctx.$slots, "title", {}, () => [ vue.createElementVNode( "text", { class: "u-cell-group__title__text" }, vue.toDisplayString(_ctx.title), 1 /* TEXT */ ) ], true) ])) : vue.createCommentVNode("v-if", true), vue.createElementVNode("view", { class: "u-cell-group__wrapper" }, [ _ctx.border ? (vue.openBlock(), vue.createBlock(_component_u_line, { key: 0 })) : vue.createCommentVNode("v-if", true), vue.renderSlot(_ctx.$slots, "default", {}, void 0, true) ]) ], 6 /* CLASS, STYLE */ ); } const __easycom_2$5 = /* @__PURE__ */ _export_sfc(_sfc_main$1Q, [["render", _sfc_render$1P], ["__scopeId", "data-v-014d39dc"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-cell-group/u-cell-group.vue"]]); const _sfc_main$1P = { __name: "my", setup(__props, { expose: __expose }) { __expose(); const settingsList = vue.ref([ { title: "用户信息", path: "/pages/my/page/user-info" }, { title: "默认仓库", path: "/pages/my/page/warehouse" }, { title: "学校设置", path: "/pages/my/page/school" }, { title: "审核未完成", path: "/pages/my/page/audit-unfinished" }, { title: "版本设置", path: "/pages/my/page/version", icon: "tags" }, { title: "音频设置", path: "/pages/my/page/volume" }, { title: "图书显示设置", path: "/pages/my/page/book-display" }, { title: "修改密码", icon: "lock", path: "/pages/my/page/password" }, { title: "退出账号", path: "/pages/my/page/logout", type: "logout" } ]); const greeting = vue.ref(""); const updateGreeting = () => { const hour = (/* @__PURE__ */ new Date()).getHours(); if (hour >= 5 && hour < 12) { greeting.value = "早上好"; } else if (hour >= 12 && hour < 14) { greeting.value = "中午好"; } else if (hour >= 14 && hour < 18) { greeting.value = "下午好"; } else if (hour >= 18 && hour < 22) { greeting.value = "晚上好"; } else { greeting.value = "夜深了"; } }; vue.onMounted(() => { updateGreeting(); setInterval(updateGreeting, 60 * 60 * 1e3); }); const handleClick = (item) => { if (item.type === "logout") { uni.showModal({ title: "提示", content: "确定要退出登录吗?", success: (res2) => { if (res2.confirm) { uni.clearStorageSync(); uni.reLaunch({ url: "/pages/login/login" }); } } }); return; } uni.navigateTo({ url: item.path }); }; const __returned__ = { settingsList, greeting, updateGreeting, handleClick, ref: vue.ref, onMounted: vue.onMounted }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$1O(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_avatar = resolveEasycom(vue.resolveDynamicComponent("u-avatar"), __easycom_0$c); const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); const _component_u_cell = resolveEasycom(vue.resolveDynamicComponent("u-cell"), __easycom_1$6); const _component_u_cell_group = resolveEasycom(vue.resolveDynamicComponent("u-cell-group"), __easycom_2$5); return vue.openBlock(), vue.createElementBlock("view", { class: "settings-page" }, [ vue.createCommentVNode(" 顶部用户信息 "), vue.createElementVNode("view", { class: "user-header" }, [ vue.createElementVNode("view", { class: "user-info" }, [ vue.createVNode(_component_u_avatar, { size: 60, src: "https://img20.360buyimg.com/da/jfs/t1/141592/25/8861/261559/5f68d8c1E33ed78ab/698ad655bfcfbaed.png" }), vue.createElementVNode("view", { class: "greeting" }, [ vue.createElementVNode( "text", { class: "time" }, vue.toDisplayString($setup.greeting) + "!", 1 /* TEXT */ ), vue.createElementVNode("text", { class: "name" }, "涨涨涨") ]) ]) ]), vue.createCommentVNode(" 设置列表 "), vue.createElementVNode("view", { class: "settings-list" }, [ vue.createVNode(_component_u_cell_group, { border: false }, { default: vue.withCtx(() => [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.settingsList, (item, index2) => { return vue.openBlock(), vue.createBlock(_component_u_cell, { key: index2, title: item.title, isLink: true, onClick: ($event) => $setup.handleClick(item), border: index2 == $setup.settingsList.length - 1 ? false : true }, { icon: vue.withCtx(() => [ vue.createElementVNode("view", { class: "cell-icon" }, [ vue.createVNode(_component_u_icon, { name: item.icon || "setting", size: "22", color: "#333" }, null, 8, ["name"]) ]) ]), _: 2 /* DYNAMIC */ }, 1032, ["title", "onClick", "border"]); }), 128 /* KEYED_FRAGMENT */ )) ]), _: 1 /* STABLE */ }) ]) ]); } const PagesMyMy = /* @__PURE__ */ _export_sfc(_sfc_main$1P, [["render", _sfc_render$1O], ["__scopeId", "data-v-2f1ef635"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/my/my.vue"]]); const GlobalOption = { down: { // 其他down的配置参数也可以写,这里只展示了常用的配置: offset: 80, // 在列表顶部,下拉大于80px,松手即可触发下拉刷新的回调 native: false // 是否使用系统自带的下拉刷新; 默认false; 仅在mescroll-body生效 (值为true时,还需在pages配置enablePullDownRefresh:true;详请参考mescroll-native的案例) }, up: { // 其他up的配置参数也可以写,这里只展示了常用的配置: offset: 150, // 距底部多远时,触发upCallback,仅mescroll-uni生效 ( mescroll-body配置的是pages.json的 onReachBottomDistance ) toTop: { // 回到顶部按钮,需配置src才显示 src: "https://www.mescroll.com/img/mescroll-totop.png", // 图片路径 (建议放入static目录, 如 /static/img/mescroll-totop.png ) offset: 1e3, // 列表滚动多少距离才显示回到顶部按钮,默认1000px right: 20, // 到右边的距离, 默认20 (支持"20rpx", "20px", "20%"格式的值, 纯数字则默认单位rpx) bottom: 120, // 到底部的距离, 默认120 (支持"20rpx", "20px", "20%"格式的值, 纯数字则默认单位rpx) width: 72 // 回到顶部图标的宽度, 默认72 (支持"20rpx", "20px", "20%"格式的值, 纯数字则默认单位rpx) }, empty: { use: true, // 是否显示空布局 icon: "https://www.mescroll.com/img/mescroll-empty.png" // 图标路径 (建议放入static目录, 如 /static/img/mescroll-empty.png ) } }, // 国际化配置 i18n: { // 中文 zh: { down: { textInOffset: "下拉刷新", // 下拉的距离在offset范围内的提示文本 textOutOffset: "释放更新", // 下拉的距离大于offset范围的提示文本 textLoading: "加载中 ...", // 加载中的提示文本 textSuccess: "加载成功", // 加载成功的文本 textErr: "加载失败" // 加载失败的文本 }, up: { textLoading: "加载中 ...", // 加载中的提示文本 textNoMore: "-- END --", // 没有更多数据的提示文本 empty: { tip: "暂无数据" // 空提示 } } }, // 英文 en: { down: { textInOffset: "drop down refresh", textOutOffset: "release updates", textLoading: "loading ...", textSuccess: "loaded successfully", textErr: "loading failed" }, up: { textLoading: "loading ...", textNoMore: "-- END --", empty: { tip: "~ absolutely empty ~" } } } } }; const mescrollI18n = { // 默认语言 def: "zh", // 获取当前语言类型 getType() { return uni.getStorageSync("mescroll-i18n") || this.def; }, // 设置当前语言类型 setType(type2) { uni.setStorageSync("mescroll-i18n", type2); } }; const _imports_0$1 = "/assets/no-result.6af066e5.png"; const _sfc_main$1O = { props: { // empty的配置项: 默认为GlobalOption.up.empty option: { type: Object, default() { return {}; } } }, // 使用computed获取配置,用于支持option的动态配置 computed: { // 图标 icon() { if (this.option.icon != null) { return this.option.icon; } else { let i18nType = mescrollI18n.getType(); if (this.option.i18n) { return this.option.i18n[i18nType].icon; } else { return GlobalOption.i18n[i18nType].up.empty.icon || GlobalOption.up.empty.icon; } } }, // 文本提示 tip() { if (this.option.tip != null) { return this.option.tip; } else { let i18nType = mescrollI18n.getType(); if (this.option.i18n) { return this.option.i18n[i18nType].tip; } else { return GlobalOption.i18n[i18nType].up.empty.tip || GlobalOption.up.empty.tip; } } }, // 按钮文本 btnText() { if (this.option.i18n) { let i18nType = mescrollI18n.getType(); return this.option.i18n[i18nType].btnText; } else { return this.option.btnText; } } }, methods: { // 点击按钮 emptyClick() { this.$emit("emptyclick"); } } }; function _sfc_render$1N(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock( "view", { class: vue.normalizeClass(["mescroll-empty", { "empty-fixed": $props.option.fixed }]), style: vue.normalizeStyle({ "z-index": $props.option.zIndex, top: $props.option.top }) }, [ vue.createCommentVNode(' '), vue.createElementVNode("view", null, [ $options.icon ? (vue.openBlock(), vue.createElementBlock("image", { key: 0, class: "empty-icon", src: _imports_0$1, mode: "widthFix" })) : vue.createCommentVNode("v-if", true) ]), $options.tip ? (vue.openBlock(), vue.createElementBlock( "view", { key: 0, class: "empty-tip" }, vue.toDisplayString($options.tip), 1 /* TEXT */ )) : vue.createCommentVNode("v-if", true), $options.btnText ? (vue.openBlock(), vue.createElementBlock( "view", { key: 1, class: "empty-btn", onClick: _cache[0] || (_cache[0] = (...args) => $options.emptyClick && $options.emptyClick(...args)) }, vue.toDisplayString($options.btnText), 1 /* TEXT */ )) : vue.createCommentVNode("v-if", true) ], 6 /* CLASS, STYLE */ ); } const __easycom_0$b = /* @__PURE__ */ _export_sfc(_sfc_main$1O, [["render", _sfc_render$1N], ["__scopeId", "data-v-7cefd855"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/mescroll-uni/components/mescroll-empty/mescroll-empty.vue"]]); function MeScroll(options, isScrollBody) { let me = this; me.version = "1.3.7"; me.options = options || {}; me.isScrollBody = isScrollBody || false; me.isDownScrolling = false; me.isUpScrolling = false; let hasDownCallback = me.options.down && me.options.down.callback; me.initDownScroll(); me.initUpScroll(); setTimeout(function() { if ((me.optDown.use || me.optDown.native) && me.optDown.auto && hasDownCallback) { if (me.optDown.autoShowLoading) { me.triggerDownScroll(); } else { me.optDown.callback && me.optDown.callback(me); } } if (!me.isUpAutoLoad) { setTimeout(function() { me.optUp.use && me.optUp.auto && !me.isUpAutoLoad && me.triggerUpScroll(); }, 100); } }, 30); } MeScroll.prototype.extendDownScroll = function(optDown) { MeScroll.extend(optDown, { use: true, // 是否启用下拉刷新; 默认true auto: true, // 是否在初始化完毕之后自动执行下拉刷新的回调; 默认true native: false, // 是否使用系统自带的下拉刷新; 默认false; 仅mescroll-body生效 (值为true时,还需在pages配置enablePullDownRefresh:true;详请参考mescroll-native的案例) autoShowLoading: false, // 如果设置auto=true(在初始化完毕之后自动执行下拉刷新的回调),那么是否显示下拉刷新的进度; 默认false isLock: false, // 是否锁定下拉刷新,默认false; offset: 80, // 在列表顶部,下拉大于80px,松手即可触发下拉刷新的回调 startTop: 100, // scroll-view快速滚动到顶部时,此时的scroll-top可能大于0, 此值用于控制最大的误差 inOffsetRate: 1, // 在列表顶部,下拉的距离小于offset时,改变下拉区域高度比例;值小于1且越接近0,高度变化越小,表现为越往下越难拉 outOffsetRate: 0.2, // 在列表顶部,下拉的距离大于offset时,改变下拉区域高度比例;值小于1且越接近0,高度变化越小,表现为越往下越难拉 bottomOffset: 20, // 当手指touchmove位置在距离body底部20px范围内的时候结束上拉刷新,避免Webview嵌套导致touchend事件不执行 minAngle: 45, // 向下滑动最少偏移的角度,取值区间 [0,90];默认45度,即向下滑动的角度大于45度则触发下拉;而小于45度,将不触发下拉,避免与左右滑动的轮播等组件冲突; textInOffset: "下拉刷新", // 下拉的距离在offset范围内的提示文本 textOutOffset: "释放更新", // 下拉的距离大于offset范围的提示文本 textLoading: "加载中 ...", // 加载中的提示文本 textSuccess: "加载成功", // 加载成功的文本 textErr: "加载失败", // 加载失败的文本 beforeEndDelay: 0, // 延时结束的时长 (显示加载成功/失败的时长, android小程序设置此项结束下拉会卡顿, 配置后请注意测试) bgColor: "transparent", // 背景颜色 (建议在pages.json中再设置一下backgroundColorTop) textColor: "gray", // 文本颜色 (当bgColor配置了颜色,而textColor未配置时,则textColor会默认为白色) inited: null, // 下拉刷新初始化完毕的回调 inOffset: null, // 下拉的距离进入offset范围内那一刻的回调 outOffset: null, // 下拉的距离大于offset那一刻的回调 onMoving: null, // 下拉过程中的回调,滑动过程一直在执行; rate下拉区域当前高度与指定距离的比值(inOffset: rate<1; outOffset: rate>=1); downHight当前下拉区域的高度 beforeLoading: null, // 准备触发下拉刷新的回调: 如果return true,将不触发showLoading和callback回调; 常用来完全自定义下拉刷新, 参考案例【淘宝 v6.8.0】 showLoading: null, // 显示下拉刷新进度的回调 afterLoading: null, // 显示下拉刷新进度的回调之后,马上要执行的代码 (如: 在wxs中使用) beforeEndDownScroll: null, // 准备结束下拉的回调. 返回结束下拉的延时执行时间,默认0ms; 常用于结束下拉之前再显示另外一小段动画,才去隐藏下拉刷新的场景, 参考案例【dotJump】 endDownScroll: null, // 结束下拉刷新的回调 afterEndDownScroll: null, // 结束下拉刷新的回调,马上要执行的代码 (如: 在wxs中使用) callback: function(mescroll) { mescroll.resetUpScroll(); } }); }; MeScroll.prototype.extendUpScroll = function(optUp) { MeScroll.extend(optUp, { use: true, // 是否启用上拉加载; 默认true auto: true, // 是否在初始化完毕之后自动执行上拉加载的回调; 默认true isLock: false, // 是否锁定上拉加载,默认false; isBoth: true, // 上拉加载时,如果滑动到列表顶部是否可以同时触发下拉刷新;默认true,两者可同时触发; callback: null, // 上拉加载的回调;function(page,mescroll){ } page: { num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始 size: 10, // 每页数据的数量 time: null // 加载第一页数据服务器返回的时间; 防止用户翻页时,后台新增了数据从而导致下一页数据重复; }, noMoreSize: 5, // 如果列表已无数据,可设置列表的总数量要大于等于5条才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看 offset: 150, // 距底部多远时,触发upCallback,仅mescroll-uni生效 ( mescroll-body配置的是pages.json的 onReachBottomDistance ) textLoading: "加载中 ...", // 加载中的提示文本 textNoMore: "-- END --", // 没有更多数据的提示文本 bgColor: "transparent", // 背景颜色 (建议在pages.json中再设置一下backgroundColorBottom) textColor: "gray", // 文本颜色 (当bgColor配置了颜色,而textColor未配置时,则textColor会默认为白色) inited: null, // 初始化完毕的回调 showLoading: null, // 显示加载中的回调 showNoMore: null, // 显示无更多数据的回调 hideUpScroll: null, // 隐藏上拉加载的回调 errDistance: 60, // endErr的时候需往上滑动一段距离,使其往下滑动时再次触发onReachBottom,仅mescroll-body生效 toTop: { // 回到顶部按钮,需配置src才显示 src: null, // 图片路径,默认null (绝对路径或网络图) offset: 1e3, // 列表滚动多少距离才显示回到顶部按钮,默认1000 duration: 300, // 回到顶部的动画时长,默认300ms (当值为0或300则使用系统自带回到顶部,更流畅; 其他值则通过step模拟,部分机型可能不够流畅,所以非特殊情况不建议修改此项) btnClick: null, // 点击按钮的回调 onShow: null, // 是否显示的回调 zIndex: 9990, // fixed定位z-index值 left: null, // 到左边的距离, 默认null. 此项有值时,right不生效. (支持20, "20rpx", "20px", "20%"格式的值, 其中纯数字则默认单位rpx) right: 20, // 到右边的距离, 默认20 (支持20, "20rpx", "20px", "20%"格式的值, 其中纯数字则默认单位rpx) bottom: 120, // 到底部的距离, 默认120 (支持20, "20rpx", "20px", "20%"格式的值, 其中纯数字则默认单位rpx) safearea: false, // bottom的偏移量是否加上底部安全区的距离, 默认false, 需要适配iPhoneX时使用 (具体的界面如果不配置此项,则取本vue的safearea值) width: 72, // 回到顶部图标的宽度, 默认72 (支持20, "20rpx", "20px", "20%"格式的值, 其中纯数字则默认单位rpx) radius: "50%" // 圆角, 默认"50%" (支持20, "20rpx", "20px", "20%"格式的值, 其中纯数字则默认单位rpx) }, empty: { use: true, // 是否显示空布局 icon: null, // 图标路径 tip: "~ 暂无相关数据 ~", // 提示 btnText: "", // 按钮 btnClick: null, // 点击按钮的回调 onShow: null, // 是否显示的回调 fixed: false, // 是否使用fixed定位,默认false; 配置fixed为true,以下的top和zIndex才生效 (transform会使fixed失效,最终会降级为absolute) top: "100rpx", // fixed定位的top值 (完整的单位值,如 "10%"; "100rpx") zIndex: 99 // fixed定位z-index值 }, onScroll: false // 是否监听滚动事件 }); }; MeScroll.extend = function(userOption, defaultOption) { if (!userOption) return defaultOption; for (let key in defaultOption) { if (userOption[key] == null) { let def = defaultOption[key]; if (def != null && typeof def === "object") { userOption[key] = MeScroll.extend({}, def); } else { userOption[key] = def; } } else if (typeof userOption[key] === "object") { MeScroll.extend(userOption[key], defaultOption[key]); } } return userOption; }; MeScroll.prototype.hasColor = function(color2) { if (!color2) return false; let c = color2.toLowerCase(); return c != "#fff" && c != "#ffffff" && c != "transparent" && c != "white"; }; MeScroll.prototype.initDownScroll = function() { let me = this; me.optDown = me.options.down || {}; if (!me.optDown.textColor && me.hasColor(me.optDown.bgColor)) me.optDown.textColor = "#fff"; me.extendDownScroll(me.optDown); if (me.isScrollBody && me.optDown.native) { me.optDown.use = false; } else { me.optDown.native = false; } me.downHight = 0; if (me.optDown.use && me.optDown.inited) { setTimeout(function() { me.optDown.inited(me); }, 0); } }; MeScroll.prototype.touchstartEvent = function(e) { if (!this.optDown.use) return; this.startPoint = this.getPoint(e); this.startTop = this.getScrollTop(); this.startAngle = 0; this.lastPoint = this.startPoint; this.maxTouchmoveY = this.getBodyHeight() - this.optDown.bottomOffset; this.inTouchend = false; }; MeScroll.prototype.touchmoveEvent = function(e) { if (!this.optDown.use) return; let me = this; let scrollTop = me.getScrollTop(); let curPoint = me.getPoint(e); let moveY = curPoint.y - me.startPoint.y; if (moveY > 0 && (me.isScrollBody && scrollTop <= 0 || !me.isScrollBody && (scrollTop <= 0 || scrollTop <= me.optDown.startTop && scrollTop === me.startTop))) { if (!me.inTouchend && !me.isDownScrolling && !me.optDown.isLock && (!me.isUpScrolling || me.isUpScrolling && me.optUp.isBoth)) { if (!me.startAngle) me.startAngle = me.getAngle(me.lastPoint, curPoint); if (me.startAngle < me.optDown.minAngle) return; if (me.maxTouchmoveY > 0 && curPoint.y >= me.maxTouchmoveY) { me.inTouchend = true; me.touchendEvent(); return; } me.preventDefault(e); let diff = curPoint.y - me.lastPoint.y; if (me.downHight < me.optDown.offset) { if (me.movetype !== 1) { me.movetype = 1; me.isDownEndSuccess = null; me.optDown.inOffset && me.optDown.inOffset(me); me.isMoveDown = true; } me.downHight += diff * me.optDown.inOffsetRate; } else { if (me.movetype !== 2) { me.movetype = 2; me.optDown.outOffset && me.optDown.outOffset(me); me.isMoveDown = true; } if (diff > 0) { me.downHight += diff * me.optDown.outOffsetRate; } else { me.downHight += diff; } } me.downHight = Math.round(me.downHight); let rate = me.downHight / me.optDown.offset; me.optDown.onMoving && me.optDown.onMoving(me, rate, me.downHight); } } me.lastPoint = curPoint; }; MeScroll.prototype.touchendEvent = function(e) { if (!this.optDown.use) return; if (this.isMoveDown) { if (this.downHight >= this.optDown.offset) { this.triggerDownScroll(); } else { this.downHight = 0; this.endDownScrollCall(this); } this.movetype = 0; this.isMoveDown = false; } else if (!this.isScrollBody && this.getScrollTop() === this.startTop) { let isScrollUp = this.getPoint(e).y - this.startPoint.y < 0; if (isScrollUp) { let angle = this.getAngle(this.getPoint(e), this.startPoint); if (angle > 80) { this.triggerUpScroll(true); } } } }; MeScroll.prototype.getPoint = function(e) { if (!e) { return { x: 0, y: 0 }; } if (e.touches && e.touches[0]) { return { x: e.touches[0].pageX, y: e.touches[0].pageY }; } else if (e.changedTouches && e.changedTouches[0]) { return { x: e.changedTouches[0].pageX, y: e.changedTouches[0].pageY }; } else { return { x: e.clientX, y: e.clientY }; } }; MeScroll.prototype.getAngle = function(p1, p2) { let x = Math.abs(p1.x - p2.x); let y = Math.abs(p1.y - p2.y); let z = Math.sqrt(x * x + y * y); let angle = 0; if (z !== 0) { angle = Math.asin(y / z) / Math.PI * 180; } return angle; }; MeScroll.prototype.triggerDownScroll = function() { if (this.optDown.beforeLoading && this.optDown.beforeLoading(this)) ; else { this.showDownScroll(); !this.optDown.native && this.optDown.callback && this.optDown.callback(this); } }; MeScroll.prototype.showDownScroll = function() { this.isDownScrolling = true; if (this.optDown.native) { uni.startPullDownRefresh(); this.showDownLoadingCall(0); } else { this.downHight = this.optDown.offset; this.showDownLoadingCall(this.downHight); } }; MeScroll.prototype.showDownLoadingCall = function(downHight) { this.optDown.showLoading && this.optDown.showLoading(this, downHight); this.optDown.afterLoading && this.optDown.afterLoading(this, downHight); }; MeScroll.prototype.onPullDownRefresh = function() { this.isDownScrolling = true; this.showDownLoadingCall(0); this.optDown.callback && this.optDown.callback(this); }; MeScroll.prototype.endDownScroll = function() { if (this.optDown.native) { this.isDownScrolling = false; this.endDownScrollCall(this); uni.stopPullDownRefresh(); return; } let me = this; let endScroll = function() { me.downHight = 0; me.isDownScrolling = false; me.endDownScrollCall(me); if (!me.isScrollBody) { me.setScrollHeight(0); me.scrollTo(0, 0); } }; let delay = 0; if (me.optDown.beforeEndDownScroll) { delay = me.optDown.beforeEndDownScroll(me); if (me.isDownEndSuccess == null) delay = 0; } if (typeof delay === "number" && delay > 0) { setTimeout(endScroll, delay); } else { endScroll(); } }; MeScroll.prototype.endDownScrollCall = function() { this.optDown.endDownScroll && this.optDown.endDownScroll(this); this.optDown.afterEndDownScroll && this.optDown.afterEndDownScroll(this); }; MeScroll.prototype.lockDownScroll = function(isLock) { if (isLock == null) isLock = true; this.optDown.isLock = isLock; }; MeScroll.prototype.lockUpScroll = function(isLock) { if (isLock == null) isLock = true; this.optUp.isLock = isLock; }; MeScroll.prototype.initUpScroll = function() { let me = this; me.optUp = me.options.up || { use: false }; if (!me.optUp.textColor && me.hasColor(me.optUp.bgColor)) me.optUp.textColor = "#fff"; me.extendUpScroll(me.optUp); if (me.optUp.use === false) return; me.optUp.hasNext = true; me.startNum = me.optUp.page.num + 1; if (me.optUp.inited) { setTimeout(function() { me.optUp.inited(me); }, 0); } }; MeScroll.prototype.onReachBottom = function() { if (this.isScrollBody && !this.isUpScrolling) { if (!this.optUp.isLock && this.optUp.hasNext) { this.triggerUpScroll(); } } }; MeScroll.prototype.onPageScroll = function(e) { if (!this.isScrollBody) return; this.setScrollTop(e.scrollTop); if (e.scrollTop >= this.optUp.toTop.offset) { this.showTopBtn(); } else { this.hideTopBtn(); } }; MeScroll.prototype.scroll = function(e, onScroll) { this.setScrollTop(e.scrollTop); this.setScrollHeight(e.scrollHeight); if (this.preScrollY == null) this.preScrollY = 0; this.isScrollUp = e.scrollTop - this.preScrollY > 0; this.preScrollY = e.scrollTop; this.isScrollUp && this.triggerUpScroll(true); if (e.scrollTop >= this.optUp.toTop.offset) { this.showTopBtn(); } else { this.hideTopBtn(); } this.optUp.onScroll && onScroll && onScroll(); }; MeScroll.prototype.triggerUpScroll = function(isCheck) { if (!this.isUpScrolling && this.optUp.use && this.optUp.callback) { if (isCheck === true) { let canUp = false; if (this.optUp.hasNext && !this.optUp.isLock && !this.isDownScrolling) { if (this.getScrollBottom() <= this.optUp.offset) { canUp = true; } } if (canUp === false) return; } this.showUpScroll(); this.optUp.page.num++; this.isUpAutoLoad = true; this.num = this.optUp.page.num; this.size = this.optUp.page.size; this.time = this.optUp.page.time; this.optUp.callback(this); } }; MeScroll.prototype.showUpScroll = function() { this.isUpScrolling = true; this.optUp.showLoading && this.optUp.showLoading(this); }; MeScroll.prototype.showNoMore = function() { this.optUp.hasNext = false; this.optUp.showNoMore && this.optUp.showNoMore(this); }; MeScroll.prototype.hideUpScroll = function() { this.optUp.hideUpScroll && this.optUp.hideUpScroll(this); }; MeScroll.prototype.endUpScroll = function(isShowNoMore) { if (isShowNoMore != null) { if (isShowNoMore) { this.showNoMore(); } else { this.hideUpScroll(); } } this.isUpScrolling = false; }; MeScroll.prototype.resetUpScroll = function(isShowLoading) { if (this.optUp && this.optUp.use) { let page2 = this.optUp.page; this.prePageNum = page2.num; this.prePageTime = page2.time; page2.num = this.startNum; page2.time = null; if (!this.isDownScrolling && isShowLoading !== false) { if (isShowLoading == null) { this.removeEmpty(); this.showUpScroll(); } else { this.showDownScroll(); } } this.isUpAutoLoad = true; this.num = page2.num; this.size = page2.size; this.time = page2.time; this.optUp.callback && this.optUp.callback(this); } }; MeScroll.prototype.setPageNum = function(num) { this.optUp.page.num = num - 1; }; MeScroll.prototype.setPageSize = function(size) { this.optUp.page.size = size; }; MeScroll.prototype.endByPage = function(dataSize, totalPage, systime) { let hasNext; if (this.optUp.use && totalPage != null) hasNext = this.optUp.page.num < totalPage; this.endSuccess(dataSize, hasNext, systime); }; MeScroll.prototype.endBySize = function(dataSize, totalSize, systime) { let hasNext; if (this.optUp.use && totalSize != null) { let loadSize = (this.optUp.page.num - 1) * this.optUp.page.size + dataSize; hasNext = loadSize < totalSize; } this.endSuccess(dataSize, hasNext, systime); }; MeScroll.prototype.endSuccess = function(dataSize, hasNext, systime) { let me = this; if (me.isDownScrolling) { me.isDownEndSuccess = true; me.endDownScroll(); } if (me.optUp.use) { let isShowNoMore; if (dataSize != null) { let pageNum = me.optUp.page.num; let pageSize = me.optUp.page.size; if (pageNum === 1) { if (systime) me.optUp.page.time = systime; } if (dataSize < pageSize || hasNext === false) { me.optUp.hasNext = false; if (dataSize === 0 && pageNum === 1) { isShowNoMore = false; me.showEmpty(); } else { let allDataSize = (pageNum - 1) * pageSize + dataSize; if (allDataSize < me.optUp.noMoreSize) { isShowNoMore = false; } else { isShowNoMore = true; } me.removeEmpty(); } } else { isShowNoMore = false; me.optUp.hasNext = true; me.removeEmpty(); } } me.endUpScroll(isShowNoMore); } }; MeScroll.prototype.endErr = function(errDistance) { if (this.isDownScrolling) { this.isDownEndSuccess = false; let page2 = this.optUp.page; if (page2 && this.prePageNum) { page2.num = this.prePageNum; page2.time = this.prePageTime; } this.endDownScroll(); } if (this.isUpScrolling) { this.optUp.page.num--; this.endUpScroll(false); if (this.isScrollBody && errDistance !== 0) { if (!errDistance) errDistance = this.optUp.errDistance; this.scrollTo(this.getScrollTop() - errDistance, 0); } } }; MeScroll.prototype.showEmpty = function() { this.optUp.empty.use && this.optUp.empty.onShow && this.optUp.empty.onShow(true); }; MeScroll.prototype.removeEmpty = function() { this.optUp.empty.use && this.optUp.empty.onShow && this.optUp.empty.onShow(false); }; MeScroll.prototype.showTopBtn = function() { if (!this.topBtnShow) { this.topBtnShow = true; this.optUp.toTop.onShow && this.optUp.toTop.onShow(true); } }; MeScroll.prototype.hideTopBtn = function() { if (this.topBtnShow) { this.topBtnShow = false; this.optUp.toTop.onShow && this.optUp.toTop.onShow(false); } }; MeScroll.prototype.getScrollTop = function() { return this.scrollTop || 0; }; MeScroll.prototype.setScrollTop = function(y) { this.scrollTop = y; }; MeScroll.prototype.scrollTo = function(y, t2) { this.myScrollTo && this.myScrollTo(y, t2); }; MeScroll.prototype.resetScrollTo = function(myScrollTo) { this.myScrollTo = myScrollTo; }; MeScroll.prototype.getScrollBottom = function() { return this.getScrollHeight() - this.getClientHeight() - this.getScrollTop(); }; MeScroll.prototype.getStep = function(star, end, callback, t2, rate) { let diff = end - star; if (t2 === 0 || diff === 0) { callback && callback(end); return; } t2 = t2 || 300; rate = rate || 30; let count = t2 / rate; let step = diff / count; let i = 0; let timer = setInterval(function() { if (i < count - 1) { star += step; callback && callback(star, timer); i++; } else { callback && callback(end, timer); clearInterval(timer); } }, rate); }; MeScroll.prototype.getClientHeight = function(isReal) { let h = this.clientHeight || 0; if (h === 0 && isReal !== true) { h = this.getBodyHeight(); } return h; }; MeScroll.prototype.setClientHeight = function(h) { this.clientHeight = h; }; MeScroll.prototype.getScrollHeight = function() { return this.scrollHeight || 0; }; MeScroll.prototype.setScrollHeight = function(h) { this.scrollHeight = h; }; MeScroll.prototype.getBodyHeight = function() { return this.bodyHeight || 0; }; MeScroll.prototype.setBodyHeight = function(h) { this.bodyHeight = h; }; MeScroll.prototype.preventDefault = function(e) { if (e && e.cancelable && !e.defaultPrevented) e.preventDefault(); }; const _sfc_main$1N = { props: { // up.toTop的配置项 option: { type: Object, default() { return {}; } }, // 是否显示 value: false, // vue2 modelValue: false // vue3 }, computed: { // 优先显示左边 left() { return this.option.left ? this.addUnit(this.option.left) : "auto"; }, // 右边距离 (优先显示左边) right() { return this.option.left ? "auto" : this.addUnit(this.option.right); }, // 是否显示 isShow() { return this.modelValue; } }, methods: { addUnit(num) { if (!num) return 0; if (typeof num === "number") return num + "rpx"; return num; }, toTopClick() { this.$emit("update:modelValue", false); this.$emit("click"); } } }; function _sfc_render$1M(_ctx, _cache, $props, $setup, $data, $options) { return $props.option.src ? (vue.openBlock(), vue.createElementBlock("image", { key: 0, class: vue.normalizeClass(["mescroll-totop", [$options.isShow ? "mescroll-totop-in" : "mescroll-totop-out", { "mescroll-totop-safearea": $props.option.safearea }]]), style: vue.normalizeStyle({ "z-index": $props.option.zIndex, "left": $options.left, "right": $options.right, "bottom": $options.addUnit($props.option.bottom), "width": $options.addUnit($props.option.width), "border-radius": $options.addUnit($props.option.radius) }), src: $props.option.src, mode: "widthFix", onClick: _cache[0] || (_cache[0] = (...args) => $options.toTopClick && $options.toTopClick(...args)) }, null, 14, ["src"])) : vue.createCommentVNode("v-if", true); } const MescrollTop = /* @__PURE__ */ _export_sfc(_sfc_main$1N, [["render", _sfc_render$1M], ["__scopeId", "data-v-49fff3a8"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/mescroll-uni/components/mescroll-uni/components/mescroll-top.vue"]]); const WxsMixin = { data() { return { // 传入wxs视图层的数据 (响应式) wxsProp: { optDown: {}, // 下拉刷新的配置 scrollTop: 0, // 滚动条的距离 bodyHeight: 0, // body的高度 isDownScrolling: false, // 是否正在下拉刷新中 isUpScrolling: false, // 是否正在上拉加载中 isScrollBody: true, // 是否为mescroll-body滚动 isUpBoth: true, // 上拉加载时,是否同时可以下拉刷新 t: 0 // 数据更新的标记 (只有数据更新了,才会触发wxs的Observer) }, // 标记调用wxs视图层的方法 callProp: { callType: "", // 方法名 t: 0 // 数据更新的标记 (只有数据更新了,才会触发wxs的Observer) } // 不用wxs的平台使用此处的wxsBiz对象,抹平wxs的写法 (微信小程序和APP使用的wxsBiz对象是./wxs/wxs.wxs) // 不用renderjs的平台使用此处的renderBiz对象,抹平renderjs的写法 (app 和 h5 使用的renderBiz对象是./wxs/renderjs.js) }; }, methods: { // wxs视图层调用逻辑层的回调 wxsCall(msg) { if (msg.type === "setWxsProp") { this.wxsProp = { optDown: this.mescroll.optDown, scrollTop: this.mescroll.getScrollTop(), bodyHeight: this.mescroll.getBodyHeight(), isDownScrolling: this.mescroll.isDownScrolling, isUpScrolling: this.mescroll.isUpScrolling, isUpBoth: this.mescroll.optUp.isBoth, isScrollBody: this.mescroll.isScrollBody, t: Date.now() }; } else if (msg.type === "setLoadType") { this.downLoadType = msg.downLoadType; this.$set(this.mescroll, "downLoadType", this.downLoadType); this.$set(this.mescroll, "isDownEndSuccess", null); } else if (msg.type === "triggerDownScroll") { this.mescroll.triggerDownScroll(); } else if (msg.type === "endDownScroll") { this.mescroll.endDownScroll(); } else if (msg.type === "triggerUpScroll") { this.mescroll.triggerUpScroll(true); } } }, mounted() { this.mescroll.optDown.afterLoading = () => { this.callProp = { callType: "showLoading", t: Date.now() }; }; this.mescroll.optDown.afterEndDownScroll = () => { this.callProp = { callType: "endDownScroll", t: Date.now() }; let delay = 300 + (this.mescroll.optDown.beforeEndDelay || 0); setTimeout(() => { if (this.downLoadType === 4 || this.downLoadType === 0) { this.callProp = { callType: "clearTransform", t: Date.now() }; } this.$set(this.mescroll, "downLoadType", this.downLoadType); }, delay); }; this.wxsCall({ type: "setWxsProp" }); } }; const block0$1 = (Comp) => { (Comp.$wxs || (Comp.$wxs = [])).push("wxsBiz"); (Comp.$wxsModules || (Comp.$wxsModules = {}))["wxsBiz"] = "30f4e25a"; }; const block1 = (Comp) => { (Comp.$renderjs || (Comp.$renderjs = [])).push("renderBiz"); (Comp.$renderjsModules || (Comp.$renderjsModules = {}))["renderBiz"] = "5a9dc23f"; }; const _sfc_main$1M = { name: "mescroll-uni", mixins: [WxsMixin], components: { MescrollTop }, props: { down: Object, up: Object, i18n: Object, top: [String, Number], topbar: [Boolean, String], bottom: [String, Number], safearea: Boolean, fixed: { type: Boolean, default: true }, height: [String, Number], bottombar: { type: Boolean, default: true }, disableScroll: Boolean }, data() { return { mescroll: { optDown: {}, optUp: {} }, // mescroll实例 viewId: "id_" + Math.random().toString(36).substr(2, 16), // 随机生成mescroll的id(不能数字开头,否则找不到元素) downHight: 0, //下拉刷新: 容器高度 downRate: 0, // 下拉比率(inOffset: rate<1; outOffset: rate>=1) downLoadType: 0, // 下拉刷新状态: 0(loading前), 1(inOffset), 2(outOffset), 3(showLoading), 4(endDownScroll) upLoadType: 0, // 上拉加载状态: 0(loading前), 1loading中, 2没有更多了,显示END文本提示, 3(没有更多了,不显示END文本提示) isShowEmpty: false, // 是否显示空布局 isShowToTop: false, // 是否显示回到顶部按钮 scrollTop: 0, // 滚动条的位置 scrollAnim: false, // 是否开启滚动动画 windowTop: 0, // 可使用窗口的顶部位置 windowBottom: 0, // 可使用窗口的底部位置 windowHeight: 0, // 可使用窗口的高度 statusBarHeight: 0 // 状态栏高度 }; }, watch: { height() { this.setClientHeight(); } }, computed: { // 是否使用fixed定位 (当height有值,则不使用) isFixed() { return !this.height && this.fixed; }, // mescroll的高度 scrollHeight() { if (this.isFixed) { return "auto"; } else if (this.height) { return this.toPx(this.height) + "px"; } else { return "100%"; } }, // 下拉布局往下偏移的距离 (px) numTop() { return this.toPx(this.top); }, fixedTop() { return this.isFixed ? this.numTop + this.windowTop + "px" : 0; }, padTop() { return !this.isFixed ? this.numTop + "px" : 0; }, // 上拉布局往上偏移 (px) numBottom() { return this.toPx(this.bottom); }, fixedBottom() { return this.isFixed ? this.numBottom + this.windowBottom + "px" : 0; }, padBottom() { return !this.isFixed ? this.numBottom + "px" : 0; }, // 是否为重置下拉的状态 isDownReset() { return this.downLoadType === 3 || this.downLoadType === 4; }, // 过渡 transition() { return this.isDownReset ? "transform 300ms" : ""; }, translateY() { return this.downHight > 0 ? "translateY(" + this.downHight + "px)" : ""; }, // 列表是否可滑动 scrollable() { if (this.disableScroll) return false; return this.downLoadType === 0 || this.isDownReset; }, // 是否在加载中 isDownLoading() { return this.downLoadType === 3; }, // 旋转的角度 downRotate() { return "rotate(" + 360 * this.downRate + "deg)"; }, // 文本提示 downText() { if (!this.mescroll) return ""; switch (this.downLoadType) { case 1: return this.mescroll.optDown.textInOffset; case 2: return this.mescroll.optDown.textOutOffset; case 3: return this.mescroll.optDown.textLoading; case 4: return this.mescroll.isDownEndSuccess ? this.mescroll.optDown.textSuccess : this.mescroll.isDownEndSuccess == false ? this.mescroll.optDown.textErr : this.mescroll.optDown.textInOffset; default: return this.mescroll.optDown.textInOffset; } } }, methods: { //number,rpx,upx,px,% --> px的数值 toPx(num) { if (typeof num === "string") { if (num.indexOf("px") !== -1) { if (num.indexOf("rpx") !== -1) { num = num.replace("rpx", ""); } else if (num.indexOf("upx") !== -1) { num = num.replace("upx", ""); } else { return Number(num.replace("px", "")); } } else if (num.indexOf("%") !== -1) { let rate = Number(num.replace("%", "")) / 100; return this.windowHeight * rate; } } return num ? uni.upx2px(Number(num)) : 0; }, //注册列表滚动事件,用于下拉刷新和上拉加载 scroll(e) { this.mescroll.scroll(e.detail, () => { this.$emit("scroll", this.mescroll); }); }, // 点击空布局的按钮回调 emptyClick() { this.$emit("emptyclick", this.mescroll); }, // 点击回到顶部的按钮回调 toTopClick() { this.mescroll.scrollTo(0, this.mescroll.optUp.toTop.duration); this.$emit("topclick", this.mescroll); }, // 更新滚动区域的高度 (使内容不满屏和到底,都可继续翻页) setClientHeight() { if (!this.isExec) { this.isExec = true; this.$nextTick(() => { this.getClientInfo((data) => { this.isExec = false; if (data) { this.mescroll.setClientHeight(data.height); } else if (this.clientNum != 3) { this.clientNum = this.clientNum == null ? 1 : this.clientNum + 1; setTimeout(() => { this.setClientHeight(); }, this.clientNum * 100); } }); }); } }, // 获取滚动区域的信息 getClientInfo(success) { let query = uni.createSelectorQuery().in(this); let view = query.select("#" + this.viewId); view.boundingClientRect((data) => { success(data); }).exec(); } }, // 使用created初始化mescroll对象; 如果用mounted部分css样式编译到H5会失效 created() { let vm = this; let diyOption = { // 下拉刷新的配置 down: { inOffset() { vm.downLoadType = 1; }, outOffset() { vm.downLoadType = 2; }, onMoving(mescroll, rate, downHight) { vm.downHight = downHight; vm.downRate = rate; }, showLoading(mescroll, downHight) { vm.downLoadType = 3; vm.downHight = downHight; }, beforeEndDownScroll(mescroll) { vm.downLoadType = 4; return mescroll.optDown.beforeEndDelay; }, endDownScroll() { vm.downLoadType = 4; vm.downHight = 0; vm.downResetTimer && clearTimeout(vm.downResetTimer); vm.downResetTimer = setTimeout(() => { if (vm.downLoadType === 4) vm.downLoadType = 0; }, 300); }, // 派发下拉刷新的回调 callback: function(mescroll) { vm.$emit("down", mescroll); } }, // 上拉加载的配置 up: { // 显示加载中的回调 showLoading() { vm.upLoadType = 1; }, // 显示无更多数据的回调 showNoMore() { vm.upLoadType = 2; }, // 隐藏上拉加载的回调 hideUpScroll(mescroll) { vm.upLoadType = mescroll.optUp.hasNext ? 0 : 3; }, // 空布局 empty: { onShow(isShow) { vm.isShowEmpty = isShow; } }, // 回到顶部 toTop: { onShow(isShow) { vm.isShowToTop = isShow; } }, // 派发上拉加载的回调 callback: function(mescroll) { vm.$emit("up", mescroll); vm.setClientHeight(); } } }; let i18nType = mescrollI18n.getType(); let i18nOption = { type: i18nType }; MeScroll.extend(i18nOption, vm.i18n); MeScroll.extend(i18nOption, GlobalOption.i18n); MeScroll.extend(diyOption, i18nOption[i18nType]); MeScroll.extend(diyOption, { down: GlobalOption.down, up: GlobalOption.up }); let myOption = JSON.parse(JSON.stringify({ "down": vm.down, "up": vm.up })); MeScroll.extend(myOption, diyOption); vm.mescroll = new MeScroll(myOption); vm.mescroll.viewId = vm.viewId; vm.mescroll.i18n = i18nOption; vm.$emit("init", vm.mescroll); const sys2 = uni.getSystemInfoSync(); if (sys2.windowTop) vm.windowTop = sys2.windowTop; if (sys2.windowBottom) vm.windowBottom = sys2.windowBottom; if (sys2.windowHeight) vm.windowHeight = sys2.windowHeight; if (sys2.statusBarHeight) vm.statusBarHeight = sys2.statusBarHeight; vm.mescroll.setBodyHeight(sys2.windowHeight); vm.mescroll.resetScrollTo((y, t2) => { vm.scrollAnim = t2 !== 0; if (typeof y === "string") { vm.getClientInfo(function(rect) { let mescrollTop = rect.top; let selector; if (y.indexOf("#") == -1 && y.indexOf(".") == -1) { selector = "#" + y; } else { selector = y; if (y.indexOf(">>>") != -1) { selector = y.split(">>>")[1].trim(); } } uni.createSelectorQuery().select(selector).boundingClientRect(function(rect2) { if (rect2) { let curY2 = vm.mescroll.getScrollTop(); let top = rect2.top - mescrollTop; top += curY2; if (!vm.isFixed) top -= vm.numTop; vm.scrollTop = curY2; vm.$nextTick(function() { vm.scrollTop = top; }); } else { formatAppLog("error", "at uni_modules/mescroll-uni/components/mescroll-uni/mescroll-uni.vue:422", selector + " does not exist"); } }).exec(); }); return; } let curY = vm.mescroll.getScrollTop(); if (t2 === 0 || t2 === 300) { vm.scrollTop = curY; vm.$nextTick(function() { vm.scrollTop = y; }); } else { vm.mescroll.getStep(curY, y, (step) => { vm.scrollTop = step; }, t2); } }); if (vm.up && vm.up.toTop && vm.up.toTop.safearea != null) ; else { vm.mescroll.optUp.toTop.safearea = vm.safearea; } uni.$on("setMescrollGlobalOption", (options) => { if (!options) return; let i18nType2 = options.i18n ? options.i18n.type : null; if (i18nType2 && vm.mescroll.i18n.type != i18nType2) { vm.mescroll.i18n.type = i18nType2; mescrollI18n.setType(i18nType2); MeScroll.extend(options, vm.mescroll.i18n[i18nType2]); } if (options.down) { let down = MeScroll.extend({}, options.down); vm.mescroll.optDown = MeScroll.extend(down, vm.mescroll.optDown); } if (options.up) { let up = MeScroll.extend({}, options.up); vm.mescroll.optUp = MeScroll.extend(up, vm.mescroll.optUp); } }); }, mounted() { this.setClientHeight(); }, destroyed() { uni.$off("setMescrollGlobalOption"); } }; function _sfc_render$1L(_ctx, _cache, $props, $setup, $data, $options) { const _component_mescroll_empty = resolveEasycom(vue.resolveDynamicComponent("mescroll-empty"), __easycom_0$b); const _component_mescroll_top = vue.resolveComponent("mescroll-top"); return vue.openBlock(), vue.createElementBlock("view", { class: "mescroll-uni-warp" }, [ vue.createElementVNode("scroll-view", { id: $data.viewId, class: vue.normalizeClass(["mescroll-uni", { "mescroll-uni-fixed": $options.isFixed }]), style: vue.normalizeStyle({ "height": $options.scrollHeight, "padding-top": $options.padTop, "padding-bottom": $options.padBottom, "top": $options.fixedTop, "bottom": $options.fixedBottom }), "scroll-top": $data.scrollTop, "scroll-with-animation": $data.scrollAnim, onScroll: _cache[4] || (_cache[4] = (...args) => $options.scroll && $options.scroll(...args)), "scroll-y": $options.scrollable, "enable-back-to-top": true, throttle: false }, [ vue.createElementVNode("view", { class: "mescroll-uni-content mescroll-render-touch", onTouchstart: _cache[0] || (_cache[0] = (...args) => _ctx.wxsBiz.touchstartEvent && _ctx.wxsBiz.touchstartEvent(...args)), onTouchmove: _cache[1] || (_cache[1] = (...args) => _ctx.wxsBiz.touchmoveEvent && _ctx.wxsBiz.touchmoveEvent(...args)), onTouchend: _cache[2] || (_cache[2] = (...args) => _ctx.wxsBiz.touchendEvent && _ctx.wxsBiz.touchendEvent(...args)), onTouchcancel: _cache[3] || (_cache[3] = (...args) => _ctx.wxsBiz.touchendEvent && _ctx.wxsBiz.touchendEvent(...args)), "change:prop": _ctx.wxsBiz.propObserver, prop: vue.wp(_ctx.wxsProp) }, [ vue.createCommentVNode(" 状态栏 "), $props.topbar && $data.statusBarHeight ? (vue.openBlock(), vue.createElementBlock( "view", { key: 0, class: "mescroll-topbar", style: vue.normalizeStyle({ height: $data.statusBarHeight + "px", background: $props.topbar }) }, null, 4 /* STYLE */ )) : vue.createCommentVNode("v-if", true), vue.createElementVNode("view", { class: "mescroll-wxs-content", style: vue.normalizeStyle({ "transform": $options.translateY, "transition": $options.transition }), "change:prop": _ctx.wxsBiz.callObserver, prop: vue.wp(_ctx.callProp) }, [ vue.createCommentVNode(" 下拉加载区域 (支付宝小程序子组件传参给子子组件仍报单项数据流的异常,暂时不通过mescroll-down组件实现)"), vue.createCommentVNode(' '), $data.mescroll.optDown.use ? (vue.openBlock(), vue.createElementBlock( "view", { key: 0, class: "mescroll-downwarp", style: vue.normalizeStyle({ "background": $data.mescroll.optDown.bgColor, "color": $data.mescroll.optDown.textColor }) }, [ vue.createElementVNode("view", { class: "downwarp-content" }, [ vue.createElementVNode( "view", { class: vue.normalizeClass(["downwarp-progress mescroll-wxs-progress", { "mescroll-rotate": $options.isDownLoading }]), style: vue.normalizeStyle({ "border-color": $data.mescroll.optDown.textColor, "transform": $options.downRotate }) }, null, 6 /* CLASS, STYLE */ ), vue.createElementVNode( "view", { class: "downwarp-tip" }, vue.toDisplayString($options.downText), 1 /* TEXT */ ) ]) ], 4 /* STYLE */ )) : vue.createCommentVNode("v-if", true), vue.createCommentVNode(" 列表内容 "), vue.renderSlot(_ctx.$slots, "default", {}, void 0, true), vue.createCommentVNode(" 空布局 "), $data.isShowEmpty ? (vue.openBlock(), vue.createBlock(_component_mescroll_empty, { key: 1, option: $data.mescroll.optUp.empty, onEmptyclick: $options.emptyClick }, null, 8, ["option", "onEmptyclick"])) : vue.createCommentVNode("v-if", true), vue.createCommentVNode(" 上拉加载区域 (下拉刷新时不显示, 支付宝小程序子组件传参给子子组件仍报单项数据流的异常,暂时不通过mescroll-up组件实现)"), vue.createCommentVNode(' '), $data.mescroll.optUp.use && !$options.isDownLoading && $data.upLoadType !== 3 ? (vue.openBlock(), vue.createElementBlock( "view", { key: 2, class: "mescroll-upwarp", style: vue.normalizeStyle({ "background": $data.mescroll.optUp.bgColor, "color": $data.mescroll.optUp.textColor }) }, [ vue.createCommentVNode(" 加载中 (此处不能用v-if,否则android小程序快速上拉可能会不断触发上拉回调) "), vue.withDirectives(vue.createElementVNode( "view", null, [ vue.createElementVNode( "view", { class: "upwarp-progress mescroll-rotate", style: vue.normalizeStyle({ "border-color": $data.mescroll.optUp.textColor }) }, null, 4 /* STYLE */ ), vue.createElementVNode( "view", { class: "upwarp-tip" }, vue.toDisplayString($data.mescroll.optUp.textLoading), 1 /* TEXT */ ) ], 512 /* NEED_PATCH */ ), [ [vue.vShow, $data.upLoadType === 1] ]), vue.createCommentVNode(" 无数据 "), $data.upLoadType === 2 ? (vue.openBlock(), vue.createElementBlock( "view", { key: 0, class: "upwarp-nodata" }, vue.toDisplayString($data.mescroll.optUp.textNoMore), 1 /* TEXT */ )) : vue.createCommentVNode("v-if", true) ], 4 /* STYLE */ )) : vue.createCommentVNode("v-if", true) ], 12, ["change:prop", "prop"]), vue.createCommentVNode(" 底部是否偏移TabBar的高度(默认仅在H5端的tab页生效) "), vue.createCommentVNode(" 适配iPhoneX "), $props.safearea ? (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "mescroll-safearea" })) : vue.createCommentVNode("v-if", true) ], 40, ["change:prop", "prop"]) ], 46, ["id", "scroll-top", "scroll-with-animation", "scroll-y"]), vue.createCommentVNode(" 回到顶部按钮 (fixed元素,需写在scroll-view外面,防止滚动的时候抖动)"), vue.createVNode(_component_mescroll_top, { modelValue: $data.isShowToTop, "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => $data.isShowToTop = $event), option: $data.mescroll.optUp.toTop, onClick: $options.toTopClick }, null, 8, ["modelValue", "option", "onClick"]), vue.createCommentVNode(" renderjs的数据载体,不可写在mescroll-downwarp内部,避免use为false时,载体丢失,无法更新数据 "), vue.createElementVNode("view", { "change:prop": _ctx.renderBiz.propObserver, prop: vue.wp(_ctx.wxsProp) }, null, 8, ["change:prop", "prop"]) ]); } if (typeof block0$1 === "function") block0$1(_sfc_main$1M); if (typeof block1 === "function") block1(_sfc_main$1M); const __easycom_0$a = /* @__PURE__ */ _export_sfc(_sfc_main$1M, [["render", _sfc_render$1L], ["__scopeId", "data-v-97b1664c"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-uni.vue"]]); function useMescroll(onPageScroll, onReachBottom, onPullDownRefresh) { let mescroll = null; const mescrollInit = (e) => { mescroll = e; }; const getMescroll = () => { return mescroll; }; const downCallback = () => { if (mescroll.optUp.use) { mescroll.resetUpScroll(); } else { setTimeout(() => { mescroll.endSuccess(); }, 500); } }; const upCallback = () => { setTimeout(() => { mescroll.endErr(); }, 500); }; onPullDownRefresh && onPullDownRefresh(() => { mescroll && mescroll.onPullDownRefresh(); }); onPageScroll && onPageScroll((e) => { mescroll && mescroll.onPageScroll(e); }); onReachBottom && onReachBottom(() => { mescroll && mescroll.onReachBottom(); }); return { getMescroll, mescrollInit, downCallback, upCallback }; } 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 (e) { } this.fallbacks = { getSettings() { return currentSettings; }, setSettings(value2) { try { localStorage.setItem(localSettingsSaveId, JSON.stringify(value2)); } catch (e) { } currentSettings = value2; }, now() { return now(); } }; if (hook) { hook.on(HOOK_PLUGIN_SETTINGS_SET, (pluginId, value2) => { if (pluginId === this.plugin.id) { this.fallbacks.setSettings(value2); } }); } this.proxiedOn = new Proxy({}, { get: (_target, prop) => { if (this.target) { return this.target.on[prop]; } else { return (...args) => { this.onQueue.push({ method: prop, args }); }; } } }); this.proxiedTarget = new Proxy({}, { get: (_target, prop) => { if (this.target) { return this.target[prop]; } else if (prop === "on") { return this.proxiedOn; } else if (Object.keys(this.fallbacks).includes(prop)) { return (...args) => { this.targetQueue.push({ method: prop, args, resolve: () => { } }); return this.fallbacks[prop](...args); }; } else { return (...args) => { return new Promise((resolve) => { this.targetQueue.push({ method: prop, args, resolve }); }); }; } } }); } async setRealTarget(target) { this.target = target; for (const item of this.onQueue) { this.target.on[item.method](...item.args); } for (const item of this.targetQueue) { item.resolve(await this.target[item.method](...item.args)); } } } function setupDevtoolsPlugin(pluginDescriptor, setupFn) { const 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.1.7 * (c) 2023 Eduardo San Martin Morote * @license MIT */ let activePinia; const setActivePinia = (pinia2) => activePinia = pinia2; const piniaSymbol = Symbol("pinia"); function isPlainObject$1(o) { return o && typeof o === "object" && Object.prototype.toString.call(o) === "[object Object]" && typeof o.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 (e) { } return xhr.status >= 200 && xhr.status <= 299; } function click(node) { try { node.dispatchEvent(new MouseEvent("click")); } catch (e) { 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 a = document.createElement("a"); a.download = name; a.rel = "noopener"; if (typeof blob === "string") { a.href = blob; if (a.origin !== location.origin) { if (corsEnabled(a.href)) { download(blob, name, opts); } else { a.target = "_blank"; click(a); } } else { click(a); } } else { a.href = URL.createObjectURL(blob); setTimeout(function() { URL.revokeObjectURL(a.href); }, 4e4); setTimeout(function() { click(a); }, 0); } } function msSaveAs(blob, name = "download", opts) { if (typeof blob === "string") { if (corsEnabled(blob)) { download(blob, name, opts); } else { const a = document.createElement("a"); a.href = blob; a.target = "_blank"; setTimeout(function() { click(a); }); } } 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, type2) { const piniaMessage = "🍍 " + message; if (typeof __VUE_DEVTOOLS_TOAST__ === "function") { __VUE_DEVTOOLS_TOAST__(piniaMessage, type2); } else if (type2 === "error") { console.error(piniaMessage); } else if (type2 === "warn") { console.warn(piniaMessage); } else { console.log(piniaMessage); } } function isPinia(o) { return "_a" in o && "install" in o; } 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(pinia2) { if (checkClipboardAccess()) return; try { await navigator.clipboard.writeText(JSON.stringify(pinia2.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(pinia2) { if (checkClipboardAccess()) return; try { loadStoresState(pinia2, 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(pinia2) { try { saveAs(new Blob([JSON.stringify(pinia2.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(pinia2) { try { const open2 = getFileOpener(); const result = await open2(); if (!result) return; const { text, file } = result; loadStoresState(pinia2, JSON.parse(text)); toastMessage(`Global state imported from "${file.name}".`); } catch (error2) { toastMessage(`Failed to import the state from JSON. Check the console for more details.`, "error"); console.error(error2); } } function loadStoresState(pinia2, state) { for (const key in state) { const storeState = pinia2.state.value[key]; if (storeState) { Object.assign(storeState, state[key]); } else { pinia2.state.value[key] = state[key]; } } } function formatDisplay(display) { return { _custom: { display } }; } const PINIA_ROOT_LABEL = "🍍 Pinia (root)"; const PINIA_ROOT_ID = "_root"; function formatStoreForInspectorTree(store2) { return isPinia(store2) ? { id: PINIA_ROOT_ID, label: PINIA_ROOT_LABEL } : { id: store2.$id, label: store2.$id }; } function formatStoreForInspectorState(store2) { if (isPinia(store2)) { const storeNames = Array.from(store2._s.keys()); const storeMap = store2._s; const state2 = { state: storeNames.map((storeId) => ({ editable: true, key: storeId, value: store2.state.value[storeId] })), getters: storeNames.filter((id) => storeMap.get(id)._getters).map((id) => { const store22 = storeMap.get(id); return { editable: false, key: id, value: store22._getters.reduce((getters, key) => { getters[key] = store22[key]; return getters; }, {}) }; }) }; return state2; } const state = { state: Object.keys(store2.$state).map((key) => ({ editable: true, key, value: store2.$state[key] })) }; if (store2._getters && store2._getters.length) { state.getters = store2._getters.map((getterName) => ({ editable: false, key: getterName, value: store2[getterName] })); } if (store2._customProperties.size) { state.customProperties = Array.from(store2._customProperties).map((key) => ({ editable: true, key, value: store2[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(type2) { switch (type2) { 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, pinia2) { 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(pinia2); }, tooltip: "Serialize and copy the state" }, { icon: "content_paste", action: async () => { await actionGlobalPasteState(pinia2); api.sendInspectorTree(INSPECTOR_ID); api.sendInspectorState(INSPECTOR_ID); }, tooltip: "Replace the state with the content of your clipboard" }, { icon: "save", action: () => { actionGlobalSaveState(pinia2); }, tooltip: "Save the state as a JSON file" }, { icon: "folder_open", action: async () => { await actionGlobalOpenStateFile(pinia2); api.sendInspectorTree(INSPECTOR_ID); api.sendInspectorState(INSPECTOR_ID); }, tooltip: "Import the state from a JSON file" } ], nodeActions: [ { icon: "restore", tooltip: 'Reset the state (with "$reset")', action: (nodeId) => { const store2 = pinia2._s.get(nodeId); if (!store2) { toastMessage(`Cannot reset "${nodeId}" store because it wasn't found.`, "warn"); } else if (typeof store2.$reset !== "function") { toastMessage(`Cannot reset "${nodeId}" store because it doesn't have a "$reset" method implemented.`, "warn"); } else { store2.$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((store2) => { payload.instanceData.state.push({ type: getStoreType(store2.$id), key: "state", editable: true, value: store2._isOptionsAPI ? { _custom: { value: vue.toRaw(store2.$state), actions: [ { icon: "restore", tooltip: "Reset the state of this store", action: () => store2.$reset() } ] } } : ( // NOTE: workaround to unwrap transferred refs Object.keys(store2.$state).reduce((state, key) => { state[key] = store2.$state[key]; return state; }, {}) ) }); if (store2._getters && store2._getters.length) { payload.instanceData.state.push({ type: getStoreType(store2.$id), key: "getters", editable: false, value: store2._getters.reduce((getters, key) => { try { getters[key] = store2[key]; } catch (error2) { getters[key] = error2; } return getters; }, {}) }); } }); } }); api.on.getInspectorTree((payload) => { if (payload.app === app && payload.inspectorId === INSPECTOR_ID) { let stores = [pinia2]; stores = stores.concat(Array.from(pinia2._s.values())); payload.rootNodes = (payload.filter ? stores.filter((store2) => "$id" in store2 ? store2.$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 ? pinia2 : pinia2._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 ? pinia2 : pinia2._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 store2 = pinia2._s.get(storeId); if (!store2) { 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(store2, path, payload.state.value); isTimelineActive = true; } }); }); } function addStoreToDevtools(app, store2) { if (!componentStateTypes.includes(getStoreType(store2.$id))) { componentStateTypes.push(getStoreType(store2.$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; store2.$onAction(({ after, onError, name, args }) => { const groupId = runningActionId++; api.addTimelineEvent({ layerId: MUTATIONS_LAYER_ID, event: { time: now2(), title: "🛫 " + name, subtitle: "start", data: { store: formatDisplay(store2.$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(store2.$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(store2.$id), action: formatDisplay(name), args, error: error2 }, groupId } }); }); }, true); store2._customProperties.forEach((name) => { vue.watch(() => vue.unref(store2[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 }); }); store2.$subscribe(({ events, type: type2 }, state) => { api.notifyComponentUpdate(); api.sendInspectorState(INSPECTOR_ID); if (!isTimelineActive) return; const eventData = { time: now2(), title: formatMutationType(type2), data: assign$1({ store: formatDisplay(store2.$id) }, formatEventData(events)), groupId: activeAction }; if (type2 === MutationType.patchFunction) { eventData.subtitle = "⤵️"; } else if (type2 === 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 = store2._hotUpdate; store2._hotUpdate = vue.markRaw((newStore) => { hotUpdate(newStore); api.addTimelineEvent({ layerId: MUTATIONS_LAYER_ID, event: { time: now2(), title: "🔥 " + store2.$id, subtitle: "HMR update", data: { store: formatDisplay(store2.$id), info: formatDisplay(`HMR update`) } } }); api.notifyComponentUpdate(); api.sendInspectorTree(INSPECTOR_ID); api.sendInspectorState(INSPECTOR_ID); }); const { $dispose } = store2; store2.$dispose = () => { $dispose(); api.notifyComponentUpdate(); api.sendInspectorTree(INSPECTOR_ID); api.sendInspectorState(INSPECTOR_ID); api.getSettings().logStoreChanges && toastMessage(`Disposed "${store2.$id}" store 🗑`); }; api.notifyComponentUpdate(); api.sendInspectorTree(INSPECTOR_ID); api.sendInspectorState(INSPECTOR_ID); api.getSettings().logStoreChanges && toastMessage(`"${store2.$id}" store installed 🆕`); }); } let runningActionId = 0; let activeAction; function patchActionForGrouping(store2, actionNames, wrapWithProxy) { const actions = actionNames.reduce((storeActions, actionName) => { storeActions[actionName] = vue.toRaw(store2)[actionName]; return storeActions; }, {}); for (const actionName in actions) { store2[actionName] = function() { const _actionId = runningActionId; const trackedStore = wrapWithProxy ? new Proxy(store2, { get(...args) { activeAction = _actionId; return Reflect.get(...args); }, set(...args) { activeAction = _actionId; return Reflect.set(...args); } }) : store2; activeAction = _actionId; const retValue = actions[actionName].apply(trackedStore, arguments); activeAction = void 0; return retValue; }; } } function devtoolsPlugin({ app, store: store2, options }) { if (store2.$id.startsWith("__hot:")) { return; } store2._isOptionsAPI = !!options.state; patchActionForGrouping(store2, Object.keys(options.actions), store2._isOptionsAPI); const originalHotUpdate = store2._hotUpdate; vue.toRaw(store2)._hotUpdate = function(newStore) { originalHotUpdate.apply(this, arguments); patchActionForGrouping(store2, Object.keys(newStore._hmrPayload.actions), !!store2._isOptionsAPI); }; addStoreToDevtools( app, // FIXME: is there a way to allow the assignment from Store to StoreGeneric? store2 ); } function createPinia() { const scope = vue.effectScope(true); const state = scope.run(() => vue.ref({})); let _p = []; let toBeInstalled = []; const pinia2 = vue.markRaw({ install(app) { setActivePinia(pinia2); { pinia2._a = app; app.provide(piniaSymbol, pinia2); app.config.globalProperties.$pinia = pinia2; if (USE_DEVTOOLS) { registerPiniaDevtools(app, pinia2); } 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") { pinia2.use(devtoolsPlugin); } return pinia2; } 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); }); } const fallbackRunWithContext = (fn) => fn(); function mergeReactiveObjects(target, patchToApply) { if (target instanceof Map && patchToApply instanceof Map) { patchToApply.forEach((value2, key) => target.set(key, value2)); } 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(o) { return !!(vue.isRef(o) && o.effect); } function createOptionsStore(id, options, pinia2, hot) { const { state, actions, getters } = options; const initialState = pinia2.state.value[id]; let store2; function setup() { if (!initialState && !hot) { { pinia2.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(pinia2.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(pinia2); const store22 = pinia2._s.get(id); return getters[name].call(store22, store22); })); return computedGetters; }, {})); } store2 = createSetupStore(id, setup, options, pinia2, hot, true); return store2; } function createSetupStore($id, setup, options = {}, pinia2, hot, isOptionsStore) { let scope; const optionsForPlugin = assign({ actions: {} }, options); if (!pinia2._e.active) { throw new Error("Pinia destroyed"); } const $subscribeOptions = { deep: true // flush: 'post', }; { $subscribeOptions.onTrigger = (event) => { if (isListening) { debuggerEvents = event; } else if (isListening == false && !store2._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 = []; let actionSubscriptions = []; let debuggerEvents; const initialState = pinia2.state.value[$id]; if (!isOptionsStore && !initialState && !hot) { { pinia2.state.value[$id] = {}; } } const hotState = vue.ref({}); let activeListener; function $patch(partialStateOrMutator) { let subscriptionMutation; isListening = isSyncListening = false; { debuggerEvents = []; } if (typeof partialStateOrMutator === "function") { partialStateOrMutator(pinia2.state.value[$id]); subscriptionMutation = { type: MutationType.patchFunction, storeId: $id, events: debuggerEvents }; } else { mergeReactiveObjects(pinia2.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, pinia2.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 = []; pinia2._s.delete($id); } function wrapAction(name, action) { return function() { setActivePinia(pinia2); 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: store2, after, onError }); let ret; try { ret = action.apply(this && this.$id === $id ? this : store2, args); } catch (error2) { triggerSubscriptions(onErrorCallbackList, error2); throw error2; } if (ret instanceof Promise) { return ret.then((value2) => { triggerSubscriptions(afterCallbackList, value2); return value2; }).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: pinia2, // _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(() => pinia2.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 store2 = vue.reactive(assign( { _hmrPayload, _customProperties: vue.markRaw(/* @__PURE__ */ new Set()) // devtools custom properties }, partialStore // must be added later // setupStore )); pinia2._s.set($id, store2); const runWithContext = pinia2._a && pinia2._a.runWithContext || fallbackRunWithContext; const setupStore = runWithContext(() => pinia2._e.run(() => (scope = vue.effectScope()).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]); } } { pinia2.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(store2, setupStore); assign(vue.toRaw(store2), setupStore); } Object.defineProperty(store2, "$state", { get: () => hot ? hotState.value : pinia2.state.value[$id], set: (state) => { if (hot) { throw new Error("cannot set hotState"); } $patch(($state) => { assign($state, state); }); } }); { store2._hotUpdate = vue.markRaw((newStore) => { store2._hotUpdating = true; newStore._hmrPayload.state.forEach((stateKey) => { if (stateKey in store2.$state) { const newStateTarget = newStore.$state[stateKey]; const oldStateSource = store2.$state[stateKey]; if (typeof newStateTarget === "object" && isPlainObject$1(newStateTarget) && isPlainObject$1(oldStateSource)) { patchObject(newStateTarget, oldStateSource); } else { newStore.$state[stateKey] = oldStateSource; } } set(store2, stateKey, vue.toRef(newStore.$state, stateKey)); }); Object.keys(store2.$state).forEach((stateKey) => { if (!(stateKey in newStore.$state)) { del(store2, stateKey); } }); isListening = false; isSyncListening = false; pinia2.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(store2, 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(pinia2); return getter.call(store2, store2); }) ) : getter; set(store2, getterName, getterValue); } Object.keys(store2._hmrPayload.getters).forEach((key) => { if (!(key in newStore._hmrPayload.getters)) { del(store2, key); } }); Object.keys(store2._hmrPayload.actions).forEach((key) => { if (!(key in newStore._hmrPayload.actions)) { del(store2, key); } }); store2._hmrPayload = newStore._hmrPayload; store2._getters = newStore._getters; store2._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((p) => { Object.defineProperty(store2, p, assign({ value: store2[p] }, nonEnumerable)); }); } pinia2._p.forEach((extender) => { if (USE_DEVTOOLS) { const extensions = scope.run(() => extender({ store: store2, app: pinia2._a, pinia: pinia2, options: optionsForPlugin })); Object.keys(extensions || {}).forEach((key) => store2._customProperties.add(key)); assign(store2, extensions); } else { assign(store2, scope.run(() => extender({ store: store2, app: pinia2._a, pinia: pinia2, options: optionsForPlugin }))); } }); if (store2.$state && typeof store2.$state === "object" && typeof store2.$state.constructor === "function" && !store2.$state.constructor.toString().includes("[native code]")) { console.warn(`[🍍]: The "state" must be a plain object. It cannot be state: () => new MyClass() Found in store "${store2.$id}".`); } if (initialState && isOptionsStore && options.hydrate) { options.hydrate(store2.$state, initialState); } isListening = true; isSyncListening = true; return store2; } 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; if (typeof id !== "string") { throw new Error(`[🍍]: "defineStore()" must be passed a store id as its first argument.`); } } function useStore2(pinia2, hot) { const hasContext = vue.hasInjectionContext(); pinia2 = // in test mode, ignore the argument provided as we can always retrieve a // pinia instance with getActivePinia() pinia2 || (hasContext ? vue.inject(piniaSymbol, null) : null); if (pinia2) setActivePinia(pinia2); if (!activePinia) { throw new Error(`[🍍]: "getActivePinia()" was called but there was no active Pinia. Are you trying to use a store before calling "app.use(pinia)"? See https://pinia.vuejs.org/core-concepts/outside-component-usage.html for help. This will fail in production.`); } pinia2 = activePinia; if (!pinia2._s.has(id)) { if (isSetupStore) { createSetupStore(id, setup, options, pinia2); } else { createOptionsStore(id, options, pinia2); } { useStore2._pinia = pinia2; } } const store2 = pinia2._s.get(id); if (hot) { const hotId = "__hot:" + id; const newStore = isSetupStore ? createSetupStore(hotId, setup, options, pinia2, true) : createOptionsStore(hotId, assign({}, options), pinia2, true); hot._hotUpdate(newStore); delete pinia2.state.value[hotId]; pinia2._s.delete(hotId); } if (IS_CLIENT) { const currentInstance = vue.getCurrentInstance(); if (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] = store2; } } return store2; } useStore2.$id = id; return useStore2; } const useStore = defineStore("user", { state: () => ({ userInfo: {}, // 用户信息 token: "", // uploadUrl: 'http://192.168.1.3:8080/ai-file/upload/oss', // 上传资源的服务器网址 uploadUrl: "https://gc.sdzcq.com/prod-api/ai-file/upload/oss" // 上传资源的服务器网址 }), getters: {}, actions: { setUserInfo(data) { if (data.userId) { formatAppLog("log", "at store/uses.js:16", "更新全局的用户信息-也更新本地存储", data); this.userInfo = data; uni.setStorageSync("userInfo", data); } else { uni.removeStorageSync("userInfo"); } }, setToken(token) { if (token) { formatAppLog("log", "at store/uses.js:25", "更新全局的 token -也更新本地存储", token); this.token = token; uni.setStorageSync("token", token); } else { uni.removeStorageSync("token"); } } } }); const pinia = createPinia(); const store = useStore(pinia); const _sfc_main$1L = { __name: "index", props: { request: { type: Function }, requestStr: { type: String }, isRefresh: { type: [Number, Boolean], default: 0 }, height: { type: [String, Number] }, total: { type: [Number], default: 0 }, otherParams: { type: Object, default: () => ({}) }, diffHeight: { type: Number, default: 0 }, immediate: { type: Boolean, default: false }, method: { type: String, default: "get" }, isUpAutoLoad: { type: Boolean, default: true } }, emits: ["updateList", "update:total"], setup(__props, { expose: __expose, emit: __emit }) { const { mescrollInit, downCallback, getMescroll } = useMescroll(); const windowHeight = vue.computed(() => { return store.clientHeight - props2.diffHeight; }); const emit2 = __emit; const props2 = __props; const list = vue.ref([]); const getList = (mescroll) => { return new Promise((resolve, reject) => { let params = { pageNum: mescroll.num, pageSize: mescroll.size, ...props2.otherParams }; let methods = props2.method == "post" ? uni.$u.http.post(props2.requestStr, params) : uni.$u.http.get(props2.requestStr, { params }); methods.then((res2) => { emit2("update:total", res2.total); resolve(res2); }); }); }; const upCallback = (mescroll) => { formatAppLog("log", "at components/pageScroll/index.vue:99", mescroll, "mescroll"); if (!props2.requestStr) return; getList(mescroll).then((res2) => { const curPageData = res2.rows || res2.data || []; if (mescroll.num == 1) list.value = []; list.value = list.value.concat(curPageData); emit2("updateList", list.value, mescroll.num); mescroll.endBySize(curPageData.length, res2.total); }).catch(() => { mescroll.endErr(); }); }; const resetUpScroll = () => { setTimeout(() => { getMescroll().resetUpScroll(); }, 100); }; const scroll = (e) => { emit2("scroll", e); }; __expose({ resetUpScroll }); const __returned__ = { mescrollInit, downCallback, getMescroll, windowHeight, emit: emit2, props: props2, list, getList, upCallback, resetUpScroll, scroll, computed: vue.computed, onMounted: vue.onMounted, ref: vue.ref, watch: vue.watch, reactive: vue.reactive, get onShow() { return onShow; }, get useMescroll() { return useMescroll; }, get store() { return store; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$1K(_ctx, _cache, $props, $setup, $data, $options) { const _component_mescroll_uni = resolveEasycom(vue.resolveDynamicComponent("mescroll-uni"), __easycom_0$a); return vue.openBlock(), vue.createBlock(_component_mescroll_uni, { onInit: $setup.mescrollInit, onDown: $setup.downCallback, onUp: $setup.upCallback, height: $props.height || $setup.windowHeight + "px", up: { textNoMore: "-- 没有更多了 --", auto: $props.isUpAutoLoad }, down: { auto: $props.isUpAutoLoad } }, { default: vue.withCtx(() => [ vue.renderSlot(_ctx.$slots, "default", {}, void 0, true) ]), _: 3 /* FORWARDED */ }, 8, ["onInit", "onDown", "height", "up", "down"]); } const PageScroll = /* @__PURE__ */ _export_sfc(_sfc_main$1L, [["render", _sfc_render$1K], ["__scopeId", "data-v-30bc23e1"], ["__file", "E:/书嗨项目/shuhi-app-fornt/components/pageScroll/index.vue"]]); const _sfc_main$1K = { __name: "index", setup(__props, { expose: __expose }) { __expose(); const statusList = vue.ref([ { label: "待初审", value: "1361", path: "/pages/order/stat/pending-review" }, { label: "待拣件", value: "1361", path: "/pages/order/stat/pending-pick" }, { label: "已拣件待签收", value: "1361", path: "/pages/order/stat/pending-sign" }, { label: "待确认收货", value: "1361", path: "/pages/order/stat/pending-confirm" }, { label: "已到货待审核", value: "1361", path: "/pages/order/stat/pending-audit" }, { label: "待付款", value: "1361", path: "/pages/order/stat/pending-payment" } ]); const navigateToDetail = (path) => { uni.navigateTo({ url: path }); }; const __returned__ = { statusList, navigateToDetail, PageScroll, ref: vue.ref }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$1J(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); const _component_u_cell = resolveEasycom(vue.resolveDynamicComponent("u-cell"), __easycom_1$6); const _component_u_cell_group = resolveEasycom(vue.resolveDynamicComponent("u-cell-group"), __easycom_2$5); return vue.openBlock(), vue.createElementBlock("view", { class: "order-statistics" }, [ vue.createCommentVNode(" 顶部统计卡片 "), vue.createElementVNode("view", { class: "overview-card" }, [ vue.createElementVNode("view", { class: "overview-grid" }, [ vue.createElementVNode("view", { class: "grid-item" }, [ vue.createElementVNode("text", { class: "item-label" }, "今日订单"), vue.createElementVNode("text", { class: "item-value" }, "1361") ]), vue.createElementVNode("view", { class: "grid-item" }, [ vue.createElementVNode("text", { class: "item-label" }, "昨日订单"), vue.createElementVNode("text", { class: "item-value" }, "1361") ]), vue.createElementVNode("view", { class: "grid-item" }, [ vue.createElementVNode("text", { class: "item-label" }, "本月订单"), vue.createElementVNode("text", { class: "item-value" }, [ vue.createTextVNode("2.77"), vue.createElementVNode("text", { class: "unit" }, "万") ]) ]) ]) ]), vue.createCommentVNode(" 订单状态网格 "), vue.createElementVNode("view", { class: "status-grid" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.statusList, (item, index2) => { return vue.openBlock(), vue.createElementBlock("view", { key: index2, class: "status-item", onClick: ($event) => $setup.navigateToDetail(item.path) }, [ vue.createElementVNode("view", { class: "status-content" }, [ vue.createElementVNode( "text", { class: "status-label" }, vue.toDisplayString(item.label), 1 /* TEXT */ ), vue.createElementVNode("view", { class: "status-value-wrap" }, [ vue.createElementVNode( "text", { class: "status-value" }, vue.toDisplayString(item.value), 1 /* TEXT */ ), vue.createVNode(_component_u_icon, { name: "arrow-right", color: "#999", size: "14" }) ]) ]) ], 8, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ]), vue.createCommentVNode(" 底部操作项 "), vue.createElementVNode("view", { class: "bottom-actions" }, [ vue.createVNode(_component_u_cell_group, { border: false }, { default: vue.withCtx(() => [ vue.createVNode(_component_u_cell, { title: "收货统计", isLink: "", onClick: _cache[0] || (_cache[0] = ($event) => $setup.navigateToDetail("/pages/statistics/receive")) }), vue.createVNode(_component_u_cell, { title: "全部订单", isLink: "", onClick: _cache[1] || (_cache[1] = ($event) => $setup.navigateToDetail("/pages/order/stat/all")), border: false }) ]), _: 1 /* STABLE */ }) ]) ]); } const PagesOrderIndex = /* @__PURE__ */ _export_sfc(_sfc_main$1K, [["render", _sfc_render$1J], ["__scopeId", "data-v-17a44f9d"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/order/index.vue"]]); const props$r = { props: { // 搜索框形状,round-圆形,square-方形 shape: { type: String, default: props$E.search.shape }, // 搜索框背景色,默认值#f2f2f2 bgColor: { type: String, default: props$E.search.bgColor }, // 占位提示文字 placeholder: { type: String, default: props$E.search.placeholder }, // 是否启用清除控件 clearabled: { type: Boolean, default: props$E.search.clearabled }, // 是否自动聚焦 focus: { type: Boolean, default: props$E.search.focus }, // 是否在搜索框右侧显示取消按钮 showAction: { type: Boolean, default: props$E.search.showAction }, // 右边控件的样式 actionStyle: { type: Object, default: props$E.search.actionStyle }, // 取消按钮文字 actionText: { type: String, default: props$E.search.actionText }, // 输入框内容对齐方式,可选值为 left|center|right inputAlign: { type: String, default: props$E.search.inputAlign }, // input输入框的样式,可以定义文字颜色,大小等,对象形式 inputStyle: { type: Object, default: props$E.search.inputStyle }, // 是否启用输入框 disabled: { type: Boolean, default: props$E.search.disabled }, // 边框颜色 borderColor: { type: String, default: props$E.search.borderColor }, // 搜索图标的颜色,默认同输入框字体颜色 searchIconColor: { type: String, default: props$E.search.searchIconColor }, // 输入框字体颜色 color: { type: String, default: props$E.search.color }, // placeholder的颜色 placeholderColor: { type: String, default: props$E.search.placeholderColor }, // 左边输入框的图标,可以为uView图标名称或图片路径 searchIcon: { type: String, default: props$E.search.searchIcon }, searchIconSize: { type: [Number, String], default: props$E.search.searchIconSize }, // 组件与其他上下左右元素之间的距离,带单位的字符串形式,如"30px"、"30px 20px"等写法 margin: { type: String, default: props$E.search.margin }, // 开启showAction时,是否在input获取焦点时才显示 animation: { type: Boolean, default: props$E.search.animation }, // 输入框的初始化内容 modelValue: { type: String, default: props$E.search.value }, value: { type: String, default: props$E.search.value }, // 输入框最大能输入的长度,-1为不限制长度(来自uniapp文档) maxlength: { type: [String, Number], default: props$E.search.maxlength }, // 搜索框高度,单位px height: { type: [String, Number], default: props$E.search.height }, // 搜索框左侧文本 label: { type: [String, Number, null], default: props$E.search.label } } }; const _sfc_main$1J = { name: "u-search", mixins: [mpMixin, mixin, props$r], data() { return { keyword: "", showClear: false, // 是否显示右边的清除图标 show: false, // 标记input当前状态是否处于聚焦中,如果是,才会显示右侧的清除控件 focused: this.focus // 绑定输入框的值 // inputValue: this.value }; }, watch: { keyword(nVal) { this.$emit("update:modelValue", nVal); this.$emit("change", nVal); }, modelValue: { immediate: true, handler(nVal) { this.keyword = nVal; } } }, computed: { showActionBtn() { return !this.animation && this.showAction; } }, emits: ["clear", "search", "custom", "focus", "blur", "click", "clickIcon", "update:modelValue", "change"], methods: { // 目前HX2.6.9 v-model双向绑定无效,故监听input事件获取输入框内容的变化 inputChange(e) { this.keyword = e.detail.value; }, // 清空输入 // 也可以作为用户通过this.$refs形式调用清空输入框内容 clear() { this.keyword = ""; this.$nextTick(() => { this.$emit("clear"); }); }, // 确定搜索 search(e) { this.$emit("search", e.detail.value); try { uni.hideKeyboard(); } catch (e2) { } }, // 点击右边自定义按钮的事件 custom() { this.$emit("custom", this.keyword); try { uni.hideKeyboard(); } catch (e) { } }, // 获取焦点 getFocus() { this.focused = true; if (this.animation && this.showAction) this.show = true; this.$emit("focus", this.keyword); }, // 失去焦点 blur() { setTimeout(() => { this.focused = false; }, 100); this.show = false; this.$emit("blur", this.keyword); }, // 点击搜索框,只有disabled=true时才发出事件,因为禁止了输入,意味着是想跳转真正的搜索页 clickHandler() { if (this.disabled) this.$emit("click"); }, // 点击左边图标 clickIcon() { this.$emit("clickIcon"); } } }; function _sfc_render$1I(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); return vue.openBlock(), vue.createElementBlock( "view", { class: "u-search", onClick: _cache[6] || (_cache[6] = (...args) => $options.clickHandler && $options.clickHandler(...args)), style: vue.normalizeStyle([{ margin: _ctx.margin }, _ctx.$u.addStyle(_ctx.customStyle)]) }, [ vue.createElementVNode( "view", { class: "u-search__content", style: vue.normalizeStyle({ backgroundColor: _ctx.bgColor, borderRadius: _ctx.shape == "round" ? "100px" : "4px", borderColor: _ctx.borderColor }) }, [ _ctx.$slots.label || _ctx.label !== null ? vue.renderSlot(_ctx.$slots, "label", { key: 0 }, () => [ vue.createElementVNode( "text", { class: "u-search__content__label" }, vue.toDisplayString(_ctx.label), 1 /* TEXT */ ) ], true) : vue.createCommentVNode("v-if", true), vue.createElementVNode("view", { class: "u-search__content__icon" }, [ vue.createVNode(_component_u_icon, { onClick: $options.clickIcon, size: _ctx.searchIconSize, name: _ctx.searchIcon, color: _ctx.searchIconColor ? _ctx.searchIconColor : _ctx.color }, null, 8, ["onClick", "size", "name", "color"]) ]), vue.createElementVNode("input", { "confirm-type": "search", onBlur: _cache[0] || (_cache[0] = (...args) => $options.blur && $options.blur(...args)), value: $data.keyword, onConfirm: _cache[1] || (_cache[1] = (...args) => $options.search && $options.search(...args)), onInput: _cache[2] || (_cache[2] = (...args) => $options.inputChange && $options.inputChange(...args)), disabled: _ctx.disabled, onFocus: _cache[3] || (_cache[3] = (...args) => $options.getFocus && $options.getFocus(...args)), focus: _ctx.focus, maxlength: _ctx.maxlength, "placeholder-class": "u-search__content__input--placeholder", placeholder: _ctx.placeholder, "placeholder-style": `color: ${_ctx.placeholderColor}`, class: "u-search__content__input", type: "text", style: vue.normalizeStyle([{ textAlign: _ctx.inputAlign, color: _ctx.color, backgroundColor: _ctx.bgColor, height: _ctx.$u.addUnit(_ctx.height) }, _ctx.inputStyle]) }, null, 44, ["value", "disabled", "focus", "maxlength", "placeholder", "placeholder-style"]), $data.keyword && _ctx.clearabled && $data.focused ? (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "u-search__content__icon u-search__content__close", onClick: _cache[4] || (_cache[4] = (...args) => $options.clear && $options.clear(...args)) }, [ vue.createVNode(_component_u_icon, { name: "close", size: "11", color: "#ffffff", customStyle: "line-height: 12px" }) ])) : vue.createCommentVNode("v-if", true) ], 4 /* STYLE */ ), vue.createElementVNode( "text", { style: vue.normalizeStyle([_ctx.actionStyle]), class: vue.normalizeClass(["u-search__action", [($options.showActionBtn || $data.show) && "u-search__action--active"]]), onClick: _cache[5] || (_cache[5] = vue.withModifiers((...args) => $options.custom && $options.custom(...args), ["stop", "prevent"])) }, vue.toDisplayString(_ctx.actionText), 7 /* TEXT, CLASS, STYLE */ ) ], 4 /* STYLE */ ); } const __easycom_4$2 = /* @__PURE__ */ _export_sfc(_sfc_main$1J, [["render", _sfc_render$1I], ["__scopeId", "data-v-e082a34a"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-search/u-search.vue"]]); function pickExclude(obj, keys) { if (!["[object Object]", "[object File]"].includes(Object.prototype.toString.call(obj))) { return {}; } return Object.keys(obj).reduce((prev, key) => { if (!keys.includes(key)) { prev[key] = obj[key]; } return prev; }, {}); } function formatImage(res2) { return res2.tempFiles.map((item) => ({ ...pickExclude(item, ["path"]), type: "image", url: item.path, thumb: item.path, size: item.size })); } function formatVideo(res2) { return [ { ...pickExclude(res2, ["tempFilePath", "thumbTempFilePath", "errMsg"]), type: "video", url: res2.tempFilePath, thumb: res2.thumbTempFilePath, size: res2.size } ]; } function chooseFile({ accept, multiple, capture, compressed, maxDuration, sizeType, camera, maxCount }) { return new Promise((resolve, reject) => { switch (accept) { case "image": uni.chooseImage({ count: multiple ? Math.min(maxCount, 9) : 1, sourceType: capture, sizeType, success: (res2) => resolve(formatImage(res2)), fail: reject }); break; case "video": uni.chooseVideo({ sourceType: capture, compressed, maxDuration, camera, success: (res2) => resolve(formatVideo(res2)), fail: reject }); break; } }); } const mixinUp = { watch: { // 监听accept的变化,判断是否符合个平台要求 // 只有微信小程序才支持选择媒体,文件类型,所以这里做一个判断提示 accept: { immediate: true, handler(val) { if (val === "all" || val === "media") { uni.$u.error("只有微信小程序才支持把accept配置为all、media之一"); } if (val === "file") { uni.$u.error("只有微信小程序和H5(HX2.9.9)才支持把accept配置为file"); } } } } }; const props$q = { props: { // 接受的文件类型, 可选值为all media image file video accept: { type: String, default: props$E.upload.accept }, // 图片或视频拾取模式,当accept为image类型时设置capture可选额外camera可以直接调起摄像头 capture: { type: [String, Array], default: props$E.upload.capture }, // 当accept为video时生效,是否压缩视频,默认为true compressed: { type: Boolean, default: props$E.upload.compressed }, // 当accept为video时生效,可选值为back或front camera: { type: String, default: props$E.upload.camera }, // 当accept为video时生效,拍摄视频最长拍摄时间,单位秒 maxDuration: { type: Number, default: props$E.upload.maxDuration }, // 上传区域的图标,只能内置图标 uploadIcon: { type: String, default: props$E.upload.uploadIcon }, // 上传区域的图标的颜色,默认 uploadIconColor: { type: String, default: props$E.upload.uploadIconColor }, // 是否开启文件读取前事件 useBeforeRead: { type: Boolean, default: props$E.upload.useBeforeRead }, // 读取后的处理函数 afterRead: { type: Function, default: null }, // 读取前的处理函数 beforeRead: { type: Function, default: null }, // 是否显示组件自带的图片预览功能 previewFullImage: { type: Boolean, default: props$E.upload.previewFullImage }, // 最大上传数量 maxCount: { type: [String, Number], default: props$E.upload.maxCount }, // 是否启用 disabled: { type: Boolean, default: props$E.upload.disabled }, // 预览上传的图片时的裁剪模式,和image组件mode属性一致 imageMode: { type: String, default: props$E.upload.imageMode }, // 标识符,可以在回调函数的第二项参数中获取 name: { type: String, default: props$E.upload.name }, // 所选的图片的尺寸, 可选值为original compressed sizeType: { type: Array, default: props$E.upload.sizeType }, // 是否开启图片多选,部分安卓机型不支持 multiple: { type: Boolean, default: props$E.upload.multiple }, // 是否展示删除按钮 deletable: { type: Boolean, default: props$E.upload.deletable }, // 文件大小限制,单位为byte maxSize: { type: [String, Number], default: props$E.upload.maxSize }, // 显示已上传的文件列表 fileList: { type: Array, default: props$E.upload.fileList }, // 上传区域的提示文字 uploadText: { type: String, default: props$E.upload.uploadText }, // 内部预览图片区域和选择图片按钮的区域宽度 width: { type: [String, Number], default: props$E.upload.width }, // 内部预览图片区域和选择图片按钮的区域高度 height: { type: [String, Number], default: props$E.upload.height }, // 是否在上传完成后展示预览图 previewImage: { type: Boolean, default: props$E.upload.previewImage } } }; const _sfc_main$1I = { name: "u-upload", mixins: [mpMixin, mixin, mixinUp, props$q], data() { return { lists: [], isInCount: true }; }, watch: { // 监听文件列表的变化,重新整理内部数据 fileList: { immediate: true, handler() { this.formatFileList(); }, immediate: true, deep: true } }, emits: ["error", "beforeRead", "oversize", "afterRead", "delete", "clickPreview"], methods: { formatFileList() { const { fileList = [], maxCount } = this; const lists = fileList.map( (item) => Object.assign(Object.assign({}, item), { // 如果item.url为本地选择的blob文件的话,无法判断其为video还是image,此处优先通过accept做判断处理 isImage: this.accept === "image" || uni.$u.test.image(item.url || item.thumb), isVideo: this.accept === "video" || uni.$u.test.video(item.url || item.thumb), deletable: typeof item.deletable === "boolean" ? item.deletable : this.deletable }) ); this.lists = lists; this.isInCount = lists.length < maxCount; }, chooseFile() { const { maxCount, multiple, lists, disabled } = this; if (disabled) return; let capture; try { capture = uni.$u.test.array(this.capture) ? this.capture : this.capture.split(","); } catch (e) { capture = []; } chooseFile( Object.assign({ accept: this.accept, multiple: this.multiple, capture, compressed: this.compressed, maxDuration: this.maxDuration, sizeType: this.sizeType, camera: this.camera }, { maxCount: maxCount - lists.length }) ).then((res2) => { this.onBeforeRead(multiple ? res2 : res2[0]); }).catch((error2) => { this.$emit("error", error2); }); }, // 文件读取之前 onBeforeRead(file) { const { beforeRead, useBeforeRead } = this; let res2 = true; if (uni.$u.test.func(beforeRead)) { res2 = beforeRead(file, this.getDetail()); } if (useBeforeRead) { res2 = new Promise((resolve, reject) => { this.$emit( "beforeRead", Object.assign(Object.assign({ file }, this.getDetail()), { callback: (ok) => { ok ? resolve() : reject(); } }) ); }); } if (!res2) { return; } if (uni.$u.test.promise(res2)) { res2.then((data) => this.onAfterRead(data || file)); } else { this.onAfterRead(file); } }, getDetail(index2) { return { name: this.name, index: index2 == null ? this.fileList.length : index2 }; }, onAfterRead(file) { const { maxSize, afterRead } = this; const oversize = Array.isArray(file) ? file.some((item) => item.size > maxSize) : file.size > maxSize; if (oversize) { this.$emit("oversize", Object.assign({ file }, this.getDetail())); return; } if (typeof afterRead === "function") { afterRead(file, this.getDetail()); } this.$emit("afterRead", Object.assign({ file }, this.getDetail())); }, deleteItem(index2) { this.$emit( "delete", Object.assign(Object.assign({}, this.getDetail(index2)), { file: this.fileList[index2] }) ); }, // 预览图片 onPreviewImage(item) { if (!item.isImage || !this.previewFullImage) return; uni.previewImage({ // 先filter找出为图片的item,再返回filter结果中的图片url urls: this.lists.filter((item2) => this.accept === "image" || uni.$u.test.image(item2.url || item2.thumb)).map((item2) => item2.url || item2.thumb), current: item.url || item.thumb, fail() { uni.$u.toast("预览图片失败"); } }); }, onPreviewVideo(event) { if (!this.data.previewFullImage) return; const { index: index2 } = event.currentTarget.dataset; const { lists } = this.data; wx.previewMedia({ sources: lists.filter((item) => isVideoFile(item)).map( (item) => Object.assign(Object.assign({}, item), { type: "video" }) ), current: index2, fail() { uni.$u.toast("预览视频失败"); } }); }, onClickPreview(event) { const { index: index2 } = event.currentTarget.dataset; const item = this.data.lists[index2]; this.$emit( "clickPreview", Object.assign(Object.assign({}, item), this.getDetail(index2)) ); } } }; function _sfc_render$1H(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); const _component_u_loading_icon = resolveEasycom(vue.resolveDynamicComponent("u-loading-icon"), __easycom_0$d); return vue.openBlock(), vue.createElementBlock( "view", { class: "u-upload", style: vue.normalizeStyle([_ctx.$u.addStyle(_ctx.customStyle)]) }, [ vue.createElementVNode("view", { class: "u-upload__wrap" }, [ _ctx.previewImage ? (vue.openBlock(true), vue.createElementBlock( vue.Fragment, { key: 0 }, vue.renderList($data.lists, (item, index2) => { return vue.openBlock(), vue.createElementBlock("view", { class: "u-upload__wrap__preview", key: index2 }, [ item.isImage || item.type && item.type === "image" ? (vue.openBlock(), vue.createElementBlock("image", { key: 0, src: item.thumb || item.url, mode: _ctx.imageMode, class: "u-upload__wrap__preview__image", onClick: ($event) => $options.onPreviewImage(item), style: vue.normalizeStyle([{ width: _ctx.$u.addUnit(_ctx.width), height: _ctx.$u.addUnit(_ctx.height) }]) }, null, 12, ["src", "mode", "onClick"])) : (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "u-upload__wrap__preview__other" }, [ vue.createVNode(_component_u_icon, { color: "#80CBF9", size: "26", name: item.isVideo || item.type && item.type === "video" ? "movie" : "folder" }, null, 8, ["name"]), vue.createElementVNode( "text", { class: "u-upload__wrap__preview__other__text" }, vue.toDisplayString(item.isVideo || item.type && item.type === "video" ? "视频" : "文件"), 1 /* TEXT */ ) ])), item.status === "uploading" || item.status === "failed" ? (vue.openBlock(), vue.createElementBlock("view", { key: 2, class: "u-upload__status" }, [ vue.createElementVNode("view", { class: "u-upload__status__icon" }, [ item.status === "failed" ? (vue.openBlock(), vue.createBlock(_component_u_icon, { key: 0, name: "close-circle", color: "#ffffff", size: "25" })) : (vue.openBlock(), vue.createBlock(_component_u_loading_icon, { key: 1, size: "22", mode: "circle", color: "#ffffff" })) ]), item.message ? (vue.openBlock(), vue.createElementBlock( "text", { key: 0, class: "u-upload__status__message" }, vue.toDisplayString(item.message), 1 /* TEXT */ )) : vue.createCommentVNode("v-if", true) ])) : vue.createCommentVNode("v-if", true), item.status !== "uploading" && (_ctx.deletable || item.deletable) ? (vue.openBlock(), vue.createElementBlock("view", { key: 3, class: "u-upload__deletable", onClick: vue.withModifiers(($event) => $options.deleteItem(index2), ["stop"]) }, [ vue.createElementVNode("view", { class: "u-upload__deletable__icon" }, [ vue.createVNode(_component_u_icon, { name: "close", color: "#ffffff", size: "10" }) ]) ], 8, ["onClick"])) : vue.createCommentVNode("v-if", true), item.status === "success" ? (vue.openBlock(), vue.createElementBlock("view", { key: 4, class: "u-upload__success" }, [ vue.createElementVNode("view", { class: "u-upload__success__icon" }, [ vue.createVNode(_component_u_icon, { name: "checkmark", color: "#ffffff", size: "12" }) ]) ])) : vue.createCommentVNode("v-if", true) ]); }), 128 /* KEYED_FRAGMENT */ )) : vue.createCommentVNode("v-if", true), $data.isInCount ? (vue.openBlock(), vue.createElementBlock( vue.Fragment, { key: 1 }, [ _ctx.$slots.default || _ctx.$slots.$default ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, onClick: _cache[0] || (_cache[0] = (...args) => $options.chooseFile && $options.chooseFile(...args)) }, [ vue.renderSlot(_ctx.$slots, "default", {}, void 0, true) ])) : (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: vue.normalizeClass(["u-upload__button", [_ctx.disabled && "u-upload__button--disabled"]]), "hover-class": !_ctx.disabled ? "u-upload__button--hover" : "", "hover-stay-time": "150", onClick: _cache[1] || (_cache[1] = (...args) => $options.chooseFile && $options.chooseFile(...args)), style: vue.normalizeStyle([{ width: _ctx.$u.addUnit(_ctx.width), height: _ctx.$u.addUnit(_ctx.height) }]) }, [ vue.createVNode(_component_u_icon, { name: _ctx.uploadIcon, size: "26", color: _ctx.uploadIconColor }, null, 8, ["name", "color"]), _ctx.uploadText ? (vue.openBlock(), vue.createElementBlock( "text", { key: 0, class: "u-upload__button__text" }, vue.toDisplayString(_ctx.uploadText), 1 /* TEXT */ )) : vue.createCommentVNode("v-if", true) ], 14, ["hover-class"])) ], 64 /* STABLE_FRAGMENT */ )) : vue.createCommentVNode("v-if", true) ]) ], 4 /* STYLE */ ); } const __easycom_0$9 = /* @__PURE__ */ _export_sfc(_sfc_main$1I, [["render", _sfc_render$1H], ["__scopeId", "data-v-c8491d64"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-upload/u-upload.vue"]]); const props$p = { props: { // 是否展示组件 show: { type: Boolean, default: props$E.transition.show }, // 使用的动画模式 mode: { type: String, default: props$E.transition.mode }, // 动画的执行时间,单位ms duration: { type: [String, Number], default: props$E.transition.duration }, // 使用的动画过渡函数 timingFunction: { type: String, default: props$E.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版本的组件进场处理 vueEnter() { const classNames = getClassNames(this.mode); this.status = "enter"; this.$emit("beforeEnter"); this.inited = true; this.display = true; this.classes = classNames.enter; this.$nextTick(async () => { this.$emit("enter"); this.transitionEnded = false; this.$emit("afterEnter"); this.classes = classNames["enter-to"]; }); }, // 动画离场处理 vueLeave() { if (!this.display) return; const classNames = getClassNames(this.mode); this.status = "leave"; this.$emit("beforeLeave"); this.classes = classNames.leave; this.$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$1H = { name: "u-transition", data() { return { inited: false, // 是否显示/隐藏组件 viewStyle: {}, // 组件内部的样式 status: "", // 记录组件动画的状态 transitionEnded: false, // 组件是否结束的标记 display: false, // 组件是否展示 classes: "" // 应用的类名 }; }, 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$p], watch: { show: { handler(newVal) { newVal ? this.vueEnter() : this.vueLeave(); }, // 表示同时监听初始化时的props的show的意思 immediate: true } } }; function _sfc_render$1G(_ctx, _cache, $props, $setup, $data, $options) { return $data.inited ? (vue.openBlock(), vue.createElementBlock( "view", { key: 0, class: vue.normalizeClass(["u-transition", $data.classes]), ref: "u-transition", onClick: _cache[0] || (_cache[0] = (...args) => _ctx.clickHandler && _ctx.clickHandler(...args)), style: vue.normalizeStyle([$options.mergeStyle]), onTouchmove: _cache[1] || (_cache[1] = (...args) => _ctx.noop && _ctx.noop(...args)) }, [ vue.renderSlot(_ctx.$slots, "default", {}, void 0, true) ], 38 /* CLASS, STYLE, NEED_HYDRATION */ )) : vue.createCommentVNode("v-if", true); } const __easycom_1$5 = /* @__PURE__ */ _export_sfc(_sfc_main$1H, [["render", _sfc_render$1G], ["__scopeId", "data-v-5cec8177"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-transition/u-transition.vue"]]); const props$o = { props: { // 是否显示遮罩 show: { type: Boolean, default: props$E.overlay.show }, // 层级z-index zIndex: { type: [String, Number], default: props$E.overlay.zIndex }, // 遮罩的过渡时间,单位为ms duration: { type: [String, Number], default: props$E.overlay.duration }, // 不透明度值,当做rgba的第四个参数 opacity: { type: [String, Number], default: props$E.overlay.opacity } } }; const _sfc_main$1G = { name: "u-overlay", mixins: [mpMixin, mixin, props$o], computed: { overlayStyle() { const style = { position: "fixed", top: 0, left: 0, right: 0, zIndex: this.zIndex, bottom: 0, "background-color": `rgba(0, 0, 0, ${this.opacity})` }; return uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle)); } }, methods: { clickHandler() { this.$emit("click"); } } }; function _sfc_render$1F(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_transition = resolveEasycom(vue.resolveDynamicComponent("u-transition"), __easycom_1$5); return vue.openBlock(), vue.createBlock(_component_u_transition, { show: _ctx.show, "custom-class": "u-overlay", duration: _ctx.duration, "custom-style": $options.overlayStyle, onClick: $options.clickHandler }, { default: vue.withCtx(() => [ vue.renderSlot(_ctx.$slots, "default", {}, void 0, true) ]), _: 3 /* FORWARDED */ }, 8, ["show", "duration", "custom-style", "onClick"]); } const __easycom_0$8 = /* @__PURE__ */ _export_sfc(_sfc_main$1G, [["render", _sfc_render$1F], ["__scopeId", "data-v-9112bed9"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-overlay/u-overlay.vue"]]); const props$n = { props: { bgColor: { type: String, default: props$E.statusBar.bgColor } } }; const _sfc_main$1F = { name: "u-status-bar", mixins: [mpMixin, mixin, props$n], data() { return {}; }, computed: { style() { const style = {}; style.height = uni.$u.addUnit(uni.$u.sys().statusBarHeight, "px"); style.backgroundColor = this.bgColor; return uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle)); } } }; function _sfc_render$1E(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock( "view", { style: vue.normalizeStyle([$options.style]), class: "u-status-bar" }, [ vue.renderSlot(_ctx.$slots, "default", {}, void 0, true) ], 4 /* STYLE */ ); } const __easycom_0$7 = /* @__PURE__ */ _export_sfc(_sfc_main$1F, [["render", _sfc_render$1E], ["__scopeId", "data-v-eb8e0cdd"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-status-bar/u-status-bar.vue"]]); const props$m = { props: {} }; const _sfc_main$1E = { name: "u-safe-bottom", mixins: [mpMixin, mixin, props$m], data() { return { safeAreaBottomHeight: 0, isNvue: false }; }, computed: { style() { const style = {}; return uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle)); } }, mounted() { } }; function _sfc_render$1D(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock( "view", { class: vue.normalizeClass(["u-safe-bottom", [!$data.isNvue && "u-safe-area-inset-bottom"]]), style: vue.normalizeStyle([$options.style]) }, null, 6 /* CLASS, STYLE */ ); } const __easycom_3$5 = /* @__PURE__ */ _export_sfc(_sfc_main$1E, [["render", _sfc_render$1D], ["__scopeId", "data-v-f3d22cfe"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-safe-bottom/u-safe-bottom.vue"]]); const props$l = { props: { // 是否展示弹窗 show: { type: Boolean, default: props$E.popup.show }, // 是否显示遮罩 overlay: { type: Boolean, default: props$E.popup.overlay }, // 弹出的方向,可选值为 top bottom right left center mode: { type: String, default: props$E.popup.mode }, // 动画时长,单位ms duration: { type: [String, Number], default: props$E.popup.duration }, // 是否显示关闭图标 closeable: { type: Boolean, default: props$E.popup.closeable }, // 自定义遮罩的样式 overlayStyle: { type: [Object, String], default: props$E.popup.overlayStyle }, // 点击遮罩是否关闭弹窗 closeOnClickOverlay: { type: Boolean, default: props$E.popup.closeOnClickOverlay }, // 层级 zIndex: { type: [String, Number], default: props$E.popup.zIndex }, // 是否为iPhoneX留出底部安全距离 safeAreaInsetBottom: { type: Boolean, default: props$E.popup.safeAreaInsetBottom }, // 是否留出顶部安全距离(状态栏高度) safeAreaInsetTop: { type: Boolean, default: props$E.popup.safeAreaInsetTop }, // 自定义关闭图标位置,top-left为左上角,top-right为右上角,bottom-left为左下角,bottom-right为右下角 closeIconPos: { type: String, default: props$E.popup.closeIconPos }, // 是否显示圆角 round: { type: [Boolean, String, Number], default: props$E.popup.round }, // mode=center,也即中部弹出时,是否使用缩放模式 zoom: { type: Boolean, default: props$E.popup.zoom }, // 弹窗背景色,设置为transparent可去除白色背景 bgColor: { type: String, default: props$E.popup.bgColor }, // 遮罩的透明度,0-1之间 overlayOpacity: { type: [Number, String], default: props$E.popup.overlayOpacity } } }; const _sfc_main$1D = { name: "u-popup", mixins: [mpMixin, mixin, props$l], data() { return { overlayDuration: this.duration + 50 }; }, watch: { show(newValue, oldValue) { } }, computed: { transitionStyle() { const style = { zIndex: this.zIndex, position: "fixed", display: "flex" }; style[this.mode] = 0; if (this.mode === "left") { return uni.$u.deepMerge(style, { bottom: 0, top: 0 }); } else if (this.mode === "right") { return uni.$u.deepMerge(style, { bottom: 0, top: 0 }); } else if (this.mode === "top") { return uni.$u.deepMerge(style, { left: 0, right: 0 }); } else if (this.mode === "bottom") { return uni.$u.deepMerge(style, { left: 0, right: 0 }); } else if (this.mode === "center") { return uni.$u.deepMerge(style, { alignItems: "center", "justify-content": "center", top: 0, left: 0, right: 0, bottom: 0 }); } }, contentStyle() { const style = {}; uni.$u.sys(); if (this.mode !== "center") { style.flex = 1; } if (this.bgColor) { style.backgroundColor = this.bgColor; } if (this.round) { const value2 = uni.$u.addUnit(this.round); if (this.mode === "top") { style.borderBottomLeftRadius = value2; style.borderBottomRightRadius = value2; } else if (this.mode === "bottom") { style.borderTopLeftRadius = value2; style.borderTopRightRadius = value2; } else if (this.mode === "center") { style.borderRadius = value2; } } return uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle)); }, position() { if (this.mode === "center") { return this.zoom ? "fade-zoom" : "fade"; } if (this.mode === "left") { return "slide-left"; } if (this.mode === "right") { return "slide-right"; } if (this.mode === "bottom") { return "slide-up"; } if (this.mode === "top") { return "slide-down"; } } }, methods: { // 点击遮罩 overlayClick() { if (this.closeOnClickOverlay) { this.$emit("close"); } }, close(e) { this.$emit("close"); }, afterEnter() { this.$emit("open"); }, clickHandler() { if (this.mode === "center") { this.overlayClick(); } this.$emit("click"); } } }; function _sfc_render$1C(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_overlay = resolveEasycom(vue.resolveDynamicComponent("u-overlay"), __easycom_0$8); const _component_u_status_bar = resolveEasycom(vue.resolveDynamicComponent("u-status-bar"), __easycom_0$7); const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); const _component_u_safe_bottom = resolveEasycom(vue.resolveDynamicComponent("u-safe-bottom"), __easycom_3$5); const _component_u_transition = resolveEasycom(vue.resolveDynamicComponent("u-transition"), __easycom_1$5); return vue.openBlock(), vue.createElementBlock("view", { class: "u-popup" }, [ _ctx.overlay ? (vue.openBlock(), vue.createBlock(_component_u_overlay, { key: 0, show: _ctx.show, onClick: $options.overlayClick, duration: $data.overlayDuration, customStyle: _ctx.overlayStyle, opacity: _ctx.overlayOpacity }, null, 8, ["show", "onClick", "duration", "customStyle", "opacity"])) : vue.createCommentVNode("v-if", true), vue.createVNode(_component_u_transition, { show: _ctx.show, customStyle: $options.transitionStyle, mode: $options.position, duration: _ctx.duration, onAfterEnter: $options.afterEnter, onClick: $options.clickHandler }, { default: vue.withCtx(() => [ vue.createElementVNode( "view", { class: "u-popup__content", style: vue.normalizeStyle([$options.contentStyle]), onClick: _cache[1] || (_cache[1] = vue.withModifiers((...args) => _ctx.noop && _ctx.noop(...args), ["stop"])) }, [ _ctx.safeAreaInsetTop ? (vue.openBlock(), vue.createBlock(_component_u_status_bar, { key: 0 })) : vue.createCommentVNode("v-if", true), vue.renderSlot(_ctx.$slots, "default", {}, void 0, true), _ctx.closeable ? (vue.openBlock(), vue.createElementBlock( "view", { key: 1, onClick: _cache[0] || (_cache[0] = vue.withModifiers((...args) => $options.close && $options.close(...args), ["stop"])), class: vue.normalizeClass(["u-popup__content__close", ["u-popup__content__close--" + _ctx.closeIconPos]]), "hover-class": "u-popup__content__close--hover", "hover-stay-time": "150" }, [ vue.createVNode(_component_u_icon, { name: "close", color: "#909399", size: "18", bold: "" }) ], 2 /* CLASS */ )) : vue.createCommentVNode("v-if", true), _ctx.safeAreaInsetBottom ? (vue.openBlock(), vue.createBlock(_component_u_safe_bottom, { key: 2 })) : vue.createCommentVNode("v-if", true) ], 4 /* STYLE */ ) ]), _: 3 /* FORWARDED */ }, 8, ["show", "customStyle", "mode", "duration", "onAfterEnter", "onClick"]) ]); } const __easycom_3$4 = /* @__PURE__ */ _export_sfc(_sfc_main$1D, [["render", _sfc_render$1C], ["__scopeId", "data-v-05c24e9b"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-popup/u-popup.vue"]]); const _sfc_main$1C = { __name: "feedbackPopup", emits: ["submit"], setup(__props, { expose: __expose, emit: __emit }) { const show = vue.ref(false); const emit2 = __emit; const formRef = vue.ref(null); const submitting = vue.ref(false); const formData = vue.reactive({ feedbackContent: "", imgUrl: "", isbn: "" }); const rules2 = { feedbackContent: [{ required: true, message: "请输入反馈信息", trigger: ["blur", "change"] }] }; function open2(data) { show.value = true; formData.isbn = data.isbn; } function handleCancel() { resetForm(); show.value = false; } async function handleConfirm() { var _a; (_a = formRef.value) == null ? void 0 : _a.validate().then((res2) => { submitting.value = true; uni.$u.http.post("/app/feedback/add", formData).then((res3) => { if (res3.code == 200) { uni.showToast({ title: "反馈已提交", icon: "success" }); emit2("submit", formData); show.value = false; } else { uni.$u.toast(res3.msg); } }).finally(() => { submitting.value = false; }); }); } function resetForm() { var _a; formData.feedbackContent = ""; formData.imgUrl = ""; (_a = formRef.value) == null ? void 0 : _a.resetFields(); } __expose({ open: open2 }); const __returned__ = { show, emit: emit2, formRef, submitting, formData, rules: rules2, open: open2, handleCancel, handleConfirm, resetForm, ref: vue.ref, reactive: vue.reactive }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$1B(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_input = resolveEasycom(vue.resolveDynamicComponent("u-input"), __easycom_0$f); const _component_u_form_item = resolveEasycom(vue.resolveDynamicComponent("u-form-item"), __easycom_1$a); const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); const _component_u_upload = resolveEasycom(vue.resolveDynamicComponent("u-upload"), __easycom_0$9); const _component_u_form = resolveEasycom(vue.resolveDynamicComponent("u-form"), __easycom_2$7); const _component_u_button = resolveEasycom(vue.resolveDynamicComponent("u-button"), __easycom_3$6); const _component_u_popup = resolveEasycom(vue.resolveDynamicComponent("u-popup"), __easycom_3$4); return vue.openBlock(), vue.createBlock(_component_u_popup, { mode: "center", show: $setup.show, onClose: $setup.handleCancel, closeOnClickOverlay: false }, { default: vue.withCtx(() => [ vue.createElementVNode("view", { class: "popup-container" }, [ vue.createVNode(_component_u_form, { ref: "formRef", model: $setup.formData, rules: $setup.rules, labelPosition: "top", labelWidth: "100%", "error-type": "toast" }, { default: vue.withCtx(() => [ vue.createCommentVNode(" 反馈信息 "), vue.createVNode(_component_u_form_item, { label: "反馈图书信息", prop: "feedbackContent", borderBottom: true }, { default: vue.withCtx(() => [ vue.createVNode(_component_u_input, { modelValue: $setup.formData.feedbackContent, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.formData.feedbackContent = $event), type: "textarea", placeholder: "请输入反馈信息", border: true, height: "100" }, null, 8, ["modelValue"]) ]), _: 1 /* STABLE */ }), vue.createCommentVNode(" 图片上传 "), vue.createVNode(_component_u_form_item, { label: "上传照片", prop: "imgUrl", borderBottom: false }, { default: vue.withCtx(() => [ vue.createVNode(_component_u_upload, { fileList: $setup.formData.imgUrl, onAfterRead: _ctx.afterRead, onDelete: _ctx.deletePic, name: "1", multiple: "", maxCount: 1, imageMode: true }, { default: vue.withCtx(() => [ vue.createElementVNode("view", { class: "upload-slot" }, [ vue.createVNode(_component_u_icon, { name: "plus", size: "30" }), vue.createElementVNode("text", { class: "upload-text" }, "上传照片") ]) ]), _: 1 /* STABLE */ }, 8, ["fileList", "onAfterRead", "onDelete"]) ]), _: 1 /* STABLE */ }) ]), _: 1 /* STABLE */ }, 8, ["model"]), vue.createCommentVNode(" 按钮组 "), vue.createElementVNode("view", { class: "button-group" }, [ vue.createVNode(_component_u_button, { type: "info", text: "取消", plain: true, onClick: $setup.handleCancel, disabled: $setup.submitting }, null, 8, ["disabled"]), vue.createVNode(_component_u_button, { type: "primary", text: "确认", onClick: $setup.handleConfirm, loading: $setup.submitting }, null, 8, ["loading"]) ]) ]) ]), _: 1 /* STABLE */ }, 8, ["show"]); } const FeedbackPopup = /* @__PURE__ */ _export_sfc(_sfc_main$1C, [["render", _sfc_render$1B], ["__scopeId", "data-v-0265fb8a"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/book/components/feedbackPopup.vue"]]); const _sfc_main$1B = { __name: "index", setup(__props, { expose: __expose }) { __expose(); const showFeedback = vue.ref(null); function handleFeedbackSubmit(data) { formatAppLog("log", "at pages/book/index.vue:47", "反馈数据:", data); } const searchText = vue.ref(""); const bookList = vue.ref([{ bookName: "怪兽阿斗来了", suit: 0, price: 99, isbn: "9787559603159" }]); async function handleSearch() { if (!searchText.value) { uni.showToast({ title: "请输入ISBN", icon: "none" }); return; } await getSimpleBookInfoByIsbn(searchText.value); } async function getSimpleBookInfoByIsbn(isbn) { uni.$u.http.get(`/app/book/getSimpleBookInfoByIsbn/${isbn}`).then((res2) => { if (res2.code == 200) { let bool = bookList.value.some((v) => v.isbn == isbn); if (!bool) { bookList.value.push(res2.data); } } else { uni.$u.toast(res2.msg); } }); } function scanCode() { uni.scanCode({ scanType: ["barCode"], success: (res2) => { searchText.value = res2.result; getSimpleBookInfoByIsbn(res2.result); }, fail: () => { uni.showToast({ title: "扫码失败", icon: "none" }); } }); } function editBook(book) { var _a; (_a = showFeedback.value) == null ? void 0 : _a.open(book); } onLoad(() => { uni.$u.useGlobalEvent((e) => { if (!e.barcode) return; getSimpleBookInfoByIsbn(e.barcode); }); }); const __returned__ = { showFeedback, handleFeedbackSubmit, searchText, bookList, handleSearch, getSimpleBookInfoByIsbn, scanCode, editBook, ref: vue.ref, computed: vue.computed, get onLoad() { return onLoad; }, FeedbackPopup }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$1A(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); const _component_u_search = resolveEasycom(vue.resolveDynamicComponent("u-search"), __easycom_4$2); return vue.openBlock(), vue.createElementBlock("view", { class: "book-list", style: { "padding": "0" } }, [ vue.createCommentVNode(" 搜索框 "), vue.createElementVNode("view", { class: "search-header" }, [ vue.createElementVNode("view", { class: "search-box" }, [ vue.createVNode(_component_u_icon, { style: { "margin-right": "16rpx" }, name: "scan", size: "30", color: "#ffffff", onClick: $setup.scanCode }), vue.createVNode(_component_u_search, { height: "80rpx", modelValue: $setup.searchText, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.searchText = $event), placeholder: "请输入ISBN", showAction: false, clearabled: true, onSearch: $setup.handleSearch, bgColor: "#ffffff" }, null, 8, ["modelValue"]) ]) ]), vue.createCommentVNode(" 搜索结果列表 "), $setup.bookList.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "book-list" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.bookList, (book, index2) => { return vue.openBlock(), vue.createElementBlock("view", { class: "book-item", key: index2 }, [ vue.createElementVNode("view", { class: "book-info" }, [ vue.createElementVNode("image", { class: "book-image", src: book.cover, mode: "aspectFill" }, null, 8, ["src"]), vue.createElementVNode("view", { class: "book-details" }, [ vue.createElementVNode( "text", { class: "book-title" }, vue.toDisplayString(book.bookName), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "book-isbn" }, "ISBN: " + vue.toDisplayString(book.isbn), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "book-price" }, "定价: " + vue.toDisplayString(book.price), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "book-set" }, "套装: " + vue.toDisplayString(book.suit == 1 ? "是" : "否"), 1 /* TEXT */ ) ]) ]), vue.createElementVNode("view", { class: "book-action" }, [ vue.createVNode(_component_u_icon, { name: "edit-pen", size: "30", color: "#4cd964", onClick: ($event) => $setup.editBook(book) }, null, 8, ["onClick"]) ]) ]); }), 128 /* KEYED_FRAGMENT */ )) ])) : vue.createCommentVNode("v-if", true), vue.createVNode( $setup["FeedbackPopup"], { ref: "showFeedback", onSubmit: $setup.handleFeedbackSubmit }, null, 512 /* NEED_PATCH */ ) ]); } const PagesBookIndex = /* @__PURE__ */ _export_sfc(_sfc_main$1B, [["render", _sfc_render$1A], ["__scopeId", "data-v-0452ab4c"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/book/index.vue"]]); const props$k = { props: { // 标签类型info、primary、success、warning、error type: { type: String, default: props$E.tag.type }, // 不可用 disabled: { type: [Boolean, String], default: props$E.tag.disabled }, // 标签的大小,large,medium,mini size: { type: String, default: props$E.tag.size }, // tag的形状,circle(两边半圆形), square(方形,带圆角) shape: { type: String, default: props$E.tag.shape }, // 标签文字 text: { type: [String, Number], default: props$E.tag.text }, // 背景颜色,默认为空字符串,即不处理 bgColor: { type: String, default: props$E.tag.bgColor }, // 标签字体颜色,默认为空字符串,即不处理 color: { type: String, default: props$E.tag.color }, // 标签的边框颜色 borderColor: { type: String, default: props$E.tag.borderColor }, // 关闭按钮图标的颜色 closeColor: { type: String, default: props$E.tag.closeColor }, // 点击时返回的索引值,用于区分例遍的数组哪个元素被点击了 name: { type: [String, Number], default: props$E.tag.name }, // // 模式选择,dark|light|plain // mode: { // type: String, // default: 'light' // }, // 镂空时是否填充背景色 plainFill: { type: Boolean, default: props$E.tag.plainFill }, // 是否镂空 plain: { type: Boolean, default: props$E.tag.plain }, // 是否可关闭 closable: { type: Boolean, default: props$E.tag.closable }, // 是否显示 show: { type: Boolean, default: props$E.tag.show }, // 内置图标,或绝对路径的图片 icon: { type: String, default: props$E.tag.icon } } }; const _sfc_main$1A = { name: "u-tag", mixins: [mpMixin, mixin, props$k], data() { return {}; }, computed: { style() { const style = {}; if (this.bgColor) { style.backgroundColor = this.bgColor; } if (this.color) { style.color = this.color; } if (this.borderColor) { style.borderColor = this.borderColor; } return style; }, // nvue下,文本颜色无法继承父元素 textColor() { const style = {}; if (this.color) { style.color = this.color; } return style; }, imgStyle() { const width = this.size === "large" ? "17px" : this.size === "medium" ? "15px" : "13px"; return { width, height: width }; }, // 文本的样式 closeSize() { const size = this.size === "large" ? 15 : this.size === "medium" ? 13 : 12; return size; }, // 图标大小 iconSize() { const size = this.size === "large" ? 21 : this.size === "medium" ? 19 : 16; return size; }, // 图标颜色 elIconColor() { return this.iconColor ? this.iconColor : this.plain ? this.type : "#ffffff"; } }, methods: { // 点击关闭按钮 closeHandler() { this.$emit("close", this.name); }, // 点击标签 clickHandler() { this.$emit("click", this.name); } } }; function _sfc_render$1z(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); const _component_u_transition = resolveEasycom(vue.resolveDynamicComponent("u-transition"), __easycom_1$5); return vue.openBlock(), vue.createBlock(_component_u_transition, { mode: "fade", show: _ctx.show, style: { "display": "inline-flex" } }, { default: vue.withCtx(() => [ vue.createElementVNode("view", { class: "u-tag-wrapper" }, [ vue.createElementVNode( "view", { class: vue.normalizeClass(["u-tag", [`u-tag--${_ctx.shape}`, !_ctx.plain && `u-tag--${_ctx.type}`, _ctx.plain && `u-tag--${_ctx.type}--plain`, `u-tag--${_ctx.size}`, _ctx.plain && _ctx.plainFill && `u-tag--${_ctx.type}--plain--fill`]]), onClick: _cache[0] || (_cache[0] = vue.withModifiers((...args) => $options.clickHandler && $options.clickHandler(...args), ["stop"])), style: vue.normalizeStyle([{ marginRight: _ctx.closable ? "10px" : 0, marginTop: _ctx.closable ? "10px" : 0 }, $options.style]) }, [ vue.renderSlot(_ctx.$slots, "icon", {}, () => [ _ctx.icon ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "u-tag__icon" }, [ _ctx.$u.test.image(_ctx.icon) ? (vue.openBlock(), vue.createElementBlock("image", { key: 0, src: _ctx.icon, style: vue.normalizeStyle([$options.imgStyle]) }, null, 12, ["src"])) : (vue.openBlock(), vue.createBlock(_component_u_icon, { key: 1, color: $options.elIconColor, name: _ctx.icon, size: $options.iconSize }, null, 8, ["color", "name", "size"])) ])) : vue.createCommentVNode("v-if", true) ], true), vue.createElementVNode( "text", { class: vue.normalizeClass(["u-tag__text", [`u-tag__text--${_ctx.type}`, _ctx.plain && `u-tag__text--${_ctx.type}--plain`, `u-tag__text--${_ctx.size}`]]), style: vue.normalizeStyle([$options.textColor]) }, vue.toDisplayString(_ctx.text), 7 /* TEXT, CLASS, STYLE */ ) ], 6 /* CLASS, STYLE */ ), _ctx.closable ? (vue.openBlock(), vue.createElementBlock( "view", { key: 0, class: vue.normalizeClass(["u-tag__close", [`u-tag__close--${_ctx.size}`]]), onClick: _cache[1] || (_cache[1] = vue.withModifiers((...args) => $options.closeHandler && $options.closeHandler(...args), ["stop"])), style: vue.normalizeStyle({ backgroundColor: _ctx.closeColor }) }, [ vue.createVNode(_component_u_icon, { name: "close", size: $options.closeSize, color: "#ffffff" }, null, 8, ["size"]) ], 6 /* CLASS, STYLE */ )) : vue.createCommentVNode("v-if", true) ]) ]), _: 3 /* FORWARDED */ }, 8, ["show"]); } const __easycom_2$4 = /* @__PURE__ */ _export_sfc(_sfc_main$1A, [["render", _sfc_render$1z], ["__scopeId", "data-v-2fd891bb"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-tag/u-tag.vue"]]); const _sfc_main$1z = { __name: "WarehouseSelector", props: { show: { type: Boolean, default: false } }, emits: ["update:show", "warehouse-selected"], setup(__props, { expose: __expose, emit: __emit }) { __expose(); const props2 = __props; const emit2 = __emit; const searchKeyword = vue.ref(""); const searchResults = vue.ref([]); const historyWarehouses = vue.ref([""]); const selectedWarehouse = vue.ref(""); const warehouseSearch = (name) => { formatAppLog("log", "at pages/index/express/components/WarehouseSelector.vue:68", name); uni.$u.http.post("/app/appUser/searchGodown?name=" + name).then((res2) => { if (res2.code == 200) { searchResults.value = res2.data; } }); }; const getUserBindHistory = () => { uni.$u.http.get("/app/appUser/getUserBindGodownReocrd").then((res2) => { if (res2.code == 200) { historyWarehouses.value = res2.data; } }); }; getUserBindHistory(); const handleSearch = () => { warehouseSearch(searchKeyword.value); }; const selectItem = vue.ref({}); const selectWarehouse = (item) => { selectedWarehouse.value = item.godownName; selectItem.value = item; }; const handleClose = () => { emit2("update:show", false); searchKeyword.value = ""; }; const handleConfirm = () => { if (selectedWarehouse.value) { emit2("warehouse-selected", selectItem.value); handleClose(); } }; const __returned__ = { props: props2, emit: emit2, searchKeyword, searchResults, historyWarehouses, selectedWarehouse, warehouseSearch, getUserBindHistory, handleSearch, selectItem, selectWarehouse, handleClose, handleConfirm, ref: vue.ref }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$1y(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_search = resolveEasycom(vue.resolveDynamicComponent("u-search"), __easycom_4$2); const _component_u_tag = resolveEasycom(vue.resolveDynamicComponent("u-tag"), __easycom_2$4); const _component_u_button = resolveEasycom(vue.resolveDynamicComponent("u-button"), __easycom_3$6); const _component_u_popup = resolveEasycom(vue.resolveDynamicComponent("u-popup"), __easycom_3$4); return vue.openBlock(), vue.createBlock(_component_u_popup, { show: $props.show, onClose: $setup.handleClose, mode: "bottom", round: "10" }, { default: vue.withCtx(() => [ vue.createElementVNode("view", { class: "warehouse-selector" }, [ vue.createElementVNode("view", { style: { "flex": "1" } }, [ vue.createCommentVNode(" 标题 "), vue.createElementVNode("view", { class: "header" }, [ vue.createElementVNode("text", { class: "title" }, "绑定仓库") ]), vue.createCommentVNode(" 搜索框 "), vue.createElementVNode("view", { class: "search-box" }, [ vue.createVNode(_component_u_search, { inputStyle: { "height": "80rpx", "font-size": "16px" }, actionStyle: { "font-size": "16px", color: "#22ac38" }, modelValue: $setup.searchKeyword, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.searchKeyword = $event), placeholder: "搜索仓库", "show-action": true, "action-text": "搜索", onSearch: $setup.handleSearch, onCustom: $setup.handleSearch }, null, 8, ["modelValue"]) ]), vue.createCommentVNode(" 搜索结果 "), $setup.searchResults.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "search-result" }, [ vue.createElementVNode("text", { class: "section-title" }, "搜索结果"), vue.createElementVNode("view", { class: "tag-group" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.searchResults, (item) => { return vue.openBlock(), vue.createBlock(_component_u_tag, { key: item, text: item.godownName, plain: $setup.selectedWarehouse !== item.godownName, shape: "circle", onClick: ($event) => $setup.selectWarehouse(item), size: "large" }, null, 8, ["text", "plain", "onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ]) ])) : vue.createCommentVNode("v-if", true), vue.createCommentVNode(" 历史绑定 "), $setup.historyWarehouses.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "history-section" }, [ vue.createElementVNode("text", { class: "section-title" }, "历史绑定"), vue.createElementVNode("view", { class: "tag-group" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.historyWarehouses, (item) => { return vue.openBlock(), vue.createBlock(_component_u_tag, { key: item, text: item, plain: $setup.selectedWarehouse !== item.godownName, shape: "circle", onClick: ($event) => $setup.selectWarehouse(item), size: "large" }, null, 8, ["text", "plain", "onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ]) ])) : vue.createCommentVNode("v-if", true) ]), vue.createCommentVNode(" 底部按钮 "), vue.createElementVNode("view", { class: "footer" }, [ vue.createVNode(_component_u_button, { onClick: $setup.handleClose, text: "取消", plain: "", shape: "circle" }), vue.createVNode(_component_u_button, { type: "primary", onClick: $setup.handleConfirm, text: "确定", shape: "circle" }) ]) ]) ]), _: 1 /* STABLE */ }, 8, ["show"]); } const WarehouseSelector = /* @__PURE__ */ _export_sfc(_sfc_main$1z, [["render", _sfc_render$1y], ["__scopeId", "data-v-b9bd3f04"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/express/components/WarehouseSelector.vue"]]); const placeholderStyle$2 = "font-size:32rpx"; const _sfc_main$1y = { __name: "transfer-sign", setup(__props, { expose: __expose }) { __expose(); const customStyle = vue.reactive({ height: "90rpx" }); const selectedWarehouse = vue.ref(""); const form = vue.ref({ "packageCode": "", "godownId": "" }); const showSelector = vue.ref(false); function openWarehouseSelector() { showSelector.value = true; } function handleWarehouseSelected(item) { selectedWarehouse.value = item.godownName; form.value.godownId = item.id; } function scanCode() { uni.scanCode({ success: (res2) => { form.value.packageCode = res2.result; handleBarcode(res2.result); }, fail: (err) => { uni.$u.toast("扫码失败"); } }); } function handleBarcode(code2) { if (!code2) return uni.$u.toast("请输入物流单号"); uni.$u.http.post("/app/ordersign/transferSign", form.value).then((res2) => { if (res2.code == 200) { let text = code2 + "签收成功"; uni.$u.ttsModule.speak(text); } else { let text = code2 + "订单不存在"; uni.$u.ttsModule.speak(text); } }); } function getUserBindWarehouse() { uni.$u.http.get("/app/appUser/getUserBindGodown").then((res2) => { var _a, _b; if (res2.code == 200) { selectedWarehouse.value = (_a = res2.data) == null ? void 0 : _a.godownName; form.value.godownId = (_b = res2.data) == null ? void 0 : _b.id; } }); } onLoad(() => { getUserBindWarehouse(); uni.$u.useGlobalEvent((e) => { form.value.packageCode = e.barcode; handleBarcode(e.barcode); }); }); const __returned__ = { placeholderStyle: placeholderStyle$2, customStyle, selectedWarehouse, form, showSelector, openWarehouseSelector, handleWarehouseSelected, scanCode, handleBarcode, getUserBindWarehouse, reactive: vue.reactive, ref: vue.ref, get onLoad() { return onLoad; }, WarehouseSelector }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$1x(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_input = resolveEasycom(vue.resolveDynamicComponent("u-input"), __easycom_0$f); const _component_u_button = resolveEasycom(vue.resolveDynamicComponent("u-button"), __easycom_3$6); return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createElementVNode("view", { class: "main-content" }, [ vue.createElementVNode("view", { class: "input-group" }, [ vue.createVNode(_component_u_input, { customStyle: $setup.customStyle, "placeholder-style": $setup.placeholderStyle, modelValue: $setup.selectedWarehouse, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.selectedWarehouse = $event), placeholder: "请选择仓库", readonly: "", border: "surround" }, null, 8, ["customStyle", "modelValue"]), vue.createVNode(_component_u_button, { customStyle: $setup.customStyle, type: "info", color: "#a4adb3", onClick: $setup.openWarehouseSelector, text: "选择" }, null, 8, ["customStyle"]) ]), vue.createElementVNode("view", { class: "input-group" }, [ vue.createVNode(_component_u_input, { customStyle: $setup.customStyle, "placeholder-style": $setup.placeholderStyle, modelValue: $setup.form.packageCode, "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.form.packageCode = $event), placeholder: "扫描/输入物流单号", border: "surround" }, null, 8, ["customStyle", "modelValue"]), vue.createVNode(_component_u_button, { customStyle: $setup.customStyle, type: "info", color: "#a4adb3", onClick: _cache[2] || (_cache[2] = ($event) => $setup.handleBarcode($setup.form.packageCode)), text: "确定" }, null, 8, ["customStyle"]) ]) ]), vue.createElementVNode("view", { class: "fixed-bottom" }, [ vue.createVNode(_component_u_button, { size: "large", type: "success", onClick: $setup.scanCode, text: "扫码", class: "scan-button" }) ]), vue.createVNode($setup["WarehouseSelector"], { show: $setup.showSelector, "onUpdate:show": _cache[3] || (_cache[3] = ($event) => $setup.showSelector = $event), onWarehouseSelected: $setup.handleWarehouseSelected }, null, 8, ["show"]) ]); } const PagesIndexExpressTransferSign = /* @__PURE__ */ _export_sfc(_sfc_main$1y, [["render", _sfc_render$1x], ["__scopeId", "data-v-333d344a"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/express/transfer-sign.vue"]]); const _sfc_main$1x = { __name: "scan", setup(__props, { expose: __expose }) { __expose(); const isInitializing = vue.ref(false); const isBluetoothOpened = vue.ref(false); const isDiscovering = vue.ref(false); const isConnecting = vue.ref(false); const isConnected = vue.ref(false); const devices = vue.ref([]); const selectedDevice = vue.ref(null); const scanData = vue.ref(null); const deviceId = vue.ref(""); const serviceId = vue.ref(""); const characteristicId = vue.ref(""); const initBluetooth = () => { isInitializing.value = true; uni.openBluetoothAdapter({ success: (res2) => { formatAppLog("log", "at pages/index/express/scan.vue:35", "蓝牙适配器初始化成功"); isBluetoothOpened.value = true; isInitializing.value = false; }, fail: (err) => { formatAppLog("log", "at pages/index/express/scan.vue:40", "蓝牙适配器初始化失败:", err); isInitializing.value = false; } }); }; const startDiscovery = () => { isDiscovering.value = true; uni.startBluetoothDevicesDiscovery({ success: (res2) => { formatAppLog("log", "at pages/index/express/scan.vue:50", "开始搜索蓝牙设备成功"); uni.onBluetoothDeviceFound((devicesRes) => { const newDevices = devicesRes.devices; devices.value = devices.value.concat(newDevices); formatAppLog("log", "at pages/index/express/scan.vue:54", devices.value, "devices.value"); const scanGunDevice = newDevices.find((device) => device.name.includes("Z0")); if (scanGunDevice) { selectedDevice.value = scanGunDevice; deviceId.value = scanGunDevice.deviceId; } }); uni.onBluetoothAdapterStateChange((stateRes) => { if (!stateRes.available) { isDiscovering.value = false; formatAppLog("log", "at pages/index/express/scan.vue:64", "蓝牙适配器不可用,停止搜索"); } }); }, fail: (err) => { formatAppLog("log", "at pages/index/express/scan.vue:69", "开始搜索蓝牙设备失败:", err); isDiscovering.value = false; } }); }; const connectDevice = () => { isConnecting.value = true; uni.createBLEConnection({ deviceId: deviceId.value, success: (res2) => { formatAppLog("log", "at pages/index/express/scan.vue:80", "连接蓝牙设备成功"); isConnected.value = true; isConnecting.value = false; getBLEDeviceServices(deviceId.value); }, fail: (err) => { formatAppLog("log", "at pages/index/express/scan.vue:86", "连接蓝牙设备失败:", err); isConnecting.value = false; } }); }; const getBLEDeviceServices = (deviceId2) => { uni.getBLEDeviceServices({ deviceId: deviceId2, success: (res2) => { formatAppLog("log", "at pages/index/express/scan.vue:96", "获取服务列表成功:", res2.services); const targetService = res2.services.find((service) => service.uuid === "目标服务UUID"); if (targetService) { serviceId.value = targetService.uuid; getBLEDeviceCharacteristics(deviceId2, serviceId.value); } }, fail: (err) => { formatAppLog("log", "at pages/index/express/scan.vue:104", "获取服务列表失败:", err); } }); }; const getBLEDeviceCharacteristics = (deviceId2, serviceId2) => { uni.getBLEDeviceCharacteristics({ deviceId: deviceId2, serviceId: serviceId2, success: (res2) => { formatAppLog("log", "at pages/index/express/scan.vue:114", "获取特征列表成功:", res2.characteristics); const targetCharacteristic = res2.characteristics.find((characteristic) => characteristic.properties.read && characteristic.properties.notify); if (targetCharacteristic) { characteristicId.value = targetCharacteristic.uuid; } }, fail: (err) => { formatAppLog("log", "at pages/index/express/scan.vue:121", "获取特征列表失败:", err); } }); }; const startDataMonitor = () => { uni.onBLECharacteristicValueChange((characteristicRes) => { const value2 = characteristicRes.value; const data = ab2str(value2); formatAppLog("log", "at pages/index/express/scan.vue:130", "获取到扫码枪扫描的数据:", data); scanData.value = data; }); uni.notifyBLECharacteristicValueChange({ state: true, deviceId: deviceId.value, characteristicId: characteristicId.value, success: (res2) => { formatAppLog("log", "at pages/index/express/scan.vue:138", "开启特征值通知成功"); }, fail: (err) => { formatAppLog("log", "at pages/index/express/scan.vue:141", "开启特征值通知失败:", err); } }); }; const ab2str = (buffer) => { return String.fromCharCode.apply(null, new Uint8Array(buffer)); }; const __returned__ = { isInitializing, isBluetoothOpened, isDiscovering, isConnecting, isConnected, devices, selectedDevice, scanData, deviceId, serviceId, characteristicId, initBluetooth, startDiscovery, connectDevice, getBLEDeviceServices, getBLEDeviceCharacteristics, startDataMonitor, ab2str, ref: vue.ref, get onLoad() { return onLoad; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$1w(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createElementVNode("button", { onClick: $setup.initBluetooth, disabled: $setup.isInitializing }, "初始化蓝牙", 8, ["disabled"]), vue.createElementVNode("button", { onClick: $setup.startDiscovery, disabled: $setup.isDiscovering || !$setup.isBluetoothOpened }, "开始搜索设备", 8, ["disabled"]), vue.createElementVNode("button", { onClick: $setup.connectDevice, disabled: !$setup.selectedDevice || $setup.isConnecting }, "连接设备", 8, ["disabled"]), vue.createElementVNode("button", { onClick: $setup.startDataMonitor, disabled: !$setup.isConnected }, "开始监听数据", 8, ["disabled"]), $setup.scanData ? (vue.openBlock(), vue.createElementBlock( "view", { key: 0 }, "扫描结果: " + vue.toDisplayString($setup.scanData), 1 /* TEXT */ )) : vue.createCommentVNode("v-if", true), (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.devices, (item) => { return vue.openBlock(), vue.createElementBlock( "view", null, vue.toDisplayString(item.name), 1 /* TEXT */ ); }), 256 /* UNKEYED_FRAGMENT */ )) ]); } const PagesIndexExpressScan = /* @__PURE__ */ _export_sfc(_sfc_main$1x, [["render", _sfc_render$1w], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/express/scan.vue"]]); const props$j = { props: { // radio的名称 name: { type: [String, Number, Boolean], default: props$E.radio.name }, // 形状,square为方形,circle为圆型 shape: { type: String, default: props$E.radio.shape }, // 是否禁用 disabled: { type: [String, Boolean], default: props$E.radio.disabled }, // 是否禁止点击提示语选中单选框 labelDisabled: { type: [String, Boolean], default: props$E.radio.labelDisabled }, // 选中状态下的颜色,如设置此值,将会覆盖parent的activeColor值 activeColor: { type: String, default: props$E.radio.activeColor }, // 未选中的颜色 inactiveColor: { type: String, default: props$E.radio.inactiveColor }, // 图标的大小,单位px iconSize: { type: [String, Number], default: props$E.radio.iconSize }, // label的字体大小,px单位 labelSize: { type: [String, Number], default: props$E.radio.labelSize }, // label提示文字,因为nvue下,直接slot进来的文字,由于特殊的结构,无法修改样式 label: { type: [String, Number], default: props$E.radio.label }, // 整体的大小 size: { type: [String, Number], default: props$E.radio.size }, // 图标颜色 color: { type: String, default: props$E.radio.color }, // label的颜色 labelColor: { type: String, default: props$E.radio.labelColor }, // 图标颜色 iconColor: { type: String, default: props$E.radio.iconColor } } }; const _sfc_main$1w = { name: "u-radio", mixins: [mpMixin, mixin, props$j], data() { return { checked: false, // 当你看到这段代码的时候, // 父组件的默认值,因为头条小程序不支持在computed中使用this.parent.shape的形式 // 故只能使用如此方法 parentData: { iconSize: 12, labelDisabled: null, disabled: null, shape: null, activeColor: null, inactiveColor: null, size: 18, value: null, modelValue: null, iconColor: null, placement: "row", borderBottom: false, iconPlacement: "left" } }; }, computed: { // 是否禁用,如果父组件u-raios-group禁用的话,将会忽略子组件的配置 elDisabled() { return this.disabled !== "" ? this.disabled : this.parentData.disabled !== null ? this.parentData.disabled : false; }, // 是否禁用label点击 elLabelDisabled() { return this.labelDisabled !== "" ? this.labelDisabled : this.parentData.labelDisabled !== null ? this.parentData.labelDisabled : false; }, // 组件尺寸,对应size的值,默认值为21px elSize() { return this.size ? this.size : this.parentData.size ? this.parentData.size : 21; }, // 组件的勾选图标的尺寸,默认12px elIconSize() { return this.iconSize ? this.iconSize : this.parentData.iconSize ? this.parentData.iconSize : 12; }, // 组件选中激活时的颜色 elActiveColor() { return this.activeColor ? this.activeColor : this.parentData.activeColor ? this.parentData.activeColor : "#2979ff"; }, // 组件选未中激活时的颜色 elInactiveColor() { return this.inactiveColor ? this.inactiveColor : this.parentData.inactiveColor ? this.parentData.inactiveColor : "#c8c9cc"; }, // label的颜色 elLabelColor() { return this.labelColor ? this.labelColor : this.parentData.labelColor ? this.parentData.labelColor : "#606266"; }, // 组件的形状 elShape() { return this.shape ? this.shape : this.parentData.shape ? this.parentData.shape : "circle"; }, // label大小 elLabelSize() { return uni.$u.addUnit(this.labelSize ? this.labelSize : this.parentData.labelSize ? this.parentData.labelSize : "15"); }, elIconColor() { const iconColor = this.iconColor ? this.iconColor : this.parentData.iconColor ? this.parentData.iconColor : "#ffffff"; if (this.elDisabled) { return this.checked ? this.elInactiveColor : "transparent"; } else { return this.checked ? iconColor : "transparent"; } }, iconClasses() { let classes = []; classes.push("u-radio__icon-wrap--" + this.elShape); if (this.elDisabled) { classes.push("u-radio__icon-wrap--disabled"); } if (this.checked && this.elDisabled) { classes.push("u-radio__icon-wrap--disabled--checked"); } return classes; }, iconWrapStyle() { const style = {}; style.backgroundColor = this.checked && !this.elDisabled ? this.elActiveColor : "#ffffff"; style.borderColor = this.checked && !this.elDisabled ? this.elActiveColor : this.elInactiveColor; style.width = uni.$u.addUnit(this.elSize); style.height = uni.$u.addUnit(this.elSize); if (this.parentData.iconPlacement === "right") { style.marginRight = 0; } return style; }, radioStyle() { const style = {}; if (this.parentData.borderBottom && this.parentData.placement === "row") { uni.$u.error("检测到您将borderBottom设置为true,需要同时将u-radio-group的placement设置为column才有效"); } if (this.parentData.borderBottom && this.parentData.placement === "column") { style.paddingBottom = uni.$u.os() === "ios" ? "12px" : "8px"; } return uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle)); } }, mounted() { this.init(); }, methods: { init() { this.updateParentData(); if (!this.parent) { uni.$u.error("u-radio必须搭配u-radio-group组件使用"); } this.checked = this.name === this.parentData.modelValue; }, updateParentData() { this.getParentData("u-radio-group"); }, // 点击图标 iconClickHandler(e) { this.preventEvent(e); if (!this.elDisabled) { this.setRadioCheckedStatus(); } }, // 横向两端排列时,点击组件即可触发选中事件 wrapperClickHandler(e) { this.parentData.iconPlacement === "right" && this.iconClickHandler(e); }, // 点击label labelClickHandler(e) { this.preventEvent(e); if (!this.elLabelDisabled && !this.elDisabled) { this.setRadioCheckedStatus(); } }, emitEvent() { if (!this.checked) { this.$emit("change", this.name); this.$nextTick(() => { uni.$u.formValidate(this, "change"); }); } }, // 改变组件选中状态 // 这里的改变的依据是,更改本组件的checked值为true,同时通过父组件遍历所有u-radio实例 // 将本组件外的其他u-radio的checked都设置为false(都被取消选中状态),因而只剩下一个为选中状态 setRadioCheckedStatus() { this.emitEvent(); this.checked = true; typeof this.parent.unCheckedOther === "function" && this.parent.unCheckedOther(this); } } }; function _sfc_render$1v(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); return vue.openBlock(), vue.createElementBlock( "view", { class: vue.normalizeClass(["u-radio", [`u-radio-label--${$data.parentData.iconPlacement}`, $data.parentData.borderBottom && $data.parentData.placement === "column" && "u-border-bottom"]]), onClick: _cache[2] || (_cache[2] = vue.withModifiers((...args) => $options.wrapperClickHandler && $options.wrapperClickHandler(...args), ["stop"])), style: vue.normalizeStyle([$options.radioStyle]) }, [ vue.createElementVNode( "view", { class: vue.normalizeClass(["u-radio__icon-wrap", $options.iconClasses]), onClick: _cache[0] || (_cache[0] = vue.withModifiers((...args) => $options.iconClickHandler && $options.iconClickHandler(...args), ["stop"])), style: vue.normalizeStyle([$options.iconWrapStyle]) }, [ vue.renderSlot(_ctx.$slots, "icon", {}, () => [ vue.createVNode(_component_u_icon, { class: "u-radio__icon-wrap__icon", name: "checkbox-mark", size: $options.elIconSize, color: $options.elIconColor }, null, 8, ["size", "color"]) ], true) ], 6 /* CLASS, STYLE */ ), vue.createElementVNode( "text", { class: "u-radio__text", onClick: _cache[1] || (_cache[1] = vue.withModifiers((...args) => $options.labelClickHandler && $options.labelClickHandler(...args), ["stop"])), style: vue.normalizeStyle({ color: $options.elDisabled ? $options.elInactiveColor : $options.elLabelColor, fontSize: $options.elLabelSize, lineHeight: $options.elLabelSize }) }, vue.toDisplayString(_ctx.label), 5 /* TEXT, STYLE */ ) ], 6 /* CLASS, STYLE */ ); } const __easycom_0$6 = /* @__PURE__ */ _export_sfc(_sfc_main$1w, [["render", _sfc_render$1v], ["__scopeId", "data-v-83036558"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-radio/u-radio.vue"]]); const props$i = { props: { // 绑定的值 modelValue: { type: [String, Number, Boolean], default: props$E.radioGroup.value }, // 是否禁用全部radio disabled: { type: Boolean, default: props$E.radioGroup.disabled }, // 形状,circle-圆形,square-方形 shape: { type: String, default: props$E.radioGroup.shape }, // 选中状态下的颜色,如设置此值,将会覆盖parent的activeColor值 activeColor: { type: String, default: props$E.radioGroup.activeColor }, // 未选中的颜色 inactiveColor: { type: String, default: props$E.radioGroup.inactiveColor }, // 标识符 name: { type: String, default: props$E.radioGroup.name }, // 整个组件的尺寸,默认px size: { type: [String, Number], default: props$E.radioGroup.size }, // 布局方式,row-横向,column-纵向 placement: { type: String, default: props$E.radioGroup.placement }, // label的文本 label: { type: [String], default: props$E.radioGroup.label }, // label的颜色 (默认 '#303133' ) labelColor: { type: [String], default: props$E.radioGroup.labelColor }, // label的字体大小,px单位 labelSize: { type: [String, Number], default: props$E.radioGroup.labelSize }, // 是否禁止点击文本操作checkbox(默认 false ) labelDisabled: { type: Boolean, default: props$E.radioGroup.labelDisabled }, // 图标颜色 iconColor: { type: String, default: props$E.radioGroup.iconColor }, // 图标的大小,单位px iconSize: { type: [String, Number], default: props$E.radioGroup.iconSize }, // 竖向配列时,是否显示下划线 borderBottom: { type: Boolean, default: props$E.radioGroup.borderBottom }, // 图标与文字的对齐方式 iconPlacement: { type: String, default: props$E.radio.iconPlacement } } }; const _sfc_main$1v = { name: "u-radio-group", mixins: [mpMixin, mixin, props$i], computed: { // 这里computed的变量,都是子组件u-radio需要用到的,由于头条小程序的兼容性差异,子组件无法实时监听父组件参数的变化 // 所以需要手动通知子组件,这里返回一个parentData变量,供watch监听,在其中去通知每一个子组件重新从父组件(u-radio-group) // 拉取父组件新的变化后的参数 parentData() { return [ this.modelValue, this.disabled, this.inactiveColor, this.activeColor, this.size, this.labelDisabled, this.shape, this.iconSize, this.borderBottom, this.placement ]; }, bemClass() { return this.bem("radio-group", ["placement"]); } }, watch: { // 当父组件需要子组件需要共享的参数发生了变化,手动通知子组件 parentData() { if (this.children.length) { this.children.map((child) => { typeof child.init === "function" && child.init(); }); } } }, data() { return {}; }, created() { this.children = []; }, emits: ["update:modelValue", "change"], methods: { // 将其他的radio设置为未选中的状态 unCheckedOther(childInstance) { this.children.map((child) => { if (childInstance !== child) { child.checked = false; } }); const { name } = childInstance; this.$emit("update:modelValue", name); this.$emit("change", name); } } }; function _sfc_render$1u(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock( "view", { class: vue.normalizeClass(["u-radio-group", $options.bemClass]) }, [ vue.renderSlot(_ctx.$slots, "default", {}, void 0, true) ], 2 /* CLASS */ ); } const __easycom_1$4 = /* @__PURE__ */ _export_sfc(_sfc_main$1v, [["render", _sfc_render$1u], ["__scopeId", "data-v-cbc8bf70"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-radio-group/u-radio-group.vue"]]); const props$h = { props: { // 是否虚线 dashed: { type: Boolean, default: props$E.divider.dashed }, // 是否细线 hairline: { type: Boolean, default: props$E.divider.hairline }, // 是否以点替代文字,优先于text字段起作用 dot: { type: Boolean, default: props$E.divider.dot }, // 内容文本的位置,left-左边,center-中间,right-右边 textPosition: { type: String, default: props$E.divider.textPosition }, // 文本内容 text: { type: [String, Number], default: props$E.divider.text }, // 文本大小 textSize: { type: [String, Number], default: props$E.divider.textSize }, // 文本颜色 textColor: { type: String, default: props$E.divider.textColor }, // 线条颜色 lineColor: { type: String, default: props$E.divider.lineColor } } }; const _sfc_main$1u = { name: "u-divider", mixins: [mpMixin, mixin, props$h], computed: { textStyle() { const style = {}; style.fontSize = uni.$u.addUnit(this.textSize); style.color = this.textColor; return style; }, // 左边线条的的样式 leftLineStyle() { const style = {}; if (this.textPosition === "left") { style.width = "80rpx"; } else { style.flex = 1; } return style; }, // 右边线条的的样式 rightLineStyle() { const style = {}; if (this.textPosition === "right") { style.width = "80rpx"; } else { style.flex = 1; } return style; } }, methods: { // divider组件被点击时触发 click() { this.$emit("click"); } } }; function _sfc_render$1t(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_line = resolveEasycom(vue.resolveDynamicComponent("u-line"), __easycom_0$e); return vue.openBlock(), vue.createElementBlock( "view", { class: "u-divider", style: vue.normalizeStyle([_ctx.$u.addStyle(_ctx.customStyle)]), onClick: _cache[0] || (_cache[0] = (...args) => $options.click && $options.click(...args)) }, [ vue.createVNode(_component_u_line, { color: _ctx.lineColor, customStyle: $options.leftLineStyle, hairline: _ctx.hairline, dashed: _ctx.dashed }, null, 8, ["color", "customStyle", "hairline", "dashed"]), _ctx.dot ? (vue.openBlock(), vue.createElementBlock("text", { key: 0, class: "u-divider__dot" }, "●")) : _ctx.text ? (vue.openBlock(), vue.createElementBlock( "text", { key: 1, class: "u-divider__text", style: vue.normalizeStyle([$options.textStyle]) }, vue.toDisplayString(_ctx.text), 5 /* TEXT, STYLE */ )) : vue.createCommentVNode("v-if", true), vue.createVNode(_component_u_line, { color: _ctx.lineColor, customStyle: $options.rightLineStyle, hairline: _ctx.hairline, dashed: _ctx.dashed }, null, 8, ["color", "customStyle", "hairline", "dashed"]) ], 4 /* STYLE */ ); } const __easycom_2$3 = /* @__PURE__ */ _export_sfc(_sfc_main$1u, [["render", _sfc_render$1t], ["__scopeId", "data-v-ea022cee"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-divider/u-divider.vue"]]); const _sfc_main$1t = { __name: "quick-check", setup(__props, { expose: __expose }) { __expose(); const selectedBatchId = vue.ref(""); const showBatchSelector = vue.ref(false); const count = vue.ref(0); const formData = vue.ref({ batchNum: "", packageCode: "", searchType: "2", packageStatus: "" }); const batchList = vue.ref([]); function getBatchList() { uni.$u.http.get("/app/batchnum/pagelist").then((res2) => { batchList.value = res2.rows; }); } getBatchList(); const openBatchSelector = () => { showBatchSelector.value = true; }; const selectBatch = (batch) => { selectedBatchId.value = batch.id; count.value = Number(batch.num); formData.value.batchNum = batch.batchNum; showBatchSelector.value = false; }; const handleSearch = () => { formatAppLog("log", "at pages/index/express/quick-check.vue:116", "查询:", formData.value.packageCode); }; const handleSubmitBatch = () => { formatAppLog("log", "at pages/index/express/quick-check.vue:121", "提交批次:", formData.value.batchNum); if (!formData.value.batchNum) { uni.$u.toast("请选择批次"); return; } if (!formData.value.packageCode) { uni.$u.toast("请扫描/输入物流单号"); return; } uni.$u.http.post("/app/ordersign/deliverySign", formData.value).then((res2) => { formatAppLog("log", "at pages/index/express/quick-check.vue:131", res2); if (res2.code == 200) { let text = code + "快递验收成功"; uni.$u.ttsModule.speak(text); } else { let text = code + "订单不存在"; uni.$u.ttsModule.speak(text); } }); }; const handleScan = () => { uni.scanCode({ success: (res2) => { formData.value.packageCode = res2.result; handleSubmitBatch(); } }); }; const createNewBatch = () => { selectedBatchId.value = "new"; formData.value.batchNum = "新建批次"; count.value = 0; }; onLoad(() => { uni.$u.useGlobalEvent((e) => { formData.value.packageCode = e.barcode; handleSubmitBatch(); }); }); const __returned__ = { selectedBatchId, showBatchSelector, count, formData, batchList, getBatchList, openBatchSelector, selectBatch, handleSearch, handleSubmitBatch, handleScan, createNewBatch, ref: vue.ref, get onLoad() { return onLoad; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$1s(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); const _component_u_input = resolveEasycom(vue.resolveDynamicComponent("u-input"), __easycom_0$f); const _component_u_radio = resolveEasycom(vue.resolveDynamicComponent("u-radio"), __easycom_0$6); const _component_u_radio_group = resolveEasycom(vue.resolveDynamicComponent("u-radio-group"), __easycom_1$4); const _component_u_button = resolveEasycom(vue.resolveDynamicComponent("u-button"), __easycom_3$6); const _component_u_divider = resolveEasycom(vue.resolveDynamicComponent("u-divider"), __easycom_2$3); const _component_u_popup = resolveEasycom(vue.resolveDynamicComponent("u-popup"), __easycom_3$4); return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createCommentVNode(" 批次选择区域 "), vue.createElementVNode("view", { class: "select-section" }, [ vue.createElementVNode("view", { class: "batch-select" }, [ vue.createElementVNode("text", { class: "required" }, "*"), vue.createElementVNode("text", { style: { "font-size": "32rpx" } }, "批次:"), vue.createElementVNode("view", { class: "batch-input" }, [ vue.createElementVNode("view", { class: "batch-input-text", onClick: $setup.openBatchSelector }), vue.createVNode(_component_u_input, { modelValue: $setup.formData.batchNum, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.formData.batchNum = $event), placeholder: "请选择/新建批次", readonly: "", border: "surround", "placeholder-style": "font-size: 32rpx", "custom-style": "font-size: 32rpx;height: 88rpx;" }, { suffix: vue.withCtx(() => [ vue.createVNode(_component_u_icon, { name: "arrow-down", size: "18" }) ]), _: 1 /* STABLE */ }, 8, ["modelValue"]) ]) ]) ]), vue.createCommentVNode(" 数量显示 "), vue.createElementVNode("view", { class: "count-badge" }, [ vue.createTextVNode(" 数量 "), vue.createElementVNode( "text", { style: { "font-size": "32rpx" } }, vue.toDisplayString($setup.count), 1 /* TEXT */ ) ]), vue.createCommentVNode(" 底部按钮 "), vue.createElementVNode("view", { class: "footer" }, [ vue.createCommentVNode(" 查询区域 "), vue.createElementVNode("view", { class: "query-section" }, [ vue.createVNode(_component_u_radio_group, { modelValue: $setup.formData.searchType, "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.formData.searchType = $event), class: "query-radio" }, { default: vue.withCtx(() => [ vue.createVNode(_component_u_radio, { label: "查订单", name: "1", labelSize: "16px", iconSize: "16px" }), vue.createVNode(_component_u_radio, { label: "查物流", "custom-style": "margin-left:20px", name: "2", labelSize: "16px", iconSize: "16px" }) ]), _: 1 /* STABLE */ }, 8, ["modelValue"]), vue.createElementVNode("view", { class: "search-box" }, [ vue.createVNode(_component_u_input, { "custom-style": "font-size: 32rpx;", "placeholder-style": "font-size: 32rpx;", modelValue: $setup.formData.packageCode, "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $setup.formData.packageCode = $event), adjustPosition: true, placeholder: "扫描/输入物流单号", border: "surround", clearable: "" }, null, 8, ["modelValue"]), vue.createVNode(_component_u_button, { color: "#c8c8c8", text: "查询", onClick: $setup.handleSearch }) ]) ]), vue.createVNode(_component_u_divider), vue.createElementVNode("view", { style: { "display": "flex" } }, [ vue.createVNode(_component_u_button, { size: "large", type: "warning", text: "验收扫码", onClick: $setup.handleScan }), vue.createVNode(_component_u_button, { size: "large", type: "primary", text: "提交批次", onClick: $setup.handleSubmitBatch }) ]) ]), vue.createCommentVNode(" 批次选择弹窗 "), vue.createVNode(_component_u_popup, { show: $setup.showBatchSelector, mode: "bottom", onClose: _cache[3] || (_cache[3] = ($event) => $setup.showBatchSelector = false) }, { default: vue.withCtx(() => [ vue.createElementVNode("view", { class: "batch-popup", style: { "min-height": "300px" } }, [ vue.createElementVNode("view", { class: "popup-header" }, [ vue.createElementVNode("text", { style: { "font-size": "32rpx" } }, "批次") ]), vue.createElementVNode("scroll-view", { "scroll-y": "", class: "batch-list" }, [ vue.createElementVNode( "view", { class: vue.normalizeClass(["batch-item", { active: $setup.selectedBatchId === "new" }]), onClick: $setup.createNewBatch }, [ vue.createElementVNode("text", null, "新建批次") ], 2 /* CLASS */ ), (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.batchList, (batch) => { return vue.openBlock(), vue.createElementBlock("view", { key: batch.id, class: vue.normalizeClass(["batch-item", { active: $setup.selectedBatchId === batch.id }]), onClick: ($event) => $setup.selectBatch(batch) }, [ vue.createElementVNode( "text", null, vue.toDisplayString(batch.batchNum), 1 /* TEXT */ ), vue.createElementVNode( "text", null, vue.toDisplayString(batch.num), 1 /* TEXT */ ) ], 10, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ]) ]) ]), _: 1 /* STABLE */ }, 8, ["show"]) ]); } const PagesIndexExpressQuickCheck = /* @__PURE__ */ _export_sfc(_sfc_main$1t, [["render", _sfc_render$1s], ["__scopeId", "data-v-61cc11f4"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/express/quick-check.vue"]]); const keymap = { "7": "0", "8": "1", "9": "2", "10": "3", "11": "4", "12": "5", "13": "6", "14": "7", "15": "8", "16": "9", "29": "A", "30": "B", "31": "C", "32": "D", "33": "E", "34": "F", "35": "G", "36": "H", "37": "I", "38": "J", "39": "K", "40": "L", "41": "M", "42": "N", "43": "O", "44": "P", "45": "Q", "46": "R", "47": "S", "48": "T", "49": "U", "50": "V", "51": "W", "52": "X", "53": "Y", "54": "Z", "55": ",", "56": ".", "59": "", "69": "-", "70": "=", "81": "+" }; const _sfc_main$1s = { __name: "quick-unpack", setup(__props, { expose: __expose }) { __expose(); function goScan() { uni.navigateTo({ url: "/pages/index/express/scan" }); } const unpackCode = vue.ref(""); function confirmTrackingNumber(code2) { uni.$u.http.post("/app/ordersign/unpackingSign", { packageCode: code2 }).then((res2) => { if (res2.code == 200) { let text = code2 + "拆包成功"; uni.$u.ttsModule.speak(text); } else { let text = code2 + "订单不存在"; uni.$u.ttsModule.speak(text); } }); } function scanCode() { uni.scanCode({ success: (res2) => { unpackCode.value = res2.result; confirmTrackingNumber(res2.result); formatAppLog("log", "at pages/index/express/quick-unpack.vue:66", "扫码结果:", res2.result); }, fail: (err) => { formatAppLog("error", "at pages/index/express/quick-unpack.vue:69", "扫码失败:", err); } }); } const inputCache = vue.ref(""); const keypress = (e) => { if (e.keyCode === 66 || e.key == "Enter") { unpackCode.value = inputCache.value; confirmTrackingNumber(unpackCode.value); inputCache.value = ""; } else { inputCache.value += keymap[e.keyCode] || ""; } }; onLoad(() => { uni.$u.useGlobalEvent((e) => { unpackCode.value = e.barcode; confirmTrackingNumber(e.barcode); }); plus.key.addEventListener("keyup", keypress); }); onUnload(() => { plus.key.removeEventListener("keyup", keypress); }); const __returned__ = { goScan, unpackCode, confirmTrackingNumber, scanCode, inputCache, keypress, ref: vue.ref, get onLoad() { return onLoad; }, get onUnload() { return onUnload; }, get keymap() { return keymap; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$1r(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_button = resolveEasycom(vue.resolveDynamicComponent("u-button"), __easycom_3$6); const _component_u_input = resolveEasycom(vue.resolveDynamicComponent("u-input"), __easycom_0$f); return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createCommentVNode(' \r\n \r\n \r\n \r\n \r\n 扫描结果: {{ scanData }}\r\n '), vue.createVNode(_component_u_button, { type: "primary", onClick: $setup.goScan, text: "扫码" }), vue.createElementVNode("view", { class: "main-content" }, [ vue.createElementVNode("view", { class: "input-group" }, [ vue.createVNode(_component_u_input, { "placeholder-style": "font-size:32rpx", modelValue: $setup.unpackCode, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.unpackCode = $event), placeholder: "扫描/输入物流单号", border: "surround" }, null, 8, ["modelValue"]), vue.createVNode(_component_u_button, { type: "primary", onClick: _cache[1] || (_cache[1] = ($event) => $setup.confirmTrackingNumber($setup.unpackCode)), text: "确定" }) ]) ]), vue.createElementVNode("view", { class: "fixed-bottom" }, [ vue.createVNode(_component_u_button, { size: "large", type: "success", onClick: $setup.scanCode, text: "扫码", class: "scan-button" }) ]) ]); } const PagesIndexExpressQuickUnpack = /* @__PURE__ */ _export_sfc(_sfc_main$1s, [["render", _sfc_render$1r], ["__scopeId", "data-v-cd1b3ab5"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/express/quick-unpack.vue"]]); const props$g = { props: { // tab的数据 list: { type: Array, default: props$E.subsection.list }, // 当前活动的tab的index current: { type: [String, Number], default: props$E.subsection.current }, // 激活的颜色 activeColor: { type: String, default: props$E.subsection.activeColor }, // 未激活的颜色 inactiveColor: { type: String, default: props$E.subsection.inactiveColor }, // 模式选择,mode=button为按钮形式,mode=subsection时为分段模式 mode: { type: String, default: props$E.subsection.mode }, // 字体大小 fontSize: { type: [String, Number], default: props$E.subsection.fontSize }, // 激活tab的字体是否加粗 bold: { type: Boolean, default: props$E.subsection.bold }, // mode = button时,组件背景颜色 bgColor: { type: String, default: props$E.subsection.bgColor }, // 从list元素对象中读取的键名 keyName: { type: String, default: props$E.subsection.keyName } } }; const _sfc_main$1r = { name: "u-subsection", mixins: [mpMixin, mixin, props$g], data() { return { // 组件尺寸 itemRect: { width: 0, height: 0 } }; }, watch: { list(newValue, oldValue) { this.init(); }, current: { immediate: true, handler(n) { } } }, computed: { wrapperStyle() { const style = {}; if (this.mode === "button") { style.backgroundColor = this.bgColor; } return style; }, // 滑块的样式 barStyle() { const style = {}; style.width = `${this.itemRect.width}px`; style.height = `${this.itemRect.height}px`; style.transform = `translateX(${this.current * this.itemRect.width}px)`; if (this.mode === "subsection") { style.backgroundColor = this.activeColor; } return style; }, // 分段器item的样式 itemStyle(index2) { return (index3) => { const style = {}; if (this.mode === "subsection") { style.borderColor = this.activeColor; style.borderWidth = "1px"; style.borderStyle = "solid"; } return style; }; }, // 分段器文字颜色 textStyle(index2) { return (index3) => { const style = {}; style.fontWeight = this.bold && this.current === index3 ? "bold" : "normal"; style.fontSize = uni.$u.addUnit(this.fontSize); if (this.mode === "subsection") { style.color = this.current === index3 ? "#fff" : this.inactiveColor; } else { style.color = this.current === index3 ? this.activeColor : this.inactiveColor; } return style; }; } }, mounted() { this.init(); }, methods: { init() { uni.$u.sleep().then(() => this.getRect()); }, // 判断展示文本 getText(item) { return typeof item === "object" ? item[this.keyName] : item; }, // 获取组件的尺寸 getRect() { this.$uGetRect(".u-subsection__item--0").then((size) => { this.itemRect = size; }); }, clickHandler(index2) { this.$emit("change", index2); } } }; function _sfc_render$1q(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock( "view", { class: vue.normalizeClass(["u-subsection", [`u-subsection--${_ctx.mode}`]]), ref: "u-subsection", style: vue.normalizeStyle([_ctx.$u.addStyle(_ctx.customStyle), $options.wrapperStyle]) }, [ vue.createElementVNode( "view", { class: vue.normalizeClass(["u-subsection__bar", [ _ctx.mode === "button" && "u-subsection--button__bar", _ctx.current === 0 && _ctx.mode === "subsection" && "u-subsection__bar--first", _ctx.current > 0 && _ctx.current < _ctx.list.length - 1 && _ctx.mode === "subsection" && "u-subsection__bar--center", _ctx.current === _ctx.list.length - 1 && _ctx.mode === "subsection" && "u-subsection__bar--last" ]]), ref: "u-subsection__bar", style: vue.normalizeStyle([$options.barStyle]) }, null, 6 /* CLASS, STYLE */ ), (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(_ctx.list, (item, index2) => { return vue.openBlock(), vue.createElementBlock("view", { class: vue.normalizeClass(["u-subsection__item", [ `u-subsection__item--${index2}`, index2 < _ctx.list.length - 1 && "u-subsection__item--no-border-right", index2 === 0 && "u-subsection__item--first", index2 === _ctx.list.length - 1 && "u-subsection__item--last" ]]), ref_for: true, ref: `u-subsection__item--${index2}`, style: vue.normalizeStyle([$options.itemStyle(index2)]), onClick: ($event) => $options.clickHandler(index2), key: index2 }, [ vue.createElementVNode( "text", { class: "u-subsection__item__text", style: vue.normalizeStyle([$options.textStyle(index2)]) }, vue.toDisplayString($options.getText(item)), 5 /* TEXT, STYLE */ ) ], 14, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ], 6 /* CLASS, STYLE */ ); } const __easycom_0$5 = /* @__PURE__ */ _export_sfc(_sfc_main$1r, [["render", _sfc_render$1q], ["__scopeId", "data-v-b5ccb67e"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-subsection/u-subsection.vue"]]); const props$f = { props: { // 吸顶容器到顶部某个距离的时候,进行吸顶,在H5平台,NavigationBar为44px offsetTop: { type: [String, Number], default: props$E.sticky.offsetTop }, // 自定义导航栏的高度 customNavHeight: { type: [String, Number], default: props$E.sticky.customNavHeight }, // 是否开启吸顶功能 disabled: { type: Boolean, default: props$E.sticky.disabled }, // 吸顶区域的背景颜色 bgColor: { type: String, default: props$E.sticky.bgColor }, // z-index值 zIndex: { type: [String, Number], default: props$E.sticky.zIndex }, // 列表中的索引值 index: { type: [String, Number], default: props$E.sticky.index } } }; const _sfc_main$1q = { name: "u-sticky", mixins: [mpMixin, mixin, props$f], data() { return { cssSticky: false, // 是否使用css的sticky实现 stickyTop: 0, // 吸顶的top值,因为可能受自定义导航栏影响,最终的吸顶值非offsetTop值 elId: uni.$u.guid(), left: 0, // js模式时,吸顶的内容因为处于postition: fixed模式,为了和原来保持一致的样式,需要记录并重新设置它的left,height,width属性 width: "auto", height: "auto", fixed: false // js模式时,是否处于吸顶模式 }; }, computed: { style() { const style = {}; if (!this.disabled) { if (this.cssSticky) { style.position = "sticky"; style.zIndex = this.uZindex; style.top = uni.$u.addUnit(this.stickyTop); } else { style.height = this.fixed ? this.height + "px" : "auto"; } } else { style.position = "static"; } style.backgroundColor = this.bgColor; return uni.$u.deepMerge(uni.$u.addStyle(this.customStyle), style); }, // 吸顶内容的样式 stickyContent() { const style = {}; if (!this.cssSticky) { style.position = this.fixed ? "fixed" : "static"; style.top = this.stickyTop + "px"; style.left = this.left + "px"; style.width = this.width == "auto" ? "auto" : this.width + "px"; style.zIndex = this.uZindex; } return style; }, uZindex() { return this.zIndex ? this.zIndex : uni.$u.zIndex.sticky; } }, mounted() { this.init(); }, methods: { init() { this.getStickyTop(); this.checkSupportCssSticky(); if (!this.cssSticky) { !this.disabled && this.initObserveContent(); } }, initObserveContent() { this.$uGetRect("#" + this.elId).then((res2) => { this.height = res2.height; this.left = res2.left; this.width = res2.width; this.$nextTick(() => { this.observeContent(); }); }); }, observeContent() { this.disconnectObserver("contentObserver"); const contentObserver = uni.createIntersectionObserver({ // 检测的区间范围 thresholds: [0.95, 0.98, 1] }); contentObserver.relativeToViewport({ top: -this.stickyTop }); contentObserver.observe(`#${this.elId}`, (res2) => { this.setFixed(res2.boundingClientRect.top); }); this.contentObserver = contentObserver; }, setFixed(top) { const fixed = top <= this.stickyTop; this.fixed = fixed; }, disconnectObserver(observerName) { const observer = this[observerName]; observer && observer.disconnect(); }, getStickyTop() { this.stickyTop = uni.$u.getPx(this.offsetTop) + uni.$u.getPx(this.customNavHeight); }, async checkSupportCssSticky() { if (uni.$u.os() === "android" && Number(uni.$u.sys().system) > 8) { this.cssSticky = true; } this.cssSticky = await this.checkComputedStyle(); if (uni.$u.os() === "ios") { this.cssSticky = true; } }, // 在APP和微信小程序上,通过uni.createSelectorQuery可以判断是否支持css sticky checkComputedStyle() { return new Promise((resolve) => { uni.createSelectorQuery().in(this).select(".u-sticky").fields({ computedStyle: ["position"] }).exec((e) => { resolve("sticky" === e[0].position); }); }); }, // H5通过创建元素的形式嗅探是否支持css sticky // 判断浏览器是否支持sticky属性 checkCssStickyForH5() { } }, beforeDestroy() { this.disconnectObserver("contentObserver"); } }; function _sfc_render$1p(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "u-sticky", id: $data.elId, style: vue.normalizeStyle([$options.style]) }, [ vue.createElementVNode( "view", { style: vue.normalizeStyle([$options.stickyContent]), class: "u-sticky__content" }, [ vue.renderSlot(_ctx.$slots, "default", {}, void 0, true) ], 4 /* STYLE */ ) ], 12, ["id"]); } const __easycom_1$3 = /* @__PURE__ */ _export_sfc(_sfc_main$1q, [["render", _sfc_render$1p], ["__scopeId", "data-v-8b303089"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-sticky/u-sticky.vue"]]); const props$e = { props: { // 是否展示modal show: { type: Boolean, default: props$E.modal.show }, // 标题 title: { type: [String], default: props$E.modal.title }, // 弹窗内容 content: { type: String, default: props$E.modal.content }, // 确认文案 confirmText: { type: String, default: props$E.modal.confirmText }, // 取消文案 cancelText: { type: String, default: props$E.modal.cancelText }, // 是否显示确认按钮 showConfirmButton: { type: Boolean, default: props$E.modal.showConfirmButton }, // 是否显示取消按钮 showCancelButton: { type: Boolean, default: props$E.modal.showCancelButton }, // 确认按钮颜色 confirmColor: { type: String, default: props$E.modal.confirmColor }, // 取消文字颜色 cancelColor: { type: String, default: props$E.modal.cancelColor }, // 对调确认和取消的位置 buttonReverse: { type: Boolean, default: props$E.modal.buttonReverse }, // 是否开启缩放效果 zoom: { type: Boolean, default: props$E.modal.zoom }, // 是否异步关闭,只对确定按钮有效 asyncClose: { type: Boolean, default: props$E.modal.asyncClose }, // 是否允许点击遮罩关闭modal closeOnClickOverlay: { type: Boolean, default: props$E.modal.closeOnClickOverlay }, // 给一个负的margin-top,往上偏移,避免和键盘重合的情况 negativeTop: { type: [String, Number], default: props$E.modal.negativeTop }, // modal宽度,不支持百分比,可以数值,px,rpx单位 width: { type: [String, Number], default: props$E.modal.width }, // 确认按钮的样式,circle-圆形,square-方形,如设置,将不会显示取消按钮 confirmButtonShape: { type: String, default: props$E.modal.confirmButtonShape } } }; const _sfc_main$1p = { name: "u-modal", mixins: [mpMixin, mixin, props$e], data() { return { loading: false }; }, watch: { show(n) { if (n && this.loading) this.loading = false; } }, methods: { // 点击确定按钮 confirmHandler() { if (this.asyncClose) { this.loading = true; } this.$emit("confirm"); }, // 点击取消按钮 cancelHandler() { this.$emit("cancel"); }, // 点击遮罩 // 从原理上来说,modal的遮罩点击,并不是真的点击到了遮罩 // 因为modal依赖于popup的中部弹窗类型,中部弹窗比较特殊,虽有然遮罩,但是为了让弹窗内容能flex居中 // 多了一个透明的遮罩,此透明的遮罩会覆盖在灰色的遮罩上,所以实际上是点击不到灰色遮罩的,popup内部在 // 透明遮罩的子元素做了.stop处理,所以点击内容区,也不会导致误触发 clickHandler() { if (this.closeOnClickOverlay) { this.$emit("close"); } } } }; function _sfc_render$1o(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_line = resolveEasycom(vue.resolveDynamicComponent("u-line"), __easycom_0$e); const _component_u_loading_icon = resolveEasycom(vue.resolveDynamicComponent("u-loading-icon"), __easycom_0$d); const _component_u_popup = resolveEasycom(vue.resolveDynamicComponent("u-popup"), __easycom_3$4); return vue.openBlock(), vue.createBlock(_component_u_popup, { mode: "center", zoom: _ctx.zoom, show: _ctx.show, customStyle: { borderRadius: "6px", overflow: "hidden", marginTop: `-${_ctx.$u.addUnit(_ctx.negativeTop)}` }, closeOnClickOverlay: _ctx.closeOnClickOverlay, safeAreaInsetBottom: false, duration: 400, onClick: $options.clickHandler }, { default: vue.withCtx(() => [ vue.createElementVNode( "view", { class: "u-modal", style: vue.normalizeStyle({ width: _ctx.$u.addUnit(_ctx.width) }) }, [ _ctx.title ? (vue.openBlock(), vue.createElementBlock( "text", { key: 0, class: "u-modal__title" }, vue.toDisplayString(_ctx.title), 1 /* TEXT */ )) : vue.createCommentVNode("v-if", true), vue.createElementVNode( "view", { class: "u-modal__content", style: vue.normalizeStyle({ paddingTop: `${_ctx.title ? 12 : 25}px` }) }, [ vue.renderSlot(_ctx.$slots, "default", {}, () => [ vue.createElementVNode( "text", { class: "u-modal__content__text" }, vue.toDisplayString(_ctx.content), 1 /* TEXT */ ) ], true) ], 4 /* STYLE */ ), _ctx.$slots.confirmButton ? (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "u-modal__button-group--confirm-button" }, [ vue.renderSlot(_ctx.$slots, "confirmButton", {}, void 0, true) ])) : (vue.openBlock(), vue.createElementBlock( vue.Fragment, { key: 2 }, [ vue.createVNode(_component_u_line), vue.createElementVNode( "view", { class: "u-modal__button-group", style: vue.normalizeStyle({ flexDirection: _ctx.buttonReverse ? "row-reverse" : "row" }) }, [ _ctx.showCancelButton ? (vue.openBlock(), vue.createElementBlock( "view", { key: 0, class: vue.normalizeClass(["u-modal__button-group__wrapper u-modal__button-group__wrapper--cancel", [_ctx.showCancelButton && !_ctx.showConfirmButton && "u-modal__button-group__wrapper--only-cancel"]]), "hover-stay-time": 150, "hover-class": "u-modal__button-group__wrapper--hover", onClick: _cache[0] || (_cache[0] = (...args) => $options.cancelHandler && $options.cancelHandler(...args)) }, [ vue.createElementVNode( "text", { class: "u-modal__button-group__wrapper__text", style: vue.normalizeStyle({ color: _ctx.cancelColor }) }, vue.toDisplayString(_ctx.cancelText), 5 /* TEXT, STYLE */ ) ], 2 /* CLASS */ )) : vue.createCommentVNode("v-if", true), _ctx.showConfirmButton && _ctx.showCancelButton ? (vue.openBlock(), vue.createBlock(_component_u_line, { key: 1, direction: "column" })) : vue.createCommentVNode("v-if", true), _ctx.showConfirmButton ? (vue.openBlock(), vue.createElementBlock( "view", { key: 2, class: vue.normalizeClass(["u-modal__button-group__wrapper u-modal__button-group__wrapper--confirm", [!_ctx.showCancelButton && _ctx.showConfirmButton && "u-modal__button-group__wrapper--only-confirm"]]), "hover-stay-time": 150, "hover-class": "u-modal__button-group__wrapper--hover", onClick: _cache[1] || (_cache[1] = (...args) => $options.confirmHandler && $options.confirmHandler(...args)) }, [ $data.loading ? (vue.openBlock(), vue.createBlock(_component_u_loading_icon, { key: 0 })) : (vue.openBlock(), vue.createElementBlock( "text", { key: 1, class: "u-modal__button-group__wrapper__text", style: vue.normalizeStyle({ color: _ctx.confirmColor }) }, vue.toDisplayString(_ctx.confirmText), 5 /* TEXT, STYLE */ )) ], 2 /* CLASS */ )) : vue.createCommentVNode("v-if", true) ], 4 /* STYLE */ ) ], 64 /* STABLE_FRAGMENT */ )) ], 4 /* STYLE */ ) ]), _: 3 /* FORWARDED */ }, 8, ["zoom", "show", "customStyle", "closeOnClickOverlay", "onClick"]); } const __easycom_1$2 = /* @__PURE__ */ _export_sfc(_sfc_main$1p, [["render", _sfc_render$1o], ["__scopeId", "data-v-f667648f"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-modal/u-modal.vue"]]); const _sfc_main$1o = { __name: "ApproveButton", emits: ["approve"], setup(__props, { expose: __expose, emit: __emit }) { __expose(); const emit2 = __emit; const showConfirmModal = vue.ref(false); const handleApprove = () => { showConfirmModal.value = true; }; const confirmApprove = () => { emit2("approve"); showConfirmModal.value = false; }; const __returned__ = { emit: emit2, showConfirmModal, handleApprove, confirmApprove, ref: vue.ref }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$1n(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_button = resolveEasycom(vue.resolveDynamicComponent("u-button"), __easycom_3$6); const _component_u_modal = resolveEasycom(vue.resolveDynamicComponent("u-modal"), __easycom_1$2); return vue.openBlock(), vue.createElementBlock("view", { style: { "width": "50%" } }, [ vue.createVNode( _component_u_button, vue.mergeProps({ type: "success", text: "同意", size: "small", onClick: $setup.handleApprove }, _ctx.$attrs), null, 16 /* FULL_PROPS */ ), vue.createCommentVNode(" 确认弹窗 "), vue.createVNode(_component_u_modal, { show: $setup.showConfirmModal, title: "确认", content: "确认收到货了吗?", onConfirm: $setup.confirmApprove, showCancelButton: "", "content-style": { textAlign: "center" }, onCancel: _cache[0] || (_cache[0] = ($event) => $setup.showConfirmModal = false) }, null, 8, ["show"]) ]); } const ApproveButton = /* @__PURE__ */ _export_sfc(_sfc_main$1o, [["render", _sfc_render$1n], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/express/components/ApproveButton.vue"]]); const props$d = { props: { // 是否展示工具条 show: { type: Boolean, default: props$E.toolbar.show }, // 取消按钮的文字 cancelText: { type: String, default: props$E.toolbar.cancelText }, // 确认按钮的文字 confirmText: { type: String, default: props$E.toolbar.confirmText }, // 取消按钮的颜色 cancelColor: { type: String, default: props$E.toolbar.cancelColor }, // 确认按钮的颜色 confirmColor: { type: String, default: props$E.toolbar.confirmColor }, // 标题文字 title: { type: String, default: props$E.toolbar.title } } }; const _sfc_main$1n = { name: "u-toolbar", mixins: [mpMixin, mixin, props$d], methods: { // 点击取消按钮 cancel() { this.$emit("cancel"); }, // 点击确定按钮 confirm() { this.$emit("confirm"); } } }; function _sfc_render$1m(_ctx, _cache, $props, $setup, $data, $options) { return _ctx.show ? (vue.openBlock(), vue.createElementBlock( "view", { key: 0, class: "u-toolbar", onTouchmove: _cache[2] || (_cache[2] = vue.withModifiers((...args) => _ctx.noop && _ctx.noop(...args), ["stop", "prevent"])) }, [ vue.createElementVNode("view", { class: "u-toolbar__cancel__wrapper", "hover-class": "u-hover-class" }, [ vue.createElementVNode( "text", { class: "u-toolbar__wrapper__cancel", onClick: _cache[0] || (_cache[0] = (...args) => $options.cancel && $options.cancel(...args)), style: vue.normalizeStyle({ color: _ctx.cancelColor }) }, vue.toDisplayString(_ctx.cancelText), 5 /* TEXT, STYLE */ ) ]), _ctx.title ? (vue.openBlock(), vue.createElementBlock( "text", { key: 0, class: "u-toolbar__title u-line-1" }, vue.toDisplayString(_ctx.title), 1 /* TEXT */ )) : vue.createCommentVNode("v-if", true), vue.createElementVNode("view", { class: "u-toolbar__confirm__wrapper", "hover-class": "u-hover-class" }, [ vue.createElementVNode( "text", { class: "u-toolbar__wrapper__confirm", onClick: _cache[1] || (_cache[1] = (...args) => $options.confirm && $options.confirm(...args)), style: vue.normalizeStyle({ color: _ctx.confirmColor }) }, vue.toDisplayString(_ctx.confirmText), 5 /* TEXT, STYLE */ ) ]) ], 32 /* NEED_HYDRATION */ )) : vue.createCommentVNode("v-if", true); } const __easycom_0$4 = /* @__PURE__ */ _export_sfc(_sfc_main$1n, [["render", _sfc_render$1m], ["__scopeId", "data-v-eadae74e"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-toolbar/u-toolbar.vue"]]); const props$c = { props: { // 是否展示picker弹窗 show: { type: Boolean, default: props$E.picker.show }, // 是否展示顶部的操作栏 showToolbar: { type: Boolean, default: props$E.picker.showToolbar }, // 顶部标题 title: { type: String, default: props$E.picker.title }, // 对象数组,设置每一列的数据 columns: { type: Array, default: props$E.picker.columns }, // 是否显示加载中状态 loading: { type: Boolean, default: props$E.picker.loading }, // 各列中,单个选项的高度 itemHeight: { type: [String, Number], default: props$E.picker.itemHeight }, // 取消按钮的文字 cancelText: { type: String, default: props$E.picker.cancelText }, // 确认按钮的文字 confirmText: { type: String, default: props$E.picker.confirmText }, // 取消按钮的颜色 cancelColor: { type: String, default: props$E.picker.cancelColor }, // 确认按钮的颜色 confirmColor: { type: String, default: props$E.picker.confirmColor }, // 每列中可见选项的数量 visibleItemCount: { type: [String, Number], default: props$E.picker.visibleItemCount }, // 选项对象中,需要展示的属性键名 keyName: { type: String, default: props$E.picker.keyName }, // 是否允许点击遮罩关闭选择器 closeOnClickOverlay: { type: Boolean, default: props$E.picker.closeOnClickOverlay }, // 各列的默认索引 defaultIndex: { type: Array, default: props$E.picker.defaultIndex }, // 是否在手指松开时立即触发 change 事件。若不开启则会在滚动动画结束后触发 change 事件,只在微信2.21.1及以上有效 immediateChange: { type: Boolean, default: props$E.picker.immediateChange } } }; const _sfc_main$1m = { name: "u-picker", mixins: [mpMixin, mixin, props$c], data() { return { // 上一次选择的列索引 lastIndex: [], // 索引值 ,对应picker-view的value innerIndex: [], // 各列的值 innerColumns: [], // 上一次的变化列索引 columnIndex: 0 }; }, watch: { // 监听默认索引的变化,重新设置对应的值 defaultIndex: { immediate: true, handler(n) { this.setIndexs(n, true); } }, // 监听columns参数的变化 columns: { immediate: true, deep: true, handler(n) { this.setColumns(n); } } }, emits: ["close", "cancel", "confirm", "change"], methods: { // 获取item需要显示的文字,判别为对象还是文本 getItemText(item) { if (uni.$u.test.object(item)) { return item[this.keyName]; } else { return item; } }, // 关闭选择器 closeHandler() { if (this.closeOnClickOverlay) { this.$emit("close"); } }, // 点击工具栏的取消按钮 cancel() { this.$emit("cancel"); }, // 点击工具栏的确定按钮 confirm() { this.$emit("confirm", { indexs: this.innerIndex, value: this.innerColumns.map((item, index2) => item[this.innerIndex[index2]]), values: this.innerColumns }); }, // 选择器某一列的数据发生变化时触发 changeHandler(e) { const { value: value2 } = e.detail; let index2 = 0, columnIndex = 0; for (let i = 0; i < value2.length; i++) { let item = value2[i]; if (item !== (this.lastIndex[i] || 0)) { columnIndex = i; index2 = item; break; } } this.columnIndex = columnIndex; const values = this.innerColumns; this.setLastIndex(value2); this.setIndexs(value2); this.$emit("change", { // 微信小程序不能传递this,会因为循环引用而报错 picker: this, value: this.innerColumns.map((item, index3) => item[value2[index3]]), index: index2, indexs: value2, // values为当前变化列的数组内容 values, columnIndex }); }, // 设置index索引,此方法可被外部调用设置 setIndexs(index2, setLastIndex) { this.innerIndex = uni.$u.deepClone(index2); if (setLastIndex) { this.setLastIndex(index2); } }, // 记录上一次的各列索引位置 setLastIndex(index2) { this.lastIndex = uni.$u.deepClone(index2); }, // 设置对应列选项的所有值 setColumnValues(columnIndex, values) { this.innerColumns.splice(columnIndex, 1, values); let tmpIndex = uni.$u.deepClone(this.innerIndex); for (let i = 0; i < this.innerColumns.length; i++) { if (i > this.columnIndex) { tmpIndex[i] = 0; } } this.setIndexs(tmpIndex); }, // 获取对应列的所有选项 getColumnValues(columnIndex) { (async () => { await uni.$u.sleep(); })(); return this.innerColumns[columnIndex]; }, // 设置整体各列的columns的值 setColumns(columns) { formatAppLog("log", "at uni_modules/uview-plus/components/u-picker/u-picker.vue:217", columns); this.innerColumns = uni.$u.deepClone(columns); if (this.innerIndex.length === 0) { this.innerIndex = new Array(columns.length).fill(0); } }, // 获取各列选中值对应的索引 getIndexs() { return this.innerIndex; }, // 获取各列选中的值 getValues() { (async () => { await uni.$u.sleep(); })(); return this.innerColumns.map((item, index2) => item[this.innerIndex[index2]]); } } }; function _sfc_render$1l(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_toolbar = resolveEasycom(vue.resolveDynamicComponent("u-toolbar"), __easycom_0$4); const _component_u_loading_icon = resolveEasycom(vue.resolveDynamicComponent("u-loading-icon"), __easycom_0$d); const _component_u_popup = resolveEasycom(vue.resolveDynamicComponent("u-popup"), __easycom_3$4); return vue.openBlock(), vue.createBlock(_component_u_popup, { show: _ctx.show, onClose: $options.closeHandler }, { default: vue.withCtx(() => [ vue.createElementVNode("view", { class: "u-picker" }, [ _ctx.showToolbar ? (vue.openBlock(), vue.createBlock(_component_u_toolbar, { key: 0, cancelColor: _ctx.cancelColor, confirmColor: _ctx.confirmColor, cancelText: _ctx.cancelText, confirmText: _ctx.confirmText, title: _ctx.title, onCancel: $options.cancel, onConfirm: $options.confirm }, null, 8, ["cancelColor", "confirmColor", "cancelText", "confirmText", "title", "onCancel", "onConfirm"])) : vue.createCommentVNode("v-if", true), vue.createElementVNode("picker-view", { class: "u-picker__view", indicatorStyle: `height: ${_ctx.$u.addUnit(_ctx.itemHeight)}`, value: $data.innerIndex, immediateChange: _ctx.immediateChange, style: vue.normalizeStyle({ height: `${_ctx.$u.addUnit(_ctx.visibleItemCount * _ctx.itemHeight)}` }), onChange: _cache[0] || (_cache[0] = (...args) => $options.changeHandler && $options.changeHandler(...args)) }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($data.innerColumns, (item, index2) => { return vue.openBlock(), vue.createElementBlock("picker-view-column", { key: index2, class: "u-picker__view__column" }, [ _ctx.$u.test.array(item) ? (vue.openBlock(true), vue.createElementBlock( vue.Fragment, { key: 0 }, vue.renderList(item, (item1, index1) => { return vue.openBlock(), vue.createElementBlock( "text", { class: "u-picker__view__column__item u-line-1", key: index1, style: vue.normalizeStyle({ height: _ctx.$u.addUnit(_ctx.itemHeight), lineHeight: _ctx.$u.addUnit(_ctx.itemHeight), fontWeight: index1 === $data.innerIndex[index2] ? "bold" : "normal" }) }, vue.toDisplayString($options.getItemText(item1)), 5 /* TEXT, STYLE */ ); }), 128 /* KEYED_FRAGMENT */ )) : vue.createCommentVNode("v-if", true) ]); }), 128 /* KEYED_FRAGMENT */ )) ], 44, ["indicatorStyle", "value", "immediateChange"]), _ctx.loading ? (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "u-picker--loading" }, [ vue.createVNode(_component_u_loading_icon, { mode: "circle" }) ])) : vue.createCommentVNode("v-if", true) ]) ]), _: 1 /* STABLE */ }, 8, ["show", "onClose"]); } const __easycom_1$1 = /* @__PURE__ */ _export_sfc(_sfc_main$1m, [["render", _sfc_render$1l], ["__scopeId", "data-v-91b05052"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-picker/u-picker.vue"]]); const _sfc_main$1l = { __name: "RejectButton", emits: ["reject"], setup(__props, { expose: __expose, emit: __emit }) { __expose(); const emit2 = __emit; const showRejectPicker = vue.ref(false); const rejectReasons = vue.ref([]); const getRejectReason = async () => { const res2 = await uni.$u.http.get("/app/sysDict/getDict?key=route_exception_reason "); if (res2.code == 200) { rejectReasons.value = res2.data.map((item) => item.dictValue); } }; getRejectReason(); const handleReject = () => { showRejectPicker.value = true; }; const confirmReject = (e) => { const reason = e.value[0]; emit2("reject", reason); showRejectPicker.value = false; }; const __returned__ = { emit: emit2, showRejectPicker, rejectReasons, getRejectReason, handleReject, confirmReject, ref: vue.ref }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$1k(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_button = resolveEasycom(vue.resolveDynamicComponent("u-button"), __easycom_3$6); const _component_u_picker = resolveEasycom(vue.resolveDynamicComponent("u-picker"), __easycom_1$1); return vue.openBlock(), vue.createElementBlock("view", { style: { "width": "50%" } }, [ vue.createVNode( _component_u_button, vue.mergeProps({ type: "warning", text: "驳回", size: "small", onClick: $setup.handleReject }, _ctx.$attrs), null, 16 /* FULL_PROPS */ ), vue.createCommentVNode(" 驳回原因选择器 "), vue.createVNode(_component_u_picker, { show: $setup.showRejectPicker, columns: [$setup.rejectReasons], onConfirm: $setup.confirmReject, onCancel: _cache[0] || (_cache[0] = ($event) => $setup.showRejectPicker = false) }, null, 8, ["show", "columns"]) ]); } const RejectButton = /* @__PURE__ */ _export_sfc(_sfc_main$1l, [["render", _sfc_render$1k], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/express/components/RejectButton.vue"]]); const _sfc_main$1k = { __name: "ExceptionItem", props: { order: { type: Object, default: () => ({ orderNo: "", expressNo: "", estimatedPrice: "", pusher: "", pushTime: "" }) } }, emits: ["refresh"], setup(__props, { expose: __expose, emit: __emit }) { __expose(); const props2 = __props; const emit2 = __emit; const handleCheckLogistics = () => { uni.navigateTo({ url: `/pages/index/express/logistics-detail?orderId=${props2.order.orderId}&status=${props2.order.checkStatus}&id=${props2.order.id}` }); }; function handleButtonClick(checkStatus, reason) { uni.$u.http.post("/app/orderexception/update", { id: props2.order.id, checkStatus, refusalReason: reason }).then((res2) => { if (res2.code == 200) { if (checkStatus == 2) { let text = props2.order.waybillCode + "签收成功"; uni.$u.ttsModule.speak(text); } uni.$u.toast("操作成功"); emit2("refresh"); } else { uni.$u.toast(res2.msg); } }); } const __returned__ = { props: props2, emit: emit2, handleCheckLogistics, handleButtonClick, ref: vue.ref, ApproveButton, RejectButton }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$1j(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_button = resolveEasycom(vue.resolveDynamicComponent("u-button"), __easycom_3$6); return vue.openBlock(), vue.createElementBlock("view", { class: "exception-item" }, [ vue.createCommentVNode(" 订单信息 "), vue.createElementVNode("view", { class: "info-section flex-1" }, [ vue.createElementVNode("view", { class: "info-row" }, [ vue.createElementVNode("text", { class: "label" }, "订单编号:"), vue.createElementVNode( "text", { class: "value" }, vue.toDisplayString($props.order.orderId), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "info-row" }, [ vue.createElementVNode("text", { class: "label" }, "快递单号:"), vue.createElementVNode( "text", { class: "value" }, vue.toDisplayString($props.order.waybillCode), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "info-row" }, [ vue.createElementVNode("text", { class: "label" }, "预估单价:"), vue.createElementVNode( "text", { class: "value" }, vue.toDisplayString($props.order.expectMoney) + "元", 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "info-row" }, [ vue.createElementVNode("text", { class: "label" }, "推送人:"), vue.createElementVNode( "text", { class: "value" }, vue.toDisplayString($props.order.createName), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "info-row", style: { "margin-bottom": "0" } }, [ vue.createElementVNode("text", { class: "label" }, "推送时间:"), vue.createElementVNode( "text", { class: "value" }, vue.toDisplayString($props.order.createTime), 1 /* TEXT */ ) ]) ]), vue.createCommentVNode(" 操作按钮 "), vue.createElementVNode("view", { class: "action-section" }, [ vue.createVNode(_component_u_button, { type: "primary", text: "查看物流", size: "small", onClick: $setup.handleCheckLogistics }), $props.order.checkStatus == 1 ? (vue.openBlock(), vue.createBlock($setup["ApproveButton"], { key: 0, onApprove: _cache[0] || (_cache[0] = ($event) => $setup.handleButtonClick(2)) })) : vue.createCommentVNode("v-if", true), $props.order.checkStatus == 1 ? (vue.openBlock(), vue.createBlock($setup["RejectButton"], { key: 1, onReject: _cache[1] || (_cache[1] = (reason) => $setup.handleButtonClick(3, reason)) })) : vue.createCommentVNode("v-if", true), $props.order.checkStatus == 2 ? (vue.openBlock(), vue.createElementBlock("view", { key: 2, style: { "color": "#19be6b" } }, "[已签收]")) : vue.createCommentVNode("v-if", true), $props.order.checkStatus == 3 ? (vue.openBlock(), vue.createElementBlock("view", { key: 3, style: { "color": "#f00" } }, "[已驳回]")) : vue.createCommentVNode("v-if", true) ]) ]); } const ExceptionItem = /* @__PURE__ */ _export_sfc(_sfc_main$1k, [["render", _sfc_render$1j], ["__scopeId", "data-v-e0527396"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/express/components/ExceptionItem.vue"]]); const _sfc_main$1j = { __name: "route-exception", setup(__props, { expose: __expose }) { __expose(); const tabList = ["待处理订单", "历史异常签收"]; const curNow = vue.ref(0); const exceptionList = vue.ref([]); let urlList = ["/app/orderexception/pagelist", "/app/orderexception/getPageLoglist"]; const requestStr = vue.ref(urlList[0]); function sectionChange(index2) { curNow.value = index2; requestStr.value = urlList[index2]; handleSearch(); } const pageScrollRef = vue.ref(null); const otherParams = vue.ref({ search: "" }); const updateList = (list) => { exceptionList.value = list; }; const handleSearch = () => { var _a; (_a = pageScrollRef.value) == null ? void 0 : _a.resetUpScroll(); }; const handleScan = () => { uni.scanCode({ success: (res2) => { otherParams.value.search = res2.result; handleSearch(); } }); }; onLoad(() => { uni.$u.useGlobalEvent((e) => { otherParams.value.search = e.barcode; handleSearch(); }); }); const __returned__ = { tabList, curNow, exceptionList, get urlList() { return urlList; }, set urlList(v) { urlList = v; }, requestStr, sectionChange, pageScrollRef, otherParams, updateList, handleSearch, handleScan, ref: vue.ref, get onLoad() { return onLoad; }, ExceptionItem, PageScroll }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$1i(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_subsection = resolveEasycom(vue.resolveDynamicComponent("u-subsection"), __easycom_0$5); const _component_u_sticky = resolveEasycom(vue.resolveDynamicComponent("u-sticky"), __easycom_1$3); const _component_u_search = resolveEasycom(vue.resolveDynamicComponent("u-search"), __easycom_4$2); const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createCommentVNode(" 列表区域 "), vue.createVNode($setup["PageScroll"], { ref: "pageScrollRef", height: "100vh", requestStr: $setup.requestStr, onUpdateList: $setup.updateList, otherParams: $setup.otherParams }, { default: vue.withCtx(() => [ vue.createVNode(_component_u_sticky, { "offset-top": 0 }, { default: vue.withCtx(() => [ vue.createCommentVNode(" 顶部标签页 "), vue.createVNode(_component_u_subsection, { fontSize: "16", list: $setup.tabList, current: $setup.curNow, onChange: $setup.sectionChange, mode: "subsection", class: "tabs-list" }, null, 8, ["current"]) ]), _: 1 /* STABLE */ }), vue.createElementVNode("view", { class: "list-container" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.exceptionList, (item) => { return vue.openBlock(), vue.createBlock($setup["ExceptionItem"], { key: item.orderNo, order: item, onRefresh: $setup.handleSearch }, null, 8, ["order"]); }), 128 /* KEYED_FRAGMENT */ )) ]) ]), _: 1 /* STABLE */ }, 8, ["requestStr", "otherParams"]), vue.createCommentVNode(" 底部搜索框 "), vue.createElementVNode("view", { class: "search-bar fixed-bottom" }, [ vue.createVNode(_component_u_search, { modelValue: $setup.otherParams.search, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.otherParams.search = $event), placeholder: "请输入物流单号/订单编号", "show-action": false, inputStyle: { fontSize: "32rpx" }, onSearch: $setup.handleSearch, height: "80rpx", shape: "round" }, null, 8, ["modelValue"]), vue.createVNode(_component_u_icon, { name: "scan", size: "28", color: "#19be6b", onClick: $setup.handleScan }) ]) ]); } const PagesIndexExpressRouteException = /* @__PURE__ */ _export_sfc(_sfc_main$1j, [["render", _sfc_render$1i], ["__scopeId", "data-v-388e5b84"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/express/route-exception.vue"]]); const placeholderStyle$1 = "font-size:32rpx"; const _sfc_main$1i = { __name: "warehouse-sign", setup(__props, { expose: __expose }) { __expose(); const customStyle = vue.reactive({ height: "90rpx" }); const selectedWarehouse = vue.ref(""); const form = vue.ref({ "packageCode": "", "godownId": "" }); const showSelector = vue.ref(false); function openWarehouseSelector() { showSelector.value = true; } function handleWarehouseSelected(item) { selectedWarehouse.value = item.godownName; form.value.godownId = item.id; } function scanCode() { uni.scanCode({ success: (res2) => { form.value.packageCode = res2.result; handleBarcode(res2.result); }, fail: (err) => { uni.$u.toast("扫码失败"); } }); } function handleBarcode(code2) { if (!code2) return uni.$u.toast("请输入物流单号"); uni.$u.http.post("/app/ordersign/toGodownSign", form.value).then((res2) => { if (res2.code == 200) { let text = code2 + "到仓签收成功"; uni.$u.ttsModule.speak(text); } else { let text = code2 + "订单不存在"; uni.$u.ttsModule.speak(text); } }); } function getUserBindWarehouse() { uni.$u.http.get("/app/appUser/getUserBindGodown").then((res2) => { var _a, _b; if (res2.code == 200) { selectedWarehouse.value = (_a = res2.data) == null ? void 0 : _a.godownName; form.value.godownId = (_b = res2.data) == null ? void 0 : _b.id; } }); } onLoad(() => { getUserBindWarehouse(); uni.$u.useGlobalEvent((e) => { form.value.packageCode = e.barcode; handleBarcode(e.barcode); }); }); const __returned__ = { placeholderStyle: placeholderStyle$1, customStyle, selectedWarehouse, form, showSelector, openWarehouseSelector, handleWarehouseSelected, scanCode, handleBarcode, getUserBindWarehouse, reactive: vue.reactive, ref: vue.ref, get onLoad() { return onLoad; }, WarehouseSelector }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$1h(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_input = resolveEasycom(vue.resolveDynamicComponent("u-input"), __easycom_0$f); const _component_u_button = resolveEasycom(vue.resolveDynamicComponent("u-button"), __easycom_3$6); return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createElementVNode("view", { class: "main-content" }, [ vue.createElementVNode("view", { class: "input-group" }, [ vue.createVNode(_component_u_input, { customStyle: $setup.customStyle, "placeholder-style": $setup.placeholderStyle, modelValue: $setup.selectedWarehouse, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.selectedWarehouse = $event), placeholder: "请选择仓库", readonly: "", border: "surround" }, null, 8, ["customStyle", "modelValue"]), vue.createVNode(_component_u_button, { customStyle: $setup.customStyle, type: "info", color: "#a4adb3", onClick: $setup.openWarehouseSelector, text: "选择" }, null, 8, ["customStyle"]) ]), vue.createElementVNode("view", { class: "input-group" }, [ vue.createVNode(_component_u_input, { customStyle: $setup.customStyle, "placeholder-style": $setup.placeholderStyle, modelValue: $setup.form.packageCode, "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.form.packageCode = $event), placeholder: "扫描/输入物流单号", border: "surround" }, null, 8, ["customStyle", "modelValue"]), vue.createVNode(_component_u_button, { customStyle: $setup.customStyle, type: "info", color: "#a4adb3", onClick: _cache[2] || (_cache[2] = ($event) => $setup.handleBarcode($setup.form.packageCode)), text: "确定" }, null, 8, ["customStyle"]) ]) ]), vue.createElementVNode("view", { class: "fixed-bottom" }, [ vue.createVNode(_component_u_button, { size: "large", type: "success", onClick: $setup.scanCode, text: "扫码", class: "scan-button" }) ]), vue.createVNode($setup["WarehouseSelector"], { show: $setup.showSelector, "onUpdate:show": _cache[3] || (_cache[3] = ($event) => $setup.showSelector = $event), onWarehouseSelected: $setup.handleWarehouseSelected }, null, 8, ["show"]) ]); } const PagesIndexExpressWarehouseSign = /* @__PURE__ */ _export_sfc(_sfc_main$1i, [["render", _sfc_render$1h], ["__scopeId", "data-v-7473f06e"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/express/warehouse-sign.vue"]]); const baseUrl = "http://bk.shuhi.com"; function initRequest() { formatAppLog("log", "at config/request.js:9", "初始化了 http 请求代码"); uni.$u.http.setConfig((config2) => { config2.baseURL = baseUrl; config2.custom.toast = true; return config2; }); uni.$u.http.interceptors.request.use((config2) => { config2.data = config2.data || {}; let token = store.token || uni.getStorageSync("token"); config2.header.Authorization = token ? `Bearer ${token}` : ""; return config2; }, (config2) => { return Promise.reject(config2); }); uni.$u.http.interceptors.response.use((response) => { var _a; const data = response.data; const custom = (_a = response.config) == null ? void 0 : _a.custom; if (data.code !== 200) { if (data.code === 401) { uni.$u.toast(data.msg || "身份认证失败,请先登录"); uni.removeStorageSync("token"); store.setToken(""); setTimeout(() => { uni.$u.route({ type: "reLaunch", url: "/pages/login/login" // 跳转到登录页 }); }, 1e3); } else { if (custom.toast !== false) { uni.$u.toast(data.msg); } return data; } } return data; }, (response) => { return Promise.reject(response); }); } const _sfc_main$1h = { __name: "index", props: { filename: { type: [Array, String], default: () => [] }, url: { type: String }, notFile: { type: Boolean, default: false }, tips: { type: String }, disabled: { type: Boolean, default: false }, isUpdate: { type: Boolean, default: false } }, emits: ["update:filename", "update:keyValue", "success"], setup(__props, { expose: __expose, emit: __emit }) { __expose(); const emit2 = __emit; const props2 = __props; const fileList = vue.ref([]); vue.watch(() => props2.filename, (filename) => { if (!filename) return fileList.value = []; if (typeof filename == "string") { fileList.value = filename.split(",").map((v) => ({ url: baseUrl + v })); } else { fileList.value = filename && filename.length > 0 ? filename.map((v) => ({ url: v.url || v })) : []; } }, { immediate: true, deep: true }); const afterRead = async (e) => { const { file } = e; fileList.value.push({ ...file, status: "uploading", message: "上传中..." }); const result = await uploadFilePromise(file.url); formatAppLog("log", "at components/cy-upload/index.vue:68", result, "result"); fileList.value.forEach((v, index2) => { if (index2 == fileList.value.length - 1) { v.url = result.url; v.status = "success"; v.message = ""; } }); formatAppLog("log", "at components/cy-upload/index.vue:77", fileList.value, "fileList.value"); emit2("update:filename", fileList.value.map((v) => v.url)); emit2("success", result); }; const deletePic = (event) => { fileList.value.splice(event.index, 1); }; const uploadFilePromise = (url2, baseStr = "/app/common/upload") => { let token = uni.getStorageSync("token"); return new Promise((resolve, reject) => { uni.uploadFile({ url: baseUrl + baseStr, // 图片上传地址 filePath: url2, name: "file", header: { "Authorization": token }, success: (res2) => { let respic = JSON.parse(res2.data); resolve(respic); } }); }); }; const __returned__ = { emit: emit2, props: props2, fileList, afterRead, deletePic, uploadFilePromise, watch: vue.watch, ref: vue.ref, get baseUrl() { return baseUrl; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$1g(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_upload = resolveEasycom(vue.resolveDynamicComponent("u-upload"), __easycom_0$9); return vue.openBlock(), vue.createElementBlock( vue.Fragment, null, [ vue.createVNode(_component_u_upload, vue.mergeProps(_ctx.$attrs, { fileList: $setup.fileList, onAfterRead: $setup.afterRead, onDelete: $setup.deletePic, notFile: $props.notFile, disabled: $props.disabled }), null, 16, ["fileList", "notFile", "disabled"]), $props.tips ? (vue.openBlock(), vue.createElementBlock( "view", { key: 0, class: "tips" }, vue.toDisplayString($props.tips), 1 /* TEXT */ )) : vue.createCommentVNode("v-if", true) ], 64 /* STABLE_FRAGMENT */ ); } const cyUpload = /* @__PURE__ */ _export_sfc(_sfc_main$1h, [["render", _sfc_render$1g], ["__scopeId", "data-v-5002576b"], ["__file", "E:/书嗨项目/shuhi-app-fornt/components/cy-upload/index.vue"]]); const placeholderStyle = "font-size:32rpx"; const _sfc_main$1g = { __name: "weight-modify", setup(__props, { expose: __expose }) { __expose(); const customStyle = vue.reactive({ height: "90rpx" }); const formRef = vue.ref(null); const form = vue.ref({ "packageCode": "", "batchNum": "", "godownId": "", "otherInfo": "", "actualWeight": "", "imgUrlList": [] }); const rules2 = { packageCode: [{ required: true, message: "请输入物流单号", trigger: "blur" }], actualWeight: [{ required: true, message: "请输入重量", trigger: "blur" }] }; function scanCode() { uni.scanCode({ success: (res2) => { form.value.packageCode = res2.result; }, fail: (err) => { uni.$u.toast("扫码失败"); } }); } function submitForm() { formRef.value.validate().then((valid) => { if (valid) { uni.$u.http.post("/app/ordersign/changeWeight", form.value).then((res2) => { if (res2.code == 200) { uni.$u.toast("重量修改成功"); let text = code + "已提交审核"; uni.$u.ttsModule.speak(text); } else { let text = code + "订单不存在"; uni.$u.ttsModule.speak(text); } }); } }); } onLoad(() => { uni.$u.useGlobalEvent((e) => { form.value.packageCode = e.barcode; }); }); const __returned__ = { placeholderStyle, customStyle, formRef, form, rules: rules2, scanCode, submitForm, ref: vue.ref, reactive: vue.reactive, get onLoad() { return onLoad; }, cyUpload }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$1f(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_input = resolveEasycom(vue.resolveDynamicComponent("u-input"), __easycom_0$f); const _component_u_form_item = resolveEasycom(vue.resolveDynamicComponent("u-form-item"), __easycom_1$a); const _component_u__form = resolveEasycom(vue.resolveDynamicComponent("u--form"), __easycom_2$6); const _component_u_button = resolveEasycom(vue.resolveDynamicComponent("u-button"), __easycom_3$6); return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createVNode(_component_u__form, { ref: "formRef", model: $setup.form, rules: $setup.rules, "label-width": "165px", "label-position": "top", labelStyle: { fontSize: "32rpx" }, errorType: "toast" }, { default: vue.withCtx(() => [ vue.createCommentVNode(" 物流单号输入 "), vue.createVNode(_component_u_form_item, { label: "", prop: "packageCode" }, { default: vue.withCtx(() => [ vue.createVNode(_component_u_input, { placeholderStyle: $setup.placeholderStyle, customStyle: $setup.customStyle, modelValue: $setup.form.packageCode, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.form.packageCode = $event), placeholder: "扫描/输入物流单号", border: "surround", name: "packageCode" }, null, 8, ["customStyle", "modelValue"]) ]), _: 1 /* STABLE */ }), vue.createCommentVNode(" 重量输入 "), vue.createVNode(_component_u_form_item, { label: "重量(kg)", prop: "actualWeight" }, { default: vue.withCtx(() => [ vue.createVNode(_component_u_input, { placeholderStyle: $setup.placeholderStyle, customStyle: $setup.customStyle, modelValue: $setup.form.actualWeight, "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.form.actualWeight = $event), placeholder: "请输入重量", border: "surround", name: "actualWeight", type: "number" }, null, 8, ["customStyle", "modelValue"]) ]), _: 1 /* STABLE */ }), vue.createCommentVNode(" 图片上传 "), vue.createVNode(_component_u_form_item, { label: "上传图片", prop: "imgUrlList" }, { default: vue.withCtx(() => [ vue.createVNode($setup["cyUpload"], { filename: $setup.form.imgUrlList, "onUpdate:filename": _cache[2] || (_cache[2] = ($event) => $setup.form.imgUrlList = $event), name: "imgUrlList", limit: 10, "max-size": 1024 * 1024 }, null, 8, ["filename"]) ]), _: 1 /* STABLE */ }) ]), _: 1 /* STABLE */ }, 8, ["model"]), vue.createCommentVNode(" 底部按钮 "), vue.createElementVNode("view", { class: "fixed-bottom" }, [ vue.createVNode(_component_u_button, { size: "large", type: "warning", onClick: $setup.scanCode, text: "扫码", class: "scan-button" }), vue.createVNode(_component_u_button, { size: "large", type: "success", onClick: $setup.submitForm, text: "提交", class: "submit-button" }) ]) ]); } const PagesIndexExpressWeightModify = /* @__PURE__ */ _export_sfc(_sfc_main$1g, [["render", _sfc_render$1f], ["__scopeId", "data-v-e6126507"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/express/weight-modify.vue"]]); const _sfc_main$1f = { __name: "confirm-receipt", setup(__props, { expose: __expose }) { __expose(); const formData = vue.ref({ searchType: "2", search: "" }); const searchKeyword = vue.ref(""); const handleSubmit = () => { formatAppLog("log", "at pages/index/audit/confirm-receipt.vue:48", "查询:", searchKeyword.value); if (!formData.value.search) { uni.$u.toast("请扫描/输入物流单号"); return; } uni.$u.http.post("/app/orderinfo/confirmOrder", formData.value).then((res2) => { formatAppLog("log", "at pages/index/audit/confirm-receipt.vue:54", res2); if (res2.code == 200) { let text = code + "收货成功"; uni.$u.ttsModule.speak(text); } else { let text = code + "订单不存在"; uni.$u.ttsModule.speak(text); } }); }; const handleScan = () => { uni.scanCode({ success: (res2) => { formData.value.search = res2.result; handleSubmit(); } }); }; onLoad(() => { uni.$u.useGlobalEvent((e) => { formData.value.search = e.barcode; handleSubmit(); }); }); const __returned__ = { formData, searchKeyword, handleSubmit, handleScan, ref: vue.ref, get onLoad() { return onLoad; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$1e(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_radio = resolveEasycom(vue.resolveDynamicComponent("u-radio"), __easycom_0$6); const _component_u_radio_group = resolveEasycom(vue.resolveDynamicComponent("u-radio-group"), __easycom_1$4); const _component_u_input = resolveEasycom(vue.resolveDynamicComponent("u-input"), __easycom_0$f); const _component_u_button = resolveEasycom(vue.resolveDynamicComponent("u-button"), __easycom_3$6); const _component_u_divider = resolveEasycom(vue.resolveDynamicComponent("u-divider"), __easycom_2$3); return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createCommentVNode(" 底部按钮 "), vue.createElementVNode("view", { class: "footer" }, [ vue.createCommentVNode(" 查询区域 "), vue.createElementVNode("view", { class: "query-section" }, [ vue.createVNode(_component_u_radio_group, { modelValue: $setup.formData.searchType, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.formData.searchType = $event) }, { default: vue.withCtx(() => [ vue.createVNode(_component_u_radio, { label: "查订单", name: "1", labelSize: "16px", iconSize: "16px" }), vue.createVNode(_component_u_radio, { label: "查物流", "custom-style": "margin-left:20px", name: "2", labelSize: "16px", iconSize: "16px" }) ]), _: 1 /* STABLE */ }, 8, ["modelValue"]), vue.createElementVNode("view", { class: "search-box" }, [ vue.createVNode(_component_u_input, { "custom-style": "font-size:32rpx", "placeholder-style": "fong-size:32rpx", modelValue: $setup.formData.search, "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.formData.search = $event), placeholder: $setup.formData.searchType == "1" ? "扫描/输入订单号" : "扫描/输入物流单号", border: "surround", clearable: "" }, null, 8, ["modelValue", "placeholder"]), vue.createVNode(_component_u_button, { color: "#c8c8c8", text: "查询", onClick: $setup.handleSubmit }) ]) ]), vue.createVNode(_component_u_divider), vue.createElementVNode("view", { style: { "display": "flex" } }, [ vue.createVNode(_component_u_button, { size: "large", type: "success", text: "确认收货扫码", onClick: $setup.handleScan }) ]) ]) ]); } const PagesIndexAuditConfirmReceipt = /* @__PURE__ */ _export_sfc(_sfc_main$1f, [["render", _sfc_render$1e], ["__scopeId", "data-v-fec7d541"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/audit/confirm-receipt.vue"]]); const props$b = { props: { // 是否开启顶部安全区适配 safeAreaInsetTop: { type: Boolean, default: props$E.navbar.safeAreaInsetTop }, // 固定在顶部时,是否生成一个等高元素,以防止塌陷 placeholder: { type: Boolean, default: props$E.navbar.placeholder }, // 是否固定在顶部 fixed: { type: Boolean, default: props$E.navbar.fixed }, // 是否显示下边框 border: { type: Boolean, default: props$E.navbar.border }, // 左边的图标 leftIcon: { type: String, default: props$E.navbar.leftIcon }, // 左边的提示文字 leftText: { type: String, default: props$E.navbar.leftText }, // 左右的提示文字 rightText: { type: String, default: props$E.navbar.rightText }, // 右边的图标 rightIcon: { type: String, default: props$E.navbar.rightIcon }, // 标题 title: { type: [String, Number], default: props$E.navbar.title }, // 背景颜色 bgColor: { type: String, default: props$E.navbar.bgColor }, // 标题的宽度 titleWidth: { type: [String, Number], default: props$E.navbar.titleWidth }, // 导航栏高度 height: { type: [String, Number], default: props$E.navbar.height }, // 左侧返回图标的大小 leftIconSize: { type: [String, Number], default: props$E.navbar.leftIconSize }, // 左侧返回图标的颜色 leftIconColor: { type: String, default: props$E.navbar.leftIconColor }, // 点击左侧区域(返回图标),是否自动返回上一页 autoBack: { type: Boolean, default: props$E.navbar.autoBack }, // 标题的样式,对象或字符串 titleStyle: { type: [String, Object], default: props$E.navbar.titleStyle } } }; const _sfc_main$1e = { name: "u-navbar", mixins: [mpMixin, mixin, props$b], data() { return {}; }, methods: { // 点击左侧区域 leftClick() { this.$emit("leftClick"); if (this.autoBack) { uni.navigateBack(); } }, // 点击右侧区域 rightClick() { this.$emit("rightClick"); } } }; function _sfc_render$1d(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_status_bar = resolveEasycom(vue.resolveDynamicComponent("u-status-bar"), __easycom_0$7); const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); return vue.openBlock(), vue.createElementBlock("view", { class: "u-navbar" }, [ _ctx.fixed && _ctx.placeholder ? (vue.openBlock(), vue.createElementBlock( "view", { key: 0, class: "u-navbar__placeholder", style: vue.normalizeStyle({ height: _ctx.$u.addUnit(_ctx.$u.getPx(_ctx.height) + _ctx.$u.sys().statusBarHeight, "px") }) }, null, 4 /* STYLE */ )) : vue.createCommentVNode("v-if", true), vue.createElementVNode( "view", { class: vue.normalizeClass([_ctx.fixed && "u-navbar--fixed"]) }, [ _ctx.safeAreaInsetTop ? (vue.openBlock(), vue.createBlock(_component_u_status_bar, { key: 0, bgColor: _ctx.bgColor }, null, 8, ["bgColor"])) : vue.createCommentVNode("v-if", true), vue.createElementVNode( "view", { class: vue.normalizeClass(["u-navbar__content", [_ctx.border && "u-border-bottom"]]), style: vue.normalizeStyle({ height: _ctx.$u.addUnit(_ctx.height), backgroundColor: _ctx.bgColor }) }, [ vue.createElementVNode("view", { class: "u-navbar__content__left", "hover-class": "u-navbar__content__left--hover", "hover-start-time": "150", onClick: _cache[0] || (_cache[0] = (...args) => $options.leftClick && $options.leftClick(...args)) }, [ vue.renderSlot(_ctx.$slots, "left", {}, () => [ _ctx.leftIcon ? (vue.openBlock(), vue.createBlock(_component_u_icon, { key: 0, name: _ctx.leftIcon, size: _ctx.leftIconSize, color: _ctx.leftIconColor }, null, 8, ["name", "size", "color"])) : vue.createCommentVNode("v-if", true), _ctx.leftText ? (vue.openBlock(), vue.createElementBlock( "text", { key: 1, style: vue.normalizeStyle({ color: _ctx.leftIconColor }), class: "u-navbar__content__left__text" }, vue.toDisplayString(_ctx.leftText), 5 /* TEXT, STYLE */ )) : vue.createCommentVNode("v-if", true) ], true) ]), vue.renderSlot(_ctx.$slots, "center", {}, () => [ vue.createElementVNode( "text", { class: "u-line-1 u-navbar__content__title", style: vue.normalizeStyle([{ width: _ctx.$u.addUnit(_ctx.titleWidth) }, _ctx.$u.addStyle(_ctx.titleStyle)]) }, vue.toDisplayString(_ctx.title), 5 /* TEXT, STYLE */ ) ], true), _ctx.$slots.right || _ctx.rightIcon || _ctx.rightText ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "u-navbar__content__right", onClick: _cache[1] || (_cache[1] = (...args) => $options.rightClick && $options.rightClick(...args)) }, [ vue.renderSlot(_ctx.$slots, "right", {}, () => [ _ctx.rightIcon ? (vue.openBlock(), vue.createBlock(_component_u_icon, { key: 0, name: _ctx.rightIcon, size: "20" }, null, 8, ["name"])) : vue.createCommentVNode("v-if", true), _ctx.rightText ? (vue.openBlock(), vue.createElementBlock( "text", { key: 1, class: "u-navbar__content__right__text" }, vue.toDisplayString(_ctx.rightText), 1 /* TEXT */ )) : vue.createCommentVNode("v-if", true) ], true) ])) : vue.createCommentVNode("v-if", true) ], 6 /* CLASS, STYLE */ ) ], 2 /* CLASS */ ) ]); } const __easycom_2$2 = /* @__PURE__ */ _export_sfc(_sfc_main$1e, [["render", _sfc_render$1d], ["__scopeId", "data-v-f631659b"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-navbar/u-navbar.vue"]]); const props$a = { props: { // 步进器标识符,在change回调返回 name: { type: [String, Number], default: props$E.numberBox.name }, // 用于双向绑定的值,初始化时设置设为默认min值(最小值) modelValue: { type: [String, Number], default: props$E.numberBox.value }, // 最小值 min: { type: [String, Number], default: props$E.numberBox.min }, // 最大值 max: { type: [String, Number], default: props$E.numberBox.max }, // 加减的步长,可为小数 step: { type: [String, Number], default: props$E.numberBox.step }, // 是否只允许输入整数 integer: { type: Boolean, default: props$E.numberBox.integer }, // 是否禁用,包括输入框,加减按钮 disabled: { type: Boolean, default: props$E.numberBox.disabled }, // 是否禁用输入框 disabledInput: { type: Boolean, default: props$E.numberBox.disabledInput }, // 是否开启异步变更,开启后需要手动控制输入值 asyncChange: { type: Boolean, default: props$E.numberBox.asyncChange }, // 输入框宽度,单位为px inputWidth: { type: [String, Number], default: props$E.numberBox.inputWidth }, // 是否显示减少按钮 showMinus: { type: Boolean, default: props$E.numberBox.showMinus }, // 是否显示增加按钮 showPlus: { type: Boolean, default: props$E.numberBox.showPlus }, // 显示的小数位数 decimalLength: { type: [String, Number, null], default: props$E.numberBox.decimalLength }, // 是否开启长按加减手势 longPress: { type: Boolean, default: props$E.numberBox.longPress }, // 输入框文字和加减按钮图标的颜色 color: { type: String, default: props$E.numberBox.color }, // 按钮大小,宽高等于此值,单位px,输入框高度和此值保持一致 buttonSize: { type: [String, Number], default: props$E.numberBox.buttonSize }, // 输入框和按钮的背景颜色 bgColor: { type: String, default: props$E.numberBox.bgColor }, // 指定光标于键盘的距离,避免键盘遮挡输入框,单位px cursorSpacing: { type: [String, Number], default: props$E.numberBox.cursorSpacing }, // 是否禁用增加按钮 disablePlus: { type: Boolean, default: props$E.numberBox.disablePlus }, // 是否禁用减少按钮 disableMinus: { type: Boolean, default: props$E.numberBox.disableMinus }, // 加减按钮图标的样式 iconStyle: { type: [Object, String], default: props$E.numberBox.iconStyle } } }; const _sfc_main$1d = { name: "u-number-box", mixins: [mpMixin, mixin, props$a], data() { return { // 输入框实际操作的值 currentValue: "", // 定时器 longPressTimer: null }; }, watch: { // 多个值之间,只要一个值发生变化,都要重新检查check()函数 watchChange(n) { this.check(); }, // 监听v-mode的变化,重新初始化内部的值 modelValue(n) { if (n !== this.currentValue) { this.currentValue = this.format(this.modelValue); } } }, computed: { getCursorSpacing() { return uni.$u.getPx(this.cursorSpacing); }, // 按钮的样式 buttonStyle() { return (type2) => { const style = { backgroundColor: this.bgColor, height: uni.$u.addUnit(this.buttonSize), color: this.color }; if (this.isDisabled(type2)) { style.backgroundColor = "#f7f8fa"; } return style; }; }, // 输入框的样式 inputStyle() { this.disabled || this.disabledInput; const style = { color: this.color, backgroundColor: this.bgColor, height: uni.$u.addUnit(this.buttonSize), width: uni.$u.addUnit(this.inputWidth) }; return style; }, // 用于监听多个值发生变化 watchChange() { return [this.integer, this.decimalLength, this.min, this.max]; }, isDisabled() { return (type2) => { if (type2 === "plus") { return this.disabled || this.disablePlus || this.currentValue >= this.max; } return this.disabled || this.disableMinus || this.currentValue <= this.min; }; } }, mounted() { this.init(); }, emits: ["update:modelValue", "focus", "blur", "overlimit", "change", "plus", "minus"], methods: { init() { this.currentValue = this.format(this.modelValue); }, // 格式化整理数据,限制范围 format(value2) { value2 = this.filter(value2); value2 = value2 === "" ? 0 : +value2; value2 = Math.max(Math.min(this.max, value2), this.min); if (this.decimalLength !== null) { value2 = value2.toFixed(this.decimalLength); } return value2; }, // 过滤非法的字符 filter(value2) { value2 = String(value2).replace(/[^0-9.-]/g, ""); if (this.integer && value2.indexOf(".") !== -1) { value2 = value2.split(".")[0]; } return value2; }, check() { const val = this.format(this.currentValue); if (val !== this.currentValue) { this.currentValue = val; } }, // 判断是否出于禁止操作状态 // isDisabled(type) { // if (type === 'plus') { // // 在点击增加按钮情况下,判断整体的disabled,是否单独禁用增加按钮,以及当前值是否大于最大的允许值 // return ( // this.disabled || // this.disablePlus || // this.currentValue >= this.max // ) // } // // 点击减少按钮同理 // return ( // this.disabled || // this.disableMinus || // this.currentValue <= this.min // ) // }, // 输入框活动焦点 onFocus(event) { this.$emit("focus", { ...event.detail, name: this.name }); }, // 输入框失去焦点 onBlur(event) { this.format(event.detail.value); this.$emit( "blur", { ...event.detail, name: this.name } ); }, // 输入框值发生变化 onInput(e) { const { value: value2 = "" } = e.detail || {}; if (value2 === "") return; let formatted = this.filter(value2); if (this.decimalLength !== null && formatted.indexOf(".") !== -1) { const pair = formatted.split("."); formatted = `${pair[0]}.${pair[1].slice(0, this.decimalLength)}`; } formatted = this.format(formatted); this.emitChange(formatted); }, // 发出change事件 emitChange(value2) { if (!this.asyncChange) { this.$nextTick(() => { this.$emit("update:modelValue", value2); this.currentValue = value2; this.$forceUpdate(); }); } this.$emit("change", { value: value2, name: this.name }); }, onChange() { const { type: type2 } = this; if (this.isDisabled(type2)) { return this.$emit("overlimit", type2); } const diff = type2 === "minus" ? -this.step : +this.step; const value2 = this.format(this.add(+this.currentValue, diff)); this.emitChange(value2); this.$emit(type2); }, // 对值扩大后进行四舍五入,再除以扩大因子,避免出现浮点数操作的精度问题 add(num1, num2) { const cardinal = Math.pow(10, 10); return Math.round((num1 + num2) * cardinal) / cardinal; }, // 点击加减按钮 clickHandler(type2) { this.type = type2; this.onChange(); }, longPressStep() { this.clearTimeout(); this.longPressTimer = setTimeout(() => { this.onChange(); this.longPressStep(); }, 250); }, onTouchStart(type2) { if (!this.longPress) return; this.clearTimeout(); this.type = type2; this.longPressTimer = setTimeout(() => { this.onChange(); this.longPressStep(); }, 600); }, // 触摸结束,清除定时器,停止长按加减 onTouchEnd() { if (!this.longPress) return; this.clearTimeout(); }, // 清除定时器 clearTimeout() { clearTimeout(this.longPressTimer); this.longPressTimer = null; } } }; function _sfc_render$1c(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); return vue.openBlock(), vue.createElementBlock("view", { class: "u-number-box" }, [ _ctx.showMinus && _ctx.$slots.minus ? (vue.openBlock(), vue.createElementBlock( "view", { key: 0, class: "u-number-box__slot", onClick: _cache[0] || (_cache[0] = vue.withModifiers(($event) => $options.clickHandler("minus"), ["stop"])), onTouchstart: _cache[1] || (_cache[1] = ($event) => $options.onTouchStart("minus")), onTouchend: _cache[2] || (_cache[2] = vue.withModifiers((...args) => $options.clearTimeout && $options.clearTimeout(...args), ["stop"])) }, [ vue.renderSlot(_ctx.$slots, "minus", {}, void 0, true) ], 32 /* NEED_HYDRATION */ )) : _ctx.showMinus ? (vue.openBlock(), vue.createElementBlock( "view", { key: 1, class: vue.normalizeClass(["u-number-box__minus", { "u-number-box__minus--disabled": $options.isDisabled("minus") }]), onClick: _cache[3] || (_cache[3] = vue.withModifiers(($event) => $options.clickHandler("minus"), ["stop"])), onTouchstart: _cache[4] || (_cache[4] = ($event) => $options.onTouchStart("minus")), onTouchend: _cache[5] || (_cache[5] = vue.withModifiers((...args) => $options.clearTimeout && $options.clearTimeout(...args), ["stop"])), "hover-class": "u-number-box__minus--hover", "hover-stay-time": "150", style: vue.normalizeStyle([$options.buttonStyle("minus")]) }, [ vue.createVNode(_component_u_icon, { name: "minus", color: $options.isDisabled("minus") ? "#c8c9cc" : "#323233", size: "15", bold: "", customStyle: _ctx.iconStyle }, null, 8, ["color", "customStyle"]) ], 38 /* CLASS, STYLE, NEED_HYDRATION */ )) : vue.createCommentVNode("v-if", true), vue.renderSlot(_ctx.$slots, "input", {}, () => [ vue.withDirectives(vue.createElementVNode("input", { disabled: _ctx.disabledInput || _ctx.disabled, "cursor-spacing": $options.getCursorSpacing, class: vue.normalizeClass([{ "u-number-box__input--disabled": _ctx.disabled || _ctx.disabledInput }, "u-number-box__input"]), "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => $data.currentValue = $event), onBlur: _cache[7] || (_cache[7] = (...args) => $options.onBlur && $options.onBlur(...args)), onFocus: _cache[8] || (_cache[8] = (...args) => $options.onFocus && $options.onFocus(...args)), onInput: _cache[9] || (_cache[9] = (...args) => $options.onInput && $options.onInput(...args)), type: "number", style: vue.normalizeStyle([$options.inputStyle]) }, null, 46, ["disabled", "cursor-spacing"]), [ [vue.vModelText, $data.currentValue] ]) ], true), _ctx.showPlus && _ctx.$slots.plus ? (vue.openBlock(), vue.createElementBlock( "view", { key: 2, class: "u-number-box__slot", onClick: _cache[10] || (_cache[10] = vue.withModifiers(($event) => $options.clickHandler("plus"), ["stop"])), onTouchstart: _cache[11] || (_cache[11] = ($event) => $options.onTouchStart("plus")), onTouchend: _cache[12] || (_cache[12] = vue.withModifiers((...args) => $options.clearTimeout && $options.clearTimeout(...args), ["stop"])) }, [ vue.renderSlot(_ctx.$slots, "plus", {}, void 0, true) ], 32 /* NEED_HYDRATION */ )) : _ctx.showPlus ? (vue.openBlock(), vue.createElementBlock( "view", { key: 3, class: vue.normalizeClass(["u-number-box__plus", { "u-number-box__minus--disabled": $options.isDisabled("plus") }]), onClick: _cache[13] || (_cache[13] = vue.withModifiers(($event) => $options.clickHandler("plus"), ["stop"])), onTouchstart: _cache[14] || (_cache[14] = ($event) => $options.onTouchStart("plus")), onTouchend: _cache[15] || (_cache[15] = vue.withModifiers((...args) => $options.clearTimeout && $options.clearTimeout(...args), ["stop"])), "hover-class": "u-number-box__plus--hover", "hover-stay-time": "150", style: vue.normalizeStyle([$options.buttonStyle("plus")]) }, [ vue.createVNode(_component_u_icon, { name: "plus", color: $options.isDisabled("plus") ? "#c8c9cc" : "#323233", size: "15", bold: "", customStyle: _ctx.iconStyle }, null, 8, ["color", "customStyle"]) ], 38 /* CLASS, STYLE, NEED_HYDRATION */ )) : vue.createCommentVNode("v-if", true) ]); } const __easycom_3$3 = /* @__PURE__ */ _export_sfc(_sfc_main$1d, [["render", _sfc_render$1c], ["__scopeId", "data-v-eb6f6237"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-number-box/u-number-box.vue"]]); const _sfc_main$1c = { __name: "scan-order", setup(__props, { expose: __expose }) { __expose(); const isbnList = vue.ref([]); const showModal = vue.ref(false); const newIsbn = vue.ref(""); const removeItem = (index2) => { isbnList.value.splice(index2, 1); }; const goBack = () => { uni.navigateBack(); }; function clearAll() { isbnList.value.length = 0; } const addOrUpdateIsbn = (isbn) => { const existingItem = isbnList.value.find((item) => item.isbn === isbn); if (existingItem) { existingItem.quantity += 1; } else { isbnList.value.push({ isbn, quantity: 1 }); } }; function handleIsbn(isbn) { if (isValidISBN(isbn)) { addOrUpdateIsbn(isbn); } else { uni.$u.ttsModule.speak("不正确的ISBN码"); } } const handleScan = () => { uni.scanCode({ success: (res2) => { handleIsbn(res2.result); } }); }; const isValidISBN = (isbn) => { return /^97[89]\d{10}$/.test(isbn); }; const handleQuery = () => { if (isbnList.value.length === 0) { uni.showToast({ title: "请先添加ISBN", icon: "none" }); return; } uni.setStorageSync("isbnList", isbnList.value); uni.navigateTo({ url: "/pages/index/audit/isbn-order" }); }; const addIsbn = () => { if (isValidISBN(newIsbn.value)) { addOrUpdateIsbn(newIsbn.value); showModal.value = false; newIsbn.value = ""; } else { uni.$u.ttsModule.speak("不正确的ISBN码"); } }; onLoad(() => { uni.$u.useGlobalEvent((e) => { addOrUpdateIsbn(e.barcode); }); }); const __returned__ = { isbnList, showModal, newIsbn, removeItem, goBack, clearAll, addOrUpdateIsbn, handleIsbn, handleScan, isValidISBN, handleQuery, addIsbn, ref: vue.ref, get onLoad() { return onLoad; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$1b(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); const _component_u_navbar = resolveEasycom(vue.resolveDynamicComponent("u-navbar"), __easycom_2$2); const _component_u_sticky = resolveEasycom(vue.resolveDynamicComponent("u-sticky"), __easycom_1$3); const _component_u_number_box = resolveEasycom(vue.resolveDynamicComponent("u-number-box"), __easycom_3$3); const _component_u_button = resolveEasycom(vue.resolveDynamicComponent("u-button"), __easycom_3$6); const _component_u_input = resolveEasycom(vue.resolveDynamicComponent("u-input"), __easycom_0$f); const _component_u_popup = resolveEasycom(vue.resolveDynamicComponent("u-popup"), __easycom_3$4); return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createVNode(_component_u_navbar, { title: "扫书查单", border: false, fixed: "", bgColor: "#22ac38", leftIconColor: "#fff", titleStyle: "font-size:36rpx;color:#fff" }, { left: vue.withCtx(() => [ vue.createVNode(_component_u_icon, { name: "arrow-left", color: "#fff", size: "20", onClick: $setup.goBack }) ]), right: vue.withCtx(() => [ vue.createElementVNode("text", { style: { "color": "#fff", "font-size": "32rpx" }, type: "primary", onClick: _cache[0] || (_cache[0] = ($event) => $setup.showModal = true) }, "新增") ]), _: 1 /* STABLE */ }), vue.createCommentVNode(" 顶部操作栏 "), vue.createVNode(_component_u_sticky, null, { default: vue.withCtx(() => [ vue.createElementVNode("view", { class: "header", onClick: $setup.clearAll }, "清除全部"), vue.createCommentVNode(" 提示信息 "), vue.createElementVNode("view", { class: "tips" }, [ vue.createElementVNode("text", null, "请勿录入审核为不良的书籍ISBN!"), vue.createElementVNode("text", { class: "sub-tips" }, "不良书籍的ISBN可能是错误的!") ]) ]), _: 1 /* STABLE */ }), vue.createCommentVNode(" ISBN列表 "), vue.createElementVNode("scroll-view", { "scroll-y": "", class: "isbn-list" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.isbnList, (item, index2) => { return vue.openBlock(), vue.createElementBlock("view", { key: index2, class: "isbn-item" }, [ vue.createElementVNode("view", { class: "item-left" }, [ vue.createVNode(_component_u_icon, { name: "minus-circle-fill", color: "#dd524d", size: "24", onClick: ($event) => $setup.removeItem(index2) }, null, 8, ["onClick"]), vue.createElementVNode( "text", { class: "index" }, vue.toDisplayString(index2 + 1) + "、", 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "isbn" }, vue.toDisplayString(item.isbn), 1 /* TEXT */ ) ]), vue.createVNode(_component_u_number_box, { modelValue: item.quantity, "onUpdate:modelValue": ($event) => item.quantity = $event, disableMinus: item.quantity <= 1 }, null, 8, ["modelValue", "onUpdate:modelValue", "disableMinus"]) ]); }), 128 /* KEYED_FRAGMENT */ )) ]), vue.createCommentVNode(" 底部按钮 "), vue.createElementVNode("view", { class: "fixed-bottom" }, [ vue.createVNode(_component_u_button, { size: "large", type: "warning", text: "扫码加书", onClick: $setup.handleScan }), vue.createVNode(_component_u_button, { size: "large", type: "primary", text: "查询", onClick: $setup.handleQuery }) ]), vue.createCommentVNode(" ISBN Input Modal "), vue.createVNode(_component_u_popup, { show: $setup.showModal, mode: "center", customStyle: "width: 84%;border-radius:10px" }, { default: vue.withCtx(() => [ vue.createElementVNode("view", { class: "modal-content" }, [ vue.createElementVNode("text", null, "输入ISBN码"), vue.createVNode(_component_u_input, { modelValue: $setup.newIsbn, "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.newIsbn = $event), placeholder: "请输入ISBN码", "custom-style": "margin:60rpx 0" }, null, 8, ["modelValue"]), vue.createElementVNode("view", { class: "modal-buttons" }, [ vue.createVNode(_component_u_button, { text: "取消", onClick: _cache[2] || (_cache[2] = ($event) => $setup.showModal = false) }), vue.createVNode(_component_u_button, { type: "primary", text: "确定", onClick: $setup.addIsbn }) ]) ]) ]), _: 1 /* STABLE */ }, 8, ["show"]) ]); } const PagesIndexAuditScanOrder = /* @__PURE__ */ _export_sfc(_sfc_main$1c, [["render", _sfc_render$1b], ["__scopeId", "data-v-1af411ea"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/audit/scan-order.vue"]]); const _sfc_main$1b = { __name: "orderItem", props: { item: { type: Object, default: () => { } } }, setup(__props, { expose: __expose }) { __expose(); const props2 = __props; const statusEnum = { "0": "创建", "1": "用户删除", "2": "下单(待初审)", "3": "初审(待取书)", "4": "初审未通过", "5": "快递取书(待签收)", "6": "快递签收(待收货)", "7": "物流签收(路由异常)", "8": "仓库收货(待审核)", "9": "审核中(审核未提交)", "10": "已审核(待付款)", "11": "已完成" }; const maskedNickName = vue.computed(() => { if (!props2.item.nickName) return ""; return props2.item.nickName.charAt(0) + "*".repeat(props2.item.nickName.length - 1); }); let statusText = vue.computed(() => { return props2.item.status ? statusEnum[props2.item.status] : "-"; }); const statusColor = vue.ref("#FF4D4F"); const copyToClipboard = (text) => { uni.setClipboardData({ data: text, success: () => { uni.showToast({ title: "复制成功", icon: "success" }); } }); }; const handleAudit = () => { uni.navigateTo({ url: `/pages/index/detail/index?id=${props2.item.orderId}` }); }; const handleView = () => { uni.navigateTo({ url: `/pages/index/detail/index?id=${props2.item.orderId}&type=2` }); }; const __returned__ = { props: props2, statusEnum, maskedNickName, get statusText() { return statusText; }, set statusText(v) { statusText = v; }, statusColor, copyToClipboard, handleAudit, handleView, ref: vue.ref, computed: vue.computed }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$1a(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_button = resolveEasycom(vue.resolveDynamicComponent("u-button"), __easycom_3$6); return vue.openBlock(), vue.createElementBlock("view", { class: "order-card" }, [ vue.createCommentVNode(" 用户信息 "), vue.createElementVNode("view", { class: "user-info" }, [ vue.createElementVNode("image", { class: "avatar", src: $props.item.imgPath, mode: "aspectFill" }, null, 8, ["src"]), vue.createElementVNode("view", { class: "user-details" }, [ vue.createElementVNode( "text", { class: "username" }, vue.toDisplayString($props.item.plat == 1 ? "微信用户" : "支付宝用户") + " (" + vue.toDisplayString($setup.maskedNickName) + ")", 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "date" }, "共卖出" + vue.toDisplayString($props.item.totalNum) + "本书", 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "date" }, "来自" + vue.toDisplayString($props.item.sendSsq), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "user-details right-items" }, [ vue.createElementVNode( "text", { class: "date" }, vue.toDisplayString($props.item.schedulePickupStartTime), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "status", style: vue.normalizeStyle({ color: $setup.statusColor }) }, "[" + vue.toDisplayString($setup.statusText) + "]", 5 /* TEXT, STYLE */ ) ]) ]), vue.createCommentVNode(" 订单详情 "), vue.createElementVNode("view", { class: "order-details" }, [ vue.createElementVNode("view", { class: "detail-row flex flex-col" }, [ vue.createElementVNode("view", { class: "flex-1" }, [ vue.createElementVNode("text", null, "订单ID:"), vue.createElementVNode( "text", { class: "link", onClick: _cache[0] || (_cache[0] = ($event) => $setup.copyToClipboard($props.item.orderId)) }, vue.toDisplayString($props.item.orderId), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "flex-1" }, [ vue.createElementVNode("text", null, "运单号:"), vue.createElementVNode( "text", { class: "link", onClick: _cache[1] || (_cache[1] = ($event) => $setup.copyToClipboard($props.item.waybillCode)) }, vue.toDisplayString($props.item.waybillCode), 1 /* TEXT */ ) ]) ]), vue.createElementVNode("view", { class: "detail-row" }, [ vue.createElementVNode( "text", { class: "flex-1" }, "预估金额:" + vue.toDisplayString($props.item.expectMoney || 0), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "flex-1" }, "审核金额:" + vue.toDisplayString($props.item.finalMoney || "待核算"), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "detail-row" }, [ vue.createElementVNode( "text", null, "内部备注:" + vue.toDisplayString($props.item.manageRemark ? $props.item.manageRemark[0].remark : "-"), 1 /* TEXT */ ) ]) ]), vue.createCommentVNode(" 操作按钮 "), vue.createElementVNode("view", { class: "action-buttons" }, [ vue.createVNode(_component_u_button, { size: "small", type: "primary", onClick: $setup.handleAudit }, { default: vue.withCtx(() => [ vue.createTextVNode("到货审核") ]), _: 1 /* STABLE */ }), vue.createVNode(_component_u_button, { size: "small", onClick: $setup.handleView }, { default: vue.withCtx(() => [ vue.createTextVNode("查看") ]), _: 1 /* STABLE */ }) ]) ]); } const orderItem = /* @__PURE__ */ _export_sfc(_sfc_main$1b, [["render", _sfc_render$1a], ["__scopeId", "data-v-12bc2a79"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/my/components/orderItem.vue"]]); const _sfc_main$1a = { __name: "isbn-order", setup(__props, { expose: __expose }) { __expose(); const otherParams = vue.ref({ isbnList: "" }); const scrollRef = vue.ref(null); const refreshList = () => { var _a; (_a = scrollRef.value) == null ? void 0 : _a.resetUpScroll(); }; let dataList = vue.ref([]); const updateList = (data, page2) => { dataList.value = data; if (data.length > 0 && page2 == 1) { uni.$u.ttsModule.speak("查询到" + data.length + "条数据"); } if (data.length == 0 && page2 == 1) { uni.$u.ttsModule.speak("未查询到数据"); } }; onLoad(() => { const storedList = uni.getStorageSync("isbnList"); if (storedList) { otherParams.value.isbnList = storedList.map((v) => v.isbn); refreshList(); } }); const __returned__ = { otherParams, scrollRef, refreshList, get dataList() { return dataList; }, set dataList(v) { dataList = v; }, updateList, reactive: vue.reactive, PageScroll, OrderItem: orderItem, ref: vue.ref, get onLoad() { return onLoad; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$19(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "common-page", style: { "padding": "0" } }, [ vue.createVNode($setup["PageScroll"], { requestStr: "/app/orderinfo/getOrderListByIsbn", onUpdateList: $setup.updateList, ref: "scrollRef", otherParams: $setup.otherParams, method: "post" }, { default: vue.withCtx(() => [ $setup.dataList.length ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "list-con" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.dataList, (cell) => { return vue.openBlock(), vue.createBlock($setup["OrderItem"], { key: cell.id, item: cell, class: "mt-20" }, null, 8, ["item"]); }), 128 /* KEYED_FRAGMENT */ )) ])) : vue.createCommentVNode("v-if", true) ]), _: 1 /* STABLE */ }, 8, ["otherParams"]) ]); } const PagesIndexAuditIsbnOrder = /* @__PURE__ */ _export_sfc(_sfc_main$1a, [["render", _sfc_render$19], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/audit/isbn-order.vue"]]); const _sfc_main$19 = { __name: "express-order", setup(__props, { expose: __expose }) { __expose(); const form = vue.ref({ searchType: "2", search: "" }); const handleSearch = () => { formatAppLog("log", "at pages/index/audit/express-order.vue:45", "查询:", form.value.search); uni.$u.http.get("/app/orderinfo/getOrderInfoForCheck", { params: { ...form.value } }).then((res2) => { if (res2.code == 200) { uni.setStorageSync("orderDetail", res2.data); uni.navigateTo({ url: `/pages/index/detail/index?id=${res2.data.orderId}` }); } else { if (res2.code == 500) { let text = form.value.search + "订单不存在"; uni.$u.ttsModule.speak(text); } else { uni.$u.toast(res2.msg); uni.$u.ttsModule.speak(res2.msg); } } }); }; const handleScan = () => { uni.scanCode({ success: (res2) => { form.value.search = res2.result; handleSearch(); } }); }; onLoad(() => { uni.$u.useGlobalEvent((e) => { form.value.search = e.barcode; handleSearch(); }); }); const __returned__ = { form, handleSearch, handleScan, ref: vue.ref, get onLoad() { return onLoad; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$18(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_radio = resolveEasycom(vue.resolveDynamicComponent("u-radio"), __easycom_0$6); const _component_u_radio_group = resolveEasycom(vue.resolveDynamicComponent("u-radio-group"), __easycom_1$4); const _component_u_input = resolveEasycom(vue.resolveDynamicComponent("u-input"), __easycom_0$f); const _component_u_button = resolveEasycom(vue.resolveDynamicComponent("u-button"), __easycom_3$6); const _component_u_divider = resolveEasycom(vue.resolveDynamicComponent("u-divider"), __easycom_2$3); return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createCommentVNode(" 底部按钮 "), vue.createElementVNode("view", { class: "footer" }, [ vue.createCommentVNode(" 查询区域 "), vue.createElementVNode("view", { class: "query-section" }, [ vue.createVNode(_component_u_radio_group, { modelValue: $setup.form.searchType, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.form.searchType = $event) }, { default: vue.withCtx(() => [ vue.createVNode(_component_u_radio, { label: "查订单", name: "1", "label-size": "17" }), vue.createVNode(_component_u_radio, { label: "查物流", "custom-style": "margin-left:20px", name: "2", "label-size": "17" }) ]), _: 1 /* STABLE */ }, 8, ["modelValue"]), vue.createElementVNode("view", { class: "search-box" }, [ vue.createVNode(_component_u_input, { "custom-style": "width:100rpx", modelValue: $setup.form.search, "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.form.search = $event), placeholder: $setup.form.searchType == "1" ? "扫描/输入订单编号" : "扫描/输入物流单号", border: "surround", clearable: "", "placeholder-style": "font-size:32rpx" }, null, 8, ["modelValue", "placeholder"]), vue.createVNode(_component_u_button, { color: "#c8c8c8", text: "查询", onClick: $setup.handleSearch }) ]) ]), vue.createVNode(_component_u_divider), vue.createElementVNode("view", { style: { "display": "flex" } }, [ vue.createVNode(_component_u_button, { size: "large", type: "success", text: "扫码", onClick: $setup.handleScan }) ]) ]) ]); } const PagesIndexAuditExpressOrder = /* @__PURE__ */ _export_sfc(_sfc_main$19, [["render", _sfc_render$18], ["__scopeId", "data-v-b27ee25f"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/audit/express-order.vue"]]); const _sfc_main$18 = { __name: "AuditorSelector", props: { show: { type: Boolean, default: false } }, emits: ["update:show", "auditor-selected"], setup(__props, { expose: __expose, emit: __emit }) { __expose(); const props2 = __props; const emit2 = __emit; const searchKeyword = vue.ref(""); const searchResults = vue.ref([]); const historyAuditors = vue.ref(uni.getStorageSync("historyAuditors") || []); const checkUserId = vue.ref(""); const auditorSearch = (name) => { formatAppLog("log", "at pages/index/detail/components/AuditorSelector.vue:66", name); uni.$u.http.get("/app/appUser/getCheckUser?name=" + name).then((res2) => { if (res2.code == 200) { searchResults.value = res2.data; } }); }; const handleSearch = () => { auditorSearch(searchKeyword.value); }; const selectItem = vue.ref({}); const selectAuditor = (item) => { checkUserId.value = item.userId; selectItem.value = item; }; const handleClose = () => { emit2("update:show", false); searchKeyword.value = ""; }; const handleConfirm = () => { if (checkUserId.value) { emit2("auditor-selected", selectItem.value); uni.setStorageSync("checkUserInfo", selectItem.value); addToHistory(selectItem.value); handleClose(); } }; const addToHistory = (item) => { const existingIndex = historyAuditors.value.findIndex((auditor) => auditor.userId === item.userId); if (existingIndex !== -1) { historyAuditors.value.splice(existingIndex, 1); } historyAuditors.value.unshift(item); if (historyAuditors.value.length > 10) { historyAuditors.value.pop(); } uni.setStorageSync("historyAuditors", historyAuditors.value); }; vue.onMounted(() => { const storedHistory = uni.getStorageSync("historyAuditors") || []; historyAuditors.value = storedHistory; }); const __returned__ = { props: props2, emit: emit2, searchKeyword, searchResults, historyAuditors, checkUserId, auditorSearch, handleSearch, selectItem, selectAuditor, handleClose, handleConfirm, addToHistory, ref: vue.ref, onMounted: vue.onMounted }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$17(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_search = resolveEasycom(vue.resolveDynamicComponent("u-search"), __easycom_4$2); const _component_u_tag = resolveEasycom(vue.resolveDynamicComponent("u-tag"), __easycom_2$4); const _component_u_button = resolveEasycom(vue.resolveDynamicComponent("u-button"), __easycom_3$6); const _component_u_popup = resolveEasycom(vue.resolveDynamicComponent("u-popup"), __easycom_3$4); return vue.openBlock(), vue.createBlock(_component_u_popup, { show: $props.show, onClose: $setup.handleClose, mode: "bottom", round: "10" }, { default: vue.withCtx(() => [ vue.createElementVNode("view", { class: "auditor-selector" }, [ vue.createElementVNode("view", { style: { "flex": "1" } }, [ vue.createCommentVNode(" Title "), vue.createElementVNode("view", { class: "header" }, [ vue.createElementVNode("text", { class: "title" }, "绑定审核员") ]), vue.createCommentVNode(" Search Box "), vue.createElementVNode("view", { class: "search-box" }, [ vue.createVNode(_component_u_search, { inputStyle: { "height": "80rpx", "font-size": "16px" }, actionStyle: { "font-size": "16px", color: "#22ac38" }, modelValue: $setup.searchKeyword, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.searchKeyword = $event), placeholder: "搜索审核员", "show-action": true, "action-text": "搜索", onSearch: $setup.handleSearch, onCustom: $setup.handleSearch }, null, 8, ["modelValue"]) ]), vue.createCommentVNode(" Search Results "), $setup.searchResults.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "search-result" }, [ vue.createElementVNode("text", { class: "section-title" }, "搜索结果"), vue.createElementVNode("view", { class: "tag-group" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.searchResults, (item) => { return vue.openBlock(), vue.createBlock(_component_u_tag, { key: item, text: item.userName, plain: $setup.checkUserId !== item.userId, shape: "circle", onClick: ($event) => $setup.selectAuditor(item), size: "large" }, null, 8, ["text", "plain", "onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ]) ])) : vue.createCommentVNode("v-if", true), vue.createCommentVNode(" History "), $setup.historyAuditors.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "history-section" }, [ vue.createElementVNode("text", { class: "section-title" }, "历史绑定"), vue.createElementVNode("view", { class: "tag-group" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.historyAuditors, (item) => { return vue.openBlock(), vue.createBlock(_component_u_tag, { key: item, text: item.userName, plain: $setup.checkUserId !== item.userId, shape: "circle", onClick: ($event) => $setup.selectAuditor(item), size: "large" }, null, 8, ["text", "plain", "onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ]) ])) : vue.createCommentVNode("v-if", true) ]), vue.createCommentVNode(" Footer Buttons "), vue.createElementVNode("view", { class: "footer" }, [ vue.createVNode(_component_u_button, { onClick: $setup.handleClose, text: "取消", plain: "", shape: "circle" }), vue.createVNode(_component_u_button, { type: "primary", onClick: $setup.handleConfirm, text: "确定", shape: "circle" }) ]) ]) ]), _: 1 /* STABLE */ }, 8, ["show"]); } const AuditorSelector = /* @__PURE__ */ _export_sfc(_sfc_main$18, [["render", _sfc_render$17], ["__scopeId", "data-v-8d9417b9"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/detail/components/AuditorSelector.vue"]]); const props$9 = { props: { // 输入框的内容 value: { type: [String, Number], default: props$E.textarea.value }, // 输入框的内容 modelValue: { type: [String, Number], default: props$E.textarea.value }, // 输入框为空时占位符 placeholder: { type: [String, Number], default: props$E.textarea.placeholder }, // 指定placeholder的样式类,注意页面或组件的style中写了scoped时,需要在类名前写/deep/ placeholderClass: { type: String, default: props$E.input.placeholderClass }, // 指定placeholder的样式 placeholderStyle: { type: [String, Object], default: props$E.input.placeholderStyle }, // 输入框高度 height: { type: [String, Number], default: props$E.textarea.height }, // 设置键盘右下角按钮的文字,仅微信小程序,App-vue和H5有效 confirmType: { type: String, default: props$E.textarea.confirmType }, // 是否禁用 disabled: { type: Boolean, default: props$E.textarea.disabled }, // 是否显示统计字数 count: { type: Boolean, default: props$E.textarea.count }, // 是否自动获取焦点,nvue不支持,H5取决于浏览器的实现 focus: { type: Boolean, default: props$E.textarea.focus }, // 是否自动增加高度 autoHeight: { type: Boolean, default: props$E.textarea.autoHeight }, // 如果textarea是在一个position:fixed的区域,需要显示指定属性fixed为true fixed: { type: Boolean, default: props$E.textarea.fixed }, // 指定光标与键盘的距离 cursorSpacing: { type: Number, default: props$E.textarea.cursorSpacing }, // 指定focus时的光标位置 cursor: { type: [String, Number], default: props$E.textarea.cursor }, // 是否显示键盘上方带有”完成“按钮那一栏, showConfirmBar: { type: Boolean, default: props$E.textarea.showConfirmBar }, // 光标起始位置,自动聚焦时有效,需与selection-end搭配使用 selectionStart: { type: Number, default: props$E.textarea.selectionStart }, // 光标结束位置,自动聚焦时有效,需与selection-start搭配使用 selectionEnd: { type: Number, default: props$E.textarea.selectionEnd }, // 键盘弹起时,是否自动上推页面 adjustPosition: { type: Boolean, default: props$E.textarea.adjustPosition }, // 是否去掉 iOS 下的默认内边距,只微信小程序有效 disableDefaultPadding: { type: Boolean, default: props$E.textarea.disableDefaultPadding }, // focus时,点击页面的时候不收起键盘,只微信小程序有效 holdKeyboard: { type: Boolean, default: props$E.textarea.holdKeyboard }, // 最大输入长度,设置为 -1 的时候不限制最大长度 maxlength: { type: [String, Number], default: props$E.textarea.maxlength }, // 边框类型,surround-四周边框,bottom-底部边框 border: { type: String, default: props$E.textarea.border }, // 用于处理或者过滤输入框内容的方法 formatter: { type: [Function, null], default: props$E.textarea.formatter }, // 是否忽略组件内对文本合成系统事件的处理 ignoreCompositionEvent: { type: Boolean, default: true } } }; const _sfc_main$17 = { name: "u-textarea", mixins: [mpMixin, mixin, props$9], data() { return { // 输入框的值 innerValue: "", // 是否处于获得焦点状态 focused: false, // value是否第一次变化,在watch中,由于加入immediate属性,会在第一次触发,此时不应该认为value发生了变化 firstChange: true, // value绑定值的变化是由内部还是外部引起的 changeFromInner: false, // 过滤处理方法 innerFormatter: (value2) => value2 }; }, created() { }, watch: { modelValue: { immediate: true, handler(newVal, oldVal) { this.innerValue = newVal; this.firstChange = false; this.changeFromInner = false; } } }, computed: { // 组件的类名 textareaClass() { let classes = [], { border, disabled } = this; border === "surround" && (classes = classes.concat(["u-border", "u-textarea--radius"])); border === "bottom" && (classes = classes.concat([ "u-border-bottom", "u-textarea--no-radius" ])); disabled && classes.push("u-textarea--disabled"); return classes.join(" "); }, // 组件的样式 textareaStyle() { const style = {}; return uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle)); } }, emits: ["update:modelValue", "linechange", "focus", "blur", "change", "confirm", "keyboardheightchange"], methods: { // 在微信小程序中,不支持将函数当做props参数,故只能通过ref形式调用 setFormatter(e) { this.innerFormatter = e; }, onFocus(e) { this.$emit("focus", e); }, onBlur(e) { this.$emit("blur", e); uni.$u.formValidate(this, "blur"); }, onLinechange(e) { this.$emit("linechange", e); }, onInput(e) { let { value: value2 = "" } = e.detail || {}; const formatter = this.formatter || this.innerFormatter; const formatValue = formatter(value2); this.innerValue = value2; this.$nextTick(() => { this.innerValue = formatValue; this.valueChange(); }); }, // 内容发生变化,进行处理 valueChange() { const value2 = this.innerValue; this.$nextTick(() => { this.$emit("update:modelValue", value2); this.changeFromInner = true; this.$emit("change", value2); uni.$u.formValidate(this, "change"); }); }, onConfirm(e) { this.$emit("confirm", e); }, onKeyboardheightchange(e) { this.$emit("keyboardheightchange", e); } } }; function _sfc_render$16(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock( "view", { class: vue.normalizeClass(["u-textarea", $options.textareaClass]), style: vue.normalizeStyle([$options.textareaStyle]) }, [ vue.createElementVNode("textarea", { class: "u-textarea__field", value: $data.innerValue, style: vue.normalizeStyle({ height: _ctx.$u.addUnit(_ctx.height) }), placeholder: _ctx.placeholder, "placeholder-style": _ctx.$u.addStyle(_ctx.placeholderStyle, "string"), "placeholder-class": _ctx.placeholderClass, disabled: _ctx.disabled, focus: _ctx.focus, autoHeight: _ctx.autoHeight, fixed: _ctx.fixed, cursorSpacing: _ctx.cursorSpacing, cursor: _ctx.cursor, showConfirmBar: _ctx.showConfirmBar, selectionStart: _ctx.selectionStart, selectionEnd: _ctx.selectionEnd, adjustPosition: _ctx.adjustPosition, disableDefaultPadding: _ctx.disableDefaultPadding, holdKeyboard: _ctx.holdKeyboard, maxlength: _ctx.maxlength, "confirm-type": _ctx.confirmType, ignoreCompositionEvent: _ctx.ignoreCompositionEvent, onFocus: _cache[0] || (_cache[0] = (...args) => $options.onFocus && $options.onFocus(...args)), onBlur: _cache[1] || (_cache[1] = (...args) => $options.onBlur && $options.onBlur(...args)), onLinechange: _cache[2] || (_cache[2] = (...args) => $options.onLinechange && $options.onLinechange(...args)), onInput: _cache[3] || (_cache[3] = (...args) => $options.onInput && $options.onInput(...args)), onConfirm: _cache[4] || (_cache[4] = (...args) => $options.onConfirm && $options.onConfirm(...args)), onKeyboardheightchange: _cache[5] || (_cache[5] = (...args) => $options.onKeyboardheightchange && $options.onKeyboardheightchange(...args)) }, null, 44, ["value", "placeholder", "placeholder-style", "placeholder-class", "disabled", "focus", "autoHeight", "fixed", "cursorSpacing", "cursor", "showConfirmBar", "selectionStart", "selectionEnd", "adjustPosition", "disableDefaultPadding", "holdKeyboard", "maxlength", "confirm-type", "ignoreCompositionEvent"]), _ctx.count ? (vue.openBlock(), vue.createElementBlock( "text", { key: 0, class: "u-textarea__count", style: vue.normalizeStyle({ "background-color": _ctx.disabled ? "transparent" : "#fff" }) }, vue.toDisplayString($data.innerValue.length) + "/" + vue.toDisplayString(_ctx.maxlength), 5 /* TEXT, STYLE */ )) : vue.createCommentVNode("v-if", true) ], 6 /* CLASS, STYLE */ ); } const __easycom_3$2 = /* @__PURE__ */ _export_sfc(_sfc_main$17, [["render", _sfc_render$16], ["__scopeId", "data-v-b6c174a6"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-textarea/u-textarea.vue"]]); const _sfc_main$16 = { __name: "OrderInfo", props: { orderId: String, estimatedAmount: Number, userNote: String, detail: Object // Add more props as needed }, setup(__props, { expose: __expose }) { __expose(); const props2 = __props; let finalExpressList = { "1": "顺丰快递", "2": "京东快递", "3": "德邦快递" }; let finalExpressText = vue.computed(() => { return props2.detail.finalExpress ? finalExpressList[props2.detail.finalExpress] : ""; }); const statusEnum = { 0: "创建", 1: "用户删除", 2: "下单(待初审)", 3: "初审(待取书)", 4: "初审未通过", 5: "快递取书(待签收)", 6: "快递签收(待收货)", 7: "物流签收(路由异常)", 8: "仓库收货(待审核)", 9: "审核中(审核未提交)", 10: "已审核(待付款)", 11: "已完成" }; let statusText = vue.computed(() => { return statusEnum[props2.detail.status] || "未知状态"; }); const maskedSendMobile = vue.computed(() => { if (props2.detail.sendMobile && props2.detail.sendMobile.length === 11) { return props2.detail.sendMobile.replace(/(\d{3})\d{4}(\d{4})/, "$1****$2"); } return props2.detail.sendMobile; }); function copyToClipboard(text) { uni.setClipboardData({ data: text, success: function() { uni.showToast({ title: "复制成功", icon: "success" }); }, fail: function(err) { formatAppLog("error", "at pages/index/detail/components/OrderInfo.vue:120", "Could not copy text: ", err); } }); } const showModal = vue.ref(false); const internalRemark = vue.ref(""); function fillRemark(text) { internalRemark.value = text; } const remarkInfo = vue.ref({}); function handleRemark() { var _a; showModal.value = true; remarkInfo.value = ((_a = props2.detail.manageRemark) == null ? void 0 : _a[0]) || {}; internalRemark.value = remarkInfo.value.remark || ""; } function confirmRemark() { uni.$u.http.post("/app/orderinfo/setManageRemark", { orderId: props2.detail.orderId, remark: internalRemark.value, id: remarkInfo.value.id }).then((res2) => { if (res2.code == 200) { uni.$u.toast("保存成功"); uni.$u.ttsModule.speak("保存成功"); showModal.value = false; } else { uni.$u.toast(res2.msg); } }); } const __returned__ = { props: props2, get finalExpressList() { return finalExpressList; }, set finalExpressList(v) { finalExpressList = v; }, get finalExpressText() { return finalExpressText; }, set finalExpressText(v) { finalExpressText = v; }, statusEnum, get statusText() { return statusText; }, set statusText(v) { statusText = v; }, maskedSendMobile, copyToClipboard, showModal, internalRemark, fillRemark, remarkInfo, handleRemark, confirmRemark, computed: vue.computed, ref: vue.ref, watch: vue.watch }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$15(_ctx, _cache, $props, $setup, $data, $options) { var _a; const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); const _component_u_textarea = resolveEasycom(vue.resolveDynamicComponent("u-textarea"), __easycom_3$2); const _component_u_tag = resolveEasycom(vue.resolveDynamicComponent("u-tag"), __easycom_2$4); const _component_u_modal = resolveEasycom(vue.resolveDynamicComponent("u-modal"), __easycom_1$2); return vue.openBlock(), vue.createElementBlock( vue.Fragment, null, [ vue.createElementVNode("view", { class: "order-info bg-white" }, [ vue.createElementVNode("view", { class: "info-item flex" }, [ vue.createElementVNode("text", { class: "label" }, "订单编号"), vue.createElementVNode( "text", { style: { "color": "#22ac38" }, class: "flex-1 text-center content", onClick: _cache[0] || (_cache[0] = ($event) => $setup.copyToClipboard($props.detail.orderId)) }, vue.toDisplayString($props.detail.orderId), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "info-item" }, [ vue.createElementVNode("text", { class: "label" }, "预估金额"), vue.createElementVNode( "text", { class: "content" }, vue.toDisplayString($props.detail.expectMoney), 1 /* TEXT */ ), vue.createElementVNode("text", { class: "label border-left" }, "审核金额"), vue.createElementVNode( "text", { class: "content" }, vue.toDisplayString($props.detail.expectMoney), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "info-item" }, [ vue.createElementVNode("text", { class: "label" }, "用户备注"), vue.createElementVNode( "text", { class: "content" }, vue.toDisplayString($props.detail.userRemark), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "info-item", onClick: $setup.handleRemark }, [ vue.createElementVNode("text", { class: "label" }, "内部备注"), vue.createElementVNode( "text", { class: "content" }, vue.toDisplayString($props.detail.manageRemark ? $props.detail.manageRemark.length > 0 ? (_a = $props.detail.manageRemark[0]) == null ? void 0 : _a.remark : " " : " "), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "info-item" }, [ vue.createElementVNode("text", { class: "label" }, "订单状态"), vue.createElementVNode( "text", { class: "content", style: { "color": "#c5493e" } }, "[" + vue.toDisplayString($setup.statusText) + "]", 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "info-item" }, [ vue.createElementVNode("text", { class: "label" }, "快递"), vue.createElementVNode( "text", { class: "content" }, vue.toDisplayString($setup.finalExpressText) + "(单号:" + vue.toDisplayString($props.detail.waybillCode) + ")", 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "info-item" }, [ vue.createElementVNode("text", { class: "label" }, [ vue.createTextVNode("发件人"), vue.createElementVNode("text", { style: { "color": "#e99d42" } }, "(所有单)") ]), vue.createElementVNode("view", { class: "content flex flex-a-c flex-j-c" }, [ vue.createElementVNode("text", { class: "content-text", onClick: _cache[1] || (_cache[1] = ($event) => $setup.copyToClipboard($props.detail.sendMobile)) }, "复制"), vue.createElementVNode( "text", { class: "content-text ml-10 mr-10" }, vue.toDisplayString($setup.maskedSendMobile), 1 /* TEXT */ ), $props.detail.orderFrom == 1 ? (vue.openBlock(), vue.createBlock(_component_u_icon, { key: 0, name: "weixin-circle-fill", size: "18", color: "#22ac38" })) : vue.createCommentVNode("v-if", true), $props.detail.orderFrom == 2 ? (vue.openBlock(), vue.createBlock(_component_u_icon, { key: 1, name: "zhifubao-circle-fill", size: "18", color: "#999" })) : vue.createCommentVNode("v-if", true) ]) ]), vue.createElementVNode("view", { class: "info-item" }, [ vue.createElementVNode("text", { class: "label" }, "发货地址"), vue.createElementVNode( "text", { class: "content" }, vue.toDisplayString($props.detail.sendAddress), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "info-item" }, [ vue.createElementVNode("text", { class: "label" }, "收货仓库"), vue.createElementVNode( "text", { class: "content" }, vue.toDisplayString($props.detail.recipientAddress) + "-" + vue.toDisplayString($props.detail.recipientGodown) + "-" + vue.toDisplayString($props.detail.recipientName), 1 /* TEXT */ ) ]) ]), vue.createVNode(_component_u_modal, { show: $setup.showModal, "onUpdate:show": _cache[8] || (_cache[8] = ($event) => $setup.showModal = $event), title: "编辑内部备注", showCancelButton: true, onConfirm: $setup.confirmRemark }, { default: vue.withCtx(() => [ vue.createElementVNode("view", { class: "modal-content w100" }, [ vue.createVNode(_component_u_textarea, { modelValue: $setup.internalRemark, "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $setup.internalRemark = $event), placeholder: "编辑内部备注", autoHeight: "", style: { "min-height": "100px" } }, null, 8, ["modelValue"]), vue.createElementVNode("view", { class: "mt-20 common-title" }, "快速填入"), vue.createElementVNode("view", { class: "quick-fill mt-16" }, [ vue.createVNode(_component_u_tag, { class: "mr-10 mb-10", onClick: _cache[3] || (_cache[3] = ($event) => $setup.fillRemark("少书给客服")), text: "少书给客服" }), vue.createVNode(_component_u_tag, { class: "mr-10 mb-10", onClick: _cache[4] || (_cache[4] = ($event) => $setup.fillRemark("多书给客服")), text: "多书给客服" }), vue.createVNode(_component_u_tag, { class: "mr-10 mb-10", onClick: _cache[5] || (_cache[5] = ($event) => $setup.fillRemark("子母件")), text: "子母件" }), vue.createVNode(_component_u_tag, { class: "mr-10 mb-10", onClick: _cache[6] || (_cache[6] = ($event) => $setup.fillRemark("书单不符给客服")), text: "书单不符给客服" }), vue.createVNode(_component_u_tag, { class: "mr-10 mb-10", onClick: _cache[7] || (_cache[7] = ($event) => $setup.fillRemark("需理赔给客服")), text: "需理赔给客服" }) ]) ]) ]), _: 1 /* STABLE */ }, 8, ["show"]) ], 64 /* STABLE_FRAGMENT */ ); } const OrderInfo = /* @__PURE__ */ _export_sfc(_sfc_main$16, [["render", _sfc_render$15], ["__scopeId", "data-v-034ad4bc"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/detail/components/OrderInfo.vue"]]); const _sfc_main$15 = { __name: "UserInfoCard", props: { detail: { type: Object, default: () => ({}) } }, setup(__props, { expose: __expose }) { __expose(); const props2 = __props; const formattedName = vue.computed(() => { var _a, _b; return ((_b = (_a = props2.detail) == null ? void 0 : _a.userNick) == null ? void 0 : _b.charAt(0)) + "**"; }); const statusClass = vue.computed(() => { return props2.detail.userStatus == 1 ? "color-green" : "color-red"; }); const blacklistAction = vue.computed(() => { return props2.detail.userStatus == 1 ? "加入黑名单" : "移除黑名单"; }); const showModal = vue.ref(false); const showBlacklistModal = vue.ref(false); const reason = vue.ref(""); const toggleBlacklist = () => { showBlacklistModal.value = true; }; const confirmBlacklist = () => { let apiStr = props2.detail.userStatus == 1 ? "/app/appUser/setUserBlack" : "app/appUser/removeUserBlack"; uni.$u.http.post(apiStr, { userId: props2.detail.userId, reason: reason.value }).then((res2) => { if (res2.code == 200) { uni.$u.toast("操作成功"); showBlacklistModal.value = false; props2.detail.userStatus = props2.detail.userStatus == 1 ? 2 : 1; } else { uni.$u.toast(res2.msg); } }); }; const __returned__ = { props: props2, formattedName, statusClass, blacklistAction, showModal, showBlacklistModal, reason, toggleBlacklist, confirmBlacklist, ref: vue.ref, computed: vue.computed }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$14(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_modal = resolveEasycom(vue.resolveDynamicComponent("u-modal"), __easycom_1$2); return vue.openBlock(), vue.createElementBlock("view", { class: "user-info-card bg-white mt-16" }, [ vue.createElementVNode("view", { class: "header" }, [ vue.createElementVNode( "text", { style: { "color": "#666" } }, vue.toDisplayString($props.detail.orderTime), 1 /* TEXT */ ), vue.createElementVNode("text", { onClick: _cache[0] || (_cache[0] = ($event) => $setup.showModal = true), class: "color-green" }, "[查看订单日志]") ]), vue.createElementVNode("view", { class: "content flex flex-j-b" }, [ vue.createElementVNode("image", { src: $props.detail.imgPath, class: "user-image" }, null, 8, ["src"]), vue.createElementVNode("view", { class: "flex flex-a-e flex-1 ml-12" }, [ vue.createElementVNode("view", { class: "flex flex-d flex-1" }, [ vue.createElementVNode("text", { class: "color-green" }, [ vue.createTextVNode( vue.toDisplayString($setup.formattedName), 1 /* TEXT */ ), vue.createElementVNode("text", { style: { "color": "#e99d42" } }, "(所有单)") ]), vue.createElementVNode( "text", { class: "common-text", style: { "margin-top": "10rpx" } }, "共卖出" + vue.toDisplayString($props.detail.totalNum) + "本书", 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "common-text" }, "来自" + vue.toDisplayString($props.detail.sendSsq), 1 /* TEXT */ ), vue.createElementVNode("text", { class: "common-text", style: { "margin-top": "10rpx" } }, [ vue.createTextVNode("用户状态: "), vue.createElementVNode( "text", { class: vue.normalizeClass($setup.statusClass) }, vue.toDisplayString($props.detail.userStatus == 1 ? "正常" : $props.detail.userStatus == 2 ? "黑名单" : "-"), 3 /* TEXT, CLASS */ ) ]) ]), vue.createElementVNode( "text", { style: { "min-width": "160rpx" }, onClick: $setup.toggleBlacklist, class: "color-red" }, "[" + vue.toDisplayString($setup.blacklistAction) + "]", 1 /* TEXT */ ) ]) ]), vue.createVNode(_component_u_modal, { show: $setup.showModal, "onUpdate:show": _cache[1] || (_cache[1] = ($event) => $setup.showModal = $event), title: "订单日志", showCancelButton: false, confirmText: "关闭", onConfirm: _cache[2] || (_cache[2] = ($event) => $setup.showModal = false), class: "log-modal" }, { default: vue.withCtx(() => [ vue.createElementVNode("view", { class: "log-container" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($props.detail.logVoList, (log, index2) => { return vue.openBlock(), vue.createElementBlock("view", { class: "log-item", key: index2 }, [ vue.createElementVNode( "view", { class: "log-item-content" }, vue.toDisplayString(log.content), 1 /* TEXT */ ), vue.createElementVNode( "view", { class: "log-item-name common-text" }, "操作人:" + vue.toDisplayString(log.createName), 1 /* TEXT */ ), vue.createElementVNode( "view", { class: "log-item-time common-text" }, "操作时间:" + vue.toDisplayString(log.createTime), 1 /* TEXT */ ) ]); }), 128 /* KEYED_FRAGMENT */ )) ]) ]), _: 1 /* STABLE */ }, 8, ["show"]), vue.createVNode(_component_u_modal, { show: $setup.showBlacklistModal, "onUpdate:show": _cache[4] || (_cache[4] = ($event) => $setup.showBlacklistModal = $event), title: "拉黑用户", showCancelButton: true, confirmText: "提交", cancelText: "取消", onConfirm: $setup.confirmBlacklist, onCancel: _cache[5] || (_cache[5] = ($event) => $setup.showBlacklistModal = false) }, { default: vue.withCtx(() => [ vue.withDirectives(vue.createElementVNode( "textarea", { class: "reason-textarea", placeholder: "请输入拉黑原因...", autoHeight: "", "bg-color": "#f8f8f8", "border-radius": "10rpx", "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => $setup.reason = $event), height: "100px" }, null, 512 /* NEED_PATCH */ ), [ [vue.vModelText, $setup.reason] ]) ]), _: 1 /* STABLE */ }, 8, ["show"]) ]); } const UserInfoCard = /* @__PURE__ */ _export_sfc(_sfc_main$15, [["render", _sfc_render$14], ["__scopeId", "data-v-42a1a738"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/detail/components/UserInfoCard.vue"]]); const _sfc_main$14 = { __name: "LogisticsTimeline", props: { list: { type: Array, default: [] } }, setup(__props, { expose: __expose }) { __expose(); const props2 = __props; const __returned__ = { props: props2 }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$13(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); return vue.openBlock(), vue.createElementBlock("view", { "scroll-y": "", class: "timeline-container" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($props.list, (item, index2) => { return vue.openBlock(), vue.createElementBlock("view", { key: index2, class: "timeline-item" }, [ vue.createElementVNode("view", { class: "timeline-icon" }, [ vue.createVNode(_component_u_icon, { name: "map-fill", color: "#19be6b", size: "16" }) ]), vue.createElementVNode("view", { class: "timeline-content" }, [ vue.createElementVNode( "text", { class: "title" }, vue.toDisplayString(item.title), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "desc" }, vue.toDisplayString(item.description), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "time" }, vue.toDisplayString(item.time), 1 /* TEXT */ ) ]), index2 < $props.list.length - 1 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "timeline-line" })) : vue.createCommentVNode("v-if", true) ]); }), 128 /* KEYED_FRAGMENT */ )) ]); } const LogisticsTimeline = /* @__PURE__ */ _export_sfc(_sfc_main$14, [["render", _sfc_render$13], ["__scopeId", "data-v-140e9488"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/express/components/LogisticsTimeline.vue"]]); const _sfc_main$13 = { __name: "BookItem", props: { item: Object, showClose: { type: Boolean, default: false } }, setup(__props, { expose: __expose }) { __expose(); const props2 = __props; const goodNum = vue.computed(() => { var _a; return ((_a = props2.item.auditCommentList) == null ? void 0 : _a.filter((v) => v.sts == 1).length) || 0; }); const badNum = vue.computed(() => { var _a; return ((_a = props2.item.auditCommentList) == null ? void 0 : _a.filter((v) => v.sts == 3).length) || 0; }); const reasons = vue.computed(() => { let list = props2.item.auditCommentList; if (!list) return ""; if (list.length > 0) { let poorList = list.filter((v) => v.sts == 3); if (poorList.length == 0) return ""; return poorList.map((v) => v.com).join("/"); } }); const __returned__ = { props: props2, goodNum, badNum, reasons, computed: vue.computed }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$12(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "card" }, [ vue.createElementVNode("view", { class: "flex w100" }, [ vue.createElementVNode("view", { class: "flex-d" }, [ vue.createElementVNode("image", { style: { "width": "70px", "height": "90px" }, src: $props.item.cover, mode: "aspectFill" }, null, 8, ["src"]), !$props.showClose ? (vue.openBlock(), vue.createElementBlock( "view", { key: 0, class: "quantity mt-24" }, "数量: " + vue.toDisplayString($props.item.num), 1 /* TEXT */ )) : vue.createCommentVNode("v-if", true) ]), vue.createElementVNode("view", { class: "book-info ml-20 flex-1" }, [ vue.createElementVNode( "view", { class: "common-title mb-20" }, vue.toDisplayString($props.item.bookName), 1 /* TEXT */ ), vue.createElementVNode("view", { class: "flex flex-j-b mb-10" }, [ vue.createElementVNode( "view", { class: "isbn" }, "ISBN: " + vue.toDisplayString($props.item.isbn), 1 /* TEXT */ ), vue.createElementVNode( "view", { class: "set" }, "套装: " + vue.toDisplayString($props.item.suit == 1 ? "是" : "不是"), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "flex flex-j-b mb-10" }, [ vue.createElementVNode( "view", { class: "price" }, "定价: " + vue.toDisplayString($props.item.bookPrice), 1 /* TEXT */ ), vue.createElementVNode( "view", { class: "estimate" }, "预估单价: " + vue.toDisplayString(($props.item.recycleDiscount * $props.item.bookPrice * 0.1).toFixed(2)), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "flex flex-j-b mb-10" }, [ vue.createElementVNode( "view", { class: "discount" }, "回收折扣: " + vue.toDisplayString($props.item.recycleDiscount), 1 /* TEXT */ ), vue.createElementVNode("view", { class: "review" }, [ vue.createTextVNode("审核金额: "), vue.createElementVNode( "text", { class: "color-red" }, vue.toDisplayString($props.item.finalMoney || 0), 1 /* TEXT */ ) ]) ]), vue.createElementVNode("view", { class: "quality mb-10" }, [ vue.createTextVNode( " 品相: 良好(" + vue.toDisplayString($setup.goodNum) + ") 、 一般(" + vue.toDisplayString($props.item.averageNum || 0) + ") 、 ", 1 /* TEXT */ ), vue.createElementVNode( "text", { class: vue.normalizeClass($props.item.badNum > 0 ? "color-red" : "") }, "极差(" + vue.toDisplayString($setup.badNum) + ")", 3 /* TEXT, CLASS */ ) ]), $setup.reasons ? (vue.openBlock(), vue.createElementBlock( "view", { key: 0, class: "color-red" }, "原因:" + vue.toDisplayString($setup.reasons), 1 /* TEXT */ )) : vue.createCommentVNode("v-if", true) ]) ]) ]); } const BookItem$2 = /* @__PURE__ */ _export_sfc(_sfc_main$13, [["render", _sfc_render$12], ["__scopeId", "data-v-a629889e"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/detail/components/BookItem.vue"]]); const pinyin = { "a": "啊阿锕", "ai": "埃挨哎唉哀皑癌蔼矮艾碍爱隘诶捱嗳嗌嫒瑷暧砹锿霭", "an": "鞍氨安俺按暗岸胺案谙埯揞犴庵桉铵鹌顸黯", "ang": "肮昂盎", "ao": "凹敖熬翱袄傲奥懊澳坳拗嗷噢岙廒遨媪骜聱螯鏊鳌鏖", "ba": "芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸茇菝萆捭岜灞杷钯粑鲅魃", "bai": "白柏百摆佰败拜稗薜掰鞴", "ban": "斑班搬扳般颁板版扮拌伴瓣半办绊阪坂豳钣瘢癍舨", "bang": "邦帮梆榜膀绑棒磅蚌镑傍谤蒡螃", "bao": "苞胞包褒雹保堡饱宝抱报暴豹鲍爆勹葆宀孢煲鸨褓趵龅", "bo": "剥薄玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳亳蕃啵饽檗擘礴钹鹁簸跛", "bei": "杯碑悲卑北辈背贝钡倍狈备惫焙被孛陂邶埤蓓呗怫悖碚鹎褙鐾", "ben": "奔苯本笨畚坌锛", "beng": "崩绷甭泵蹦迸唪嘣甏", "bi": "逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛匕仳俾芘荜荸吡哔狴庳愎滗濞弼妣婢嬖璧贲畀铋秕裨筚箅篦舭襞跸髀", "bian": "鞭边编贬扁便变卞辨辩辫遍匾弁苄忭汴缏煸砭碥稹窆蝙笾鳊", "biao": "标彪膘表婊骠飑飙飚灬镖镳瘭裱鳔", "bie": "鳖憋别瘪蹩鳘", "bin": "彬斌濒滨宾摈傧浜缤玢殡膑镔髌鬓", "bing": "兵冰柄丙秉饼炳病并禀邴摒绠枋槟燹", "bu": "捕卜哺补埠不布步簿部怖拊卟逋瓿晡钚醭", "ca": "擦嚓礤", "cai": "猜裁材才财睬踩采彩菜蔡", "can": "餐参蚕残惭惨灿骖璨粲黪", "cang": "苍舱仓沧藏伧", "cao": "操糙槽曹草艹嘈漕螬艚", "ce": "厕策侧册测刂帻恻", "ceng": "层蹭噌", "cha": "插叉茬茶查碴搽察岔差诧猹馇汊姹杈楂槎檫钗锸镲衩", "chai": "拆柴豺侪茈瘥虿龇", "chan": "搀掺蝉馋谗缠铲产阐颤冁谄谶蒇廛忏潺澶孱羼婵嬗骣觇禅镡裣蟾躔", "chang": "昌猖场尝常长偿肠厂敞畅唱倡伥鬯苌菖徜怅惝阊娼嫦昶氅鲳", "chao": "超抄钞朝嘲潮巢吵炒怊绉晁耖", "che": "车扯撤掣彻澈坼屮砗", "chen": "郴臣辰尘晨忱沉陈趁衬称谌抻嗔宸琛榇肜胂碜龀", "cheng": "撑城橙成呈乘程惩澄诚承逞骋秤埕嵊徵浈枨柽樘晟塍瞠铖裎蛏酲", "chi": "吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽傺墀芪茌搋叱哧啻嗤彳饬沲媸敕胝眙眵鸱瘛褫蚩螭笞篪豉踅踟魑", "chong": "充冲虫崇宠茺忡憧铳艟", "chou": "抽酬畴踌稠愁筹仇绸瞅丑俦圳帱惆溴妯瘳雠鲋", "chu": "臭初出橱厨躇锄雏滁除楚础储矗搐触处亍刍憷绌杵楮樗蜍蹰黜", "chuan": "揣川穿椽传船喘串掾舛惴遄巛氚钏镩舡", "chuang": "疮窗幢床闯创怆", "chui": "吹炊捶锤垂陲棰槌", "chun": "春椿醇唇淳纯蠢促莼沌肫朐鹑蝽", "chuo": "戳绰蔟辶辍镞踔龊", "ci": "疵茨磁雌辞慈瓷词此刺赐次荠呲嵯鹚螅糍趑", "cong": "聪葱囱匆从丛偬苁淙骢琮璁枞", "cu": "凑粗醋簇猝殂蹙", "cuan": "蹿篡窜汆撺昕爨", "cui": "摧崔催脆瘁粹淬翠萃悴璀榱隹", "cun": "村存寸磋忖皴", "cuo": "撮搓措挫错厝脞锉矬痤鹾蹉躜", "da": "搭达答瘩打大耷哒嗒怛妲疸褡笪靼鞑", "dai": "呆歹傣戴带殆代贷袋待逮怠埭甙呔岱迨逯骀绐玳黛", "dan": "耽担丹单郸掸胆旦氮但惮淡诞弹蛋亻儋卩萏啖澹檐殚赕眈瘅聃箪", "dang": "当挡党荡档谠凼菪宕砀铛裆", "dao": "刀捣蹈倒岛祷导到稻悼道盗叨啁忉洮氘焘忑纛", "de": "德得的锝", "deng": "蹬灯登等瞪凳邓噔嶝戥磴镫簦", "di": "堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔氐籴诋谛邸坻莜荻嘀娣柢棣觌砥碲睇镝羝骶", "dian": "颠掂滇碘点典靛垫电佃甸店惦奠淀殿丶阽坫埝巅玷癜癫簟踮", "diao": "碉叼雕凋刁掉吊钓调轺铞蜩粜貂", "die": "跌爹碟蝶迭谍叠佚垤堞揲喋渫轶牒瓞褶耋蹀鲽鳎", "ding": "丁盯叮钉顶鼎锭定订丢仃啶玎腚碇町铤疔耵酊", "dong": "东冬董懂动栋侗恫冻洞垌咚岽峒夂氡胨胴硐鸫", "dou": "兜抖斗陡豆逗痘蔸钭窦窬蚪篼酡", "du": "都督毒犊独读堵睹赌杜镀肚度渡妒芏嘟渎椟橐牍蠹笃髑黩", "duan": "端短锻段断缎彖椴煅簖", "dui": "堆兑队对怼憝碓", "dun": "墩吨蹲敦顿囤钝盾遁炖砘礅盹镦趸", "duo": "掇哆多夺垛躲朵跺舵剁惰堕咄哚缍柁铎裰踱", "e": "蛾峨鹅俄额讹娥恶厄扼遏鄂饿噩谔垩垭苊莪萼呃愕屙婀轭曷腭硪锇锷鹗颚鳄", "en": "恩蒽摁唔嗯", "er": "而儿耳尔饵洱二贰迩珥铒鸸鲕", "fa": "发罚筏伐乏阀法珐垡砝", "fan": "藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛蘩幡犭梵攵燔畈蹯", "fang": "坊芳方肪房防妨仿访纺放匚邡彷钫舫鲂", "fei": "菲非啡飞肥匪诽吠肺废沸费芾狒悱淝妃绋绯榧腓斐扉祓砩镄痱蜚篚翡霏鲱", "fen": "芬酚吩氛分纷坟焚汾粉奋份忿愤粪偾瀵棼愍鲼鼢", "feng": "丰封枫蜂峰锋风疯烽逢冯缝讽奉凤俸酆葑沣砜", "fu": "佛否夫敷肤孵扶拂辐幅氟符伏俘服浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐匐凫郛芙苻茯莩菔呋幞滏艴孚驸绂桴赙黻黼罘稃馥虍蚨蜉蝠蝮麸趺跗鳆", "ga": "噶嘎蛤尬呷尕尜旮钆", "gai": "该改概钙盖溉丐陔垓戤赅胲", "gan": "干甘杆柑竿肝赶感秆敢赣坩苷尴擀泔淦澉绀橄旰矸疳酐", "gang": "冈刚钢缸肛纲岗港戆罡颃筻", "gong": "杠工攻功恭龚供躬公宫弓巩汞拱贡共蕻廾咣珙肱蚣蛩觥", "gao": "篙皋高膏羔糕搞镐稿告睾诰郜蒿藁缟槔槁杲锆", "ge": "哥歌搁戈鸽胳疙割革葛格阁隔铬个各鬲仡哿塥嗝纥搿膈硌铪镉袼颌虼舸骼髂", "gei": "给", "gen": "根跟亘茛哏艮", "geng": "耕更庚羹埂耿梗哽赓鲠", "gou": "钩勾沟苟狗垢构购够佝诟岣遘媾缑觏彀鸲笱篝鞲", "gu": "辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇嘏诂菰哌崮汩梏轱牯牿胍臌毂瞽罟钴锢瓠鸪鹄痼蛄酤觚鲴骰鹘", "gua": "刮瓜剐寡挂褂卦诖呱栝鸹", "guai": "乖拐怪哙", "guan": "棺关官冠观管馆罐惯灌贯倌莞掼涫盥鹳鳏", "guang": "光广逛犷桄胱疒", "gui": "瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽匦刿庋宄妫桧炅晷皈簋鲑鳜", "gun": "辊滚棍丨衮绲磙鲧", "guo": "锅郭国果裹过馘蠃埚掴呙囗帼崞猓椁虢锞聒蜮蜾蝈", "ha": "哈", "hai": "骸孩海氦亥害骇咴嗨颏醢", "han": "酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉邗菡撖阚瀚晗焓颔蚶鼾", "hen": "夯痕很狠恨", "hang": "杭航沆绗珩桁", "hao": "壕嚎豪毫郝好耗号浩薅嗥嚆濠灏昊皓颢蚝", "he": "呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺诃劾壑藿嗑嗬阖盍蚵翮", "hei": "嘿黑", "heng": "哼亨横衡恒訇蘅", "hong": "轰哄烘虹鸿洪宏弘红黉讧荭薨闳泓", "hou": "喉侯猴吼厚候后堠後逅瘊篌糇鲎骺", "hu": "呼乎忽瑚壶葫胡蝴狐糊湖弧虎唬护互沪户冱唿囫岵猢怙惚浒滹琥槲轷觳烀煳戽扈祜鹕鹱笏醐斛", "hua": "花哗华猾滑画划化话劐浍骅桦铧稞", "huai": "槐徊怀淮坏还踝", "huan": "欢环桓缓换患唤痪豢焕涣宦幻郇奂垸擐圜洹浣漶寰逭缳锾鲩鬟", "huang": "荒慌黄磺蝗簧皇凰惶煌晃幌恍谎隍徨湟潢遑璜肓癀蟥篁鳇", "hui": "灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘诙茴荟蕙哕喙隳洄彗缋珲晖恚虺蟪麾", "hun": "荤昏婚魂浑混诨馄阍溷缗", "huo": "豁活伙火获或惑霍货祸攉嚯夥钬锪镬耠蠖", "ji": "击圾基机畸稽积箕肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪居丌乩剞佶佴脔墼芨芰萁蒺蕺掎叽咭哜唧岌嵴洎彐屐骥畿玑楫殛戟戢赍觊犄齑矶羁嵇稷瘠瘵虮笈笄暨跻跽霁鲚鲫髻麂", "jia": "嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁伽郏拮岬浃迦珈戛胛恝铗镓痂蛱笳袈跏", "jian": "歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件健舰剑饯渐溅涧建僭谏谫菅蒹搛囝湔蹇謇缣枧柙楗戋戬牮犍毽腱睑锏鹣裥笕箴翦趼踺鲣鞯", "jiang": "僵姜将浆江疆蒋桨奖讲匠酱降茳洚绛缰犟礓耩糨豇", "jiao": "蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫佼僬茭挢噍峤徼姣纟敫皎鹪蛟醮跤鲛", "jie": "窖揭接皆秸街阶截劫节桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届偈讦诘喈嗟獬婕孑桀獒碣锴疖袷颉蚧羯鲒骱髫", "jin": "巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸尽卺荩堇噤馑廑妗缙瑾槿赆觐钅锓衿矜", "jing": "劲荆兢茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净刭儆阱菁獍憬泾迳弪婧肼胫腈旌", "jiong": "炯窘冂迥扃", "jiu": "揪究纠玖韭久灸九酒厩救旧臼舅咎就疚僦啾阄柩桕鹫赳鬏", "ju": "鞠拘狙疽驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧倨讵苣苴莒掬遽屦琚枸椐榘榉橘犋飓钜锔窭裾趄醵踽龃雎鞫", "juan": "捐鹃娟倦眷卷绢鄄狷涓桊蠲锩镌隽", "jue": "撅攫抉掘倔爵觉决诀绝厥劂谲矍蕨噘崛獗孓珏桷橛爝镢蹶觖", "jun": "均菌钧军君峻俊竣浚郡骏捃狻皲筠麇", "ka": "喀咖卡佧咔胩", "ke": "咯坷苛柯棵磕颗科壳咳可渴克刻客课岢恪溘骒缂珂轲氪瞌钶疴窠蝌髁", "kai": "开揩楷凯慨剀垲蒈忾恺铠锎", "kan": "刊堪勘坎砍看侃凵莰莶戡龛瞰", "kang": "康慷糠扛抗亢炕坑伉闶钪", "kao": "考拷烤靠尻栲犒铐", "ken": "肯啃垦恳垠裉颀", "keng": "吭忐铿", "kong": "空恐孔控倥崆箜", "kou": "抠口扣寇芤蔻叩眍筘", "ku": "枯哭窟苦酷库裤刳堀喾绔骷", "kua": "夸垮挎跨胯侉", "kuai": "块筷侩快蒯郐蒉狯脍", "kuan": "宽款髋", "kuang": "匡筐狂框矿眶旷况诓诳邝圹夼哐纩贶", "kui": "亏盔岿窥葵奎魁傀馈愧溃馗匮夔隗揆喹喟悝愦阕逵暌睽聩蝰篑臾跬", "kun": "坤昆捆困悃阃琨锟醌鲲髡", "kuo": "括扩廓阔蛞", "la": "垃拉喇蜡腊辣啦剌摺邋旯砬瘌", "lai": "莱来赖崃徕涞濑赉睐铼癞籁", "lan": "蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥啉岚懔漤榄斓罱镧褴", "lang": "琅榔狼廊郎朗浪莨蒗啷阆锒稂螂", "lao": "捞劳牢老佬姥酪烙涝唠崂栳铑铹痨醪", "le": "勒乐肋仂叻嘞泐鳓", "lei": "雷镭蕾磊累儡垒擂类泪羸诔荽咧漯嫘缧檑耒酹", "ling": "棱冷拎玲菱零龄铃伶羚凌灵陵岭领另令酃塄苓呤囹泠绫柃棂瓴聆蛉翎鲮", "leng": "楞愣", "li": "厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐痢立粒沥隶力璃哩俪俚郦坜苈莅蓠藜捩呖唳喱猁溧澧逦娌嫠骊缡珞枥栎轹戾砺詈罹锂鹂疠疬蛎蜊蠡笠篥粝醴跞雳鲡鳢黧", "lian": "俩联莲连镰廉怜涟帘敛脸链恋炼练挛蔹奁潋濂娈琏楝殓臁膦裢蠊鲢", "liang": "粮凉梁粱良两辆量晾亮谅墚椋踉靓魉", "liao": "撩聊僚疗燎寥辽潦了撂镣廖料蓼尥嘹獠寮缭钌鹩耢", "lie": "列裂烈劣猎冽埒洌趔躐鬣", "lin": "琳林磷霖临邻鳞淋凛赁吝蔺嶙廪遴檩辚瞵粼躏麟", "liu": "溜琉榴硫馏留刘瘤流柳六抡偻蒌泖浏遛骝绺旒熘锍镏鹨鎏", "long": "龙聋咙笼窿隆垄拢陇弄垅茏泷珑栊胧砻癃", "lou": "楼娄搂篓漏陋喽嵝镂瘘耧蝼髅", "lu": "芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮垆摅撸噜泸渌漉璐栌橹轳辂辘氇胪镥鸬鹭簏舻鲈", "lv": "驴吕铝侣旅履屡缕虑氯律率滤绿捋闾榈膂稆褛", "luan": "峦孪滦卵乱栾鸾銮", "lue": "掠略锊", "lun": "轮伦仑沦纶论囵", "luo": "萝螺罗逻锣箩骡裸落洛骆络倮荦摞猡泺椤脶镙瘰雒", "ma": "妈麻玛码蚂马骂嘛吗唛犸嬷杩麽", "mai": "埋买麦卖迈脉劢荬咪霾", "man": "瞒馒蛮满蔓曼慢漫谩墁幔缦熳镘颟螨鳗鞔", "mang": "芒茫盲忙莽邙漭朦硭蟒", "meng": "氓萌蒙檬盟锰猛梦孟勐甍瞢懵礞虻蜢蠓艋艨黾", "miao": "猫苗描瞄藐秒渺庙妙喵邈缈缪杪淼眇鹋蜱", "mao": "茅锚毛矛铆卯茂冒帽貌贸侔袤勖茆峁瑁昴牦耄旄懋瞀蛑蝥蟊髦", "me": "么", "mei": "玫枚梅酶霉煤没眉媒镁每美昧寐妹媚坶莓嵋猸浼湄楣镅鹛袂魅", "men": "门闷们扪玟焖懑钔", "mi": "眯醚靡糜迷谜弥米秘觅泌蜜密幂芈冖谧蘼嘧猕獯汨宓弭脒敉糸縻麋", "mian": "棉眠绵冕免勉娩缅面沔湎腼眄", "mie": "蔑灭咩蠛篾", "min": "民抿皿敏悯闽苠岷闵泯珉", "ming": "明螟鸣铭名命冥茗溟暝瞑酩", "miu": "谬", "mo": "摸摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谟茉蓦馍嫫镆秣瘼耱蟆貊貘", "mou": "谋牟某厶哞婺眸鍪", "mu": "拇牡亩姆母墓暮幕募慕木目睦牧穆仫苜呒沐毪钼", "na": "拿哪呐钠那娜纳内捺肭镎衲箬", "nai": "氖乃奶耐奈鼐艿萘柰", "nan": "南男难囊喃囡楠腩蝻赧", "nao": "挠脑恼闹孬垴猱瑙硇铙蛲", "ne": "淖呢讷", "nei": "馁", "nen": "嫩能枘恁", "ni": "妮霓倪泥尼拟你匿腻逆溺伲坭猊怩滠昵旎祢慝睨铌鲵", "nian": "蔫拈年碾撵捻念廿辇黏鲇鲶", "niang": "娘酿", "niao": "鸟尿茑嬲脲袅", "nie": "捏聂孽啮镊镍涅乜陧蘖嗫肀颞臬蹑", "nin": "您柠", "ning": "狞凝宁拧泞佞蓥咛甯聍", "niu": "牛扭钮纽狃忸妞蚴", "nong": "脓浓农侬", "nu": "奴努怒呶帑弩胬孥驽", "nv": "女恧钕衄", "nuan": "暖", "nuenue": "虐", "nue": "疟谑", "nuo": "挪懦糯诺傩搦喏锘", "ou": "哦欧鸥殴藕呕偶沤怄瓯耦", "pa": "啪趴爬帕怕琶葩筢", "pai": "拍排牌徘湃派俳蒎", "pan": "攀潘盘磐盼畔判叛爿泮袢襻蟠蹒", "pang": "乓庞旁耪胖滂逄", "pao": "抛咆刨炮袍跑泡匏狍庖脬疱", "pei": "呸胚培裴赔陪配佩沛掊辔帔淠旆锫醅霈", "pen": "喷盆湓", "peng": "砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯堋嘭怦蟛", "pi": "砒霹批披劈琵毗啤脾疲皮匹痞僻屁譬丕陴邳郫圮鼙擗噼庀媲纰枇甓睥罴铍痦癖疋蚍貔", "pian": "篇偏片骗谝骈犏胼褊翩蹁", "piao": "飘漂瓢票剽嘌嫖缥殍瞟螵", "pie": "撇瞥丿苤氕", "pin": "拼频贫品聘拚姘嫔榀牝颦", "ping": "乒坪苹萍平凭瓶评屏俜娉枰鲆", "po": "坡泼颇婆破魄迫粕叵鄱溥珀钋钷皤笸", "pou": "剖裒踣", "pu": "扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑匍噗濮璞氆镤镨蹼", "qi": "期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫亟亓圻芑萋葺嘁屺岐汔淇骐绮琪琦杞桤槭欹祺憩碛蛴蜞綦綮趿蹊鳍麒", "qia": "掐恰洽葜", "qian": "牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉佥阡芊芡荨掮岍悭慊骞搴褰缱椠肷愆钤虔箝", "qiang": "枪呛腔羌墙蔷强抢嫱樯戗炝锖锵镪襁蜣羟跫跄", "qiao": "橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍劁诮谯荞愀憔缲樵毳硗跷鞒", "qie": "切茄且怯窃郄唼惬妾挈锲箧", "qin": "钦侵亲秦琴勤芹擒禽寝沁芩蓁蕲揿吣嗪噙溱檎螓衾", "qing": "青轻氢倾卿清擎晴氰情顷请庆倩苘圊檠磬蜻罄箐謦鲭黥", "qiong": "琼穷邛茕穹筇銎", "qiu": "秋丘邱球求囚酋泅俅氽巯艽犰湫逑遒楸赇鸠虬蚯蝤裘糗鳅鼽", "qu": "趋区蛆曲躯屈驱渠取娶龋趣去诎劬蕖蘧岖衢阒璩觑氍祛磲癯蛐蠼麴瞿黢", "quan": "圈颧权醛泉全痊拳犬券劝诠荃獾悛绻辁畎铨蜷筌鬈", "que": "缺炔瘸却鹊榷确雀阙悫", "qun": "裙群逡", "ran": "然燃冉染苒髯", "rang": "瓤壤攘嚷让禳穰", "rao": "饶扰绕荛娆桡", "ruo": "惹若弱", "re": "热偌", "ren": "壬仁人忍韧任认刃妊纫仞荏葚饪轫稔衽", "reng": "扔仍", "ri": "日", "rong": "戎茸蓉荣融熔溶容绒冗嵘狨缛榕蝾", "rou": "揉柔肉糅蹂鞣", "ru": "茹蠕儒孺如辱乳汝入褥蓐薷嚅洳溽濡铷襦颥", "ruan": "软阮朊", "rui": "蕊瑞锐芮蕤睿蚋", "run": "闰润", "sa": "撒洒萨卅仨挲飒", "sai": "腮鳃塞赛噻", "san": "三叁伞散彡馓氵毵糁霰", "sang": "桑嗓丧搡磉颡", "sao": "搔骚扫嫂埽臊瘙鳋", "se": "瑟色涩啬铩铯穑", "sen": "森", "seng": "僧", "sha": "莎砂杀刹沙纱傻啥煞脎歃痧裟霎鲨", "shai": "筛晒酾", "shan": "珊苫杉山删煽衫闪陕擅赡膳善汕扇缮剡讪鄯埏芟潸姗骟膻钐疝蟮舢跚鳝", "shang": "墒伤商赏晌上尚裳垧绱殇熵觞", "shao": "梢捎稍烧芍勺韶少哨邵绍劭苕潲蛸笤筲艄", "she": "奢赊蛇舌舍赦摄射慑涉社设厍佘猞畲麝", "shen": "砷申呻伸身深娠绅神沈审婶甚肾慎渗诜谂吲哂渖椹矧蜃", "sheng": "声生甥牲升绳省盛剩胜圣丞渑媵眚笙", "shi": "师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试谥埘莳蓍弑唑饣轼耆贳炻礻铈铊螫舐筮豕鲥鲺", "shou": "收手首守寿授售受瘦兽扌狩绶艏", "shu": "蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱恕倏塾菽忄沭涑澍姝纾毹腧殳镯秫鹬", "shua": "刷耍唰涮", "shuai": "摔衰甩帅蟀", "shuan": "栓拴闩", "shuang": "霜双爽孀", "shui": "谁水睡税", "shun": "吮瞬顺舜恂", "shuo": "说硕朔烁蒴搠嗍濯妁槊铄", "si": "斯撕嘶思私司丝死肆寺嗣四伺似饲巳厮俟兕菥咝汜泗澌姒驷缌祀祠锶鸶耜蛳笥", "song": "松耸怂颂送宋讼诵凇菘崧嵩忪悚淞竦", "sou": "搜艘擞嗽叟嗖嗾馊溲飕瞍锼螋", "su": "苏酥俗素速粟僳塑溯宿诉肃夙谡蔌嗉愫簌觫稣", "suan": "酸蒜算", "sui": "虽隋随绥髓碎岁穗遂隧祟蓑冫谇濉邃燧眭睢", "sun": "孙损笋荪狲飧榫跣隼", "suo": "梭唆缩琐索锁所唢嗦娑桫睃羧", "ta": "塌他它她塔獭挞蹋踏闼溻遢榻沓", "tai": "胎苔抬台泰酞太态汰邰薹肽炱钛跆鲐", "tan": "坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭郯蕈昙钽锬覃", "tang": "汤塘搪堂棠膛唐糖傥饧溏瑭铴镗耥螗螳羰醣", "thang": "倘躺淌", "theng": "趟烫", "tao": "掏涛滔绦萄桃逃淘陶讨套挑鼗啕韬饕", "te": "特", "teng": "藤腾疼誊滕", "ti": "梯剔踢锑提题蹄啼体替嚏惕涕剃屉荑悌逖绨缇鹈裼醍", "tian": "天添填田甜恬舔腆掭忝阗殄畋钿蚺", "tiao": "条迢眺跳佻祧铫窕龆鲦", "tie": "贴铁帖萜餮", "ting": "厅听烃汀廷停亭庭挺艇莛葶婷梃蜓霆", "tong": "通桐酮瞳同铜彤童桶捅筒统痛佟僮仝茼嗵恸潼砼", "tou": "偷投头透亠", "tu": "凸秃突图徒途涂屠土吐兔堍荼菟钍酴", "tuan": "湍团疃", "tui": "推颓腿蜕褪退忒煺", "tun": "吞屯臀饨暾豚窀", "tuo": "拖托脱鸵陀驮驼椭妥拓唾乇佗坨庹沱柝砣箨舄跎鼍", "wa": "挖哇蛙洼娃瓦袜佤娲腽", "wai": "歪外", "wan": "豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕剜芄苋菀纨绾琬脘畹蜿箢", "wang": "汪王亡枉网往旺望忘妄罔尢惘辋魍", "wei": "威巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫倭偎诿隈葳薇帏帷崴嵬猥猬闱沩洧涠逶娓玮韪軎炜煨熨痿艉鲔", "wen": "瘟温蚊文闻纹吻稳紊问刎愠阌汶璺韫殁雯", "weng": "嗡翁瓮蓊蕹", "wo": "挝蜗涡窝我斡卧握沃莴幄渥杌肟龌", "wu": "巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误兀仵阢邬圬芴庑怃忤浯寤迕妩骛牾焐鹉鹜蜈鋈鼯", "xi": "昔熙析西硒矽晰嘻吸锡牺稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细僖兮隰郗茜葸蓰奚唏徙饩阋浠淅屣嬉玺樨曦觋欷熹禊禧钸皙穸蜥蟋舾羲粞翕醯鼷", "xia": "瞎虾匣霞辖暇峡侠狭下厦夏吓掀葭嗄狎遐瑕硖瘕罅黠", "xian": "锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线冼藓岘猃暹娴氙祆鹇痫蚬筅籼酰跹", "xiang": "相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象芗葙饷庠骧缃蟓鲞飨", "xiao": "萧硝霄削哮嚣销消宵淆晓小孝校肖啸笑效哓咻崤潇逍骁绡枭枵筱箫魈", "xie": "楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑偕亵勰燮薤撷廨瀣邂绁缬榭榍歙躞", "xin": "薪芯锌欣辛新忻心信衅囟馨莘歆铽鑫", "xing": "星腥猩惺兴刑型形邢行醒幸杏性姓陉荇荥擤悻硎", "xiong": "兄凶胸匈汹雄熊芎", "xiu": "休修羞朽嗅锈秀袖绣莠岫馐庥鸺貅髹", "xu": "墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续讴诩圩蓿怵洫溆顼栩煦砉盱胥糈醑", "xuan": "轩喧宣悬旋玄选癣眩绚儇谖萱揎馔泫洵渲漩璇楦暄炫煊碹铉镟痃", "xue": "靴薛学穴雪血噱泶鳕", "xun": "勋熏循旬询寻驯巡殉汛训讯逊迅巽埙荀薰峋徇浔曛窨醺鲟", "ya": "压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶伢揠吖岈迓娅琊桠氩砑睚痖", "yan": "焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验厣靥赝俨偃兖讠谳郾鄢芫菸崦恹闫阏洇湮滟妍嫣琰晏胭腌焱罨筵酽魇餍鼹", "yang": "殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾徉怏泱炀烊恙蛘鞅", "yao": "邀腰妖瑶摇尧遥窑谣姚咬舀药要耀夭爻吆崾徭瀹幺珧杳曜肴鹞窈繇鳐", "ye": "椰噎耶爷野冶也页掖业叶曳腋夜液谒邺揶馀晔烨铘", "yi": "一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎刈劓佾诒圪圯埸懿苡薏弈奕挹弋呓咦咿噫峄嶷猗饴怿怡悒漪迤驿缢殪贻旖熠钇镒镱痍瘗癔翊衤蜴舣羿翳酏黟", "yin": "茵荫因殷音阴姻吟银淫寅饮尹引隐印胤鄞堙茚喑狺夤氤铟瘾蚓霪龈", "ying": "英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映嬴郢茔莺萦撄嘤膺滢潆瀛瑛璎楹鹦瘿颍罂", "yo": "哟唷", "yong": "拥佣臃痈庸雍踊蛹咏泳涌永恿勇用俑壅墉慵邕镛甬鳙饔", "you": "幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼卣攸侑莸呦囿宥柚猷牖铕疣蝣鱿黝鼬", "yu": "迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉浴寓裕预豫驭禺毓伛俣谀谕萸蓣揄喁圄圉嵛狳饫庾阈妪妤纡瑜昱觎腴欤於煜燠聿钰鹆瘐瘀窳蝓竽舁雩龉", "yuan": "鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院塬沅媛瑗橼爰眢鸢螈鼋", "yue": "曰约越跃钥岳粤月悦阅龠樾刖钺", "yun": "耘云郧匀陨允运蕴酝晕韵孕郓芸狁恽纭殒昀氲", "za": "匝砸杂拶咂", "zai": "栽哉灾宰载再在咱崽甾", "zan": "攒暂赞瓒昝簪糌趱錾", "zang": "赃脏葬奘戕臧", "zao": "遭糟凿藻枣早澡蚤躁噪造皂灶燥唣缫", "ze": "责择则泽仄赜啧迮昃笮箦舴", "zei": "贼", "zen": "怎谮", "zeng": "增憎曾赠缯甑罾锃", "zha": "扎喳渣札轧铡闸眨栅榨咋乍炸诈揸吒咤哳怍砟痄蚱齄", "zhai": "摘斋宅窄债寨砦", "zhan": "瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽谵搌旃", "zhang": "樟章彰漳张掌涨杖丈帐账仗胀瘴障仉鄣幛嶂獐嫜璋蟑", "zhao": "招昭找沼赵照罩兆肇召爪诏棹钊笊", "zhe": "遮折哲蛰辙者锗蔗这浙谪陬柘辄磔鹧褚蜇赭", "zhen": "珍斟真甄砧臻贞针侦枕疹诊震振镇阵缜桢榛轸赈胗朕祯畛鸩", "zheng": "蒸挣睁征狰争怔整拯正政帧症郑证诤峥钲铮筝", "zhi": "芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒卮陟郅埴芷摭帙忮彘咫骘栉枳栀桎轵轾攴贽膣祉祗黹雉鸷痣蛭絷酯跖踬踯豸觯", "zhong": "中盅忠钟衷终种肿重仲众冢锺螽舂舯踵", "zhou": "舟周州洲诌粥轴肘帚咒皱宙昼骤啄着倜诹荮鬻纣胄碡籀舳酎鲷", "zhu": "珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑住注祝驻伫侏邾苎茱洙渚潴驺杼槠橥炷铢疰瘃蚰竺箸翥躅麈", "zhua": "抓", "zhuai": "拽", "zhuan": "专砖转撰赚篆抟啭颛", "zhuang": "桩庄装妆撞壮状丬", "zhui": "椎锥追赘坠缀萑骓缒", "zhun": "谆准", "zhuo": "捉拙卓桌琢茁酌灼浊倬诼廴蕞擢啜浞涿杓焯禚斫", "zi": "兹咨资姿滋淄孜紫仔籽滓子自渍字谘嵫姊孳缁梓辎赀恣眦锱秭耔笫粢觜訾鲻髭", "zong": "鬃棕踪宗综总纵腙粽", "zou": "邹走奏揍鄹鲰", "zu": "租足卒族祖诅阻组俎菹啐徂驵蹴", "zuan": "钻纂攥缵", "zui": "嘴醉最罪", "zun": "尊遵撙樽鳟", "zuo": "昨左佐柞做作坐座阝阼胙祚酢", "cou": "薮楱辏腠", "nang": "攮哝囔馕曩", "o": "喔", "dia": "嗲", "chuai": "嘬膪踹", "cen": "岑涔", "diu": "铥", "nou": "耨", "fou": "缶", "bia": "髟" }; const _ToPinyin = class _ToPinyin { constructor() { } static getInstance() { if (!this.instance) { this.instance = new _ToPinyin(); } return this.instance; } // 转首字母 this.chineseToInitials(this.chineseToPinYin('你好')) this.chineseToInitials('NiHao') chineseToInitials(word) { let SX = ""; for (var i = 0; i < word.length; i++) { var c = word.charAt(i); if (/^[A-Z]+$/.test(c)) { SX += c; } } return SX; } // 转拼音 chineseToPinYin(l1) { var l2 = l1.length; var I1 = ""; var reg = new RegExp("[a-zA-Z0-9]"); for (var i = 0; i < l2; i++) { var val = l1.substr(i, 1); var name = this.arraySearch(val, pinyin); if (reg.test(val)) { I1 += val.toLocaleUpperCase(); } else if (name !== false) { I1 += name; } } I1 = I1.replace(/ /g, "-"); while (I1.indexOf("--") > 0) { I1 = I1.replace("--", "-"); } return I1; } arraySearch(l1, l2) { for (var name in pinyin) { if (pinyin[name].indexOf(l1) !== -1) { return this.ucfirst(name); } } return false; } ucfirst(l1) { if (l1.length > 0) { var first = l1.substr(0, 1).toUpperCase(); var spare = l1.substr(1, l1.length); return first + spare; } } }; __publicField(_ToPinyin, "instance"); let ToPinyin = _ToPinyin; const toPinyin = ToPinyin.getInstance(); const _sfc_main$12 = { __name: "BookInfo", props: { bookList: { type: Array, default: () => [] }, detail: { type: Object, default: () => ({}) }, isShow: { type: Boolean, default: true } }, emits: ["get-all-firstLetter"], setup(__props, { expose: __expose, emit: __emit }) { __expose(); const props2 = __props; const emit2 = __emit; const auditNum = vue.computed(() => { return props2.bookList.reduce((total, item) => { var _a; return total + ((_a = item.auditCommentList) == null ? void 0 : _a.length) || 0; }, 0); }); function handleBookClick(book) { if (props2.detail.status == 10) { uni.$u.ttsModule.speak("此订单已审核"); return; } uni.navigateTo({ url: `/pages/index/detail/book-audit?isbn=${book.isbn}&orderId=${props2.detail.orderId}` }); uni.setStorageSync("auditBook", book); } function getAuditCateNum(cate) { let auditList = []; props2.bookList.forEach((v) => { auditList.push(...v.auditCommentList || []); }); return auditList.filter((v) => v.sts == cate).length; } const formatBookList = (list) => { const poorBooks = { title: "极差", list: [], backgroundColor: "#de868f", id: "poor" }; const goodBooks = { title: "良好", list: [], backgroundColor: "#81b337", id: "good" }; const otherBooks = []; const allFirstLetter = []; list.forEach((book) => { var _a, _b; book.goodNum = ((_a = book.auditCommentList) == null ? void 0 : _a.filter((v) => v.sts == 1).length) || 0; book.badNum = ((_b = book.auditCommentList) == null ? void 0 : _b.filter((v) => v.sts == 3).length) || 0; if (book.badNum > 0) { poorBooks.list.push(book); } else if (book.goodNum > 0) { goodBooks.list.push(book); } else { let firstLetter; const char = book.bookName.charAt(0); if (/^[A-Za-z]$/.test(char)) { firstLetter = char.toUpperCase(); } else if (/^[\u4E00-\u9FA5]$/.test(char)) { firstLetter = toPinyin.chineseToInitials(toPinyin.chineseToPinYin(char)); } else { firstLetter = char; } let bool = otherBooks.some((item) => item.title == firstLetter); if (!bool) { otherBooks.push({ id: firstLetter, title: firstLetter, list: [{ ...book }] }); allFirstLetter.push(firstLetter); emit2("get-all-firstLetter", allFirstLetter); } else { otherBooks.find((item) => item.title == firstLetter).list.push(book); } } }); return { poorBooks, goodBooks, otherBooks }; }; const formatList = vue.ref([]); vue.watch(() => props2.bookList, (newVal) => { let { poorBooks, goodBooks, otherBooks } = formatBookList(newVal); let poor = poorBooks.list.length > 0 ? poorBooks : {}; let good = goodBooks.list.length > 0 ? goodBooks : {}; formatList.value = [...otherBooks, poor, good]; }, { immediate: true, deep: true }); const __returned__ = { props: props2, emit: emit2, auditNum, handleBookClick, getAuditCateNum, formatBookList, formatList, ref: vue.ref, watch: vue.watch, computed: vue.computed, BookItem: BookItem$2, get toPinyin() { return toPinyin; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$11(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "book-info" }, [ $props.isShow ? (vue.openBlock(), vue.createElementBlock( vue.Fragment, { key: 0 }, [ vue.createElementVNode( "view", { class: "font-bold mt-12 mb-10", style: { "padding": "0 20rpx" } }, vue.toDisplayString($props.bookList.length) + "条记录,共" + vue.toDisplayString($props.detail.totalNum) + "本,已审" + vue.toDisplayString($setup.auditNum || 0) + "本 ", 1 /* TEXT */ ), vue.createElementVNode( "view", { class: "font-light", style: { "padding": "0 20rpx" } }, " 其中已审:良好" + vue.toDisplayString($setup.getAuditCateNum(1)) + "本,一般0本,极差" + vue.toDisplayString($setup.getAuditCateNum(3)) + "本 ", 1 /* TEXT */ ) ], 64 /* STABLE_FRAGMENT */ )) : vue.createCommentVNode("v-if", true), (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.formatList, (item) => { return vue.withDirectives((vue.openBlock(), vue.createElementBlock("view", { class: "book-info-item bg-white mt-12", style: vue.normalizeStyle({ backgroundColor: item.backgroundColor }), key: item.title, id: item.id }, [ vue.createElementVNode( "view", { class: "book-info-item-title" }, vue.toDisplayString(item.title), 1 /* TEXT */ ), vue.createElementVNode("view", { class: "book-info-item-list" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(item.list, (book) => { return vue.openBlock(), vue.createBlock($setup["BookItem"], { key: book.bookId, item: book, onClick: ($event) => $setup.handleBookClick(book) }, null, 8, ["item", "onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ]) ], 12, ["id"])), [ [vue.vShow, item == null ? void 0 : item.title] ]); }), 128 /* KEYED_FRAGMENT */ )) ]); } const BookInfo = /* @__PURE__ */ _export_sfc(_sfc_main$12, [["render", _sfc_render$11], ["__scopeId", "data-v-8c7d14f9"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/detail/components/BookInfo.vue"]]); const props$8 = { props: { // 图片地址 src: { type: String, default: props$E.image.src }, // 裁剪模式 mode: { type: String, default: props$E.image.mode }, // 宽度,单位任意 width: { type: [String, Number], default: props$E.image.width }, // 高度,单位任意 height: { type: [String, Number], default: props$E.image.height }, // 图片形状,circle-圆形,square-方形 shape: { type: String, default: props$E.image.shape }, // 圆角,单位任意 radius: { type: [String, Number], default: props$E.image.radius }, // 是否懒加载,微信小程序、App、百度小程序、字节跳动小程序 lazyLoad: { type: Boolean, default: props$E.image.lazyLoad }, // 开启长按图片显示识别微信小程序码菜单 showMenuByLongpress: { type: Boolean, default: props$E.image.showMenuByLongpress }, // 加载中的图标,或者小图片 loadingIcon: { type: String, default: props$E.image.loadingIcon }, // 加载失败的图标,或者小图片 errorIcon: { type: String, default: props$E.image.errorIcon }, // 是否显示加载中的图标或者自定义的slot showLoading: { type: Boolean, default: props$E.image.showLoading }, // 是否显示加载错误的图标或者自定义的slot showError: { type: Boolean, default: props$E.image.showError }, // 是否需要淡入效果 fade: { type: Boolean, default: props$E.image.fade }, // 只支持网络资源,只对微信小程序有效 webp: { type: Boolean, default: props$E.image.webp }, // 过渡时间,单位ms duration: { type: [String, Number], default: props$E.image.duration }, // 背景颜色,用于深色页面加载图片时,为了和背景色融合 bgColor: { type: String, default: props$E.image.bgColor } } }; const _sfc_main$11 = { name: "u-image", mixins: [mpMixin, mixin, props$8], data() { return { // 图片是否加载错误,如果是,则显示错误占位图 isError: false, // 初始化组件时,默认为加载中状态 loading: true, // 不透明度,为了实现淡入淡出的效果 opacity: 1, // 过渡时间,因为props的值无法修改,故需要一个中间值 durationTime: this.duration, // 图片加载完成时,去掉背景颜色,因为如果是png图片,就会显示灰色的背景 backgroundStyle: {}, // 用于fade模式的控制组件显示与否 show: false }; }, watch: { src: { immediate: true, handler(n) { if (!n) { 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$10(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); const _component_u_transition = resolveEasycom(vue.resolveDynamicComponent("u-transition"), __easycom_1$5); 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_2$1 = /* @__PURE__ */ _export_sfc(_sfc_main$11, [["render", _sfc_render$10], ["__scopeId", "data-v-abebd402"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-image/u-image.vue"]]); const _sfc_main$10 = { __name: "FileInfo", props: { orderId: { type: String, default: "" }, annexType: { type: Number, default: 1 }, isbn: { type: String, default: "" } }, setup(__props, { expose: __expose }) { __expose(); const form = vue.ref({ imgInfo: [], remark: "" }); const props2 = __props; const fileList = vue.ref([]); function getFileList() { uni.$u.http.get("/app/orderinfo/getOrderAnnexList", { params: { orderId: props2.orderId, annexType: props2.annexType, isbn: props2.isbn } }).then((res2) => { if (res2.code == 200) { fileList.value = res2.data; } }); } getFileList(); const handleUpload = () => { formatAppLog("log", "at pages/index/detail/components/FileInfo.vue:73", form.value); let data = { orderId: props2.orderId, annexType: props2.annexType, isbn: props2.isbn, ...form.value }; uni.$u.http.post("/app/orderinfo/setOrderAnnex", data).then((res2) => { if (res2.code == 200) { uni.$u.toast("上传成功"); form.value.imgInfo = []; form.value.remark = ""; getFileList(); } else { uni.$u.toast(res2.msg); } }); }; const __returned__ = { form, props: props2, fileList, getFileList, handleUpload, ref: vue.ref, cyUpload }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$$(_ctx, _cache, $props, $setup, $data, $options) { var _a; const _component_u_textarea = resolveEasycom(vue.resolveDynamicComponent("u-textarea"), __easycom_3$2); const _component_u_button = resolveEasycom(vue.resolveDynamicComponent("u-button"), __easycom_3$6); const _component_u_image = resolveEasycom(vue.resolveDynamicComponent("u-image"), __easycom_2$1); return vue.openBlock(), vue.createElementBlock("view", { class: "file-info bg-white" }, [ vue.createElementVNode("view", { class: "file-info-container" }, [ vue.createVNode($setup["cyUpload"], { filename: $setup.form.imgInfo, "onUpdate:filename": _cache[0] || (_cache[0] = ($event) => $setup.form.imgInfo = $event), limit: 3 }, null, 8, ["filename"]), vue.createVNode(_component_u_textarea, { modelValue: $setup.form.remark, "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.form.remark = $event), placeholder: "上传说明...", autoHeight: "", style: { "min-height": "60px" } }, null, 8, ["modelValue"]), vue.createElementVNode("view", { class: "flex flex-a-c flex-j-c" }, [ vue.createVNode(_component_u_button, { class: "mt-24", type: "primary", onClick: $setup.handleUpload }, { default: vue.withCtx(() => [ vue.createTextVNode("上传(最多上传3张)") ]), _: 1 /* STABLE */ }) ]) ]), vue.createElementVNode("view", { class: "file-info-list" }, [ vue.createElementVNode("view", { class: "file-info-list-title text-center" }, "已上传记录"), !((_a = $setup.fileList) == null ? void 0 : _a.length) ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "file-info-list-content mt-24 mb-24 text-center" }, "还没有上传记录")) : (vue.openBlock(true), vue.createElementBlock( vue.Fragment, { key: 1 }, vue.renderList($setup.fileList, (item) => { return vue.openBlock(), vue.createElementBlock("view", { class: "file-info-item", key: item.id }, [ vue.createElementVNode("view", { class: "file-info-item-img flex flex-a-c" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(item.imgInfo, (img) => { return vue.openBlock(), vue.createBlock(_component_u_image, { src: img, width: "90", height: "90", style: { "margin-right": "10px" } }, null, 8, ["src"]); }), 256 /* UNKEYED_FRAGMENT */ )) ]), vue.createElementVNode("view", { class: "file-info-item-info mt-10 font-14" }, [ vue.createElementVNode( "view", { class: "file-info-item-info-name" }, "上传说明:" + vue.toDisplayString(item.remark), 1 /* TEXT */ ), vue.createElementVNode("view", { class: "file-info-item-info-name mt-10" }, [ vue.createElementVNode( "text", null, vue.toDisplayString(item.createTime), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "ml-20" }, vue.toDisplayString(item.createName), 1 /* TEXT */ ) ]) ]) ]); }), 128 /* KEYED_FRAGMENT */ )) ]) ]); } const FileInfo = /* @__PURE__ */ _export_sfc(_sfc_main$10, [["render", _sfc_render$$], ["__scopeId", "data-v-b4cf7c83"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/detail/components/FileInfo.vue"]]); const _sfc_main$$ = { __name: "index", setup(__props, { expose: __expose }) { __expose(); const showAuditorSelector = vue.ref(false); const selectedAuditor = vue.ref({}); const handleAuditorSelected = (auditor) => { selectedAuditor.value = auditor; orderDetail.value.auditUserId = auditor.userId; orderDetail.value.auditUserName = auditor.userName; }; const toView = vue.ref(""); function scrollToView(to) { toView.value = to; uni.pageScrollTo({ selector: "#" + to, duration: 200 }); } function scrollToTop() { uni.pageScrollTo({ top: 0, duration: 200 }); } function handleBindCode() { uni.$u.toast("暂无开发"); } const list = vue.ref(["图书清单", "物流信息", "上传附件"]); const current = vue.ref(0); const handleSectionChange = (index2) => { current.value = index2; }; const allLetters = vue.ref([]); function onGetAllFirstLetter(data) { allLetters.value = data; } function handleLogisticsConfirm() { uni.showModal({ title: "提示", content: "是否确认物流签收?", success: (res2) => { if (res2.confirm) { uni.showLoading({ title: "加载中...", mask: true }); uni.$u.http.post("/app/orderinfo/signLogistics", { params: { searchType: 1, "search": orderId.value } }).then((res3) => { if (res3.code == 200) { uni.showToast({ title: "签收成功", icon: "none" }); uni.$u.ttsModule.speak("签收成功"); uni.navigateBack(); } }).finally(() => { uni.hideLoading(); }); } } }); } function handleConfirm() { uni.showModal({ title: "提示", content: "是否确认收货?", success: (res2) => { if (res2.confirm) { uni.showLoading({ title: "加载中...", mask: true }); uni.$u.http.post("/app/orderinfo/confirmOrder", { searchType: 1, "search": orderDetail.value.orderId }).then((res3) => { if (res3.code == 200) { uni.showToast({ title: "确认收货成功", icon: "none" }); uni.$u.ttsModule.speak("确认收货成功"); getOrderDetail(); } }).finally(() => { uni.hideLoading(); }); } } }); } function handleComplete() { let bookList = orderDetail.value.detailVoList; let bool = bookList.some((item) => { var _a; return ((_a = item.auditCommentList) == null ? void 0 : _a.length) < item.num; }); if (bool) { let text = "还有未审核的书"; uni.$u.toast(text); uni.$u.ttsModule.speak(text); return; } else { uni.$u.http.post("/app/orderinfo/checkOrderFinish", { checkUserId: orderDetail.value.auditUserId, "orderId": orderDetail.value.orderId }).then((res2) => { if (res2.code == 200) { uni.showToast({ title: "审核完成", icon: "none" }); uni.$u.ttsModule.speak("审核完成"); uni.navigateBack(); } }); } } const orderDetail = vue.ref({ status: 0 }); function getOrderDetail() { if (!orderId.value) return; uni.showLoading({ title: "加载中...", mask: true }); uni.$u.http.get("/app/orderinfo/getOrderInfoForCheck", { params: { searchType: 1, "search": orderId.value } }).then((res2) => { if (res2.code == 200) { orderDetail.value = res2.data; if (isOnLoad.value) { if (res2.data.manageRemark.length > 0 && res2.data.status < 10) { uni.$u.ttsModule.speak("此订单有备注信息,请注意查看"); } if (res2.data.warnArea && res2.data.warnArea.length > 0) { let text = `此订单来源于${res2.data.warnArea}`; uni.$u.ttsModule.speak(text); } isOnLoad.value = false; if (res2.data.auditUserId) { let auditUserInfo = { userName: res2.data.auditUserName, userId: res2.data.auditUserId }; uni.setStorageSync("checkUserInfo", auditUserInfo); } else { let userInfo = uni.getStorageSync("userInfo"); if (userInfo) { orderDetail.value.auditUserName = userInfo.userName; orderDetail.value.auditUserId = userInfo.userId; uni.setStorageSync("checkUserInfo", { userName: userInfo.userName, userId: userInfo.userId }); } } } } else { uni.$u.toast(res2.msg); } }).finally(() => { uni.hideLoading(); }); } function checkIsbn(isbn) { const isbn13Regex = /^(?:97[89]-?\d{1,5}-?\d{1,7}-?\d{1,6}-?\d)$/; if (isbn13Regex.test(isbn)) { return true; } return false; } function handleScan(isbn) { if (!checkIsbn(isbn)) { let text = `不是正确的ISBN码`; uni.$u.ttsModule.speak(text); return; } if (orderDetail.value.status == 10) { uni.$u.ttsModule.speak("此订单已审核"); return; } let isbns = orderDetail.value.detailVoList.map((item) => item.isbn); formatAppLog("log", "at pages/index/detail/index.vue:262", isbns.includes(isbn), "isbns"); if (isbns.includes(isbn)) { let book = orderDetail.value.detailVoList.find((item) => item.isbn == isbn); formatAppLog("log", "at pages/index/detail/index.vue:266", orderDetail.value.detailVoList, book, "book"); if (book.auditCommentList.every((item) => item.sts == 1)) { let text = `${isbn}已审核为良好`; return uni.$u.ttsModule.speak(text); } if (book.suit == 1) { let text = `${isbn}请注意套装书是否齐全`; uni.$u.ttsModule.speak(text); } if (book.bookWarn == 1) { let text = `请注意${isbn}需要取出`; uni.$u.ttsModule.speak(text); } uni.navigateTo({ url: `/pages/index/detail/book-audit?isbn=${isbn}&orderId=${orderDetail.value.orderId}` }); uni.setStorageSync("auditBook", book); uni.setStorageSync("orderDetail", orderDetail.value); } else { let text = `此订单中不存在${isbn}这本书 `; uni.$u.ttsModule.speak(text); } } function handleScanCode() { uni.scanCode({ success: (res2) => { formatAppLog("log", "at pages/index/detail/index.vue:298", typeof res2.result, "res"); res2.result && handleScan(res2.result); } }); } const orderId = vue.ref(""); const isOnLoad = vue.ref(false); const type2 = vue.ref(1); onLoad((option) => { orderId.value = option.id; getOrderDetail(); isOnLoad.value = true; type2.value = option.type || 1; uni.removeStorageSync("scannedBooks"); uni.$u.useGlobalEvent((e) => { if (e.barcode) { handleScan(e.barcode); } }); }); onShow(() => { getOrderDetail(); }); const __returned__ = { showAuditorSelector, selectedAuditor, handleAuditorSelected, toView, scrollToView, scrollToTop, handleBindCode, list, current, handleSectionChange, allLetters, onGetAllFirstLetter, handleLogisticsConfirm, handleConfirm, handleComplete, orderDetail, getOrderDetail, checkIsbn, handleScan, handleScanCode, orderId, isOnLoad, type: type2, ref: vue.ref, get onLoad() { return onLoad; }, get onShow() { return onShow; }, AuditorSelector, OrderInfo, UserInfoCard, LogisticsTimeline, BookInfo, FileInfo }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$_(_ctx, _cache, $props, $setup, $data, $options) { var _a; const _component_u_subsection = resolveEasycom(vue.resolveDynamicComponent("u-subsection"), __easycom_0$5); const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); const _component_u_button = resolveEasycom(vue.resolveDynamicComponent("u-button"), __easycom_3$6); return vue.openBlock(), vue.createElementBlock( "view", { class: vue.normalizeClass(["order-detail", { "fixed-bottom-2": $setup.type == 2 }]) }, [ vue.createElementVNode("scroll-view", { class: "scroller", "scroll-into-view": $setup.toView, "scroll-y": "true", "scroll-with-animation": "true" }, [ vue.createElementVNode("view", { class: "flex flex-a-c flex-j-b bg-white bind-audit mb-16" }, [ vue.createElementVNode("text", null, "绑定审核员"), vue.createElementVNode( "text", { class: "text-center flex-1" }, vue.toDisplayString($setup.orderDetail.auditUserName || ((_a = $setup.selectedAuditor) == null ? void 0 : _a.userName) || ""), 1 /* TEXT */ ), vue.createElementVNode("text", { onClick: _cache[0] || (_cache[0] = ($event) => $setup.showAuditorSelector = true), class: "color-primary" }, "绑定") ]), vue.createVNode($setup["OrderInfo"], { detail: $setup.orderDetail }, null, 8, ["detail"]), vue.createVNode($setup["UserInfoCard"], { detail: $setup.orderDetail }, null, 8, ["detail"]), vue.createElementVNode("view", { class: "mt-16", style: { "padding": "0 6rpx" } }, [ vue.createVNode(_component_u_subsection, { list: $setup.list, mode: "subsection", current: $setup.current, onChange: $setup.handleSectionChange }, null, 8, ["list", "current"]), $setup.current == 0 ? (vue.openBlock(), vue.createBlock($setup["BookInfo"], { key: 0, bookList: $setup.orderDetail.detailVoList, detail: $setup.orderDetail, onGetAllFirstLetter: $setup.onGetAllFirstLetter }, null, 8, ["bookList", "detail"])) : vue.createCommentVNode("v-if", true), $setup.current == 1 ? (vue.openBlock(), vue.createBlock($setup["LogisticsTimeline"], { key: 1, list: $setup.orderDetail.trackingVoList }, null, 8, ["list"])) : vue.createCommentVNode("v-if", true), $setup.current == 2 ? (vue.openBlock(), vue.createBlock($setup["FileInfo"], { key: 2, orderId: $setup.orderDetail.orderId }, null, 8, ["orderId"])) : vue.createCommentVNode("v-if", true) ]) ], 8, ["scroll-into-view"]), vue.createElementVNode("view", { class: "fixed-left" }, [ vue.createElementVNode("view", { class: "bind-code common-bg", style: { "margin-bottom": "30px", "padding": "20rpx" }, onClick: $setup.handleBindCode }, "绑码 "), vue.createElementVNode("view", { class: "common-bg flex flex-a-c flex-j-c flex-d" }, [ vue.createElementVNode("view", { class: "book-status-item", onClick: _cache[1] || (_cache[1] = ($event) => $setup.scrollToView("good")) }, "良好"), vue.createElementVNode("view", { class: "book-status-item item-center", onClick: _cache[2] || (_cache[2] = ($event) => $setup.scrollToView("average")) }, "一般"), vue.createElementVNode("view", { class: "book-status-item", onClick: _cache[3] || (_cache[3] = ($event) => $setup.scrollToView("poor")) }, "极差") ]) ]), vue.createElementVNode("view", { class: "fixed-right" }, [ vue.createElementVNode("view", { class: "letter-bg flex flex-a-c flex-j-c flex-d" }, [ vue.createElementVNode("view", { class: "letter-item" }, [ vue.createVNode(_component_u_icon, { name: "arrow-up-fill", size: "20", color: "#ffffff", onClick: $setup.scrollToTop }) ]), (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.allLetters, (item) => { return vue.openBlock(), vue.createElementBlock("view", { class: "letter-item", onClick: ($event) => $setup.scrollToView(item) }, vue.toDisplayString(item), 9, ["onClick"]); }), 256 /* UNKEYED_FRAGMENT */ )) ]) ]), $setup.type != 2 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "common-bg fixed-bottom" }, [ $setup.orderDetail.status == 5 ? (vue.openBlock(), vue.createBlock(_component_u_button, { key: 0, type: "warning", size: "large", onClick: $setup.handleLogisticsConfirm }, { default: vue.withCtx(() => [ vue.createTextVNode("物流签收") ]), _: 1 /* STABLE */ })) : vue.createCommentVNode("v-if", true), $setup.orderDetail.status == 6 ? (vue.openBlock(), vue.createBlock(_component_u_button, { key: 1, type: "primary", size: "large", onClick: $setup.handleConfirm }, { default: vue.withCtx(() => [ vue.createTextVNode("确认收货") ]), _: 1 /* STABLE */ })) : vue.createCommentVNode("v-if", true), $setup.orderDetail.status == 8 || $setup.orderDetail.status == 9 || $setup.orderDetail.status == 10 ? (vue.openBlock(), vue.createElementBlock( vue.Fragment, { key: 2 }, [ vue.createVNode(_component_u_button, { type: "warning", size: "large", onClick: $setup.handleScanCode }, { default: vue.withCtx(() => [ vue.createTextVNode("扫码") ]), _: 1 /* STABLE */ }), vue.createVNode(_component_u_button, { type: "primary", size: "large", onClick: $setup.handleComplete }, { default: vue.withCtx(() => [ vue.createTextVNode("完成") ]), _: 1 /* STABLE */ }) ], 64 /* STABLE_FRAGMENT */ )) : vue.createCommentVNode("v-if", true) ])) : vue.createCommentVNode("v-if", true), vue.createVNode($setup["AuditorSelector"], { show: $setup.showAuditorSelector, "onUpdate:show": _cache[4] || (_cache[4] = ($event) => $setup.showAuditorSelector = $event), onAuditorSelected: $setup.handleAuditorSelected }, null, 8, ["show"]) ], 2 /* CLASS */ ); } const PagesIndexDetailIndex = /* @__PURE__ */ _export_sfc(_sfc_main$$, [["render", _sfc_render$_], ["__scopeId", "data-v-8b10f148"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/detail/index.vue"]]); const _sfc_main$_ = { __name: "AuditInfo", props: { detail: { type: Object, default: () => ({}) } }, emits: ["selected"], setup(__props, { expose: __expose, emit: __emit }) { const props2 = __props; const auditCommentList = vue.ref([]); vue.watch(() => { var _a; return (_a = props2.detail) == null ? void 0 : _a.auditCommentList; }, (newVal) => { if (!newVal) return; auditCommentList.value = newVal.map((item) => ({ ...item, isbn: props2.detail.isbn, comList: item.com ? typeof item.com === "string" ? item.com.split(",") : item.com : [] })); }, { immediate: true, deep: true }); const auditList = vue.ref([{ sts: 1, label: "品相良好" }, { sts: 2, label: "品相一般", disabled: true }, { sts: 3, label: "品相极差" }]); const emit2 = __emit; const radioClick = (audit, index2, sts) => { if (sts == 2) return; audit.sts = sts; auditCommentList.value[index2] = audit; formatReason(); }; const getAuditCateNum = (cate) => { var _a, _b; return ((_b = (_a = props2.detail.auditCommentList) == null ? void 0 : _a.filter((item) => item.sts == cate)) == null ? void 0 : _b.length) || 0; }; let reasonList = vue.ref([ { sts: 3, label: "明显泛黄水印/发霉/明显异味" }, { sts: 3, label: "老化泛黄褪色/污渍" }, { sts: 3, label: "明显破损/脱胶缺页/书籍变型" }, { sts: 3, label: "无此书" }, { sts: 3, label: "印刷不清晰" }, { sts: 3, label: "无防伪" }, { sts: 3, label: "无外护封/无ISBN" }, { sts: 3, label: "无此书多其他书" }, { sts: 3, label: "笔记杂乱/习题做完" }, { sts: 3, label: "有笔记贴" }, { sts: 3, label: "套装缺册" }, { sts: 3, label: "听力无光盘" }, { sts: 3, label: "图书馆/藏书印章" } ]); const formatReason = () => { let list = auditCommentList.value.map((item, index2) => ({ ...item, idx: index2, com: item.comList.join(",") })); formatAppLog("log", "at pages/index/detail/components/AuditInfo.vue:92", list, "list"); return list; }; const toggleReason = (audit, index2, item) => { const idx = audit.comList.indexOf(item.label); if (idx > -1) { audit.comList.splice(idx, 1); } else { audit.comList.push(item.label); } auditCommentList.value[index2] = audit; }; __expose({ formatReason }); const __returned__ = { props: props2, auditCommentList, auditList, emit: emit2, radioClick, getAuditCateNum, get reasonList() { return reasonList; }, set reasonList(v) { reasonList = v; }, formatReason, toggleReason, ref: vue.ref, watch: vue.watch }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$Z(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_tag = resolveEasycom(vue.resolveDynamicComponent("u-tag"), __easycom_2$4); return vue.openBlock(), vue.createElementBlock("view", { class: "audit-info" }, [ vue.createElementVNode( "view", { class: "font-bold mt-16", style: { "padding": "0 20rpx" } }, " 该书共" + vue.toDisplayString($props.detail.num) + "本,其中:良好" + vue.toDisplayString($setup.getAuditCateNum(1)) + "本,一般" + vue.toDisplayString($setup.getAuditCateNum(2)) + "本,极差" + vue.toDisplayString($setup.getAuditCateNum(3)) + "本 ", 1 /* TEXT */ ), $setup.auditCommentList.length > 0 ? (vue.openBlock(true), vue.createElementBlock( vue.Fragment, { key: 0 }, vue.renderList($setup.auditCommentList, (audit, index2) => { return vue.openBlock(), vue.createElementBlock("view", { key: index2 }, [ vue.createElementVNode( "view", { class: "mt-10 bind-code", style: { "padding": "10rpx 20rpx" } }, " 第" + vue.toDisplayString(index2 + 1) + "本的审核意见 ", 1 /* TEXT */ ), vue.createElementVNode("view", { class: "mt-20 bg-white flex flex-j-a flex-a-c", style: { "padding": "20rpx", "border-radius": "10rpx" } }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.auditList, (item, idx) => { return vue.openBlock(), vue.createElementBlock("view", { class: "u-page__tag-item", key: idx }, [ vue.createVNode(_component_u_tag, { size: "large", text: item.label, plain: audit.sts != item.sts, type: "primary", name: item.sts, class: vue.normalizeClass({ "disabled": item.sts == 2 }), onClick: ($event) => $setup.radioClick(audit, index2, item.sts) }, null, 8, ["text", "plain", "name", "class", "onClick"]) ]); }), 128 /* KEYED_FRAGMENT */ )) ]), audit.sts == 3 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "mt-20 bg-white", style: { "padding": "20rpx", "border-radius": "10rpx" } }, [ vue.createElementVNode("view", { class: "flex flex-a-c flex-wrap" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.reasonList, (item, idx) => { return vue.openBlock(), vue.createElementBlock("view", { class: vue.normalizeClass(["mr-10 reason-item", { "selected": audit.comList.includes(item.label) }]), key: idx, onClick: ($event) => $setup.toggleReason(audit, index2, item) }, vue.toDisplayString(item.label), 11, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ]) ])) : vue.createCommentVNode("v-if", true) ]); }), 128 /* KEYED_FRAGMENT */ )) : vue.createCommentVNode("v-if", true) ]); } const AuditInfo = /* @__PURE__ */ _export_sfc(_sfc_main$_, [["render", _sfc_render$Z], ["__scopeId", "data-v-9873c737"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/detail/components/AuditInfo.vue"]]); const _sfc_main$Z = { __name: "book-audit", setup(__props, { expose: __expose }) { __expose(); const detail = vue.ref({}); const getBookInfo = (isbn) => { uni.$u.http.get(`/app/book/getBookByIsbn/${isbn}`).then((res2) => { if (res2.code == 200) { detail.value = res2.data; } }); }; const list = vue.ref(["图书审核", "绑码", "附件信息"]); const current = vue.ref(0); const handleSectionChange = (index2) => { current.value = index2; }; const auditData = vue.ref([]); const handleAuditSelected = (data) => { auditData.value = data.map((item, index2) => { item.idx = index2; formatAppLog("log", "at pages/index/detail/book-audit.vue:77", index2, item.com, "item.com", Array.isArray(item.com)); item.com = Array.isArray(item.com) ? item.com.join(",") : item.com; return item; }); formatAppLog("log", "at pages/index/detail/book-audit.vue:81", auditData.value, "auditData.value"); }; const scannedBooks = vue.ref([]); function checkIsbn(isbn) { let reg = /(?:[0-9]+\-?){9}[0-9X]|(?:978|979)\-?(?:[0-9]+\-?){10}/; if (reg.test(isbn)) { return true; } return false; } function handleScan(isbn) { var _a, _b, _c; if (!checkIsbn(isbn)) { let text = `不是正确的ISBN码`; uni.$u.ttsModule.speak(text); return; } let isbns = orderDetail.value.detailVoList.map((item) => item.isbn); orderDetail.value.totalNum; if (isbns.includes(isbn)) { let book = orderDetail.value.detailVoList.find((item) => item.isbn == isbn); if (book.num == ((_a = book.auditCommentList) == null ? void 0 : _a.length)) { let text = ""; if (book.auditCommentList.every((item) => item.sts == 1)) { text = `${isbn}已审核为良好`; uni.$u.ttsModule.speak(text); return; } else { text = `${isbn}已审核为极差`; scannedBooks.value.push(isbn); uni.$u.ttsModule.speak(text); uni.setStorageSync("scannedBooks", scannedBooks.value); uni.navigateTo({ url: `/pages/index/detail/batch-audit?orderId=${orderId.value}` }); } } else { let hasAuditNum = ((_b = book.auditCommentList) == null ? void 0 : _b.length) || 0; let notAuditNum = book.num - hasAuditNum; let poorNum = ((_c = book.auditCommentList) == null ? void 0 : _c.filter((item) => item.sts == 3).length) || 0; let scannedNum = scannedBooks.value.filter((item) => item == isbn).length || 0; if (scannedNum >= notAuditNum + poorNum) { let text = `${isbn}已超出订单中的数量`; return uni.$u.ttsModule.speak(text); } else { if (book.suit == 1) { let text = `${isbn}请注意套装书是否齐全`; uni.$u.ttsModule.speak(text); } if (book.bookWarn == 1) { let text = `请注意${isbn}需要取出`; uni.$u.ttsModule.speak(text); } if (scannedNum >= notAuditNum && scannedNum < notAuditNum + poorNum) { let text = `${isbn}已审核为极差`; uni.$u.ttsModule.speak(text); } scannedBooks.value.push(isbn); formatAppLog("log", "at pages/index/detail/book-audit.vue:153", scannedBooks.value, "book-audit"); uni.setStorageSync("scannedBooks", scannedBooks.value); uni.navigateTo({ url: `/pages/index/detail/batch-audit?orderId=${orderId.value}` }); } } } else { let text = `此订单中不存在${isbn}这本书 `; uni.$u.ttsModule.speak(text); } } function handleScanCode() { uni.scanCode({ success: (res2) => { handleScan(res2.result); } }); } const auditInfoRef = vue.ref(); const handleAudit = () => { var _a; let checkList = (_a = auditInfoRef.value) == null ? void 0 : _a.formatReason(auditData.value); let checkUserInfo = uni.getStorageSync("checkUserInfo"); if (checkUserInfo.userId) { checkUserId.value = checkUserInfo.userId; } else { uni.$u.toast("请先选择审核人"); } uni.$u.http.post("/app/orderinfo/checkOrder", { "checkUserId": checkUserId.value, "orderId": orderId.value, "checkList": checkList }).then((res2) => { if (res2.code == 200) { uni.showToast({ title: "审核成功", icon: "none" }); uni.$u.ttsModule.speak("审核成功"); uni.navigateBack(); } else { uni.$u.toast(res2.msg); } }); }; const auditBook = vue.ref({}); const checkUserId = vue.ref(); const orderId = vue.ref(); const orderDetail = vue.ref({}); onLoad((options) => { options.isbn && getBookInfo(options.isbn); scannedBooks.value = [options.isbn]; auditBook.value = uni.getStorageSync("auditBook"); orderId.value = options.orderId; orderDetail.value = uni.getStorageSync("orderDetail"); uni.$u.useGlobalEvent((e) => { if (e.barcode) { handleScan(e.barcode); } }); }); onShow(() => { var _a; checkUserId.value = (_a = uni.getStorageSync("userInfo")) == null ? void 0 : _a.userId; }); const __returned__ = { detail, getBookInfo, list, current, handleSectionChange, auditData, handleAuditSelected, scannedBooks, checkIsbn, handleScan, handleScanCode, auditInfoRef, handleAudit, auditBook, checkUserId, orderId, orderDetail, ref: vue.ref, get onLoad() { return onLoad; }, get onShow() { return onShow; }, AuditInfo, FileInfo }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$Y(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_subsection = resolveEasycom(vue.resolveDynamicComponent("u-subsection"), __easycom_0$5); const _component_u_button = resolveEasycom(vue.resolveDynamicComponent("u-button"), __easycom_3$6); return vue.openBlock(), vue.createElementBlock("view", { class: "book-audit" }, [ vue.createElementVNode("view", { class: "bg-white flex flex-a-c", style: { "padding": "20rpx", "border-radius": "10rpx" } }, [ vue.createElementVNode("image", { src: $setup.detail.cover, mode: "aspectFill", style: { "width": "80px", "height": "100px" } }, null, 8, ["src"]), vue.createElementVNode("view", { class: "flex flex-d flex-1 ml-20" }, [ vue.createElementVNode( "text", { class: "common-title mb-20" }, vue.toDisplayString($setup.detail.bookName), 1 /* TEXT */ ), vue.createElementVNode("text", { class: "text-sm" }, [ vue.createTextVNode("ISBN: "), vue.createElementVNode( "text", { class: "color-primary" }, vue.toDisplayString($setup.detail.isbn), 1 /* TEXT */ ) ]), vue.createElementVNode("text", { class: "text-sm mt-6" }, [ vue.createTextVNode("作者: "), vue.createElementVNode( "text", null, vue.toDisplayString($setup.detail.author), 1 /* TEXT */ ) ]), vue.createElementVNode("text", { class: "text-sm mt-6" }, [ vue.createTextVNode("出版社: "), vue.createElementVNode( "text", null, vue.toDisplayString($setup.detail.publish), 1 /* TEXT */ ) ]) ]) ]), vue.createElementVNode("view", { class: "mt-20 bg-white price-info", style: { "border-radius": "10rpx" } }, [ vue.createElementVNode("view", { class: "flex" }, [ vue.createElementVNode("view", { class: "flex flex-a-c flex-1" }, [ vue.createElementVNode("text", { class: "label" }, "定价"), vue.createElementVNode( "text", { class: "content" }, vue.toDisplayString($setup.detail.price), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "flex flex-a-c flex-1" }, [ vue.createElementVNode("text", { class: "label" }, "回收折扣"), vue.createElementVNode( "text", { class: "content" }, vue.toDisplayString($setup.detail.recycleDiscount), 1 /* TEXT */ ) ]) ]), vue.createElementVNode("view", { class: "flex flex-a-c" }, [ vue.createElementVNode("view", { class: "flex flex-a-c flex-1" }, [ vue.createElementVNode("text", { class: "label" }, "预估金额"), vue.createElementVNode( "text", { class: "content" }, vue.toDisplayString($setup.detail.price), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "flex flex-a-c flex-1" }, [ vue.createElementVNode("text", { class: "label" }, "审核金额"), vue.createElementVNode("text", { class: "content" }, vue.toDisplayString("0.00")) ]) ]) ]), vue.createElementVNode("view", { class: "mt-20" }, [ vue.createVNode(_component_u_subsection, { list: $setup.list, mode: "subsection", current: $setup.current, onChange: $setup.handleSectionChange }, null, 8, ["list", "current"]), $setup.current == 0 ? (vue.openBlock(), vue.createBlock($setup["AuditInfo"], { key: 0, detail: $setup.auditBook, ref: "auditInfoRef" }, null, 8, ["detail"])) : vue.createCommentVNode("v-if", true), $setup.current == 2 ? (vue.openBlock(), vue.createBlock($setup["FileInfo"], { key: 1, orderId: $setup.orderId, annexType: 2, isbn: $setup.auditBook.isbn }, null, 8, ["orderId", "isbn"])) : vue.createCommentVNode("v-if", true) ]), vue.createElementVNode("view", { class: "fixed-bottom" }, [ vue.createVNode(_component_u_button, { type: "warning", size: "large", onClick: $setup.handleScanCode }, { default: vue.withCtx(() => [ vue.createTextVNode("扫码") ]), _: 1 /* STABLE */ }), vue.createVNode(_component_u_button, { type: "primary", size: "large", onClick: $setup.handleAudit }, { default: vue.withCtx(() => [ vue.createTextVNode("确定") ]), _: 1 /* STABLE */ }) ]) ]); } const PagesIndexDetailBookAudit = /* @__PURE__ */ _export_sfc(_sfc_main$Z, [["render", _sfc_render$Y], ["__scopeId", "data-v-376f8a68"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/detail/book-audit.vue"]]); const _sfc_main$Y = { __name: "BookItem2", props: { item: Object, showClose: { type: Boolean, default: false } }, emits: ["close"], setup(__props, { expose: __expose, emit: __emit }) { __expose(); const props2 = __props; const emit2 = __emit; const handleClose = () => { emit2("close", props2.item.isbn); }; const __returned__ = { props: props2, emit: emit2, handleClose, computed: vue.computed }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$X(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); return vue.openBlock(), vue.createElementBlock( "view", { class: vue.normalizeClass(["card", { "card-close": $props.showClose }]) }, [ vue.createElementVNode("view", { class: "flex w100" }, [ vue.createElementVNode("view", { class: "flex-d" }, [ vue.createElementVNode("image", { style: { "width": "70px", "height": "90px" }, src: $props.item.cover, mode: "aspectFill" }, null, 8, ["src"]), !$props.showClose ? (vue.openBlock(), vue.createElementBlock( "view", { key: 0, class: "quantity mt-24" }, "数量: " + vue.toDisplayString($props.item.num), 1 /* TEXT */ )) : vue.createCommentVNode("v-if", true) ]), vue.createElementVNode("view", { class: "book-info ml-20 flex-1" }, [ vue.createElementVNode( "view", { class: "common-title mb-20" }, vue.toDisplayString($props.item.bookName), 1 /* TEXT */ ), vue.createElementVNode("view", { class: "flex flex-j-b mb-10" }, [ vue.createElementVNode( "view", { class: "isbn" }, "ISBN: " + vue.toDisplayString($props.item.isbn), 1 /* TEXT */ ), vue.createElementVNode( "view", { class: "set" }, "套装: " + vue.toDisplayString($props.item.suit == 1 ? "是" : "不是"), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "flex flex-j-b mb-10" }, [ vue.createElementVNode( "view", { class: "price" }, "定价: " + vue.toDisplayString($props.item.price), 1 /* TEXT */ ), vue.createElementVNode( "view", { class: "estimate" }, "预估单价: " + vue.toDisplayString($props.item.expectMoney || 0), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "flex flex-j-b mb-10" }, [ vue.createElementVNode( "view", { class: "discount" }, "回收折扣: " + vue.toDisplayString($props.item.recycleDiscount), 1 /* TEXT */ ), vue.createElementVNode("view", { class: "review" }, [ vue.createTextVNode("审核金额: "), vue.createElementVNode( "text", { class: "color-red" }, vue.toDisplayString($props.item.review || 0), 1 /* TEXT */ ) ]) ]) ]) ]), $props.showClose ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "quantity-icon mt-24" }, [ vue.createVNode(_component_u_icon, { name: "close-circle-fill", size: "18", color: "#999", onClick: $setup.handleClose }) ])) : vue.createCommentVNode("v-if", true) ], 2 /* CLASS */ ); } const BookItem$1 = /* @__PURE__ */ _export_sfc(_sfc_main$Y, [["render", _sfc_render$X], ["__scopeId", "data-v-469f67ea"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/detail/components/BookItem2.vue"]]); const _sfc_main$X = { __name: "batch-audit", setup(__props, { expose: __expose }) { __expose(); const detailMap = vue.ref({}); const scannedBooksDetail = vue.ref([]); const getBookInfo = (isbn) => { if (detailMap.value[isbn]) { scannedBooksDetail.value.push(detailMap.value[isbn]); return; } uni.$u.http.get(`/app/book/getSimpleBookInfoByIsbn/${isbn}`).then((res2) => { if (res2.code == 200) { detailMap.value[isbn] = res2.data; scannedBooksDetail.value.push(res2.data); formatAppLog("log", "at pages/index/detail/batch-audit.vue:38", scannedBooksDetail.value, "xxaaxx"); } }); }; function checkIsbn(isbn) { let reg = /(?:[0-9]+\-?){9}[0-9X]|(?:978|979)\-?(?:[0-9]+\-?){10}/; if (reg.test(isbn)) { return true; } return false; } const scannedBooks = vue.ref([]); function handleScan(isbn) { var _a, _b, _c; if (!checkIsbn(isbn)) { let text = `不是正确的ISBN码`; uni.$u.ttsModule.speak(text); return; } let isbns = orderDetail.value.detailVoList.map((item) => item.isbn); orderDetail.value.totalNum; if (isbns.includes(isbn)) { let book = orderDetail.value.detailVoList.find((item) => item.isbn == isbn); if (book.num == ((_a = book.auditCommentList) == null ? void 0 : _a.length)) { let text = ""; if (book.auditCommentList.every((item) => item.sts == 1)) { text = `${isbn}已审核为良好`; uni.$u.ttsModule.speak(text); return; } else { text = `${isbn}已审核为极差`; scannedBooks.value.push(isbn); uni.$u.ttsModule.speak(text); getBookInfo(isbn); } } else { let hasAuditNum = ((_b = book.auditCommentList) == null ? void 0 : _b.length) || 0; let notAuditNum = book.num - hasAuditNum; let poorNum = ((_c = book.auditCommentList) == null ? void 0 : _c.filter((item) => item.sts == 3).length) || 0; let scannedNum = scannedBooks.value.filter((item) => item == isbn).length || 0; formatAppLog("log", "at pages/index/detail/batch-audit.vue:86", scannedNum, poorNum, notAuditNum, "scannedNum"); if (scannedNum >= notAuditNum + poorNum) { let text = `${isbn}已超出订单中的数量`; return uni.$u.ttsModule.speak(text); } else { if (book.suit == 1) { let text = `${isbn}请注意套装书是否齐全`; uni.$u.ttsModule.speak(text); } if (book.bookWarn == 1) { let text = `请注意${isbn}需要取出`; uni.$u.ttsModule.speak(text); } if (scannedNum >= notAuditNum && scannedNum < notAuditNum + poorNum) { let text = `${isbn}已审核为极差`; uni.$u.ttsModule.speak(text); } scannedBooks.value.push(isbn); getBookInfo(isbn); } } } else { let text = `此订单中不存在${isbn}这本书 `; uni.$u.ttsModule.speak(text); } } function handleScanCode() { uni.scanCode({ success: (res2) => { handleScan(res2.result); } }); } const checkUserId = vue.ref(); const orderId = vue.ref(); const orderDetail = vue.ref({}); const showModal = vue.ref(false); const isQualitySelected = vue.ref(false); const showQualityModal = () => { showModal.value = true; }; const closeModal = () => { showModal.value = false; }; const toggleQuality = () => { isQualitySelected.value = !isQualitySelected.value; }; const handleAudit = () => { if (!isQualitySelected.value) { uni.$u.toast("请选择品相"); uni.$u.ttsModule.speak("请选择品相"); return; } let checkUserInfo = uni.getStorageSync("checkUserInfo"); if (checkUserInfo.userId) { checkUserId.value = checkUserInfo.userId; } uni.$u.http.post("/app/orderinfo/checkOrder", { "checkUserId": checkUserId.value, "orderId": orderId.value, "checkList": scannedBooks.value.map((isbn) => ({ sts: 1, com: "", isbn })) }).then((res2) => { if (res2.code == 200) { uni.showToast({ title: "审核成功", icon: "none" }); uni.$u.ttsModule.speak("审核成功"); uni.navigateBack({ delta: 2 }); } else { uni.$u.toast(res2.msg); } }); }; onLoad((options) => { orderId.value = options.orderId; orderDetail.value = uni.getStorageSync("orderDetail"); scannedBooks.value = uni.getStorageSync("scannedBooks"); scannedBooks.value.forEach((isbn) => { getBookInfo(isbn); }); uni.$u.useGlobalEvent((e) => { if (e.barcode) { handleScan(e.barcode); } }); }); const __returned__ = { detailMap, scannedBooksDetail, getBookInfo, checkIsbn, scannedBooks, handleScan, handleScanCode, checkUserId, orderId, orderDetail, showModal, isQualitySelected, showQualityModal, closeModal, toggleQuality, handleAudit, ref: vue.ref, get onLoad() { return onLoad; }, get onShow() { return onShow; }, BookItem: BookItem$1 }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$W(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_button = resolveEasycom(vue.resolveDynamicComponent("u-button"), __easycom_3$6); const _component_u_modal = resolveEasycom(vue.resolveDynamicComponent("u-modal"), __easycom_1$2); return vue.openBlock(), vue.createElementBlock("view", { class: "batch-audit" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.scannedBooksDetail, (item) => { return vue.openBlock(), vue.createBlock($setup["BookItem"], { key: item.isbn, item, showClose: "" }, null, 8, ["item"]); }), 128 /* KEYED_FRAGMENT */ )), vue.createElementVNode("view", { class: "fixed-bottom" }, [ vue.createVNode(_component_u_button, { type: "warning", size: "large", onClick: $setup.handleScanCode }, { default: vue.withCtx(() => [ vue.createTextVNode("扫码") ]), _: 1 /* STABLE */ }), vue.createVNode(_component_u_button, { type: "primary", size: "large", onClick: $setup.showQualityModal }, { default: vue.withCtx(() => [ vue.createTextVNode("确定") ]), _: 1 /* STABLE */ }) ]), vue.createVNode(_component_u_modal, { show: $setup.showModal, title: "品相选择", onCancel: $setup.closeModal, showCancelButton: true, closeOnClickOverlay: true, onConfirm: $setup.handleAudit }, { default: vue.withCtx(() => [ vue.createElementVNode("view", { class: "quality-selector" }, [ vue.createElementVNode( "view", { class: vue.normalizeClass(["quality-circle", { "selected": $setup.isQualitySelected }]), onClick: $setup.toggleQuality }, [ vue.createElementVNode("text", null, "良好") ], 2 /* CLASS */ ) ]) ]), _: 1 /* STABLE */ }, 8, ["show"]) ]); } const PagesIndexDetailBatchAudit = /* @__PURE__ */ _export_sfc(_sfc_main$X, [["render", _sfc_render$W], ["__scopeId", "data-v-bc156c69"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/detail/batch-audit.vue"]]); const _sfc_main$W = { __name: "sender", setup(__props, { expose: __expose }) { __expose(); const otherParams = vue.ref({ search: "" }); const scrollRef = vue.ref(null); const refreshList = () => { var _a; (_a = scrollRef.value) == null ? void 0 : _a.resetUpScroll(); }; let dataList = vue.ref([]); const updateList = (data, page2) => { dataList.value = data; if (!isSearch.value) return; if (data.length > 0) { uni.$u.ttsModule.speak("查询到" + data.length + "条数据"); } else { uni.$u.ttsModule.speak("未查询到数据"); } isSearch.value = false; }; const isSearch = vue.ref(false); const handleSearch = () => { isSearch.value = true; refreshList(); }; const __returned__ = { otherParams, scrollRef, refreshList, get dataList() { return dataList; }, set dataList(v) { dataList = v; }, updateList, isSearch, handleSearch, reactive: vue.reactive, PageScroll, OrderItem: orderItem, ref: vue.ref, get onLoad() { return onLoad; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$V(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_search = resolveEasycom(vue.resolveDynamicComponent("u-search"), __easycom_4$2); const _component_u_sticky = resolveEasycom(vue.resolveDynamicComponent("u-sticky"), __easycom_1$3); return vue.openBlock(), vue.createElementBlock("view", { class: "common-page", style: { "padding": "0" } }, [ vue.createVNode($setup["PageScroll"], { requestStr: "/app/orderinfo/getOrderListByUserInfo", onUpdateList: $setup.updateList, ref: "scrollRef", otherParams: $setup.otherParams }, { default: vue.withCtx(() => [ vue.createVNode(_component_u_sticky, { customNavHeight: 0 }, { default: vue.withCtx(() => [ vue.createElementVNode("view", { class: "search-area" }, [ vue.createVNode(_component_u_search, { placeholder: "请输入发件人姓名或电话", searchIconSize: 18, bgColor: "#f6f7f6", onSearch: $setup.handleSearch, modelValue: $setup.otherParams.search, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.otherParams.search = $event), "custom-style": "font-size:32rpx", "placeholder-style": "font-size:32rpx", clearabled: true, focus: false, showAction: false, height: 36 }, null, 8, ["modelValue"]) ]) ]), _: 1 /* STABLE */ }), $setup.dataList.length ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "list-con" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.dataList, (cell) => { return vue.openBlock(), vue.createBlock($setup["OrderItem"], { key: cell.id, item: cell, class: "mt-20" }, null, 8, ["item"]); }), 128 /* KEYED_FRAGMENT */ )) ])) : vue.createCommentVNode("v-if", true) ]), _: 1 /* STABLE */ }, 8, ["otherParams"]) ]); } const PagesIndexAuditSender = /* @__PURE__ */ _export_sfc(_sfc_main$W, [["render", _sfc_render$V], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/audit/sender.vue"]]); const _sfc_main$V = { __name: "audit", setup(__props, { expose: __expose }) { __expose(); const otherParams = vue.ref({ sender: "" }); const scrollRef = vue.ref(null); const refreshList = () => { var _a; (_a = scrollRef.value) == null ? void 0 : _a.resetUpScroll(); }; let dataList = vue.ref([{ date: "2024-10-24", orderNum: 423, auditNum: 293, trueNum: 323 }, { date: "2024-10-24", orderNum: 423, auditNum: 293, trueNum: 323 }, { date: "2024-10-24", orderNum: 423, auditNum: 293, trueNum: 323 }]); const updateList = (data) => { dataList.value = data; }; const __returned__ = { otherParams, scrollRef, refreshList, get dataList() { return dataList; }, set dataList(v) { dataList = v; }, updateList, reactive: vue.reactive, PageScroll, ref: vue.ref, get onLoad() { return onLoad; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$U(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_sticky = resolveEasycom(vue.resolveDynamicComponent("u-sticky"), __easycom_1$3); return vue.openBlock(), vue.createElementBlock("view", { class: "common-page", style: { "padding": "0" } }, [ vue.createVNode($setup["PageScroll"], { requestStr: "/team/token/shop/invite/page", onUpdateList: $setup.updateList, ref: "scrollRef", otherParams: $setup.otherParams }, { default: vue.withCtx(() => [ vue.createVNode(_component_u_sticky, { customNavHeight: 0 }, { default: vue.withCtx(() => [ vue.createElementVNode("view", { class: "search-area flex-a" }, [ vue.createElementVNode("view", { class: "text-item flex-1" }, "审核日期"), vue.createElementVNode("view", { class: "text-item flex-1" }, "订单数量"), vue.createElementVNode("view", { class: "text-item flex-1" }, "审书数量"), vue.createElementVNode("view", { class: "text-item flex-1" }, "实际回收") ]) ]), _: 1 /* STABLE */ }), vue.createElementVNode("view", { class: "list-con" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.dataList, (item, index2) => { return vue.openBlock(), vue.createElementBlock("view", { key: index2, class: "flex-a" }, [ vue.createElementVNode( "view", { class: "text-item flex-1" }, vue.toDisplayString(item.date), 1 /* TEXT */ ), vue.createElementVNode( "view", { class: "text-item flex-1" }, vue.toDisplayString(item.orderNum), 1 /* TEXT */ ), vue.createElementVNode( "view", { class: "text-item flex-1" }, vue.toDisplayString(item.auditNum), 1 /* TEXT */ ), vue.createElementVNode( "view", { class: "text-item flex-1" }, vue.toDisplayString(item.trueNum), 1 /* TEXT */ ) ]); }), 128 /* KEYED_FRAGMENT */ )) ]) ]), _: 1 /* STABLE */ }, 8, ["otherParams"]) ]); } const PagesIndexStatisticAudit = /* @__PURE__ */ _export_sfc(_sfc_main$V, [["render", _sfc_render$U], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/statistic/audit.vue"]]); const icons = { "id": "2852637", "name": "uniui图标库", "font_family": "uniicons", "css_prefix_text": "uniui-", "description": "", "glyphs": [ { "icon_id": "25027049", "name": "yanse", "font_class": "color", "unicode": "e6cf", "unicode_decimal": 59087 }, { "icon_id": "25027048", "name": "wallet", "font_class": "wallet", "unicode": "e6b1", "unicode_decimal": 59057 }, { "icon_id": "25015720", "name": "settings-filled", "font_class": "settings-filled", "unicode": "e6ce", "unicode_decimal": 59086 }, { "icon_id": "25015434", "name": "shimingrenzheng-filled", "font_class": "auth-filled", "unicode": "e6cc", "unicode_decimal": 59084 }, { "icon_id": "24934246", "name": "shop-filled", "font_class": "shop-filled", "unicode": "e6cd", "unicode_decimal": 59085 }, { "icon_id": "24934159", "name": "staff-filled-01", "font_class": "staff-filled", "unicode": "e6cb", "unicode_decimal": 59083 }, { "icon_id": "24932461", "name": "VIP-filled", "font_class": "vip-filled", "unicode": "e6c6", "unicode_decimal": 59078 }, { "icon_id": "24932462", "name": "plus_circle_fill", "font_class": "plus-filled", "unicode": "e6c7", "unicode_decimal": 59079 }, { "icon_id": "24932463", "name": "folder_add-filled", "font_class": "folder-add-filled", "unicode": "e6c8", "unicode_decimal": 59080 }, { "icon_id": "24932464", "name": "yanse-filled", "font_class": "color-filled", "unicode": "e6c9", "unicode_decimal": 59081 }, { "icon_id": "24932465", "name": "tune-filled", "font_class": "tune-filled", "unicode": "e6ca", "unicode_decimal": 59082 }, { "icon_id": "24932455", "name": "a-rilidaka-filled", "font_class": "calendar-filled", "unicode": "e6c0", "unicode_decimal": 59072 }, { "icon_id": "24932456", "name": "notification-filled", "font_class": "notification-filled", "unicode": "e6c1", "unicode_decimal": 59073 }, { "icon_id": "24932457", "name": "wallet-filled", "font_class": "wallet-filled", "unicode": "e6c2", "unicode_decimal": 59074 }, { "icon_id": "24932458", "name": "paihangbang-filled", "font_class": "medal-filled", "unicode": "e6c3", "unicode_decimal": 59075 }, { "icon_id": "24932459", "name": "gift-filled", "font_class": "gift-filled", "unicode": "e6c4", "unicode_decimal": 59076 }, { "icon_id": "24932460", "name": "fire-filled", "font_class": "fire-filled", "unicode": "e6c5", "unicode_decimal": 59077 }, { "icon_id": "24928001", "name": "refreshempty", "font_class": "refreshempty", "unicode": "e6bf", "unicode_decimal": 59071 }, { "icon_id": "24926853", "name": "location-ellipse", "font_class": "location-filled", "unicode": "e6af", "unicode_decimal": 59055 }, { "icon_id": "24926735", "name": "person-filled", "font_class": "person-filled", "unicode": "e69d", "unicode_decimal": 59037 }, { "icon_id": "24926703", "name": "personadd-filled", "font_class": "personadd-filled", "unicode": "e698", "unicode_decimal": 59032 }, { "icon_id": "24923351", "name": "back", "font_class": "back", "unicode": "e6b9", "unicode_decimal": 59065 }, { "icon_id": "24923352", "name": "forward", "font_class": "forward", "unicode": "e6ba", "unicode_decimal": 59066 }, { "icon_id": "24923353", "name": "arrowthinright", "font_class": "arrow-right", "unicode": "e6bb", "unicode_decimal": 59067 }, { "icon_id": "24923353", "name": "arrowthinright", "font_class": "arrowthinright", "unicode": "e6bb", "unicode_decimal": 59067 }, { "icon_id": "24923354", "name": "arrowthinleft", "font_class": "arrow-left", "unicode": "e6bc", "unicode_decimal": 59068 }, { "icon_id": "24923354", "name": "arrowthinleft", "font_class": "arrowthinleft", "unicode": "e6bc", "unicode_decimal": 59068 }, { "icon_id": "24923355", "name": "arrowthinup", "font_class": "arrow-up", "unicode": "e6bd", "unicode_decimal": 59069 }, { "icon_id": "24923355", "name": "arrowthinup", "font_class": "arrowthinup", "unicode": "e6bd", "unicode_decimal": 59069 }, { "icon_id": "24923356", "name": "arrowthindown", "font_class": "arrow-down", "unicode": "e6be", "unicode_decimal": 59070 }, { "icon_id": "24923356", "name": "arrowthindown", "font_class": "arrowthindown", "unicode": "e6be", "unicode_decimal": 59070 }, { "icon_id": "24923349", "name": "arrowdown", "font_class": "bottom", "unicode": "e6b8", "unicode_decimal": 59064 }, { "icon_id": "24923349", "name": "arrowdown", "font_class": "arrowdown", "unicode": "e6b8", "unicode_decimal": 59064 }, { "icon_id": "24923346", "name": "arrowright", "font_class": "right", "unicode": "e6b5", "unicode_decimal": 59061 }, { "icon_id": "24923346", "name": "arrowright", "font_class": "arrowright", "unicode": "e6b5", "unicode_decimal": 59061 }, { "icon_id": "24923347", "name": "arrowup", "font_class": "top", "unicode": "e6b6", "unicode_decimal": 59062 }, { "icon_id": "24923347", "name": "arrowup", "font_class": "arrowup", "unicode": "e6b6", "unicode_decimal": 59062 }, { "icon_id": "24923348", "name": "arrowleft", "font_class": "left", "unicode": "e6b7", "unicode_decimal": 59063 }, { "icon_id": "24923348", "name": "arrowleft", "font_class": "arrowleft", "unicode": "e6b7", "unicode_decimal": 59063 }, { "icon_id": "24923334", "name": "eye", "font_class": "eye", "unicode": "e651", "unicode_decimal": 58961 }, { "icon_id": "24923335", "name": "eye-filled", "font_class": "eye-filled", "unicode": "e66a", "unicode_decimal": 58986 }, { "icon_id": "24923336", "name": "eye-slash", "font_class": "eye-slash", "unicode": "e6b3", "unicode_decimal": 59059 }, { "icon_id": "24923337", "name": "eye-slash-filled", "font_class": "eye-slash-filled", "unicode": "e6b4", "unicode_decimal": 59060 }, { "icon_id": "24923305", "name": "info-filled", "font_class": "info-filled", "unicode": "e649", "unicode_decimal": 58953 }, { "icon_id": "24923299", "name": "reload-01", "font_class": "reload", "unicode": "e6b2", "unicode_decimal": 59058 }, { "icon_id": "24923195", "name": "mic_slash_fill", "font_class": "micoff-filled", "unicode": "e6b0", "unicode_decimal": 59056 }, { "icon_id": "24923165", "name": "map-pin-ellipse", "font_class": "map-pin-ellipse", "unicode": "e6ac", "unicode_decimal": 59052 }, { "icon_id": "24923166", "name": "map-pin", "font_class": "map-pin", "unicode": "e6ad", "unicode_decimal": 59053 }, { "icon_id": "24923167", "name": "location", "font_class": "location", "unicode": "e6ae", "unicode_decimal": 59054 }, { "icon_id": "24923064", "name": "starhalf", "font_class": "starhalf", "unicode": "e683", "unicode_decimal": 59011 }, { "icon_id": "24923065", "name": "star", "font_class": "star", "unicode": "e688", "unicode_decimal": 59016 }, { "icon_id": "24923066", "name": "star-filled", "font_class": "star-filled", "unicode": "e68f", "unicode_decimal": 59023 }, { "icon_id": "24899646", "name": "a-rilidaka", "font_class": "calendar", "unicode": "e6a0", "unicode_decimal": 59040 }, { "icon_id": "24899647", "name": "fire", "font_class": "fire", "unicode": "e6a1", "unicode_decimal": 59041 }, { "icon_id": "24899648", "name": "paihangbang", "font_class": "medal", "unicode": "e6a2", "unicode_decimal": 59042 }, { "icon_id": "24899649", "name": "font", "font_class": "font", "unicode": "e6a3", "unicode_decimal": 59043 }, { "icon_id": "24899650", "name": "gift", "font_class": "gift", "unicode": "e6a4", "unicode_decimal": 59044 }, { "icon_id": "24899651", "name": "link", "font_class": "link", "unicode": "e6a5", "unicode_decimal": 59045 }, { "icon_id": "24899652", "name": "notification", "font_class": "notification", "unicode": "e6a6", "unicode_decimal": 59046 }, { "icon_id": "24899653", "name": "staff", "font_class": "staff", "unicode": "e6a7", "unicode_decimal": 59047 }, { "icon_id": "24899654", "name": "VIP", "font_class": "vip", "unicode": "e6a8", "unicode_decimal": 59048 }, { "icon_id": "24899655", "name": "folder_add", "font_class": "folder-add", "unicode": "e6a9", "unicode_decimal": 59049 }, { "icon_id": "24899656", "name": "tune", "font_class": "tune", "unicode": "e6aa", "unicode_decimal": 59050 }, { "icon_id": "24899657", "name": "shimingrenzheng", "font_class": "auth", "unicode": "e6ab", "unicode_decimal": 59051 }, { "icon_id": "24899565", "name": "person", "font_class": "person", "unicode": "e699", "unicode_decimal": 59033 }, { "icon_id": "24899566", "name": "email-filled", "font_class": "email-filled", "unicode": "e69a", "unicode_decimal": 59034 }, { "icon_id": "24899567", "name": "phone-filled", "font_class": "phone-filled", "unicode": "e69b", "unicode_decimal": 59035 }, { "icon_id": "24899568", "name": "phone", "font_class": "phone", "unicode": "e69c", "unicode_decimal": 59036 }, { "icon_id": "24899570", "name": "email", "font_class": "email", "unicode": "e69e", "unicode_decimal": 59038 }, { "icon_id": "24899571", "name": "personadd", "font_class": "personadd", "unicode": "e69f", "unicode_decimal": 59039 }, { "icon_id": "24899558", "name": "chatboxes-filled", "font_class": "chatboxes-filled", "unicode": "e692", "unicode_decimal": 59026 }, { "icon_id": "24899559", "name": "contact", "font_class": "contact", "unicode": "e693", "unicode_decimal": 59027 }, { "icon_id": "24899560", "name": "chatbubble-filled", "font_class": "chatbubble-filled", "unicode": "e694", "unicode_decimal": 59028 }, { "icon_id": "24899561", "name": "contact-filled", "font_class": "contact-filled", "unicode": "e695", "unicode_decimal": 59029 }, { "icon_id": "24899562", "name": "chatboxes", "font_class": "chatboxes", "unicode": "e696", "unicode_decimal": 59030 }, { "icon_id": "24899563", "name": "chatbubble", "font_class": "chatbubble", "unicode": "e697", "unicode_decimal": 59031 }, { "icon_id": "24881290", "name": "upload-filled", "font_class": "upload-filled", "unicode": "e68e", "unicode_decimal": 59022 }, { "icon_id": "24881292", "name": "upload", "font_class": "upload", "unicode": "e690", "unicode_decimal": 59024 }, { "icon_id": "24881293", "name": "weixin", "font_class": "weixin", "unicode": "e691", "unicode_decimal": 59025 }, { "icon_id": "24881274", "name": "compose", "font_class": "compose", "unicode": "e67f", "unicode_decimal": 59007 }, { "icon_id": "24881275", "name": "qq", "font_class": "qq", "unicode": "e680", "unicode_decimal": 59008 }, { "icon_id": "24881276", "name": "download-filled", "font_class": "download-filled", "unicode": "e681", "unicode_decimal": 59009 }, { "icon_id": "24881277", "name": "pengyouquan", "font_class": "pyq", "unicode": "e682", "unicode_decimal": 59010 }, { "icon_id": "24881279", "name": "sound", "font_class": "sound", "unicode": "e684", "unicode_decimal": 59012 }, { "icon_id": "24881280", "name": "trash-filled", "font_class": "trash-filled", "unicode": "e685", "unicode_decimal": 59013 }, { "icon_id": "24881281", "name": "sound-filled", "font_class": "sound-filled", "unicode": "e686", "unicode_decimal": 59014 }, { "icon_id": "24881282", "name": "trash", "font_class": "trash", "unicode": "e687", "unicode_decimal": 59015 }, { "icon_id": "24881284", "name": "videocam-filled", "font_class": "videocam-filled", "unicode": "e689", "unicode_decimal": 59017 }, { "icon_id": "24881285", "name": "spinner-cycle", "font_class": "spinner-cycle", "unicode": "e68a", "unicode_decimal": 59018 }, { "icon_id": "24881286", "name": "weibo", "font_class": "weibo", "unicode": "e68b", "unicode_decimal": 59019 }, { "icon_id": "24881288", "name": "videocam", "font_class": "videocam", "unicode": "e68c", "unicode_decimal": 59020 }, { "icon_id": "24881289", "name": "download", "font_class": "download", "unicode": "e68d", "unicode_decimal": 59021 }, { "icon_id": "24879601", "name": "help", "font_class": "help", "unicode": "e679", "unicode_decimal": 59001 }, { "icon_id": "24879602", "name": "navigate-filled", "font_class": "navigate-filled", "unicode": "e67a", "unicode_decimal": 59002 }, { "icon_id": "24879603", "name": "plusempty", "font_class": "plusempty", "unicode": "e67b", "unicode_decimal": 59003 }, { "icon_id": "24879604", "name": "smallcircle", "font_class": "smallcircle", "unicode": "e67c", "unicode_decimal": 59004 }, { "icon_id": "24879605", "name": "minus-filled", "font_class": "minus-filled", "unicode": "e67d", "unicode_decimal": 59005 }, { "icon_id": "24879606", "name": "micoff", "font_class": "micoff", "unicode": "e67e", "unicode_decimal": 59006 }, { "icon_id": "24879588", "name": "closeempty", "font_class": "closeempty", "unicode": "e66c", "unicode_decimal": 58988 }, { "icon_id": "24879589", "name": "clear", "font_class": "clear", "unicode": "e66d", "unicode_decimal": 58989 }, { "icon_id": "24879590", "name": "navigate", "font_class": "navigate", "unicode": "e66e", "unicode_decimal": 58990 }, { "icon_id": "24879591", "name": "minus", "font_class": "minus", "unicode": "e66f", "unicode_decimal": 58991 }, { "icon_id": "24879592", "name": "image", "font_class": "image", "unicode": "e670", "unicode_decimal": 58992 }, { "icon_id": "24879593", "name": "mic", "font_class": "mic", "unicode": "e671", "unicode_decimal": 58993 }, { "icon_id": "24879594", "name": "paperplane", "font_class": "paperplane", "unicode": "e672", "unicode_decimal": 58994 }, { "icon_id": "24879595", "name": "close", "font_class": "close", "unicode": "e673", "unicode_decimal": 58995 }, { "icon_id": "24879596", "name": "help-filled", "font_class": "help-filled", "unicode": "e674", "unicode_decimal": 58996 }, { "icon_id": "24879597", "name": "plus-filled", "font_class": "paperplane-filled", "unicode": "e675", "unicode_decimal": 58997 }, { "icon_id": "24879598", "name": "plus", "font_class": "plus", "unicode": "e676", "unicode_decimal": 58998 }, { "icon_id": "24879599", "name": "mic-filled", "font_class": "mic-filled", "unicode": "e677", "unicode_decimal": 58999 }, { "icon_id": "24879600", "name": "image-filled", "font_class": "image-filled", "unicode": "e678", "unicode_decimal": 59e3 }, { "icon_id": "24855900", "name": "locked-filled", "font_class": "locked-filled", "unicode": "e668", "unicode_decimal": 58984 }, { "icon_id": "24855901", "name": "info", "font_class": "info", "unicode": "e669", "unicode_decimal": 58985 }, { "icon_id": "24855903", "name": "locked", "font_class": "locked", "unicode": "e66b", "unicode_decimal": 58987 }, { "icon_id": "24855884", "name": "camera-filled", "font_class": "camera-filled", "unicode": "e658", "unicode_decimal": 58968 }, { "icon_id": "24855885", "name": "chat-filled", "font_class": "chat-filled", "unicode": "e659", "unicode_decimal": 58969 }, { "icon_id": "24855886", "name": "camera", "font_class": "camera", "unicode": "e65a", "unicode_decimal": 58970 }, { "icon_id": "24855887", "name": "circle", "font_class": "circle", "unicode": "e65b", "unicode_decimal": 58971 }, { "icon_id": "24855888", "name": "checkmarkempty", "font_class": "checkmarkempty", "unicode": "e65c", "unicode_decimal": 58972 }, { "icon_id": "24855889", "name": "chat", "font_class": "chat", "unicode": "e65d", "unicode_decimal": 58973 }, { "icon_id": "24855890", "name": "circle-filled", "font_class": "circle-filled", "unicode": "e65e", "unicode_decimal": 58974 }, { "icon_id": "24855891", "name": "flag", "font_class": "flag", "unicode": "e65f", "unicode_decimal": 58975 }, { "icon_id": "24855892", "name": "flag-filled", "font_class": "flag-filled", "unicode": "e660", "unicode_decimal": 58976 }, { "icon_id": "24855893", "name": "gear-filled", "font_class": "gear-filled", "unicode": "e661", "unicode_decimal": 58977 }, { "icon_id": "24855894", "name": "home", "font_class": "home", "unicode": "e662", "unicode_decimal": 58978 }, { "icon_id": "24855895", "name": "home-filled", "font_class": "home-filled", "unicode": "e663", "unicode_decimal": 58979 }, { "icon_id": "24855896", "name": "gear", "font_class": "gear", "unicode": "e664", "unicode_decimal": 58980 }, { "icon_id": "24855897", "name": "smallcircle-filled", "font_class": "smallcircle-filled", "unicode": "e665", "unicode_decimal": 58981 }, { "icon_id": "24855898", "name": "map-filled", "font_class": "map-filled", "unicode": "e666", "unicode_decimal": 58982 }, { "icon_id": "24855899", "name": "map", "font_class": "map", "unicode": "e667", "unicode_decimal": 58983 }, { "icon_id": "24855825", "name": "refresh-filled", "font_class": "refresh-filled", "unicode": "e656", "unicode_decimal": 58966 }, { "icon_id": "24855826", "name": "refresh", "font_class": "refresh", "unicode": "e657", "unicode_decimal": 58967 }, { "icon_id": "24855808", "name": "cloud-upload", "font_class": "cloud-upload", "unicode": "e645", "unicode_decimal": 58949 }, { "icon_id": "24855809", "name": "cloud-download-filled", "font_class": "cloud-download-filled", "unicode": "e646", "unicode_decimal": 58950 }, { "icon_id": "24855810", "name": "cloud-download", "font_class": "cloud-download", "unicode": "e647", "unicode_decimal": 58951 }, { "icon_id": "24855811", "name": "cloud-upload-filled", "font_class": "cloud-upload-filled", "unicode": "e648", "unicode_decimal": 58952 }, { "icon_id": "24855813", "name": "redo", "font_class": "redo", "unicode": "e64a", "unicode_decimal": 58954 }, { "icon_id": "24855814", "name": "images-filled", "font_class": "images-filled", "unicode": "e64b", "unicode_decimal": 58955 }, { "icon_id": "24855815", "name": "undo-filled", "font_class": "undo-filled", "unicode": "e64c", "unicode_decimal": 58956 }, { "icon_id": "24855816", "name": "more", "font_class": "more", "unicode": "e64d", "unicode_decimal": 58957 }, { "icon_id": "24855817", "name": "more-filled", "font_class": "more-filled", "unicode": "e64e", "unicode_decimal": 58958 }, { "icon_id": "24855818", "name": "undo", "font_class": "undo", "unicode": "e64f", "unicode_decimal": 58959 }, { "icon_id": "24855819", "name": "images", "font_class": "images", "unicode": "e650", "unicode_decimal": 58960 }, { "icon_id": "24855821", "name": "paperclip", "font_class": "paperclip", "unicode": "e652", "unicode_decimal": 58962 }, { "icon_id": "24855822", "name": "settings", "font_class": "settings", "unicode": "e653", "unicode_decimal": 58963 }, { "icon_id": "24855823", "name": "search", "font_class": "search", "unicode": "e654", "unicode_decimal": 58964 }, { "icon_id": "24855824", "name": "redo-filled", "font_class": "redo-filled", "unicode": "e655", "unicode_decimal": 58965 }, { "icon_id": "24841702", "name": "list", "font_class": "list", "unicode": "e644", "unicode_decimal": 58948 }, { "icon_id": "24841489", "name": "mail-open-filled", "font_class": "mail-open-filled", "unicode": "e63a", "unicode_decimal": 58938 }, { "icon_id": "24841491", "name": "hand-thumbsdown-filled", "font_class": "hand-down-filled", "unicode": "e63c", "unicode_decimal": 58940 }, { "icon_id": "24841492", "name": "hand-thumbsdown", "font_class": "hand-down", "unicode": "e63d", "unicode_decimal": 58941 }, { "icon_id": "24841493", "name": "hand-thumbsup-filled", "font_class": "hand-up-filled", "unicode": "e63e", "unicode_decimal": 58942 }, { "icon_id": "24841494", "name": "hand-thumbsup", "font_class": "hand-up", "unicode": "e63f", "unicode_decimal": 58943 }, { "icon_id": "24841496", "name": "heart-filled", "font_class": "heart-filled", "unicode": "e641", "unicode_decimal": 58945 }, { "icon_id": "24841498", "name": "mail-open", "font_class": "mail-open", "unicode": "e643", "unicode_decimal": 58947 }, { "icon_id": "24841488", "name": "heart", "font_class": "heart", "unicode": "e639", "unicode_decimal": 58937 }, { "icon_id": "24839963", "name": "loop", "font_class": "loop", "unicode": "e633", "unicode_decimal": 58931 }, { "icon_id": "24839866", "name": "pulldown", "font_class": "pulldown", "unicode": "e632", "unicode_decimal": 58930 }, { "icon_id": "24813798", "name": "scan", "font_class": "scan", "unicode": "e62a", "unicode_decimal": 58922 }, { "icon_id": "24813786", "name": "bars", "font_class": "bars", "unicode": "e627", "unicode_decimal": 58919 }, { "icon_id": "24813788", "name": "cart-filled", "font_class": "cart-filled", "unicode": "e629", "unicode_decimal": 58921 }, { "icon_id": "24813790", "name": "checkbox", "font_class": "checkbox", "unicode": "e62b", "unicode_decimal": 58923 }, { "icon_id": "24813791", "name": "checkbox-filled", "font_class": "checkbox-filled", "unicode": "e62c", "unicode_decimal": 58924 }, { "icon_id": "24813794", "name": "shop", "font_class": "shop", "unicode": "e62f", "unicode_decimal": 58927 }, { "icon_id": "24813795", "name": "headphones", "font_class": "headphones", "unicode": "e630", "unicode_decimal": 58928 }, { "icon_id": "24813796", "name": "cart", "font_class": "cart", "unicode": "e631", "unicode_decimal": 58929 } ] }; const getVal = (val) => { const reg = /^[0-9]*$/g; return typeof val === "number" || reg.test(val) ? val + "px" : val; }; const _sfc_main$U = { name: "UniIcons", emits: ["click"], props: { type: { type: String, default: "" }, color: { type: String, default: "#333333" }, size: { type: [Number, String], default: 16 }, customPrefix: { type: String, default: "" } }, data() { return { icons: icons.glyphs }; }, computed: { unicode() { let code2 = this.icons.find((v) => v.font_class === this.type); if (code2) { return unescape(`%u${code2.unicode}`); } return ""; }, iconSize() { return getVal(this.size); } }, methods: { _onClick() { this.$emit("click"); } } }; function _sfc_render$T(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock( "text", { style: vue.normalizeStyle({ color: $props.color, "font-size": $options.iconSize }), class: vue.normalizeClass(["uni-icons", ["uniui-" + $props.type, $props.customPrefix, $props.customPrefix ? $props.type : ""]]), onClick: _cache[0] || (_cache[0] = (...args) => $options._onClick && $options._onClick(...args)) }, null, 6 /* CLASS, STYLE */ ); } const __easycom_0$3 = /* @__PURE__ */ _export_sfc(_sfc_main$U, [["render", _sfc_render$T], ["__scopeId", "data-v-d31e1c47"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uni-icons/components/uni-icons/uni-icons.vue"]]); let Calendar$1 = class Calendar { constructor({ selected, startDate, endDate, range: range2 } = {}) { this.date = this.getDateObj(/* @__PURE__ */ new Date()); this.selected = selected || []; this.startDate = startDate; this.endDate = endDate; this.range = range2; this.cleanMultipleStatus(); this.weeks = {}; this.lastHover = false; } /** * 设置日期 * @param {Object} date */ setDate(date3) { const selectDate = this.getDateObj(date3); this.getWeeks(selectDate.fullDate); } /** * 清理多选状态 */ cleanMultipleStatus() { this.multipleStatus = { before: "", after: "", data: [] }; } setStartDate(startDate) { this.startDate = startDate; } setEndDate(endDate) { this.endDate = endDate; } getPreMonthObj(date3) { date3 = fixIosDateFormat(date3); date3 = new Date(date3); const oldMonth = date3.getMonth(); date3.setMonth(oldMonth - 1); const newMonth = date3.getMonth(); if (oldMonth !== 0 && newMonth - oldMonth === 0) { date3.setMonth(newMonth - 1); } return this.getDateObj(date3); } getNextMonthObj(date3) { date3 = fixIosDateFormat(date3); date3 = new Date(date3); const oldMonth = date3.getMonth(); date3.setMonth(oldMonth + 1); const newMonth = date3.getMonth(); if (newMonth - oldMonth > 1) { date3.setMonth(newMonth - 1); } return this.getDateObj(date3); } /** * 获取指定格式Date对象 */ getDateObj(date3) { date3 = fixIosDateFormat(date3); date3 = new Date(date3); return { fullDate: getDate(date3), year: date3.getFullYear(), month: addZero(date3.getMonth() + 1), date: addZero(date3.getDate()), day: date3.getDay() }; } /** * 获取上一个月日期集合 */ getPreMonthDays(amount2, dateObj) { const result = []; for (let i = amount2 - 1; i >= 0; i--) { const month = dateObj.month > 1 ? dateObj.month - 1 : 12; const year = month === 12 ? dateObj.year - 1 : dateObj.year; const date3 = new Date(year, month, -i).getDate(); const fullDate = `${year}-${addZero(month)}-${addZero(date3)}`; let multiples = this.multipleStatus.data; let multiplesStatus = -1; if (this.range && multiples) { multiplesStatus = multiples.findIndex((item) => { return this.dateEqual(item, fullDate); }); } const checked = multiplesStatus !== -1; const extraInfo = this.selected && this.selected.find((item) => { if (this.dateEqual(fullDate, item.date)) { return item; } }); result.push({ fullDate, year, month, date: date3, multiple: this.range ? checked : false, beforeMultiple: this.isLogicBefore(fullDate, this.multipleStatus.before, this.multipleStatus.after), afterMultiple: this.isLogicAfter(fullDate, this.multipleStatus.before, this.multipleStatus.after), disable: this.startDate && !dateCompare(this.startDate, fullDate) || this.endDate && !dateCompare(fullDate, this.endDate), isToday: fullDate === this.date.fullDate, userChecked: false, extraInfo }); } return result; } /** * 获取本月日期集合 */ getCurrentMonthDays(amount2, dateObj) { const result = []; const fullDate = this.date.fullDate; for (let i = 1; i <= amount2; i++) { const currentDate = `${dateObj.year}-${dateObj.month}-${addZero(i)}`; const isToday = fullDate === currentDate; const extraInfo = this.selected && this.selected.find((item) => { if (this.dateEqual(currentDate, item.date)) { return item; } }); if (this.startDate) { dateCompare(this.startDate, currentDate); } if (this.endDate) { dateCompare(currentDate, this.endDate); } let multiples = this.multipleStatus.data; let multiplesStatus = -1; if (this.range && multiples) { multiplesStatus = multiples.findIndex((item) => { return this.dateEqual(item, currentDate); }); } const checked = multiplesStatus !== -1; result.push({ fullDate: currentDate, year: dateObj.year, month: dateObj.month, date: i, multiple: this.range ? checked : false, beforeMultiple: this.isLogicBefore(currentDate, this.multipleStatus.before, this.multipleStatus.after), afterMultiple: this.isLogicAfter(currentDate, this.multipleStatus.before, this.multipleStatus.after), disable: this.startDate && !dateCompare(this.startDate, currentDate) || this.endDate && !dateCompare(currentDate, this.endDate), isToday, userChecked: false, extraInfo }); } return result; } /** * 获取下一个月日期集合 */ _getNextMonthDays(amount2, dateObj) { const result = []; dateObj.month + 1; for (let i = 1; i <= amount2; i++) { const month = dateObj.month === 12 ? 1 : dateObj.month * 1 + 1; const year = month === 1 ? dateObj.year + 1 : dateObj.year; const fullDate = `${year}-${addZero(month)}-${addZero(i)}`; let multiples = this.multipleStatus.data; let multiplesStatus = -1; if (this.range && multiples) { multiplesStatus = multiples.findIndex((item) => { return this.dateEqual(item, fullDate); }); } const checked = multiplesStatus !== -1; const extraInfo = this.selected && this.selected.find((item) => { if (this.dateEqual(fullDate, item.date)) { return item; } }); result.push({ fullDate, year, date: i, month, multiple: this.range ? checked : false, beforeMultiple: this.isLogicBefore(fullDate, this.multipleStatus.before, this.multipleStatus.after), afterMultiple: this.isLogicAfter(fullDate, this.multipleStatus.before, this.multipleStatus.after), disable: this.startDate && !dateCompare(this.startDate, fullDate) || this.endDate && !dateCompare(fullDate, this.endDate), isToday: fullDate === this.date.fullDate, userChecked: false, extraInfo }); } return result; } /** * 获取当前日期详情 * @param {Object} date */ getInfo(date3) { if (!date3) { date3 = /* @__PURE__ */ new Date(); } return this.calendar.find((item) => item.fullDate === this.getDateObj(date3).fullDate); } /** * 比较时间是否相等 */ dateEqual(before, after) { before = new Date(fixIosDateFormat(before)); after = new Date(fixIosDateFormat(after)); return before.valueOf() === after.valueOf(); } /** * 比较真实起始日期 */ isLogicBefore(currentDate, before, after) { let logicBefore = before; if (before && after) { logicBefore = dateCompare(before, after) ? before : after; } return this.dateEqual(logicBefore, currentDate); } isLogicAfter(currentDate, before, after) { let logicAfter = after; if (before && after) { logicAfter = dateCompare(before, after) ? after : before; } return this.dateEqual(logicAfter, currentDate); } /** * 获取日期范围内所有日期 * @param {Object} begin * @param {Object} end */ geDateAll(begin, end) { var arr = []; var ab = begin.split("-"); var ae = end.split("-"); var db = /* @__PURE__ */ new Date(); db.setFullYear(ab[0], ab[1] - 1, ab[2]); var de = /* @__PURE__ */ new Date(); de.setFullYear(ae[0], ae[1] - 1, ae[2]); var unixDb = db.getTime() - 24 * 60 * 60 * 1e3; var unixDe = de.getTime() - 24 * 60 * 60 * 1e3; for (var k = unixDb; k <= unixDe; ) { k = k + 24 * 60 * 60 * 1e3; arr.push(this.getDateObj(new Date(parseInt(k))).fullDate); } return arr; } /** * 获取多选状态 */ setMultiple(fullDate) { if (!this.range) return; let { before, after } = this.multipleStatus; if (before && after) { if (!this.lastHover) { this.lastHover = true; return; } this.multipleStatus.before = fullDate; this.multipleStatus.after = ""; this.multipleStatus.data = []; this.multipleStatus.fulldate = ""; this.lastHover = false; } else { if (!before) { this.multipleStatus.before = fullDate; this.lastHover = false; } else { this.multipleStatus.after = fullDate; if (dateCompare(this.multipleStatus.before, this.multipleStatus.after)) { this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus.after); } else { this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus.before); } this.lastHover = true; } } this.getWeeks(fullDate); } /** * 鼠标 hover 更新多选状态 */ setHoverMultiple(fullDate) { if (!this.range || this.lastHover) return; const { before } = this.multipleStatus; if (!before) { this.multipleStatus.before = fullDate; } else { this.multipleStatus.after = fullDate; if (dateCompare(this.multipleStatus.before, this.multipleStatus.after)) { this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus.after); } else { this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus.before); } } this.getWeeks(fullDate); } /** * 更新默认值多选状态 */ setDefaultMultiple(before, after) { this.multipleStatus.before = before; this.multipleStatus.after = after; if (before && after) { if (dateCompare(before, after)) { this.multipleStatus.data = this.geDateAll(before, after); this.getWeeks(after); } else { this.multipleStatus.data = this.geDateAll(after, before); this.getWeeks(before); } } } /** * 获取每周数据 * @param {Object} dateData */ getWeeks(dateData) { const { year, month } = this.getDateObj(dateData); const preMonthDayAmount = new Date(year, month - 1, 1).getDay(); const preMonthDays = this.getPreMonthDays(preMonthDayAmount, this.getDateObj(dateData)); const currentMonthDayAmount = new Date(year, month, 0).getDate(); const currentMonthDays = this.getCurrentMonthDays(currentMonthDayAmount, this.getDateObj(dateData)); const nextMonthDayAmount = 42 - preMonthDayAmount - currentMonthDayAmount; const nextMonthDays = this._getNextMonthDays(nextMonthDayAmount, this.getDateObj(dateData)); const calendarDays = [...preMonthDays, ...currentMonthDays, ...nextMonthDays]; const weeks = new Array(6); for (let i = 0; i < calendarDays.length; i++) { const index2 = Math.floor(i / 7); if (!weeks[index2]) { weeks[index2] = new Array(7); } weeks[index2][i % 7] = calendarDays[i]; } this.calendar = calendarDays; this.weeks = weeks; } }; function getDateTime(date3, hideSecond) { return `${getDate(date3)} ${getTime(date3, hideSecond)}`; } function getDate(date3) { date3 = fixIosDateFormat(date3); date3 = new Date(date3); const year = date3.getFullYear(); const month = date3.getMonth() + 1; const day = date3.getDate(); return `${year}-${addZero(month)}-${addZero(day)}`; } function getTime(date3, hideSecond) { date3 = fixIosDateFormat(date3); date3 = new Date(date3); const hour = date3.getHours(); const minute = date3.getMinutes(); const second = date3.getSeconds(); return hideSecond ? `${addZero(hour)}:${addZero(minute)}` : `${addZero(hour)}:${addZero(minute)}:${addZero(second)}`; } function addZero(num) { if (num < 10) { num = `0${num}`; } return num; } function getDefaultSecond(hideSecond) { return hideSecond ? "00:00" : "00:00:00"; } function dateCompare(startDate, endDate) { startDate = new Date(fixIosDateFormat(startDate)); endDate = new Date(fixIosDateFormat(endDate)); return startDate <= endDate; } function checkDate(date3) { const dateReg = /((19|20)\d{2})(-|\/)\d{1,2}(-|\/)\d{1,2}/g; return date3.match(dateReg); } const dateTimeReg = /^\d{4}-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01])( [0-5]?[0-9]:[0-5]?[0-9]:[0-5]?[0-9])?$/; function fixIosDateFormat(value2) { if (typeof value2 === "string" && dateTimeReg.test(value2)) { value2 = value2.replace(/-/g, "/"); } return value2; } const _sfc_main$T = { props: { weeks: { type: Object, default() { return {}; } }, calendar: { type: Object, default: () => { return {}; } }, selected: { type: Array, default: () => { return []; } }, checkHover: { type: Boolean, default: false } }, methods: { choiceDate(weeks) { this.$emit("change", weeks); }, handleMousemove(weeks) { this.$emit("handleMouse", weeks); } } }; function _sfc_render$S(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock( "view", { class: vue.normalizeClass(["uni-calendar-item__weeks-box", { "uni-calendar-item--disable": $props.weeks.disable, "uni-calendar-item--before-checked-x": $props.weeks.beforeMultiple, "uni-calendar-item--multiple": $props.weeks.multiple, "uni-calendar-item--after-checked-x": $props.weeks.afterMultiple }]), onClick: _cache[0] || (_cache[0] = ($event) => $options.choiceDate($props.weeks)), onMouseenter: _cache[1] || (_cache[1] = ($event) => $options.handleMousemove($props.weeks)) }, [ vue.createElementVNode( "view", { class: vue.normalizeClass(["uni-calendar-item__weeks-box-item", { "uni-calendar-item--checked": $props.calendar.fullDate === $props.weeks.fullDate && ($props.calendar.userChecked || !$props.checkHover), "uni-calendar-item--checked-range-text": $props.checkHover, "uni-calendar-item--before-checked": $props.weeks.beforeMultiple, "uni-calendar-item--multiple": $props.weeks.multiple, "uni-calendar-item--after-checked": $props.weeks.afterMultiple, "uni-calendar-item--disable": $props.weeks.disable }]) }, [ $props.selected && $props.weeks.extraInfo ? (vue.openBlock(), vue.createElementBlock("text", { key: 0, class: "uni-calendar-item__weeks-box-circle" })) : vue.createCommentVNode("v-if", true), vue.createElementVNode( "text", { class: "uni-calendar-item__weeks-box-text uni-calendar-item__weeks-box-text-disable uni-calendar-item--checked-text" }, vue.toDisplayString($props.weeks.date), 1 /* TEXT */ ) ], 2 /* CLASS */ ), vue.createElementVNode( "view", { class: vue.normalizeClass({ "uni-calendar-item--today": $props.weeks.isToday }) }, null, 2 /* CLASS */ ) ], 34 /* CLASS, NEED_HYDRATION */ ); } const calendarItem = /* @__PURE__ */ _export_sfc(_sfc_main$T, [["render", _sfc_render$S], ["__scopeId", "data-v-3c762a01"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue"]]); const isObject$1 = (val) => val !== null && typeof val === "object"; const defaultDelimiters = ["{", "}"]; class BaseFormatter { constructor() { this._caches = /* @__PURE__ */ Object.create(null); } interpolate(message, values, delimiters = defaultDelimiters) { if (!values) { return [message]; } let tokens = this._caches[message]; if (!tokens) { tokens = parse(message, delimiters); this._caches[message] = tokens; } return compile(tokens, values); } } const RE_TOKEN_LIST_VALUE = /^(?:\d)+/; const RE_TOKEN_NAMED_VALUE = /^(?:\w)+/; function parse(format2, [startDelimiter, endDelimiter]) { const tokens = []; let position = 0; let text = ""; while (position < format2.length) { let char = format2[position++]; if (char === startDelimiter) { if (text) { tokens.push({ type: "text", value: text }); } text = ""; let sub = ""; char = format2[position++]; while (char !== void 0 && char !== endDelimiter) { sub += char; char = format2[position++]; } const isClosed = char === endDelimiter; const type2 = RE_TOKEN_LIST_VALUE.test(sub) ? "list" : isClosed && RE_TOKEN_NAMED_VALUE.test(sub) ? "named" : "unknown"; tokens.push({ value: sub, type: type2 }); } else { text += char; } } text && tokens.push({ type: "text", value: text }); return tokens; } function compile(tokens, values) { const compiled = []; let index2 = 0; const mode = Array.isArray(values) ? "list" : isObject$1(values) ? "named" : "unknown"; if (mode === "unknown") { return compiled; } while (index2 < tokens.length) { const token = tokens[index2]; switch (token.type) { case "text": compiled.push(token.value); break; case "list": compiled.push(values[parseInt(token.value, 10)]); break; case "named": if (mode === "named") { compiled.push(values[token.value]); } else { { console.warn(`Type of token '${token.type}' and format of value '${mode}' don't match!`); } } break; case "unknown": { console.warn(`Detect 'unknown' type of token!`); } break; } index2++; } return compiled; } const LOCALE_ZH_HANS = "zh-Hans"; const LOCALE_ZH_HANT = "zh-Hant"; const LOCALE_EN = "en"; const LOCALE_FR = "fr"; const LOCALE_ES = "es"; const hasOwnProperty = Object.prototype.hasOwnProperty; const hasOwn = (val, key) => hasOwnProperty.call(val, key); const defaultFormatter = new BaseFormatter(); function include(str, parts) { return !!parts.find((part) => str.indexOf(part) !== -1); } function startsWith(str, parts) { return parts.find((part) => str.indexOf(part) === 0); } function normalizeLocale(locale, messages2) { if (!locale) { return; } locale = locale.trim().replace(/_/g, "-"); if (messages2 && messages2[locale]) { return locale; } locale = locale.toLowerCase(); if (locale === "chinese") { return LOCALE_ZH_HANS; } if (locale.indexOf("zh") === 0) { if (locale.indexOf("-hans") > -1) { return LOCALE_ZH_HANS; } if (locale.indexOf("-hant") > -1) { return LOCALE_ZH_HANT; } if (include(locale, ["-tw", "-hk", "-mo", "-cht"])) { return LOCALE_ZH_HANT; } return LOCALE_ZH_HANS; } let locales = [LOCALE_EN, LOCALE_FR, LOCALE_ES]; if (messages2 && Object.keys(messages2).length > 0) { locales = Object.keys(messages2); } const lang = startsWith(locale, locales); if (lang) { return lang; } } class I18n { constructor({ locale, fallbackLocale, messages: messages2, watcher, formater: formater2 }) { this.locale = LOCALE_EN; this.fallbackLocale = LOCALE_EN; this.message = {}; this.messages = {}; this.watchers = []; if (fallbackLocale) { this.fallbackLocale = fallbackLocale; } this.formater = formater2 || defaultFormatter; this.messages = messages2 || {}; this.setLocale(locale || LOCALE_EN); if (watcher) { this.watchLocale(watcher); } } setLocale(locale) { const oldLocale = this.locale; this.locale = normalizeLocale(locale, this.messages) || this.fallbackLocale; if (!this.messages[this.locale]) { this.messages[this.locale] = {}; } this.message = this.messages[this.locale]; if (oldLocale !== this.locale) { this.watchers.forEach((watcher) => { watcher(this.locale, oldLocale); }); } } getLocale() { return this.locale; } watchLocale(fn) { const index2 = this.watchers.push(fn) - 1; return () => { this.watchers.splice(index2, 1); }; } add(locale, message, override = true) { const curMessages = this.messages[locale]; if (curMessages) { if (override) { Object.assign(curMessages, message); } else { Object.keys(message).forEach((key) => { if (!hasOwn(curMessages, key)) { curMessages[key] = message[key]; } }); } } else { this.messages[locale] = message; } } f(message, values, delimiters) { return this.formater.interpolate(message, values, delimiters).join(""); } t(key, locale, values) { let message = this.message; if (typeof locale === "string") { locale = normalizeLocale(locale, this.messages); locale && (message = this.messages[locale]); } else { values = locale; } if (!hasOwn(message, key)) { console.warn(`Cannot translate the value of keypath ${key}. Use the value of keypath as default.`); return key; } return this.formater.interpolate(message[key], values).join(""); } } function watchAppLocale(appVm, i18n) { if (appVm.$watchLocale) { appVm.$watchLocale((newLocale) => { i18n.setLocale(newLocale); }); } else { appVm.$watch(() => appVm.$locale, (newLocale) => { i18n.setLocale(newLocale); }); } } function getDefaultLocale() { if (typeof uni !== "undefined" && uni.getLocale) { return uni.getLocale(); } if (typeof global !== "undefined" && global.getLocale) { return global.getLocale(); } return LOCALE_EN; } function initVueI18n(locale, messages2 = {}, fallbackLocale, watcher) { if (typeof locale !== "string") { const options = [ messages2, locale ]; locale = options[0]; messages2 = options[1]; } if (typeof locale !== "string") { locale = getDefaultLocale(); } if (typeof fallbackLocale !== "string") { fallbackLocale = typeof __uniConfig !== "undefined" && __uniConfig.fallbackLocale || LOCALE_EN; } const i18n = new I18n({ locale, fallbackLocale, messages: messages2, watcher }); let t2 = (key, values) => { if (typeof getApp !== "function") { t2 = function(key2, values2) { return i18n.t(key2, values2); }; } else { let isWatchedAppLocale = false; t2 = function(key2, values2) { const appVm = getApp().$vm; if (appVm) { appVm.$locale; if (!isWatchedAppLocale) { isWatchedAppLocale = true; watchAppLocale(appVm, i18n); } } return i18n.t(key2, values2); }; } return t2(key, values); }; return { i18n, f(message, values, delimiters) { return i18n.f(message, values, delimiters); }, t(key, values) { return t2(key, values); }, add(locale2, message, override = true) { return i18n.add(locale2, message, override); }, watch(fn) { return i18n.watchLocale(fn); }, getLocale() { return i18n.getLocale(); }, setLocale(newLocale) { return i18n.setLocale(newLocale); } }; } const en = { "uni-datetime-picker.selectDate": "select date", "uni-datetime-picker.selectTime": "select time", "uni-datetime-picker.selectDateTime": "select date and time", "uni-datetime-picker.startDate": "start date", "uni-datetime-picker.endDate": "end date", "uni-datetime-picker.startTime": "start time", "uni-datetime-picker.endTime": "end time", "uni-datetime-picker.ok": "ok", "uni-datetime-picker.clear": "clear", "uni-datetime-picker.cancel": "cancel", "uni-datetime-picker.year": "-", "uni-datetime-picker.month": "", "uni-calender.MON": "MON", "uni-calender.TUE": "TUE", "uni-calender.WED": "WED", "uni-calender.THU": "THU", "uni-calender.FRI": "FRI", "uni-calender.SAT": "SAT", "uni-calender.SUN": "SUN", "uni-calender.confirm": "confirm" }; const zhHans = { "uni-datetime-picker.selectDate": "选择日期", "uni-datetime-picker.selectTime": "选择时间", "uni-datetime-picker.selectDateTime": "选择日期时间", "uni-datetime-picker.startDate": "开始日期", "uni-datetime-picker.endDate": "结束日期", "uni-datetime-picker.startTime": "开始时间", "uni-datetime-picker.endTime": "结束时间", "uni-datetime-picker.ok": "确定", "uni-datetime-picker.clear": "清除", "uni-datetime-picker.cancel": "取消", "uni-datetime-picker.year": "年", "uni-datetime-picker.month": "月", "uni-calender.SUN": "日", "uni-calender.MON": "一", "uni-calender.TUE": "二", "uni-calender.WED": "三", "uni-calender.THU": "四", "uni-calender.FRI": "五", "uni-calender.SAT": "六", "uni-calender.confirm": "确认" }; const zhHant = { "uni-datetime-picker.selectDate": "選擇日期", "uni-datetime-picker.selectTime": "選擇時間", "uni-datetime-picker.selectDateTime": "選擇日期時間", "uni-datetime-picker.startDate": "開始日期", "uni-datetime-picker.endDate": "結束日期", "uni-datetime-picker.startTime": "開始时间", "uni-datetime-picker.endTime": "結束时间", "uni-datetime-picker.ok": "確定", "uni-datetime-picker.clear": "清除", "uni-datetime-picker.cancel": "取消", "uni-datetime-picker.year": "年", "uni-datetime-picker.month": "月", "uni-calender.SUN": "日", "uni-calender.MON": "一", "uni-calender.TUE": "二", "uni-calender.WED": "三", "uni-calender.THU": "四", "uni-calender.FRI": "五", "uni-calender.SAT": "六", "uni-calender.confirm": "確認" }; const i18nMessages = { en, "zh-Hans": zhHans, "zh-Hant": zhHant }; const { t: t$1 } = initVueI18n(i18nMessages); const _sfc_main$S = { name: "UniDatetimePicker", data() { return { indicatorStyle: `height: 50px;`, visible: false, fixNvueBug: {}, dateShow: true, timeShow: true, title: "日期和时间", // 输入框当前时间 time: "", // 当前的年月日时分秒 year: 1920, month: 0, day: 0, hour: 0, minute: 0, second: 0, // 起始时间 startYear: 1920, startMonth: 1, startDay: 1, startHour: 0, startMinute: 0, startSecond: 0, // 结束时间 endYear: 2120, endMonth: 12, endDay: 31, endHour: 23, endMinute: 59, endSecond: 59 }; }, props: { type: { type: String, default: "datetime" }, value: { type: [String, Number], default: "" }, modelValue: { type: [String, Number], default: "" }, start: { type: [Number, String], default: "" }, end: { type: [Number, String], default: "" }, returnType: { type: String, default: "string" }, disabled: { type: [Boolean, String], default: false }, border: { type: [Boolean, String], default: true }, hideSecond: { type: [Boolean, String], default: false } }, watch: { modelValue: { handler(newVal) { if (newVal) { this.parseValue(fixIosDateFormat(newVal)); this.initTime(false); } else { this.time = ""; this.parseValue(Date.now()); } }, immediate: true }, type: { handler(newValue) { if (newValue === "date") { this.dateShow = true; this.timeShow = false; this.title = "日期"; } else if (newValue === "time") { this.dateShow = false; this.timeShow = true; this.title = "时间"; } else { this.dateShow = true; this.timeShow = true; this.title = "日期和时间"; } }, immediate: true }, start: { handler(newVal) { this.parseDatetimeRange(fixIosDateFormat(newVal), "start"); }, immediate: true }, end: { handler(newVal) { this.parseDatetimeRange(fixIosDateFormat(newVal), "end"); }, immediate: true }, // 月、日、时、分、秒可选范围变化后,检查当前值是否在范围内,不在则当前值重置为可选范围第一项 months(newVal) { this.checkValue("month", this.month, newVal); }, days(newVal) { this.checkValue("day", this.day, newVal); }, hours(newVal) { this.checkValue("hour", this.hour, newVal); }, minutes(newVal) { this.checkValue("minute", this.minute, newVal); }, seconds(newVal) { this.checkValue("second", this.second, newVal); } }, computed: { // 当前年、月、日、时、分、秒选择范围 years() { return this.getCurrentRange("year"); }, months() { return this.getCurrentRange("month"); }, days() { return this.getCurrentRange("day"); }, hours() { return this.getCurrentRange("hour"); }, minutes() { return this.getCurrentRange("minute"); }, seconds() { return this.getCurrentRange("second"); }, // picker 当前值数组 ymd() { return [this.year - this.minYear, this.month - this.minMonth, this.day - this.minDay]; }, hms() { return [this.hour - this.minHour, this.minute - this.minMinute, this.second - this.minSecond]; }, // 当前 date 是 start currentDateIsStart() { return this.year === this.startYear && this.month === this.startMonth && this.day === this.startDay; }, // 当前 date 是 end currentDateIsEnd() { return this.year === this.endYear && this.month === this.endMonth && this.day === this.endDay; }, // 当前年、月、日、时、分、秒的最小值和最大值 minYear() { return this.startYear; }, maxYear() { return this.endYear; }, minMonth() { if (this.year === this.startYear) { return this.startMonth; } else { return 1; } }, maxMonth() { if (this.year === this.endYear) { return this.endMonth; } else { return 12; } }, minDay() { if (this.year === this.startYear && this.month === this.startMonth) { return this.startDay; } else { return 1; } }, maxDay() { if (this.year === this.endYear && this.month === this.endMonth) { return this.endDay; } else { return this.daysInMonth(this.year, this.month); } }, minHour() { if (this.type === "datetime") { if (this.currentDateIsStart) { return this.startHour; } else { return 0; } } if (this.type === "time") { return this.startHour; } }, maxHour() { if (this.type === "datetime") { if (this.currentDateIsEnd) { return this.endHour; } else { return 23; } } if (this.type === "time") { return this.endHour; } }, minMinute() { if (this.type === "datetime") { if (this.currentDateIsStart && this.hour === this.startHour) { return this.startMinute; } else { return 0; } } if (this.type === "time") { if (this.hour === this.startHour) { return this.startMinute; } else { return 0; } } }, maxMinute() { if (this.type === "datetime") { if (this.currentDateIsEnd && this.hour === this.endHour) { return this.endMinute; } else { return 59; } } if (this.type === "time") { if (this.hour === this.endHour) { return this.endMinute; } else { return 59; } } }, minSecond() { if (this.type === "datetime") { if (this.currentDateIsStart && this.hour === this.startHour && this.minute === this.startMinute) { return this.startSecond; } else { return 0; } } if (this.type === "time") { if (this.hour === this.startHour && this.minute === this.startMinute) { return this.startSecond; } else { return 0; } } }, maxSecond() { if (this.type === "datetime") { if (this.currentDateIsEnd && this.hour === this.endHour && this.minute === this.endMinute) { return this.endSecond; } else { return 59; } } if (this.type === "time") { if (this.hour === this.endHour && this.minute === this.endMinute) { return this.endSecond; } else { return 59; } } }, /** * for i18n */ selectTimeText() { return t$1("uni-datetime-picker.selectTime"); }, okText() { return t$1("uni-datetime-picker.ok"); }, clearText() { return t$1("uni-datetime-picker.clear"); }, cancelText() { return t$1("uni-datetime-picker.cancel"); } }, mounted() { }, methods: { /** * @param {Object} item * 小于 10 在前面加个 0 */ lessThanTen(item) { return item < 10 ? "0" + item : item; }, /** * 解析时分秒字符串,例如:00:00:00 * @param {String} timeString */ parseTimeType(timeString) { if (timeString) { let timeArr = timeString.split(":"); this.hour = Number(timeArr[0]); this.minute = Number(timeArr[1]); this.second = Number(timeArr[2]); } }, /** * 解析选择器初始值,类型可以是字符串、时间戳,例如:2000-10-02、'08:30:00'、 1610695109000 * @param {String | Number} datetime */ initPickerValue(datetime) { let defaultValue = null; if (datetime) { defaultValue = this.compareValueWithStartAndEnd(datetime, this.start, this.end); } else { defaultValue = Date.now(); defaultValue = this.compareValueWithStartAndEnd(defaultValue, this.start, this.end); } this.parseValue(defaultValue); }, /** * 初始值规则: * - 用户设置初始值 value * - 设置了起始时间 start、终止时间 end,并 start < value < end,初始值为 value, 否则初始值为 start * - 只设置了起始时间 start,并 start < value,初始值为 value,否则初始值为 start * - 只设置了终止时间 end,并 value < end,初始值为 value,否则初始值为 end * - 无起始终止时间,则初始值为 value * - 无初始值 value,则初始值为当前本地时间 Date.now() * @param {Object} value * @param {Object} dateBase */ compareValueWithStartAndEnd(value2, start, end) { let winner = null; value2 = this.superTimeStamp(value2); start = this.superTimeStamp(start); end = this.superTimeStamp(end); if (start && end) { if (value2 < start) { winner = new Date(start); } else if (value2 > end) { winner = new Date(end); } else { winner = new Date(value2); } } else if (start && !end) { winner = start <= value2 ? new Date(value2) : new Date(start); } else if (!start && end) { winner = value2 <= end ? new Date(value2) : new Date(end); } else { winner = new Date(value2); } return winner; }, /** * 转换为可比较的时间戳,接受日期、时分秒、时间戳 * @param {Object} value */ superTimeStamp(value2) { let dateBase = ""; if (this.type === "time" && value2 && typeof value2 === "string") { const now2 = /* @__PURE__ */ new Date(); const year = now2.getFullYear(); const month = now2.getMonth() + 1; const day = now2.getDate(); dateBase = year + "/" + month + "/" + day + " "; } if (Number(value2)) { value2 = parseInt(value2); dateBase = 0; } return this.createTimeStamp(dateBase + value2); }, /** * 解析默认值 value,字符串、时间戳 * @param {Object} defaultTime */ parseValue(value2) { if (!value2) { return; } if (this.type === "time" && typeof value2 === "string") { this.parseTimeType(value2); } else { let defaultDate = null; defaultDate = new Date(value2); if (this.type !== "time") { this.year = defaultDate.getFullYear(); this.month = defaultDate.getMonth() + 1; this.day = defaultDate.getDate(); } if (this.type !== "date") { this.hour = defaultDate.getHours(); this.minute = defaultDate.getMinutes(); this.second = defaultDate.getSeconds(); } } if (this.hideSecond) { this.second = 0; } }, /** * 解析可选择时间范围 start、end,年月日字符串、时间戳 * @param {Object} defaultTime */ parseDatetimeRange(point, pointType) { if (!point) { if (pointType === "start") { this.startYear = 1920; this.startMonth = 1; this.startDay = 1; this.startHour = 0; this.startMinute = 0; this.startSecond = 0; } if (pointType === "end") { this.endYear = 2120; this.endMonth = 12; this.endDay = 31; this.endHour = 23; this.endMinute = 59; this.endSecond = 59; } return; } if (this.type === "time") { const pointArr = point.split(":"); this[pointType + "Hour"] = Number(pointArr[0]); this[pointType + "Minute"] = Number(pointArr[1]); this[pointType + "Second"] = Number(pointArr[2]); } else { if (!point) { pointType === "start" ? this.startYear = this.year - 60 : this.endYear = this.year + 60; return; } if (Number(point)) { point = parseInt(point); } const hasTime = /[0-9]:[0-9]/; if (this.type === "datetime" && pointType === "end" && typeof point === "string" && !hasTime.test( point )) { point = point + " 23:59:59"; } const pointDate = new Date(point); this[pointType + "Year"] = pointDate.getFullYear(); this[pointType + "Month"] = pointDate.getMonth() + 1; this[pointType + "Day"] = pointDate.getDate(); if (this.type === "datetime") { this[pointType + "Hour"] = pointDate.getHours(); this[pointType + "Minute"] = pointDate.getMinutes(); this[pointType + "Second"] = pointDate.getSeconds(); } } }, // 获取 年、月、日、时、分、秒 当前可选范围 getCurrentRange(value2) { const range2 = []; for (let i = this["min" + this.capitalize(value2)]; i <= this["max" + this.capitalize(value2)]; i++) { range2.push(i); } return range2; }, // 字符串首字母大写 capitalize(str) { return str.charAt(0).toUpperCase() + str.slice(1); }, // 检查当前值是否在范围内,不在则当前值重置为可选范围第一项 checkValue(name, value2, values) { if (values.indexOf(value2) === -1) { this[name] = values[0]; } }, // 每个月的实际天数 daysInMonth(year, month) { return new Date(year, month, 0).getDate(); }, //兼容 iOS、safari 日期格式 fixIosDateFormat(value2) { if (typeof value2 === "string") { value2 = value2.replace(/-/g, "/"); } return value2; }, /** * 生成时间戳 * @param {Object} time */ createTimeStamp(time) { if (!time) return; if (typeof time === "number") { return time; } else { time = time.replace(/-/g, "/"); if (this.type === "date") { time = time + " 00:00:00"; } return Date.parse(time); } }, /** * 生成日期或时间的字符串 */ createDomSting() { const yymmdd = this.year + "-" + this.lessThanTen(this.month) + "-" + this.lessThanTen(this.day); let hhmmss = this.lessThanTen(this.hour) + ":" + this.lessThanTen(this.minute); if (!this.hideSecond) { hhmmss = hhmmss + ":" + this.lessThanTen(this.second); } if (this.type === "date") { return yymmdd; } else if (this.type === "time") { return hhmmss; } else { return yymmdd + " " + hhmmss; } }, /** * 初始化返回值,并抛出 change 事件 */ initTime(emit2 = true) { this.time = this.createDomSting(); if (!emit2) return; if (this.returnType === "timestamp" && this.type !== "time") { this.$emit("change", this.createTimeStamp(this.time)); this.$emit("input", this.createTimeStamp(this.time)); this.$emit("update:modelValue", this.createTimeStamp(this.time)); } else { this.$emit("change", this.time); this.$emit("input", this.time); this.$emit("update:modelValue", this.time); } }, /** * 用户选择日期或时间更新 data * @param {Object} e */ bindDateChange(e) { const val = e.detail.value; this.year = this.years[val[0]]; this.month = this.months[val[1]]; this.day = this.days[val[2]]; }, bindTimeChange(e) { const val = e.detail.value; this.hour = this.hours[val[0]]; this.minute = this.minutes[val[1]]; this.second = this.seconds[val[2]]; }, /** * 初始化弹出层 */ initTimePicker() { if (this.disabled) return; const value2 = fixIosDateFormat(this.time); this.initPickerValue(value2); this.visible = !this.visible; }, /** * 触发或关闭弹框 */ tiggerTimePicker(e) { this.visible = !this.visible; }, /** * 用户点击“清空”按钮,清空当前值 */ clearTime() { this.time = ""; this.$emit("change", this.time); this.$emit("input", this.time); this.$emit("update:modelValue", this.time); this.tiggerTimePicker(); }, /** * 用户点击“确定”按钮 */ setTime() { this.initTime(); this.tiggerTimePicker(); } } }; function _sfc_render$R(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "uni-datetime-picker" }, [ vue.createElementVNode("view", { onClick: _cache[0] || (_cache[0] = (...args) => $options.initTimePicker && $options.initTimePicker(...args)) }, [ vue.renderSlot(_ctx.$slots, "default", {}, () => [ vue.createElementVNode( "view", { class: vue.normalizeClass(["uni-datetime-picker-timebox-pointer", { "uni-datetime-picker-disabled": $props.disabled, "uni-datetime-picker-timebox": $props.border }]) }, [ vue.createElementVNode( "text", { class: "uni-datetime-picker-text" }, vue.toDisplayString($data.time), 1 /* TEXT */ ), !$data.time ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "uni-datetime-picker-time" }, [ vue.createElementVNode( "text", { class: "uni-datetime-picker-text" }, vue.toDisplayString($options.selectTimeText), 1 /* TEXT */ ) ])) : vue.createCommentVNode("v-if", true) ], 2 /* CLASS */ ) ], true) ]), $data.visible ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, id: "mask", class: "uni-datetime-picker-mask", onClick: _cache[1] || (_cache[1] = (...args) => $options.tiggerTimePicker && $options.tiggerTimePicker(...args)) })) : vue.createCommentVNode("v-if", true), $data.visible ? (vue.openBlock(), vue.createElementBlock( "view", { key: 1, class: vue.normalizeClass(["uni-datetime-picker-popup", [$data.dateShow && $data.timeShow ? "" : "fix-nvue-height"]]), style: vue.normalizeStyle($data.fixNvueBug) }, [ vue.createElementVNode("view", { class: "uni-title" }, [ vue.createElementVNode( "text", { class: "uni-datetime-picker-text" }, vue.toDisplayString($options.selectTimeText), 1 /* TEXT */ ) ]), $data.dateShow ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "uni-datetime-picker__container-box" }, [ vue.createElementVNode("picker-view", { class: "uni-datetime-picker-view", "indicator-style": $data.indicatorStyle, value: $options.ymd, onChange: _cache[2] || (_cache[2] = (...args) => $options.bindDateChange && $options.bindDateChange(...args)) }, [ vue.createElementVNode("picker-view-column", null, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($options.years, (item, index2) => { return vue.openBlock(), vue.createElementBlock("view", { class: "uni-datetime-picker-item", key: index2 }, [ vue.createElementVNode( "text", { class: "uni-datetime-picker-item" }, vue.toDisplayString($options.lessThanTen(item)), 1 /* TEXT */ ) ]); }), 128 /* KEYED_FRAGMENT */ )) ]), vue.createElementVNode("picker-view-column", null, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($options.months, (item, index2) => { return vue.openBlock(), vue.createElementBlock("view", { class: "uni-datetime-picker-item", key: index2 }, [ vue.createElementVNode( "text", { class: "uni-datetime-picker-item" }, vue.toDisplayString($options.lessThanTen(item)), 1 /* TEXT */ ) ]); }), 128 /* KEYED_FRAGMENT */ )) ]), vue.createElementVNode("picker-view-column", null, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($options.days, (item, index2) => { return vue.openBlock(), vue.createElementBlock("view", { class: "uni-datetime-picker-item", key: index2 }, [ vue.createElementVNode( "text", { class: "uni-datetime-picker-item" }, vue.toDisplayString($options.lessThanTen(item)), 1 /* TEXT */ ) ]); }), 128 /* KEYED_FRAGMENT */ )) ]) ], 40, ["indicator-style", "value"]), vue.createCommentVNode(" 兼容 nvue 不支持伪类 "), vue.createElementVNode("text", { class: "uni-datetime-picker-sign sign-left" }, "-"), vue.createElementVNode("text", { class: "uni-datetime-picker-sign sign-right" }, "-") ])) : vue.createCommentVNode("v-if", true), $data.timeShow ? (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "uni-datetime-picker__container-box" }, [ vue.createElementVNode("picker-view", { class: vue.normalizeClass(["uni-datetime-picker-view", [$props.hideSecond ? "time-hide-second" : ""]]), "indicator-style": $data.indicatorStyle, value: $options.hms, onChange: _cache[3] || (_cache[3] = (...args) => $options.bindTimeChange && $options.bindTimeChange(...args)) }, [ vue.createElementVNode("picker-view-column", null, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($options.hours, (item, index2) => { return vue.openBlock(), vue.createElementBlock("view", { class: "uni-datetime-picker-item", key: index2 }, [ vue.createElementVNode( "text", { class: "uni-datetime-picker-item" }, vue.toDisplayString($options.lessThanTen(item)), 1 /* TEXT */ ) ]); }), 128 /* KEYED_FRAGMENT */ )) ]), vue.createElementVNode("picker-view-column", null, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($options.minutes, (item, index2) => { return vue.openBlock(), vue.createElementBlock("view", { class: "uni-datetime-picker-item", key: index2 }, [ vue.createElementVNode( "text", { class: "uni-datetime-picker-item" }, vue.toDisplayString($options.lessThanTen(item)), 1 /* TEXT */ ) ]); }), 128 /* KEYED_FRAGMENT */ )) ]), !$props.hideSecond ? (vue.openBlock(), vue.createElementBlock("picker-view-column", { key: 0 }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($options.seconds, (item, index2) => { return vue.openBlock(), vue.createElementBlock("view", { class: "uni-datetime-picker-item", key: index2 }, [ vue.createElementVNode( "text", { class: "uni-datetime-picker-item" }, vue.toDisplayString($options.lessThanTen(item)), 1 /* TEXT */ ) ]); }), 128 /* KEYED_FRAGMENT */ )) ])) : vue.createCommentVNode("v-if", true) ], 42, ["indicator-style", "value"]), vue.createCommentVNode(" 兼容 nvue 不支持伪类 "), vue.createElementVNode( "text", { class: vue.normalizeClass(["uni-datetime-picker-sign", [$props.hideSecond ? "sign-center" : "sign-left"]]) }, ":", 2 /* CLASS */ ), !$props.hideSecond ? (vue.openBlock(), vue.createElementBlock("text", { key: 0, class: "uni-datetime-picker-sign sign-right" }, ":")) : vue.createCommentVNode("v-if", true) ])) : vue.createCommentVNode("v-if", true), vue.createElementVNode("view", { class: "uni-datetime-picker-btn" }, [ vue.createElementVNode("view", { onClick: _cache[4] || (_cache[4] = (...args) => $options.clearTime && $options.clearTime(...args)) }, [ vue.createElementVNode( "text", { class: "uni-datetime-picker-btn-text" }, vue.toDisplayString($options.clearText), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "uni-datetime-picker-btn-group" }, [ vue.createElementVNode("view", { class: "uni-datetime-picker-cancel", onClick: _cache[5] || (_cache[5] = (...args) => $options.tiggerTimePicker && $options.tiggerTimePicker(...args)) }, [ vue.createElementVNode( "text", { class: "uni-datetime-picker-btn-text" }, vue.toDisplayString($options.cancelText), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { onClick: _cache[6] || (_cache[6] = (...args) => $options.setTime && $options.setTime(...args)) }, [ vue.createElementVNode( "text", { class: "uni-datetime-picker-btn-text" }, vue.toDisplayString($options.okText), 1 /* TEXT */ ) ]) ]) ]) ], 6 /* CLASS, STYLE */ )) : vue.createCommentVNode("v-if", true) ]); } const TimePicker = /* @__PURE__ */ _export_sfc(_sfc_main$S, [["render", _sfc_render$R], ["__scopeId", "data-v-1d532b70"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue"]]); const { t } = initVueI18n(i18nMessages); const _sfc_main$R = { components: { calendarItem, timePicker: TimePicker }, props: { date: { type: String, default: "" }, defTime: { type: [String, Object], default: "" }, selectableTimes: { type: [Object], default() { return {}; } }, selected: { type: Array, default() { return []; } }, startDate: { type: String, default: "" }, endDate: { type: String, default: "" }, startPlaceholder: { type: String, default: "" }, endPlaceholder: { type: String, default: "" }, range: { type: Boolean, default: false }, hasTime: { type: Boolean, default: false }, insert: { type: Boolean, default: true }, showMonth: { type: Boolean, default: true }, clearDate: { type: Boolean, default: true }, checkHover: { type: Boolean, default: true }, hideSecond: { type: [Boolean], default: false }, pleStatus: { type: Object, default() { return { before: "", after: "", data: [], fulldate: "" }; } }, defaultValue: { type: [String, Object, Array], default: "" } }, data() { return { show: false, weeks: [], calendar: {}, nowDate: {}, aniMaskShow: false, firstEnter: true, time: "", timeRange: { startTime: "", endTime: "" }, tempSingleDate: "", tempRange: { before: "", after: "" } }; }, watch: { date: { immediate: true, handler(newVal) { if (!this.range) { this.tempSingleDate = newVal; setTimeout(() => { this.init(newVal); }, 100); } } }, defTime: { immediate: true, handler(newVal) { if (!this.range) { this.time = newVal; } else { this.timeRange.startTime = newVal.start; this.timeRange.endTime = newVal.end; } } }, startDate(val) { if (!this.cale) { return; } this.cale.setStartDate(val); this.cale.setDate(this.nowDate.fullDate); this.weeks = this.cale.weeks; }, endDate(val) { if (!this.cale) { return; } this.cale.setEndDate(val); this.cale.setDate(this.nowDate.fullDate); this.weeks = this.cale.weeks; }, selected(newVal) { if (!this.cale) { return; } this.cale.setSelectInfo(this.nowDate.fullDate, newVal); this.weeks = this.cale.weeks; }, pleStatus: { immediate: true, handler(newVal) { const { before, after, fulldate, which } = newVal; this.tempRange.before = before; this.tempRange.after = after; setTimeout(() => { if (fulldate) { this.cale.setHoverMultiple(fulldate); if (before && after) { this.cale.lastHover = true; if (this.rangeWithinMonth(after, before)) return; this.setDate(before); } else { this.cale.setMultiple(fulldate); this.setDate(this.nowDate.fullDate); this.calendar.fullDate = ""; this.cale.lastHover = false; } } else { if (!this.cale) { return; } this.cale.setDefaultMultiple(before, after); if (which === "left" && before) { this.setDate(before); this.weeks = this.cale.weeks; } else if (after) { this.setDate(after); this.weeks = this.cale.weeks; } this.cale.lastHover = true; } }, 16); } } }, computed: { timepickerStartTime() { const activeDate = this.range ? this.tempRange.before : this.calendar.fullDate; return activeDate === this.startDate ? this.selectableTimes.start : ""; }, timepickerEndTime() { const activeDate = this.range ? this.tempRange.after : this.calendar.fullDate; return activeDate === this.endDate ? this.selectableTimes.end : ""; }, /** * for i18n */ selectDateText() { return t("uni-datetime-picker.selectDate"); }, startDateText() { return this.startPlaceholder || t("uni-datetime-picker.startDate"); }, endDateText() { return this.endPlaceholder || t("uni-datetime-picker.endDate"); }, okText() { return t("uni-datetime-picker.ok"); }, yearText() { return t("uni-datetime-picker.year"); }, monthText() { return t("uni-datetime-picker.month"); }, MONText() { return t("uni-calender.MON"); }, TUEText() { return t("uni-calender.TUE"); }, WEDText() { return t("uni-calender.WED"); }, THUText() { return t("uni-calender.THU"); }, FRIText() { return t("uni-calender.FRI"); }, SATText() { return t("uni-calender.SAT"); }, SUNText() { return t("uni-calender.SUN"); }, confirmText() { return t("uni-calender.confirm"); } }, created() { this.cale = new Calendar$1({ selected: this.selected, startDate: this.startDate, endDate: this.endDate, range: this.range }); this.init(this.date); }, methods: { leaveCale() { this.firstEnter = true; }, handleMouse(weeks) { if (weeks.disable) return; if (this.cale.lastHover) return; let { before, after } = this.cale.multipleStatus; if (!before) return; this.calendar = weeks; this.cale.setHoverMultiple(this.calendar.fullDate); this.weeks = this.cale.weeks; if (this.firstEnter) { this.$emit("firstEnterCale", this.cale.multipleStatus); this.firstEnter = false; } }, rangeWithinMonth(A, B) { const [yearA, monthA] = A.split("-"); const [yearB, monthB] = B.split("-"); return yearA === yearB && monthA === monthB; }, // 蒙版点击事件 maskClick() { this.close(); this.$emit("maskClose"); }, clearCalender() { if (this.range) { this.timeRange.startTime = ""; this.timeRange.endTime = ""; this.tempRange.before = ""; this.tempRange.after = ""; this.cale.multipleStatus.before = ""; this.cale.multipleStatus.after = ""; this.cale.multipleStatus.data = []; this.cale.lastHover = false; } else { this.time = ""; this.tempSingleDate = ""; } this.calendar.fullDate = ""; this.setDate(/* @__PURE__ */ new Date()); }, bindDateChange(e) { const value2 = e.detail.value + "-1"; this.setDate(value2); }, /** * 初始化日期显示 * @param {Object} date */ init(date3) { if (!this.cale) { return; } this.cale.setDate(date3 || /* @__PURE__ */ new Date()); this.weeks = this.cale.weeks; this.nowDate = this.cale.getInfo(date3); this.calendar = { ...this.nowDate }; if (!date3) { this.calendar.fullDate = ""; if (this.defaultValue && !this.range) { const defaultDate = new Date(this.defaultValue); const fullDate = getDate(defaultDate); const year = defaultDate.getFullYear(); const month = defaultDate.getMonth() + 1; const date4 = defaultDate.getDate(); const day = defaultDate.getDay(); this.calendar = { fullDate, year, month, date: date4, day }, this.tempSingleDate = fullDate; this.time = getTime(defaultDate, this.hideSecond); } } }, /** * 打开日历弹窗 */ open() { if (this.clearDate && !this.insert) { this.cale.cleanMultipleStatus(); this.init(this.date); } this.show = true; this.$nextTick(() => { setTimeout(() => { this.aniMaskShow = true; }, 50); }); }, /** * 关闭日历弹窗 */ close() { this.aniMaskShow = false; this.$nextTick(() => { setTimeout(() => { this.show = false; this.$emit("close"); }, 300); }); }, /** * 确认按钮 */ confirm() { this.setEmit("confirm"); this.close(); }, /** * 变化触发 */ change() { if (!this.insert) return; this.setEmit("change"); }, /** * 选择月份触发 */ monthSwitch() { let { year, month } = this.nowDate; this.$emit("monthSwitch", { year, month: Number(month) }); }, /** * 派发事件 * @param {Object} name */ setEmit(name) { if (!this.range) { if (!this.calendar.fullDate) { this.calendar = this.cale.getInfo(/* @__PURE__ */ new Date()); this.tempSingleDate = this.calendar.fullDate; } if (this.hasTime && !this.time) { this.time = getTime(/* @__PURE__ */ new Date(), this.hideSecond); } } let { year, month, date: date3, fullDate, extraInfo } = this.calendar; this.$emit(name, { range: this.cale.multipleStatus, year, month, date: date3, time: this.time, timeRange: this.timeRange, fulldate: fullDate, extraInfo: extraInfo || {} }); }, /** * 选择天触发 * @param {Object} weeks */ choiceDate(weeks) { if (weeks.disable) return; this.calendar = weeks; this.calendar.userChecked = true; this.cale.setMultiple(this.calendar.fullDate, true); this.weeks = this.cale.weeks; this.tempSingleDate = this.calendar.fullDate; const beforeDate = new Date(this.cale.multipleStatus.before).getTime(); const afterDate = new Date(this.cale.multipleStatus.after).getTime(); if (beforeDate > afterDate && afterDate) { this.tempRange.before = this.cale.multipleStatus.after; this.tempRange.after = this.cale.multipleStatus.before; } else { this.tempRange.before = this.cale.multipleStatus.before; this.tempRange.after = this.cale.multipleStatus.after; } this.change(); }, changeMonth(type2) { let newDate; if (type2 === "pre") { newDate = this.cale.getPreMonthObj(this.nowDate.fullDate).fullDate; } else if (type2 === "next") { newDate = this.cale.getNextMonthObj(this.nowDate.fullDate).fullDate; } this.setDate(newDate); this.monthSwitch(); }, /** * 设置日期 * @param {Object} date */ setDate(date3) { this.cale.setDate(date3); this.weeks = this.cale.weeks; this.nowDate = this.cale.getInfo(date3); } } }; function _sfc_render$Q(_ctx, _cache, $props, $setup, $data, $options) { const _component_calendar_item = vue.resolveComponent("calendar-item"); const _component_time_picker = vue.resolveComponent("time-picker"); const _component_uni_icons = resolveEasycom(vue.resolveDynamicComponent("uni-icons"), __easycom_0$3); return vue.openBlock(), vue.createElementBlock( "view", { class: "uni-calendar", onMouseleave: _cache[9] || (_cache[9] = (...args) => $options.leaveCale && $options.leaveCale(...args)) }, [ !$props.insert && $data.show ? (vue.openBlock(), vue.createElementBlock( "view", { key: 0, class: vue.normalizeClass(["uni-calendar__mask", { "uni-calendar--mask-show": $data.aniMaskShow }]), onClick: _cache[0] || (_cache[0] = (...args) => $options.maskClick && $options.maskClick(...args)) }, null, 2 /* CLASS */ )) : vue.createCommentVNode("v-if", true), $props.insert || $data.show ? (vue.openBlock(), vue.createElementBlock( "view", { key: 1, class: vue.normalizeClass(["uni-calendar__content", { "uni-calendar--fixed": !$props.insert, "uni-calendar--ani-show": $data.aniMaskShow, "uni-calendar__content-mobile": $data.aniMaskShow }]) }, [ vue.createElementVNode( "view", { class: vue.normalizeClass(["uni-calendar__header", { "uni-calendar__header-mobile": !$props.insert }]) }, [ vue.createElementVNode("view", { class: "uni-calendar__header-btn-box", onClick: _cache[1] || (_cache[1] = vue.withModifiers(($event) => $options.changeMonth("pre"), ["stop"])) }, [ vue.createElementVNode("view", { class: "uni-calendar__header-btn uni-calendar--left" }) ]), vue.createElementVNode("picker", { mode: "date", value: $props.date, fields: "month", onChange: _cache[2] || (_cache[2] = (...args) => $options.bindDateChange && $options.bindDateChange(...args)) }, [ vue.createElementVNode( "text", { class: "uni-calendar__header-text" }, vue.toDisplayString(($data.nowDate.year || "") + $options.yearText + ($data.nowDate.month || "") + $options.monthText), 1 /* TEXT */ ) ], 40, ["value"]), vue.createElementVNode("view", { class: "uni-calendar__header-btn-box", onClick: _cache[3] || (_cache[3] = vue.withModifiers(($event) => $options.changeMonth("next"), ["stop"])) }, [ vue.createElementVNode("view", { class: "uni-calendar__header-btn uni-calendar--right" }) ]), !$props.insert ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "dialog-close", onClick: _cache[4] || (_cache[4] = (...args) => $options.close && $options.close(...args)) }, [ vue.createElementVNode("view", { class: "dialog-close-plus", "data-id": "close" }), vue.createElementVNode("view", { class: "dialog-close-plus dialog-close-rotate", "data-id": "close" }) ])) : vue.createCommentVNode("v-if", true) ], 2 /* CLASS */ ), vue.createElementVNode("view", { class: "uni-calendar__box" }, [ $props.showMonth ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "uni-calendar__box-bg" }, [ vue.createElementVNode( "text", { class: "uni-calendar__box-bg-text" }, vue.toDisplayString($data.nowDate.month), 1 /* TEXT */ ) ])) : vue.createCommentVNode("v-if", true), vue.createElementVNode("view", { class: "uni-calendar__weeks", style: { "padding-bottom": "7px" } }, [ vue.createElementVNode("view", { class: "uni-calendar__weeks-day" }, [ vue.createElementVNode( "text", { class: "uni-calendar__weeks-day-text" }, vue.toDisplayString($options.SUNText), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "uni-calendar__weeks-day" }, [ vue.createElementVNode( "text", { class: "uni-calendar__weeks-day-text" }, vue.toDisplayString($options.MONText), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "uni-calendar__weeks-day" }, [ vue.createElementVNode( "text", { class: "uni-calendar__weeks-day-text" }, vue.toDisplayString($options.TUEText), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "uni-calendar__weeks-day" }, [ vue.createElementVNode( "text", { class: "uni-calendar__weeks-day-text" }, vue.toDisplayString($options.WEDText), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "uni-calendar__weeks-day" }, [ vue.createElementVNode( "text", { class: "uni-calendar__weeks-day-text" }, vue.toDisplayString($options.THUText), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "uni-calendar__weeks-day" }, [ vue.createElementVNode( "text", { class: "uni-calendar__weeks-day-text" }, vue.toDisplayString($options.FRIText), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "uni-calendar__weeks-day" }, [ vue.createElementVNode( "text", { class: "uni-calendar__weeks-day-text" }, vue.toDisplayString($options.SATText), 1 /* TEXT */ ) ]) ]), (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($data.weeks, (item, weekIndex) => { return vue.openBlock(), vue.createElementBlock("view", { class: "uni-calendar__weeks", key: weekIndex }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(item, (weeks, weeksIndex) => { return vue.openBlock(), vue.createElementBlock("view", { class: "uni-calendar__weeks-item", key: weeksIndex }, [ vue.createVNode(_component_calendar_item, { class: "uni-calendar-item--hook", weeks, calendar: $data.calendar, selected: $props.selected, checkHover: $props.range, onChange: $options.choiceDate, onHandleMouse: $options.handleMouse }, null, 8, ["weeks", "calendar", "selected", "checkHover", "onChange", "onHandleMouse"]) ]); }), 128 /* KEYED_FRAGMENT */ )) ]); }), 128 /* KEYED_FRAGMENT */ )) ]), !$props.insert && !$props.range && $props.hasTime ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "uni-date-changed uni-calendar--fixed-top", style: { "padding": "0 80px" } }, [ vue.createElementVNode( "view", { class: "uni-date-changed--time-date" }, vue.toDisplayString($data.tempSingleDate ? $data.tempSingleDate : $options.selectDateText), 1 /* TEXT */ ), vue.createVNode(_component_time_picker, { type: "time", start: $options.timepickerStartTime, end: $options.timepickerEndTime, modelValue: $data.time, "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => $data.time = $event), disabled: !$data.tempSingleDate, border: false, "hide-second": $props.hideSecond, class: "time-picker-style" }, null, 8, ["start", "end", "modelValue", "disabled", "hide-second"]) ])) : vue.createCommentVNode("v-if", true), !$props.insert && $props.range && $props.hasTime ? (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "uni-date-changed uni-calendar--fixed-top" }, [ vue.createElementVNode("view", { class: "uni-date-changed--time-start" }, [ vue.createElementVNode( "view", { class: "uni-date-changed--time-date" }, vue.toDisplayString($data.tempRange.before ? $data.tempRange.before : $options.startDateText), 1 /* TEXT */ ), vue.createVNode(_component_time_picker, { type: "time", start: $options.timepickerStartTime, modelValue: $data.timeRange.startTime, "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => $data.timeRange.startTime = $event), border: false, "hide-second": $props.hideSecond, disabled: !$data.tempRange.before, class: "time-picker-style" }, null, 8, ["start", "modelValue", "hide-second", "disabled"]) ]), vue.createElementVNode("view", { style: { "line-height": "50px" } }, [ vue.createVNode(_component_uni_icons, { type: "arrowthinright", color: "#999" }) ]), vue.createElementVNode("view", { class: "uni-date-changed--time-end" }, [ vue.createElementVNode( "view", { class: "uni-date-changed--time-date" }, vue.toDisplayString($data.tempRange.after ? $data.tempRange.after : $options.endDateText), 1 /* TEXT */ ), vue.createVNode(_component_time_picker, { type: "time", end: $options.timepickerEndTime, modelValue: $data.timeRange.endTime, "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => $data.timeRange.endTime = $event), border: false, "hide-second": $props.hideSecond, disabled: !$data.tempRange.after, class: "time-picker-style" }, null, 8, ["end", "modelValue", "hide-second", "disabled"]) ]) ])) : vue.createCommentVNode("v-if", true), !$props.insert ? (vue.openBlock(), vue.createElementBlock("view", { key: 2, class: "uni-date-changed uni-date-btn--ok" }, [ vue.createElementVNode( "view", { class: "uni-datetime-picker--btn", onClick: _cache[8] || (_cache[8] = (...args) => $options.confirm && $options.confirm(...args)) }, vue.toDisplayString($options.confirmText), 1 /* TEXT */ ) ])) : vue.createCommentVNode("v-if", true) ], 2 /* CLASS */ )) : vue.createCommentVNode("v-if", true) ], 32 /* NEED_HYDRATION */ ); } const Calendar = /* @__PURE__ */ _export_sfc(_sfc_main$R, [["render", _sfc_render$Q], ["__scopeId", "data-v-1d379219"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue"]]); const _sfc_main$Q = { name: "UniDatetimePicker", options: { virtualHost: true }, components: { Calendar, TimePicker }, data() { return { isRange: false, hasTime: false, displayValue: "", inputDate: "", calendarDate: "", pickerTime: "", calendarRange: { startDate: "", startTime: "", endDate: "", endTime: "" }, displayRangeValue: { startDate: "", endDate: "" }, tempRange: { startDate: "", startTime: "", endDate: "", endTime: "" }, // 左右日历同步数据 startMultipleStatus: { before: "", after: "", data: [], fulldate: "" }, endMultipleStatus: { before: "", after: "", data: [], fulldate: "" }, pickerVisible: false, pickerPositionStyle: null, isEmitValue: false, isPhone: false, isFirstShow: true, i18nT: () => { } }; }, props: { type: { type: String, default: "datetime" }, value: { type: [String, Number, Array, Date], default: "" }, modelValue: { type: [String, Number, Array, Date], default: "" }, start: { type: [Number, String], default: "" }, end: { type: [Number, String], default: "" }, returnType: { type: String, default: "string" }, placeholder: { type: String, default: "" }, startPlaceholder: { type: String, default: "" }, endPlaceholder: { type: String, default: "" }, rangeSeparator: { type: String, default: "-" }, border: { type: [Boolean], default: true }, disabled: { type: [Boolean], default: false }, clearIcon: { type: [Boolean], default: true }, hideSecond: { type: [Boolean], default: false }, defaultValue: { type: [String, Object, Array], default: "" } }, watch: { type: { immediate: true, handler(newVal) { this.hasTime = newVal.indexOf("time") !== -1; this.isRange = newVal.indexOf("range") !== -1; } }, modelValue: { immediate: true, handler(newVal) { if (this.isEmitValue) { this.isEmitValue = false; return; } this.initPicker(newVal); } }, start: { immediate: true, handler(newVal) { if (!newVal) return; this.calendarRange.startDate = getDate(newVal); if (this.hasTime) { this.calendarRange.startTime = getTime(newVal); } } }, end: { immediate: true, handler(newVal) { if (!newVal) return; this.calendarRange.endDate = getDate(newVal); if (this.hasTime) { this.calendarRange.endTime = getTime(newVal, this.hideSecond); } } } }, computed: { timepickerStartTime() { const activeDate = this.isRange ? this.tempRange.startDate : this.inputDate; return activeDate === this.calendarRange.startDate ? this.calendarRange.startTime : ""; }, timepickerEndTime() { const activeDate = this.isRange ? this.tempRange.endDate : this.inputDate; return activeDate === this.calendarRange.endDate ? this.calendarRange.endTime : ""; }, mobileCalendarTime() { const timeRange = { start: this.tempRange.startTime, end: this.tempRange.endTime }; return this.isRange ? timeRange : this.pickerTime; }, mobSelectableTime() { return { start: this.calendarRange.startTime, end: this.calendarRange.endTime }; }, datePopupWidth() { return this.isRange ? 653 : 301; }, /** * for i18n */ singlePlaceholderText() { return this.placeholder || (this.type === "date" ? this.selectDateText : this.selectDateTimeText); }, startPlaceholderText() { return this.startPlaceholder || this.startDateText; }, endPlaceholderText() { return this.endPlaceholder || this.endDateText; }, selectDateText() { return this.i18nT("uni-datetime-picker.selectDate"); }, selectDateTimeText() { return this.i18nT("uni-datetime-picker.selectDateTime"); }, selectTimeText() { return this.i18nT("uni-datetime-picker.selectTime"); }, startDateText() { return this.startPlaceholder || this.i18nT("uni-datetime-picker.startDate"); }, startTimeText() { return this.i18nT("uni-datetime-picker.startTime"); }, endDateText() { return this.endPlaceholder || this.i18nT("uni-datetime-picker.endDate"); }, endTimeText() { return this.i18nT("uni-datetime-picker.endTime"); }, okText() { return this.i18nT("uni-datetime-picker.ok"); }, clearText() { return this.i18nT("uni-datetime-picker.clear"); }, showClearIcon() { return this.clearIcon && !this.disabled && (this.displayValue || this.displayRangeValue.startDate && this.displayRangeValue.endDate); } }, created() { this.initI18nT(); this.platform(); }, methods: { initI18nT() { const vueI18n = initVueI18n(i18nMessages); this.i18nT = vueI18n.t; }, initPicker(newVal) { if (!newVal && !this.defaultValue || Array.isArray(newVal) && !newVal.length) { this.$nextTick(() => { this.clear(false); }); return; } if (!Array.isArray(newVal) && !this.isRange) { if (newVal) { this.displayValue = this.inputDate = this.calendarDate = getDate(newVal); if (this.hasTime) { this.pickerTime = getTime(newVal, this.hideSecond); this.displayValue = `${this.displayValue} ${this.pickerTime}`; } } else if (this.defaultValue) { this.inputDate = this.calendarDate = getDate(this.defaultValue); if (this.hasTime) { this.pickerTime = getTime(this.defaultValue, this.hideSecond); } } } else { const [before, after] = newVal; if (!before && !after) return; const beforeDate = getDate(before); const beforeTime = getTime(before, this.hideSecond); const afterDate = getDate(after); const afterTime = getTime(after, this.hideSecond); const startDate = beforeDate; const endDate = afterDate; this.displayRangeValue.startDate = this.tempRange.startDate = startDate; this.displayRangeValue.endDate = this.tempRange.endDate = endDate; if (this.hasTime) { this.displayRangeValue.startDate = `${beforeDate} ${beforeTime}`; this.displayRangeValue.endDate = `${afterDate} ${afterTime}`; this.tempRange.startTime = beforeTime; this.tempRange.endTime = afterTime; } const defaultRange = { before: beforeDate, after: afterDate }; this.startMultipleStatus = Object.assign({}, this.startMultipleStatus, defaultRange, { which: "right" }); this.endMultipleStatus = Object.assign({}, this.endMultipleStatus, defaultRange, { which: "left" }); } }, updateLeftCale(e) { const left = this.$refs.left; left.cale.setHoverMultiple(e.after); left.setDate(this.$refs.left.nowDate.fullDate); }, updateRightCale(e) { const right = this.$refs.right; right.cale.setHoverMultiple(e.after); right.setDate(this.$refs.right.nowDate.fullDate); }, platform() { if (typeof navigator !== "undefined") { this.isPhone = navigator.userAgent.toLowerCase().indexOf("mobile") !== -1; return; } const { windowWidth } = uni.getSystemInfoSync(); this.isPhone = windowWidth <= 500; this.windowWidth = windowWidth; }, show() { if (this.disabled) { return; } this.platform(); if (this.isPhone) { setTimeout(() => { this.$refs.mobile.open(); }, 0); return; } this.pickerPositionStyle = { top: "10px" }; const dateEditor = uni.createSelectorQuery().in(this).select(".uni-date-editor"); dateEditor.boundingClientRect((rect) => { if (this.windowWidth - rect.left < this.datePopupWidth) { this.pickerPositionStyle.right = 0; } }).exec(); setTimeout(() => { this.pickerVisible = !this.pickerVisible; if (!this.isPhone && this.isRange && this.isFirstShow) { this.isFirstShow = false; const { startDate, endDate } = this.calendarRange; if (startDate && endDate) { if (this.diffDate(startDate, endDate) < 30) { this.$refs.right.changeMonth("pre"); } } else { this.$refs.right.changeMonth("next"); this.$refs.right.cale.lastHover = false; } } }, 50); }, close() { setTimeout(() => { this.pickerVisible = false; this.$emit("maskClick", this.value); this.$refs.mobile && this.$refs.mobile.close(); }, 20); }, setEmit(value2) { if (this.returnType === "timestamp" || this.returnType === "date") { if (!Array.isArray(value2)) { if (!this.hasTime) { value2 = value2 + " 00:00:00"; } value2 = this.createTimestamp(value2); if (this.returnType === "date") { value2 = new Date(value2); } } else { if (!this.hasTime) { value2[0] = value2[0] + " 00:00:00"; value2[1] = value2[1] + " 00:00:00"; } value2[0] = this.createTimestamp(value2[0]); value2[1] = this.createTimestamp(value2[1]); if (this.returnType === "date") { value2[0] = new Date(value2[0]); value2[1] = new Date(value2[1]); } } } this.$emit("update:modelValue", value2); this.$emit("input", value2); this.$emit("change", value2); this.isEmitValue = true; }, createTimestamp(date3) { date3 = fixIosDateFormat(date3); return Date.parse(new Date(date3)); }, singleChange(e) { this.calendarDate = this.inputDate = e.fulldate; if (this.hasTime) return; this.confirmSingleChange(); }, confirmSingleChange() { if (!checkDate(this.inputDate)) { const now2 = /* @__PURE__ */ new Date(); this.calendarDate = this.inputDate = getDate(now2); this.pickerTime = getTime(now2, this.hideSecond); } let startLaterInputDate = false; let startDate, startTime; if (this.start) { let startString = this.start; if (typeof this.start === "number") { startString = getDateTime(this.start, this.hideSecond); } [startDate, startTime] = startString.split(" "); if (this.start && !dateCompare(startDate, this.inputDate)) { startLaterInputDate = true; this.inputDate = startDate; } } let endEarlierInputDate = false; let endDate, endTime; if (this.end) { let endString = this.end; if (typeof this.end === "number") { endString = getDateTime(this.end, this.hideSecond); } [endDate, endTime] = endString.split(" "); if (this.end && !dateCompare(this.inputDate, endDate)) { endEarlierInputDate = true; this.inputDate = endDate; } } if (this.hasTime) { if (startLaterInputDate) { this.pickerTime = startTime || getDefaultSecond(this.hideSecond); } if (endEarlierInputDate) { this.pickerTime = endTime || getDefaultSecond(this.hideSecond); } if (!this.pickerTime) { this.pickerTime = getTime(Date.now(), this.hideSecond); } this.displayValue = `${this.inputDate} ${this.pickerTime}`; } else { this.displayValue = this.inputDate; } this.setEmit(this.displayValue); this.pickerVisible = false; }, leftChange(e) { const { before, after } = e.range; this.rangeChange(before, after); const obj = { before: e.range.before, after: e.range.after, data: e.range.data, fulldate: e.fulldate }; this.startMultipleStatus = Object.assign({}, this.startMultipleStatus, obj); }, rightChange(e) { const { before, after } = e.range; this.rangeChange(before, after); const obj = { before: e.range.before, after: e.range.after, data: e.range.data, fulldate: e.fulldate }; this.endMultipleStatus = Object.assign({}, this.endMultipleStatus, obj); }, mobileChange(e) { if (this.isRange) { const { before, after } = e.range; if (!before || !after) { return; } this.handleStartAndEnd(before, after, true); if (this.hasTime) { const { startTime, endTime } = e.timeRange; this.tempRange.startTime = startTime; this.tempRange.endTime = endTime; } this.confirmRangeChange(); } else { if (this.hasTime) { this.displayValue = e.fulldate + " " + e.time; } else { this.displayValue = e.fulldate; } this.setEmit(this.displayValue); } this.$refs.mobile.close(); }, rangeChange(before, after) { if (!(before && after)) return; this.handleStartAndEnd(before, after, true); if (this.hasTime) return; this.confirmRangeChange(); }, confirmRangeChange() { if (!this.tempRange.startDate || !this.tempRange.endDate) { this.pickerVisible = false; return; } if (!checkDate(this.tempRange.startDate)) { this.tempRange.startDate = getDate(Date.now()); } if (!checkDate(this.tempRange.endDate)) { this.tempRange.endDate = getDate(Date.now()); } let start, end; let startDateLaterRangeStartDate = false; let startDateLaterRangeEndDate = false; let startDate, startTime; if (this.start) { let startString = this.start; if (typeof this.start === "number") { startString = getDateTime(this.start, this.hideSecond); } [startDate, startTime] = startString.split(" "); if (this.start && !dateCompare(this.start, this.tempRange.startDate)) { startDateLaterRangeStartDate = true; this.tempRange.startDate = startDate; } if (this.start && !dateCompare(this.start, this.tempRange.endDate)) { startDateLaterRangeEndDate = true; this.tempRange.endDate = startDate; } } let endDateEarlierRangeStartDate = false; let endDateEarlierRangeEndDate = false; let endDate, endTime; if (this.end) { let endString = this.end; if (typeof this.end === "number") { endString = getDateTime(this.end, this.hideSecond); } [endDate, endTime] = endString.split(" "); if (this.end && !dateCompare(this.tempRange.startDate, this.end)) { endDateEarlierRangeStartDate = true; this.tempRange.startDate = endDate; } if (this.end && !dateCompare(this.tempRange.endDate, this.end)) { endDateEarlierRangeEndDate = true; this.tempRange.endDate = endDate; } } if (!this.hasTime) { start = this.displayRangeValue.startDate = this.tempRange.startDate; end = this.displayRangeValue.endDate = this.tempRange.endDate; } else { if (startDateLaterRangeStartDate) { this.tempRange.startTime = startTime || getDefaultSecond(this.hideSecond); } else if (endDateEarlierRangeStartDate) { this.tempRange.startTime = endTime || getDefaultSecond(this.hideSecond); } if (!this.tempRange.startTime) { this.tempRange.startTime = getTime(Date.now(), this.hideSecond); } if (startDateLaterRangeEndDate) { this.tempRange.endTime = startTime || getDefaultSecond(this.hideSecond); } else if (endDateEarlierRangeEndDate) { this.tempRange.endTime = endTime || getDefaultSecond(this.hideSecond); } if (!this.tempRange.endTime) { this.tempRange.endTime = getTime(Date.now(), this.hideSecond); } start = this.displayRangeValue.startDate = `${this.tempRange.startDate} ${this.tempRange.startTime}`; end = this.displayRangeValue.endDate = `${this.tempRange.endDate} ${this.tempRange.endTime}`; } if (!dateCompare(start, end)) { [start, end] = [end, start]; } this.displayRangeValue.startDate = start; this.displayRangeValue.endDate = end; const displayRange = [start, end]; this.setEmit(displayRange); this.pickerVisible = false; }, handleStartAndEnd(before, after, temp = false) { if (!(before && after)) return; const type2 = temp ? "tempRange" : "range"; const isStartEarlierEnd = dateCompare(before, after); this[type2].startDate = isStartEarlierEnd ? before : after; this[type2].endDate = isStartEarlierEnd ? after : before; }, /** * 比较时间大小 */ dateCompare(startDate, endDate) { startDate = new Date(startDate.replace("-", "/").replace("-", "/")); endDate = new Date(endDate.replace("-", "/").replace("-", "/")); return startDate <= endDate; }, /** * 比较时间差 */ diffDate(startDate, endDate) { startDate = new Date(startDate.replace("-", "/").replace("-", "/")); endDate = new Date(endDate.replace("-", "/").replace("-", "/")); const diff = (endDate - startDate) / (24 * 60 * 60 * 1e3); return Math.abs(diff); }, clear(needEmit = true) { if (!this.isRange) { this.displayValue = ""; this.inputDate = ""; this.pickerTime = ""; if (this.isPhone) { this.$refs.mobile && this.$refs.mobile.clearCalender(); } else { this.$refs.pcSingle && this.$refs.pcSingle.clearCalender(); } if (needEmit) { this.$emit("change", ""); this.$emit("input", ""); this.$emit("update:modelValue", ""); } } else { this.displayRangeValue.startDate = ""; this.displayRangeValue.endDate = ""; this.tempRange.startDate = ""; this.tempRange.startTime = ""; this.tempRange.endDate = ""; this.tempRange.endTime = ""; if (this.isPhone) { this.$refs.mobile && this.$refs.mobile.clearCalender(); } else { this.$refs.left && this.$refs.left.clearCalender(); this.$refs.right && this.$refs.right.clearCalender(); this.$refs.right && this.$refs.right.changeMonth("next"); } if (needEmit) { this.$emit("change", []); this.$emit("input", []); this.$emit("update:modelValue", []); } } } } }; function _sfc_render$P(_ctx, _cache, $props, $setup, $data, $options) { const _component_uni_icons = resolveEasycom(vue.resolveDynamicComponent("uni-icons"), __easycom_0$3); const _component_time_picker = vue.resolveComponent("time-picker"); const _component_Calendar = vue.resolveComponent("Calendar"); return vue.openBlock(), vue.createElementBlock("view", { class: "uni-date" }, [ vue.createElementVNode("view", { class: "uni-date-editor", onClick: _cache[1] || (_cache[1] = (...args) => $options.show && $options.show(...args)) }, [ vue.renderSlot(_ctx.$slots, "default", {}, () => [ vue.createElementVNode( "view", { class: vue.normalizeClass(["uni-date-editor--x", { "uni-date-editor--x__disabled": $props.disabled, "uni-date-x--border": $props.border }]) }, [ !$data.isRange ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "uni-date-x uni-date-single" }, [ vue.createVNode(_component_uni_icons, { class: "icon-calendar", type: "calendar", color: "#c0c4cc", size: "22" }), vue.createElementVNode( "view", { class: "uni-date__x-input" }, vue.toDisplayString($data.displayValue || $options.singlePlaceholderText), 1 /* TEXT */ ) ])) : (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "uni-date-x uni-date-range" }, [ vue.createVNode(_component_uni_icons, { class: "icon-calendar", type: "calendar", color: "#c0c4cc", size: "22" }), vue.createElementVNode( "view", { class: "uni-date__x-input text-center" }, vue.toDisplayString($data.displayRangeValue.startDate || $options.startPlaceholderText), 1 /* TEXT */ ), vue.createElementVNode( "view", { class: "range-separator" }, vue.toDisplayString($props.rangeSeparator), 1 /* TEXT */ ), vue.createElementVNode( "view", { class: "uni-date__x-input text-center" }, vue.toDisplayString($data.displayRangeValue.endDate || $options.endPlaceholderText), 1 /* TEXT */ ) ])), $options.showClearIcon ? (vue.openBlock(), vue.createElementBlock("view", { key: 2, class: "uni-date__icon-clear", onClick: _cache[0] || (_cache[0] = vue.withModifiers((...args) => $options.clear && $options.clear(...args), ["stop"])) }, [ vue.createVNode(_component_uni_icons, { type: "clear", color: "#c0c4cc", size: "22" }) ])) : vue.createCommentVNode("v-if", true) ], 2 /* CLASS */ ) ], true) ]), vue.withDirectives(vue.createElementVNode( "view", { class: "uni-date-mask--pc", onClick: _cache[2] || (_cache[2] = (...args) => $options.close && $options.close(...args)) }, null, 512 /* NEED_PATCH */ ), [ [vue.vShow, $data.pickerVisible] ]), !$data.isPhone ? vue.withDirectives((vue.openBlock(), vue.createElementBlock( "view", { key: 0, ref: "datePicker", class: "uni-date-picker__container" }, [ !$data.isRange ? (vue.openBlock(), vue.createElementBlock( "view", { key: 0, class: "uni-date-single--x", style: vue.normalizeStyle($data.pickerPositionStyle) }, [ vue.createElementVNode("view", { class: "uni-popper__arrow" }), $data.hasTime ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "uni-date-changed popup-x-header" }, [ vue.withDirectives(vue.createElementVNode("input", { class: "uni-date__input text-center", type: "text", "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => $data.inputDate = $event), placeholder: $options.selectDateText }, null, 8, ["placeholder"]), [ [vue.vModelText, $data.inputDate] ]), vue.createVNode(_component_time_picker, { type: "time", modelValue: $data.pickerTime, "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => $data.pickerTime = $event), border: false, disabled: !$data.inputDate, start: $options.timepickerStartTime, end: $options.timepickerEndTime, hideSecond: $props.hideSecond, style: { "width": "100%" } }, { default: vue.withCtx(() => [ vue.withDirectives(vue.createElementVNode("input", { class: "uni-date__input text-center", type: "text", "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => $data.pickerTime = $event), placeholder: $options.selectTimeText, disabled: !$data.inputDate }, null, 8, ["placeholder", "disabled"]), [ [vue.vModelText, $data.pickerTime] ]) ]), _: 1 /* STABLE */ }, 8, ["modelValue", "disabled", "start", "end", "hideSecond"]) ])) : vue.createCommentVNode("v-if", true), vue.createVNode(_component_Calendar, { ref: "pcSingle", showMonth: false, "start-date": $data.calendarRange.startDate, "end-date": $data.calendarRange.endDate, date: $data.calendarDate, onChange: $options.singleChange, "default-value": $props.defaultValue, style: { "padding": "0 8px" } }, null, 8, ["start-date", "end-date", "date", "onChange", "default-value"]), $data.hasTime ? (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "popup-x-footer" }, [ vue.createElementVNode( "text", { class: "confirm-text", onClick: _cache[6] || (_cache[6] = (...args) => $options.confirmSingleChange && $options.confirmSingleChange(...args)) }, vue.toDisplayString($options.okText), 1 /* TEXT */ ) ])) : vue.createCommentVNode("v-if", true) ], 4 /* STYLE */ )) : (vue.openBlock(), vue.createElementBlock( "view", { key: 1, class: "uni-date-range--x", style: vue.normalizeStyle($data.pickerPositionStyle) }, [ vue.createElementVNode("view", { class: "uni-popper__arrow" }), $data.hasTime ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "popup-x-header uni-date-changed" }, [ vue.createElementVNode("view", { class: "popup-x-header--datetime" }, [ vue.withDirectives(vue.createElementVNode("input", { class: "uni-date__input uni-date-range__input", type: "text", "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => $data.tempRange.startDate = $event), placeholder: $options.startDateText }, null, 8, ["placeholder"]), [ [vue.vModelText, $data.tempRange.startDate] ]), vue.createVNode(_component_time_picker, { type: "time", modelValue: $data.tempRange.startTime, "onUpdate:modelValue": _cache[9] || (_cache[9] = ($event) => $data.tempRange.startTime = $event), start: $options.timepickerStartTime, border: false, disabled: !$data.tempRange.startDate, hideSecond: $props.hideSecond }, { default: vue.withCtx(() => [ vue.withDirectives(vue.createElementVNode("input", { class: "uni-date__input uni-date-range__input", type: "text", "onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => $data.tempRange.startTime = $event), placeholder: $options.startTimeText, disabled: !$data.tempRange.startDate }, null, 8, ["placeholder", "disabled"]), [ [vue.vModelText, $data.tempRange.startTime] ]) ]), _: 1 /* STABLE */ }, 8, ["modelValue", "start", "disabled", "hideSecond"]) ]), vue.createVNode(_component_uni_icons, { type: "arrowthinright", color: "#999", style: { "line-height": "40px" } }), vue.createElementVNode("view", { class: "popup-x-header--datetime" }, [ vue.withDirectives(vue.createElementVNode("input", { class: "uni-date__input uni-date-range__input", type: "text", "onUpdate:modelValue": _cache[10] || (_cache[10] = ($event) => $data.tempRange.endDate = $event), placeholder: $options.endDateText }, null, 8, ["placeholder"]), [ [vue.vModelText, $data.tempRange.endDate] ]), vue.createVNode(_component_time_picker, { type: "time", modelValue: $data.tempRange.endTime, "onUpdate:modelValue": _cache[12] || (_cache[12] = ($event) => $data.tempRange.endTime = $event), end: $options.timepickerEndTime, border: false, disabled: !$data.tempRange.endDate, hideSecond: $props.hideSecond }, { default: vue.withCtx(() => [ vue.withDirectives(vue.createElementVNode("input", { class: "uni-date__input uni-date-range__input", type: "text", "onUpdate:modelValue": _cache[11] || (_cache[11] = ($event) => $data.tempRange.endTime = $event), placeholder: $options.endTimeText, disabled: !$data.tempRange.endDate }, null, 8, ["placeholder", "disabled"]), [ [vue.vModelText, $data.tempRange.endTime] ]) ]), _: 1 /* STABLE */ }, 8, ["modelValue", "end", "disabled", "hideSecond"]) ]) ])) : vue.createCommentVNode("v-if", true), vue.createElementVNode("view", { class: "popup-x-body" }, [ vue.createVNode(_component_Calendar, { ref: "left", showMonth: false, "start-date": $data.calendarRange.startDate, "end-date": $data.calendarRange.endDate, range: true, pleStatus: $data.endMultipleStatus, onChange: $options.leftChange, onFirstEnterCale: $options.updateRightCale, style: { "padding": "0 8px" } }, null, 8, ["start-date", "end-date", "pleStatus", "onChange", "onFirstEnterCale"]), vue.createVNode(_component_Calendar, { ref: "right", showMonth: false, "start-date": $data.calendarRange.startDate, "end-date": $data.calendarRange.endDate, range: true, onChange: $options.rightChange, pleStatus: $data.startMultipleStatus, onFirstEnterCale: $options.updateLeftCale, style: { "padding": "0 8px", "border-left": "1px solid #F1F1F1" } }, null, 8, ["start-date", "end-date", "onChange", "pleStatus", "onFirstEnterCale"]) ]), $data.hasTime ? (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "popup-x-footer" }, [ vue.createElementVNode( "text", { onClick: _cache[13] || (_cache[13] = (...args) => $options.clear && $options.clear(...args)) }, vue.toDisplayString($options.clearText), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "confirm-text", onClick: _cache[14] || (_cache[14] = (...args) => $options.confirmRangeChange && $options.confirmRangeChange(...args)) }, vue.toDisplayString($options.okText), 1 /* TEXT */ ) ])) : vue.createCommentVNode("v-if", true) ], 4 /* STYLE */ )) ], 512 /* NEED_PATCH */ )), [ [vue.vShow, $data.pickerVisible] ]) : vue.createCommentVNode("v-if", true), $data.isPhone ? (vue.openBlock(), vue.createBlock(_component_Calendar, { key: 1, ref: "mobile", clearDate: false, date: $data.calendarDate, defTime: $options.mobileCalendarTime, "start-date": $data.calendarRange.startDate, "end-date": $data.calendarRange.endDate, selectableTimes: $options.mobSelectableTime, startPlaceholder: $props.startPlaceholder, endPlaceholder: $props.endPlaceholder, "default-value": $props.defaultValue, pleStatus: $data.endMultipleStatus, showMonth: false, range: $data.isRange, hasTime: $data.hasTime, insert: false, hideSecond: $props.hideSecond, onConfirm: $options.mobileChange, onMaskClose: $options.close }, null, 8, ["date", "defTime", "start-date", "end-date", "selectableTimes", "startPlaceholder", "endPlaceholder", "default-value", "pleStatus", "range", "hasTime", "hideSecond", "onConfirm", "onMaskClose"])) : vue.createCommentVNode("v-if", true) ]); } const __easycom_0$2 = /* @__PURE__ */ _export_sfc(_sfc_main$Q, [["render", _sfc_render$P], ["__scopeId", "data-v-9802168a"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue"]]); const _sfc_main$P = { __name: "after-sale", setup(__props, { expose: __expose }) { __expose(); const otherParams = vue.ref({ sender: "" }); const scrollRef = vue.ref(null); const refreshList = () => { var _a; (_a = scrollRef.value) == null ? void 0 : _a.resetUpScroll(); }; let dataList = vue.ref([{ date: "2024-10-24", orderNum: 423, auditNum: 293, trueNum: 323 }, { date: "2024-10-24", orderNum: 423, auditNum: 293, trueNum: 323 }, { date: "2024-10-24", orderNum: 423, auditNum: 293, trueNum: 323 }]); const updateList = (data) => { dataList.value = data; }; const form = vue.reactive({ startTime: "", endTime: "" }); const __returned__ = { otherParams, scrollRef, refreshList, get dataList() { return dataList; }, set dataList(v) { dataList = v; }, updateList, form, reactive: vue.reactive, PageScroll, ref: vue.ref, get onLoad() { return onLoad; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$O(_ctx, _cache, $props, $setup, $data, $options) { const _component_uni_datetime_picker = resolveEasycom(vue.resolveDynamicComponent("uni-datetime-picker"), __easycom_0$2); const _component_u_button = resolveEasycom(vue.resolveDynamicComponent("u-button"), __easycom_3$6); const _component_u_divider = resolveEasycom(vue.resolveDynamicComponent("u-divider"), __easycom_2$3); const _component_u_sticky = resolveEasycom(vue.resolveDynamicComponent("u-sticky"), __easycom_1$3); return vue.openBlock(), vue.createElementBlock("view", { class: "common-page", style: { "padding": "0" } }, [ vue.createVNode($setup["PageScroll"], { requestStr: "/team/token/shop/invite/page", onUpdateList: $setup.updateList, ref: "scrollRef", otherParams: $setup.otherParams }, { default: vue.withCtx(() => [ vue.createVNode(_component_u_sticky, { customNavHeight: 0 }, { default: vue.withCtx(() => [ vue.createElementVNode("view", { class: "search-area flex-d" }, [ vue.createElementVNode("view", { class: "flex-a mb-12" }, [ vue.createElementVNode("text", { class: "font-13 mr-10" }, "开始时间:"), vue.createVNode(_component_uni_datetime_picker, { type: "datetime", modelValue: $setup.form.startTime, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.form.startTime = $event) }, null, 8, ["modelValue"]) ]), vue.createElementVNode("view", { class: "flex-a" }, [ vue.createElementVNode("text", { class: "font-13 mr-10" }, "结束时间:"), vue.createVNode(_component_uni_datetime_picker, { type: "datetime", modelValue: $setup.form.endTime, "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.form.endTime = $event) }, null, 8, ["modelValue"]), vue.createVNode(_component_u_button, { type: "primary", "custom-style": "width:160rpx;height:72rpx;margin-left:10px" }, { default: vue.withCtx(() => [ vue.createTextVNode("查询") ]), _: 1 /* STABLE */ }) ]), vue.createVNode(_component_u_divider), vue.createElementVNode("view", { class: "flex-a" }, [ vue.createElementVNode("view", { class: "text-item flex-1" }, "审核日期"), vue.createElementVNode("view", { class: "text-item flex-1" }, "订单数量"), vue.createElementVNode("view", { class: "text-item flex-1" }, "审书数量"), vue.createElementVNode("view", { class: "text-item flex-1" }, "实际回收") ]) ]) ]), _: 1 /* STABLE */ }), vue.createElementVNode("view", { class: "list-con" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.dataList, (item, index2) => { return vue.openBlock(), vue.createElementBlock("view", { key: index2, class: "flex-a" }, [ vue.createElementVNode( "view", { class: "text-item flex-1" }, vue.toDisplayString(item.date), 1 /* TEXT */ ), vue.createElementVNode( "view", { class: "text-item flex-1" }, vue.toDisplayString(item.orderNum), 1 /* TEXT */ ), vue.createElementVNode( "view", { class: "text-item flex-1" }, vue.toDisplayString(item.auditNum), 1 /* TEXT */ ), vue.createElementVNode( "view", { class: "text-item flex-1" }, vue.toDisplayString(item.trueNum), 1 /* TEXT */ ) ]); }), 128 /* KEYED_FRAGMENT */ )) ]) ]), _: 1 /* STABLE */ }, 8, ["otherParams"]) ]); } const PagesIndexStatisticAfterSale = /* @__PURE__ */ _export_sfc(_sfc_main$P, [["render", _sfc_render$O], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/statistic/after-sale.vue"]]); const _sfc_main$O = { __name: "package", setup(__props, { expose: __expose }) { __expose(); const otherParams = vue.ref({ sender: "" }); const scrollRef = vue.ref(null); const refreshList = () => { var _a; (_a = scrollRef.value) == null ? void 0 : _a.resetUpScroll(); }; let dataList = vue.ref([{ date: "2024-10-24", orderNum: 423 }, { date: "2024-10-24", orderNum: 423 }, { date: "2024-10-24", orderNum: 423 }]); const updateList = (data) => { dataList.value = data; }; const __returned__ = { otherParams, scrollRef, refreshList, get dataList() { return dataList; }, set dataList(v) { dataList = v; }, updateList, reactive: vue.reactive, PageScroll, ref: vue.ref, get onLoad() { return onLoad; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$N(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_sticky = resolveEasycom(vue.resolveDynamicComponent("u-sticky"), __easycom_1$3); return vue.openBlock(), vue.createElementBlock("view", { class: "common-page", style: { "padding": "0" } }, [ vue.createVNode($setup["PageScroll"], { requestStr: "/team/token/shop/invite/page", onUpdateList: $setup.updateList, ref: "scrollRef", otherParams: $setup.otherParams }, { default: vue.withCtx(() => [ vue.createVNode(_component_u_sticky, { customNavHeight: 0 }, { default: vue.withCtx(() => [ vue.createElementVNode("view", { class: "search-area flex-a" }, [ vue.createElementVNode("view", { class: "text-item flex-1" }, "审核日期"), vue.createElementVNode("view", { class: "text-item flex-1" }, "数量") ]) ]), _: 1 /* STABLE */ }), vue.createElementVNode("view", { class: "list-con" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.dataList, (item, index2) => { return vue.openBlock(), vue.createElementBlock("view", { key: index2, class: "flex-a" }, [ vue.createElementVNode( "view", { class: "text-item flex-1" }, vue.toDisplayString(item.date), 1 /* TEXT */ ), vue.createElementVNode( "view", { class: "text-item flex-1" }, vue.toDisplayString(item.orderNum), 1 /* TEXT */ ) ]); }), 128 /* KEYED_FRAGMENT */ )) ]) ]), _: 1 /* STABLE */ }, 8, ["otherParams"]) ]); } const PagesIndexStatisticPackage = /* @__PURE__ */ _export_sfc(_sfc_main$O, [["render", _sfc_render$N], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/statistic/package.vue"]]); const _sfc_main$N = { name: "GoodIn" }; function _sfc_render$M(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createCommentVNode(" 开发中提示 "), vue.createElementVNode("view", { class: "developing" }, [ vue.createElementVNode("text", null, "开发中") ]) ]); } const PagesIndexWmsMediumIn = /* @__PURE__ */ _export_sfc(_sfc_main$N, [["render", _sfc_render$M], ["__scopeId", "data-v-04e21b6f"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/wms/medium-in.vue"]]); const _sfc_main$M = { name: "GoodIn" }; function _sfc_render$L(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createCommentVNode(" 开发中提示 "), vue.createElementVNode("view", { class: "developing" }, [ vue.createElementVNode("text", null, "开发中") ]) ]); } const PagesIndexWmsGoodIn = /* @__PURE__ */ _export_sfc(_sfc_main$M, [["render", _sfc_render$L], ["__scopeId", "data-v-701c6544"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/wms/good-in.vue"]]); const _sfc_main$L = { name: "GoodIn" }; function _sfc_render$K(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createCommentVNode(" 开发中提示 "), vue.createElementVNode("view", { class: "developing" }, [ vue.createElementVNode("text", null, "开发中") ]) ]); } const PagesIndexWmsSecondaryIn = /* @__PURE__ */ _export_sfc(_sfc_main$L, [["render", _sfc_render$K], ["__scopeId", "data-v-52deef37"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/wms/secondary-in.vue"]]); const MIN_DISTANCE = 10; function getDirection(x, y) { if (x > y && x > MIN_DISTANCE) { return "horizontal"; } if (y > x && y > MIN_DISTANCE) { return "vertical"; } return ""; } const touch = { methods: { getTouchPoint(e) { if (!e) { return { x: 0, y: 0 }; } if (e.touches && e.touches[0]) { return { x: e.touches[0].pageX, y: e.touches[0].pageY }; } if (e.changedTouches && e.changedTouches[0]) { return { x: e.changedTouches[0].pageX, y: e.changedTouches[0].pageY }; } return { x: e.clientX || 0, y: e.clientY || 0 }; }, resetTouchStatus() { this.direction = ""; this.deltaX = 0; this.deltaY = 0; this.offsetX = 0; this.offsetY = 0; }, touchStart(event) { this.resetTouchStatus(); const touch2 = this.getTouchPoint(event); this.startX = touch2.x; this.startY = touch2.y; }, touchMove(event) { const touch2 = this.getTouchPoint(event); this.deltaX = touch2.x - this.startX; this.deltaY = touch2.y - this.startY; this.offsetX = Math.abs(this.deltaX); this.offsetY = Math.abs(this.deltaY); this.direction = this.direction || getDirection(this.offsetX, this.offsetY); } } }; const props$7 = { props: { // 控制打开或者关闭 show: { type: Boolean, default: props$E.swipeActionItem.show }, // 标识符,如果是v-for,可用index索引值 name: { type: [String, Number], default: props$E.swipeActionItem.name }, // 是否禁用 disabled: { type: Boolean, default: props$E.swipeActionItem.disabled }, // 是否自动关闭其他swipe按钮组 autoClose: { type: Boolean, default: props$E.swipeActionItem.autoClose }, // 滑动距离阈值,只有大于此值,才被认为是要打开菜单 threshold: { type: Number, default: props$E.swipeActionItem.threshold }, // 右侧按钮内容 options: { type: Array, default() { return uni.$u.props.swipeActionItem.rightOptions; } }, // 动画过渡时间,单位ms duration: { type: [String, Number], default: props$E.swipeActionItem.duration } } }; const wxs = { methods: { // 关闭时执行 closeHandler() { this.status = "close"; }, setState(status) { this.status = status; }, closeOther() { this.parent && this.parent.closeOther(this); } } }; const block0 = (Comp) => { (Comp.$wxs || (Comp.$wxs = [])).push("wxs"); (Comp.$wxsModules || (Comp.$wxsModules = {}))["wxs"] = "f1d6d7d8"; }; const _sfc_main$K = { name: "u-swipe-action-item", emits: ["click"], mixins: [mpMixin, mixin, props$7, touch], mixins: [mpMixin, mixin, props$7, touch, wxs], data() { return { // 按钮的尺寸信息 size: {}, // 父组件u-swipe-action的参数 parentData: { autoClose: true }, // 当前状态,open-打开,close-关闭 status: "close" }; }, watch: { // 由于wxs无法直接读取外部的值,需要在外部值变化时,重新执行赋值逻辑 wxsInit(newValue, oldValue) { this.queryRect(); } }, computed: { wxsInit() { return [this.disabled, this.autoClose, this.threshold, this.options, this.duration]; } }, mounted() { this.init(); }, methods: { init() { this.updateParentData(); uni.$u.sleep().then(() => { this.queryRect(); }); }, updateParentData() { this.getParentData("u-swipe-action"); }, // 查询节点 queryRect() { this.$uGetRect(".u-swipe-action-item__right__button", true).then((buttons) => { this.size = { buttons, show: this.show, disabled: this.disabled, threshold: this.threshold, duration: this.duration }; }); }, // 按钮被点击 buttonClickHandler(item, index2) { this.$emit("click", { index: index2, name: this.name }); } } }; function _sfc_render$J(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); return vue.openBlock(), vue.createElementBlock( "view", { class: "u-swipe-action-item", ref: "u-swipe-action-item" }, [ vue.createElementVNode("view", { class: "u-swipe-action-item__right" }, [ vue.renderSlot(_ctx.$slots, "button", {}, () => [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(_ctx.options, (item, index2) => { return vue.openBlock(), vue.createElementBlock("view", { key: index2, class: "u-swipe-action-item__right__button", ref_for: true, ref: `u-swipe-action-item__right__button-${index2}`, style: vue.normalizeStyle([{ alignItems: item.style && item.style.borderRadius ? "center" : "stretch" }]), onClick: ($event) => $options.buttonClickHandler(item, index2) }, [ vue.createElementVNode( "view", { class: "u-swipe-action-item__right__button__wrapper", style: vue.normalizeStyle([{ backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : "#C7C6CD", borderRadius: item.style && item.style.borderRadius ? item.style.borderRadius : "0", padding: item.style && item.style.borderRadius ? "0" : "0 15px" }, item.style]) }, [ item.icon ? (vue.openBlock(), vue.createBlock(_component_u_icon, { key: 0, name: item.icon, color: item.style && item.style.color ? item.style.color : "#ffffff", size: item.iconSize ? _ctx.$u.addUnit(item.iconSize) : item.style && item.style.fontSize ? _ctx.$u.getPx(item.style.fontSize) * 1.2 : 17, customStyle: { marginRight: item.text ? "2px" : 0 } }, null, 8, ["name", "color", "size", "customStyle"])) : vue.createCommentVNode("v-if", true), item.text ? (vue.openBlock(), vue.createElementBlock( "text", { key: 1, class: "u-swipe-action-item__right__button__wrapper__text u-line-1", style: vue.normalizeStyle([{ color: item.style && item.style.color ? item.style.color : "#ffffff", fontSize: item.style && item.style.fontSize ? item.style.fontSize : "16px", lineHeight: item.style && item.style.fontSize ? item.style.fontSize : "16px" }]) }, vue.toDisplayString(item.text), 5 /* TEXT, STYLE */ )) : vue.createCommentVNode("v-if", true) ], 4 /* STYLE */ ) ], 12, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ], true) ]), vue.createElementVNode("view", { class: "u-swipe-action-item__content", onTouchstart: _cache[0] || (_cache[0] = (...args) => _ctx.wxs.touchstart && _ctx.wxs.touchstart(...args)), onTouchmove: _cache[1] || (_cache[1] = (...args) => _ctx.wxs.touchmove && _ctx.wxs.touchmove(...args)), onTouchend: _cache[2] || (_cache[2] = (...args) => _ctx.wxs.touchend && _ctx.wxs.touchend(...args)), status: vue.wp($data.status), "change:status": _ctx.wxs.statusChange, size: vue.wp($data.size), "change:size": _ctx.wxs.sizeChange }, [ vue.renderSlot(_ctx.$slots, "default", {}, void 0, true) ], 40, ["status", "change:status", "size", "change:size"]) ], 512 /* NEED_PATCH */ ); } if (typeof block0 === "function") block0(_sfc_main$K); const __easycom_1 = /* @__PURE__ */ _export_sfc(_sfc_main$K, [["render", _sfc_render$J], ["__scopeId", "data-v-ed3ce04a"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-swipe-action-item/u-swipe-action-item.vue"]]); const props$6 = { props: { // 是否自动关闭其他swipe按钮组 autoClose: { type: Boolean, default: props$E.swipeAction.autoClose } } }; const _sfc_main$J = { name: "u-swipe-action", mixins: [mpMixin, mixin, props$6], data() { return {}; }, provide() { return { swipeAction: this }; }, computed: { // 这里computed的变量,都是子组件u-swipe-action-item需要用到的,由于头条小程序的兼容性差异,子组件无法实时监听父组件参数的变化 // 所以需要手动通知子组件,这里返回一个parentData变量,供watch监听,在其中去通知每一个子组件重新从父组件(u-swipe-action-item) // 拉取父组件新的变化后的参数 parentData() { return [this.autoClose]; } }, watch: { // 当父组件需要子组件需要共享的参数发生了变化,手动通知子组件 parentData() { if (this.children.length) { this.children.map((child) => { typeof child.updateParentData === "function" && child.updateParentData(); }); } } }, created() { this.children = []; }, methods: { closeOther(child) { if (this.autoClose) { this.children.map((item, index2) => { if (child !== item) { item.closeHandler(); } }); } } } }; function _sfc_render$I(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "u-swipe-action" }, [ vue.renderSlot(_ctx.$slots, "default") ]); } const __easycom_2 = /* @__PURE__ */ _export_sfc(_sfc_main$J, [["render", _sfc_render$I], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-swipe-action/u-swipe-action.vue"]]); const _sfc_main$I = { __name: "BadItem", props: { data: { type: Object, required: true, default: () => ({ orderNo: "", badCount: "", logisticsNo: "", checkDate: "", operator: "" }) } }, emits: ["delete", "edit"], setup(__props, { expose: __expose, emit: __emit }) { __expose(); const props2 = __props; const emit2 = __emit; const options = vue.ref([ { text: "删除", style: { backgroundColor: "#ff4444" } } ]); const handleAction = (e) => { if (e.index === 0) { uni.showModal({ title: "提示", content: "确定要删除该订单吗?", success: (res2) => { if (res2.confirm) { emit2("delete"); } } }); } }; const __returned__ = { props: props2, emit: emit2, options, handleAction, ref: vue.ref }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$H(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); const _component_u_swipe_action_item = resolveEasycom(vue.resolveDynamicComponent("u-swipe-action-item"), __easycom_1); const _component_u_swipe_action = resolveEasycom(vue.resolveDynamicComponent("u-swipe-action"), __easycom_2); return vue.openBlock(), vue.createElementBlock("view", { class: "bad-item" }, [ vue.createVNode(_component_u_swipe_action, null, { default: vue.withCtx(() => [ vue.createVNode(_component_u_swipe_action_item, { options: $setup.options, onClick: $setup.handleAction }, { default: vue.withCtx(() => [ vue.createElementVNode("view", { class: "item-content" }, [ vue.createElementVNode("view", { class: "item-row" }, [ vue.createElementVNode("text", { class: "label" }, "订单编号:"), vue.createElementVNode( "text", { class: "value" }, vue.toDisplayString($props.data.orderId), 1 /* TEXT */ ), vue.createVNode(_component_u_icon, { name: "edit-pen", color: "#4CAF50", size: "20", class: "edit-icon", onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("edit")) }) ]), vue.createElementVNode("view", { class: "item-row" }, [ vue.createElementVNode("text", { class: "label" }, "不良数量:"), vue.createElementVNode( "text", { class: "value" }, vue.toDisplayString($props.data.badNum), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "item-row" }, [ vue.createElementVNode("text", { class: "label" }, "物流单号:"), vue.createElementVNode( "text", { class: "value" }, vue.toDisplayString($props.data.waybillCode), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "item-row" }, [ vue.createElementVNode("text", { class: "label" }, "验货完成日期:"), vue.createElementVNode( "text", { class: "value" }, vue.toDisplayString($props.data.auditFinishTime), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "item-row" }, [ vue.createElementVNode("text", { class: "label" }, "录入人:"), vue.createElementVNode( "text", { class: "value" }, vue.toDisplayString($props.data.auditUserName), 1 /* TEXT */ ) ]) ]) ]), _: 1 /* STABLE */ }, 8, ["options"]) ]), _: 1 /* STABLE */ }) ]); } const BadItem = /* @__PURE__ */ _export_sfc(_sfc_main$I, [["render", _sfc_render$H], ["__scopeId", "data-v-93494456"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/wms/components/BadItem.vue"]]); class VolumeTTS { constructor(opts) { __publicField(this, "ttsParams", { lang: "zh-CN", speed: 1, // 将 0-10 转换为 0-1 pitch: 1, // 将 0-10 转换为 0-1 volume: 1 }); __publicField(this, "TTSModule"); __publicField(this, "platform", uni.getSystemInfoSync().platform); if (opts) this.ttsParams = opts; this.init(); } init() { this.TTSModule = requireNativePlugin("nrb-tts-plugin"); this.TTSModule && this.TTSModule.init({ "lang": "ZH", "country": "CN" }, (res2) => { if (res2.success == 0) { formatAppLog("log", "at utils/VolumeTTS.js:27", "TTS初始化成功"); } }); } speak(text) { formatAppLog("log", "at utils/VolumeTTS.js:45", this.platform, "dsad"); let opts = this.platform == "ios" ? { "rate": this.ttsParams.speed, "lang": "zh-CN", "volume": 1 } : { "pitch": this.ttsParams.pitch, "speechRate": this.ttsParams.speed, "queueMode": 1 }; formatAppLog("log", "at utils/VolumeTTS.js:57", this.TTSModule, "this.TTSModule"); this.TTSModule.speak(text, opts, (e) => { formatAppLog("log", "at utils/VolumeTTS.js:59", e, "读取成功"); }); } stop() { if (this.TTSModule) { this.TTSModule.stop(); } } } const _sfc_main$H = { __name: "RemarkDialog", props: { visible: { type: Boolean, default: false }, initialValue: { type: String, default: "" } }, emits: ["update:visible", "confirm"], setup(__props, { expose: __expose, emit: __emit }) { __expose(); const props2 = __props; const emit2 = __emit; const remarkText = vue.ref(""); const quickTags = vue.ref(["少书", "多书", "子母件", "书单不符"]); vue.watch(() => props2.visible, (newVal) => { if (newVal) { remarkText.value = props2.initialValue; } }); const appendTag = (tag) => { remarkText.value += remarkText.value ? " " + tag : tag; }; const onClose = () => { emit2("update:visible", false); }; const onConfirm = () => { emit2("confirm", remarkText.value); onClose(); }; const __returned__ = { props: props2, emit: emit2, remarkText, quickTags, appendTag, onClose, onConfirm, ref: vue.ref, watch: vue.watch }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$G(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_textarea = resolveEasycom(vue.resolveDynamicComponent("u-textarea"), __easycom_3$2); const _component_u_tag = resolveEasycom(vue.resolveDynamicComponent("u-tag"), __easycom_2$4); const _component_u_button = resolveEasycom(vue.resolveDynamicComponent("u-button"), __easycom_3$6); const _component_u_popup = resolveEasycom(vue.resolveDynamicComponent("u-popup"), __easycom_3$4); return vue.openBlock(), vue.createBlock(_component_u_popup, { show: $props.visible, onClose: $setup.onClose, mode: "center", round: "10", closeOnClickOverlay: false }, { default: vue.withCtx(() => [ vue.createElementVNode("view", { class: "remark-dialog" }, [ vue.createElementVNode("view", { class: "dialog-title" }, "编辑备注"), vue.createCommentVNode(" 备注输入框 "), vue.createElementVNode("view", { class: "dialog-content mb-30" }, [ vue.createVNode(_component_u_textarea, { modelValue: $setup.remarkText, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.remarkText = $event), placeholder: "请输入", maxlength: 200, height: "100", count: "" }, null, 8, ["modelValue"]), vue.createCommentVNode(" 快速输入标签 "), vue.createElementVNode("view", { class: "quick-tags mt-10" }, [ vue.createElementVNode("text", { class: "common-title" }, "快速填入"), vue.createElementVNode("view", { class: "tags-container flex-w mt-20" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.quickTags, (tag, index2) => { return vue.openBlock(), vue.createBlock(_component_u_tag, { key: index2, text: tag, plain: "", size: "mini", type: "primary", onClick: ($event) => $setup.appendTag(tag), class: "tag-item" }, null, 8, ["text", "onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ]) ]) ]), vue.createCommentVNode(" 底部按钮 "), vue.createElementVNode("view", { class: "dialog-footer" }, [ vue.createVNode(_component_u_button, { plain: "", onClick: $setup.onClose, class: "footer-btn" }, { default: vue.withCtx(() => [ vue.createTextVNode("取消") ]), _: 1 /* STABLE */ }), vue.createVNode(_component_u_button, { type: "primary", onClick: $setup.onConfirm, class: "footer-btn" }, { default: vue.withCtx(() => [ vue.createTextVNode("确定") ]), _: 1 /* STABLE */ }) ]) ]) ]), _: 1 /* STABLE */ }, 8, ["show"]); } const RemarkDialog = /* @__PURE__ */ _export_sfc(_sfc_main$H, [["render", _sfc_render$G], ["__scopeId", "data-v-73050f50"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/wms/components/RemarkDialog.vue"]]); const _sfc_main$G = { __name: "bad-in", setup(__props, { expose: __expose }) { __expose(); const waybillCode = vue.ref(); const formData = vue.reactive({ godownName: "", godownId: "", positionCode: "" }); const ordersMap = vue.ref([]); const codeMap = vue.ref([]); function getDetailByCode2(code2) { if (codeMap.value.includes(code2)) { uni.$u.ttsModule.speak("重复扫描"); return; } uni.$u.http.get("/app/stock/searchOrder?waybillCode=" + code2).then((res2) => { if (res2.code == 200) { ordersMap.value.unshift(res2.data); codeMap.value.push(code2); } else if (res2.code == 601) { uni.$u.ttsModule.speak(res2.msg); uni.showModal({ title: "提示", content: res2.msg, showCancel: false }); } else { uni.$u.toast(res2.msg); } }); } const remarkVisible = vue.ref(false); const currentRemark = vue.ref(""); const currentEditIndex = vue.ref(-1); const goBack = () => { if (ordersMap.value.length > 0) { uni.showModal({ title: "退出确认", content: "是否确认放弃本次入库?", success: (res2) => { if (res2.confirm) { uni.navigateBack(); } } }); } else { uni.navigateBack(); } }; const onSubmit = () => { if (!formData.godownId || !formData.positionCode) { uni.$u.toast("请先选择仓库和库位"); uni.$u.ttsModule.speak("请先选择仓库和库位"); return; } uni.showModal({ title: "提交确认", content: "是否确认提交本次入库?", success: (res2) => { if (res2.confirm) { handleSubmitConfirm(); } } }); }; const handleSubmitConfirm = async () => { uni.showLoading({ title: "提交中..." }); let orderInfo = ordersMap.value.map((item) => { return { orderId: item.orderId, waybillCode: item.waybillCode, bookNum: item.badNum, remark: item.remark }; }); if (orderInfo.length == 0) { uni.hideLoading(); uni.$u.ttsModule.speak("请添加订单数据"); return; } uni.$u.http.post("/app/stock/addBatch", { godownId: formData.godownId, positionCode: formData.positionCode, orderInfo }).then((res2) => { if (res2.code == 200) { uni.$u.toast("入库成功"); uni.$u.ttsModule.speak("入库成功"); clearData(); } else { uni.$u.toast(res2.msg); } }).finally(() => { uni.hideLoading(); }); }; const clearData = () => { ordersMap.value.length = 0; waybillCode.value = ""; formData.godownName = ""; formData.positionCode = ""; formData.godownId = ""; }; const editOrder = (index2) => { openRemarkDialog(index2); }; const openScan = () => { uni.scanCode({ scanType: ["barCode"], success: (res2) => { getDetailByCode2(res2.result); }, fail: (err) => { uni.showToast({ title: "扫码失败", icon: "error" }); } }); }; function selectLocation() { if (!formData.godownId) { uni.$u.toast("请先选择仓库"); uni.$u.ttsModule.speak("请先选择仓库"); return; } uni.navigateTo({ url: "/pages/index/wms/location-select?godownId=" + formData.godownId + "&positionCode=" + formData.positionCode }); } const deleteOrder = (index2) => { ordersMap.value.splice(index2, 1); }; vue.onMounted(() => { uni.$u.useGlobalEvent((e) => { if (e.barcode) { getDetailByCode2(e.barcode); } }); uni.$on("updateLocation", (locationCode) => { formData.positionCode = locationCode; }); uni.$on("updateWarehouse", (data) => { formData.godownName = data.godownName; formData.godownId = data.id; }); }); vue.onUnmounted(() => { uni.$off("updateLocation"); uni.$off("updateWarehouse"); }); const openRemarkDialog = (index2, remark = "") => { currentEditIndex.value = index2; currentRemark.value = remark; remarkVisible.value = true; }; const handleRemarkConfirm = (remark) => { if (currentEditIndex.value >= 0) { ordersMap.value[currentEditIndex.value].remark = remark; } currentEditIndex.value = -1; currentRemark.value = ""; }; const selectWarehouse = () => { uni.navigateTo({ url: "/pages/index/wms/warehouse-select?godownId=" + formData.godownId }); }; const __returned__ = { waybillCode, formData, ordersMap, codeMap, getDetailByCode: getDetailByCode2, remarkVisible, currentRemark, currentEditIndex, goBack, onSubmit, handleSubmitConfirm, clearData, editOrder, openScan, selectLocation, deleteOrder, openRemarkDialog, handleRemarkConfirm, selectWarehouse, ref: vue.ref, reactive: vue.reactive, onMounted: vue.onMounted, onUnmounted: vue.onUnmounted, BadItem, get VolumeTTS() { return VolumeTTS; }, RemarkDialog }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$F(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); const _component_u_text = resolveEasycom(vue.resolveDynamicComponent("u-text"), __easycom_1$8); const _component_u_navbar = resolveEasycom(vue.resolveDynamicComponent("u-navbar"), __easycom_2$2); const _component_u_form_item = resolveEasycom(vue.resolveDynamicComponent("u-form-item"), __easycom_1$a); const _component_u_input = resolveEasycom(vue.resolveDynamicComponent("u-input"), __easycom_0$f); const _component_u_form = resolveEasycom(vue.resolveDynamicComponent("u-form"), __easycom_2$7); const _component_u_search = resolveEasycom(vue.resolveDynamicComponent("u-search"), __easycom_4$2); return vue.openBlock(), vue.createElementBlock("view", { class: "common-page", style: { "padding": "0" } }, [ vue.createCommentVNode(" 顶部导航栏 "), vue.createElementVNode("view", { class: "header" }, [ vue.createVNode(_component_u_navbar, { title: "不良入库", border: false, fixed: "", "safe-area-inset-top": "" }, { left: vue.withCtx(() => [ vue.createVNode(_component_u_icon, { name: "arrow-left", color: "#333333", size: "20", onClick: $setup.goBack }) ]), right: vue.withCtx(() => [ vue.createVNode(_component_u_text, { type: "primary", text: "提交", onClick: $setup.onSubmit }) ]), _: 1 /* STABLE */ }) ]), vue.createCommentVNode(" 主要内容区域 "), vue.createElementVNode("view", { class: "content" }, [ vue.createCommentVNode(" 订单基本信息 "), vue.createElementVNode("view", { class: "info-section" }, [ vue.createVNode(_component_u_form, { model: $setup.formData, ref: "formRef", "label-width": "80px", "label-position": "left" }, { default: vue.withCtx(() => [ vue.createVNode(_component_u_form_item, { label: "订单总数", required: "" }, { default: vue.withCtx(() => [ vue.createElementVNode( "span", null, vue.toDisplayString($setup.ordersMap.length), 1 /* TEXT */ ) ]), _: 1 /* STABLE */ }), vue.createVNode(_component_u_form_item, { label: "仓库", required: "" }, { default: vue.withCtx(() => [ vue.createElementVNode("view", { onClick: $setup.selectWarehouse, style: { "width": "100%" } }, [ vue.createVNode(_component_u_input, { modelValue: $setup.formData.godownName, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.formData.godownName = $event), readonly: "", "custom-style": "font-size:32rpx", placeholder: "请选择仓库", suffixIcon: "arrow-right" }, null, 8, ["modelValue"]) ]) ]), _: 1 /* STABLE */ }), vue.createVNode(_component_u_form_item, { label: "库位", required: "" }, { default: vue.withCtx(() => [ vue.createElementVNode("view", { onClick: $setup.selectLocation, style: { "width": "100%" } }, [ vue.createVNode(_component_u_input, { modelValue: $setup.formData.positionCode, "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.formData.positionCode = $event), readonly: "", "custom-style": "font-size:32rpx", placeholder: "请选择库位", suffixIcon: "arrow-right" }, null, 8, ["modelValue"]) ]) ]), _: 1 /* STABLE */ }) ]), _: 1 /* STABLE */ }, 8, ["model"]) ]), vue.createCommentVNode(" 订单列表 "), vue.createElementVNode("view", { class: "order-list" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.ordersMap, (order, index2) => { return vue.openBlock(), vue.createBlock($setup["BadItem"], { key: index2, data: order, onDelete: ($event) => $setup.deleteOrder(index2), onEdit: ($event) => $setup.editOrder(index2) }, null, 8, ["data", "onDelete", "onEdit"]); }), 128 /* KEYED_FRAGMENT */ )) ]), vue.createCommentVNode(" 底部扫码输入框 "), vue.createElementVNode("view", { class: "fixed-bottom pad-20", style: { "background": "#ffffff" } }, [ vue.createVNode(_component_u_search, { placeholder: "请输入物流单号", searchIconSize: 24, bgColor: "#f6f7f6", onSearch: _cache[2] || (_cache[2] = ($event) => $setup.getDetailByCode($setup.waybillCode)), modelValue: $setup.waybillCode, "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => $setup.waybillCode = $event), "custom-style": "font-size:32rpx", "placeholder-style": "font-size:32rpx", clearabled: true, focus: false, showAction: false, height: 42 }, null, 8, ["modelValue"]), vue.createVNode(_component_u_icon, { name: "scan", size: "32", color: "#19be6b", onClick: $setup.openScan }) ]) ]), vue.createCommentVNode(" 备注弹窗 "), vue.createVNode($setup["RemarkDialog"], { visible: $setup.remarkVisible, "onUpdate:visible": _cache[4] || (_cache[4] = ($event) => $setup.remarkVisible = $event), "initial-value": $setup.currentRemark, onConfirm: $setup.handleRemarkConfirm }, null, 8, ["visible", "initial-value"]) ]); } const PagesIndexWmsBadIn = /* @__PURE__ */ _export_sfc(_sfc_main$G, [["render", _sfc_render$F], ["__scopeId", "data-v-04095d32"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/wms/bad-in.vue"]]); const _sfc_main$F = { __name: "bad-out", setup(__props, { expose: __expose }) { __expose(); const searchText = vue.ref(""); const onSearch = () => { uni.navigateTo({ url: `/pages/index/wms/bad-out-order?searchText=${searchText.value}` }); }; const openScan = () => { uni.scanCode({ success: (res2) => { searchText.value = res2.result; onSearch(); }, fail: (err) => { uni.showToast({ title: "扫码失败", icon: "error" }); } }); }; const __returned__ = { searchText, onSearch, openScan, ref: vue.ref, computed: vue.computed, onMounted: vue.onMounted }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$E(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_search = resolveEasycom(vue.resolveDynamicComponent("u-search"), __easycom_4$2); const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); return vue.openBlock(), vue.createElementBlock("view", { class: "container flex-d h100" }, [ vue.createCommentVNode(" 库位列表 "), vue.createElementVNode("view", { class: "location-list flex-1" }, [ vue.createElementVNode("view", { class: "no-data flex-c mt-60" }, "请输入快递单号/订单编号") ]), vue.createCommentVNode(" 底部搜索框 "), vue.createElementVNode("view", { class: "pad-20 flex-a", style: { "background": "#ffffff" } }, [ vue.createVNode(_component_u_search, { modelValue: $setup.searchText, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.searchText = $event), placeholder: "请输入库位条码", "show-action": false, clearabled: true, onChange: $setup.onSearch, height: "40", onClick: _cache[1] || (_cache[1] = ($event) => $setup.searchText = "") }, null, 8, ["modelValue"]), vue.createVNode(_component_u_icon, { name: "scan", size: "28", color: "#19be6b", onClick: $setup.openScan }) ]) ]); } const PagesIndexWmsBadOut = /* @__PURE__ */ _export_sfc(_sfc_main$F, [["render", _sfc_render$E], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/wms/bad-out.vue"]]); const _sfc_main$E = { __name: "BadOutCard", props: { item: Object }, setup(__props, { expose: __expose }) { __expose(); const props2 = __props; const __returned__ = { props: props2 }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$D(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "card" }, [ vue.createElementVNode("view", { class: "flex w100" }, [ vue.createElementVNode("view", { class: "flex-d" }, [ vue.createElementVNode("image", { style: { "width": "80px", "height": "100px" }, src: $props.item.image, mode: "aspectFill" }, null, 8, ["src"]), vue.createElementVNode( "view", { class: "quantity mt-20" }, "数量: " + vue.toDisplayString($props.item.quantity), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "book-info ml-20 flex-1" }, [ vue.createElementVNode( "view", { class: "common-title mb-20" }, vue.toDisplayString($props.item.title), 1 /* TEXT */ ), vue.createElementVNode("view", { class: "flex flex-j-b mb-10" }, [ vue.createElementVNode( "view", { class: "isbn" }, "ISBN: " + vue.toDisplayString($props.item.isbn), 1 /* TEXT */ ), vue.createElementVNode( "view", { class: "set" }, "套装: " + vue.toDisplayString($props.item.set), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "flex flex-j-b mb-10" }, [ vue.createElementVNode( "view", { class: "discount" }, "回收折扣: " + vue.toDisplayString($props.item.discount), 1 /* TEXT */ ), vue.createElementVNode( "view", { class: "review" }, "审核金额: " + vue.toDisplayString($props.item.review), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "flex flex-j-b mb-10" }, [ vue.createElementVNode( "view", { class: "price" }, "定价: " + vue.toDisplayString($props.item.price), 1 /* TEXT */ ), vue.createElementVNode( "view", { class: "estimate" }, "预估单价: " + vue.toDisplayString($props.item.estimate), 1 /* TEXT */ ) ]), vue.createElementVNode( "view", { class: "quality mb-10" }, " 品相: 良好(" + vue.toDisplayString($props.item.good) + ") 、 一般(" + vue.toDisplayString($props.item.average) + ") 、 极差(" + vue.toDisplayString($props.item.bad) + ") ", 1 /* TEXT */ ), vue.createElementVNode( "view", { class: "reason color-red" }, "原因: " + vue.toDisplayString($props.item.reason), 1 /* TEXT */ ) ]) ]) ]); } const BadOutCard = /* @__PURE__ */ _export_sfc(_sfc_main$E, [["render", _sfc_render$D], ["__scopeId", "data-v-e52c1f77"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/wms/components/BadOutCard.vue"]]); const _sfc_main$D = { __name: "bad-out-order", setup(__props, { expose: __expose }) { __expose(); const ttsModule2 = vue.ref(null); const searchText = vue.ref(""); const locationInfo = vue.ref({ location: "", logisticsNo: "", orderNo: "", goodsCount: "", remark: "" }); const badList = vue.ref([]); onLoad((options) => { if (options.searchText) { searchText.value = options.searchText; onSearch(); } ttsModule2.value = new VolumeTTS(); }); const getSearchType = (text) => { return /^[0-9]+$/.test(text) ? 1 : 2; }; const onSearch = async () => { if (!searchText.value) return; try { const searchType = getSearchType(searchText.value); const { data } = await uni.$u.http.post("/app/stock/findOrderOutStock", { search: searchText.value, searchType }); if (data) { locationInfo.value = { location: data.location || "", logisticsNo: data.logisticsNo || "", orderNo: data.orderNo || "", goodsCount: data.goodsCount || "", remark: data.remark || "" }; badList.value = data.badList || []; } } catch (error2) { uni.showToast({ title: "获取数据失败", icon: "none" }); } }; const openScan = () => { uni.scanCode({ success: (res2) => { searchText.value = res2.result; onSearch(); }, fail: (err) => { uni.showToast({ title: "扫码失败", icon: "error" }); } }); }; const onConfirm = () => { uni.showModal({ title: "确认提示", content: "是否确认出库?", success: async (res2) => { if (res2.confirm) { try { await uni.$u.http.post("/app/stock/outStock", { orderId: locationInfo.value.orderNo, positionCode: locationInfo.value.location, outputRemark: locationInfo.value.remark }); uni.showToast({ title: "出库成功", icon: "success" }); ttsModule2.value.speak("出库成功"); searchText.value = ""; locationInfo.value = { location: "", logisticsNo: "", orderNo: "", goodsCount: "", remark: "" }; badList.value = []; } catch (error2) { uni.showToast({ title: "出库失败", icon: "none" }); } } } }); }; const remarkVisible = vue.ref(false); const currentRemark = vue.ref(""); const currentEditIndex = vue.ref(-1); const openRemarkDialog = (index2, remark = "") => { currentEditIndex.value = index2; currentRemark.value = remark; remarkVisible.value = true; }; const handleRemarkConfirm = (remark) => { if (currentEditIndex.value >= 0) { orders.value[currentEditIndex.value].remark = remark; } currentEditIndex.value = -1; currentRemark.value = ""; }; const __returned__ = { ttsModule: ttsModule2, searchText, locationInfo, badList, getSearchType, onSearch, openScan, onConfirm, remarkVisible, currentRemark, currentEditIndex, openRemarkDialog, handleRemarkConfirm, ref: vue.ref, onMounted: vue.onMounted, BadOutCard, RemarkDialog, get VolumeTTS() { return VolumeTTS; }, get onLoad() { return onLoad; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$C(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_search = resolveEasycom(vue.resolveDynamicComponent("u-search"), __easycom_4$2); const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); const _component_u_sticky = resolveEasycom(vue.resolveDynamicComponent("u-sticky"), __easycom_1$3); const _component_u_button = resolveEasycom(vue.resolveDynamicComponent("u-button"), __easycom_3$6); return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createCommentVNode(" 搜索框 "), vue.createVNode(_component_u_sticky, null, { default: vue.withCtx(() => [ vue.createElementVNode("view", { class: "search-area flex-c mb-20" }, [ vue.createVNode(_component_u_search, { modelValue: $setup.searchText, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.searchText = $event), placeholder: "请输入运单号/订单编号", "show-action": false, clearabled: true, onChange: $setup.onSearch, height: "40" }, null, 8, ["modelValue"]), vue.createVNode(_component_u_icon, { name: "scan", size: "28", color: "#19be6b", onClick: $setup.openScan }) ]) ]), _: 1 /* STABLE */ }), vue.createElementVNode("view", { class: "content" }, [ vue.createCommentVNode(" 基本信息 "), vue.createElementVNode("view", { class: "info-section" }, [ vue.createElementVNode( "view", { class: "info-item" }, "库位:" + vue.toDisplayString($setup.locationInfo.location), 1 /* TEXT */ ), vue.createElementVNode( "view", { class: "info-item" }, "物流单号:" + vue.toDisplayString($setup.locationInfo.logisticsNo), 1 /* TEXT */ ), vue.createElementVNode( "view", { class: "info-item" }, "订单编号:" + vue.toDisplayString($setup.locationInfo.orderNo), 1 /* TEXT */ ), vue.createElementVNode( "view", { class: "info-item" }, "订单商品:" + vue.toDisplayString($setup.locationInfo.goodsCount), 1 /* TEXT */ ), vue.createElementVNode( "view", { class: "info-item" }, "备注信息:" + vue.toDisplayString($setup.locationInfo.remark), 1 /* TEXT */ ) ]), vue.createCommentVNode(" 极差商品列表 "), vue.createElementVNode("view", { class: "bad-list" }, [ vue.createElementVNode("view", { class: "list-title mb-6" }, "极差"), (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.badList, (item, index2) => { return vue.openBlock(), vue.createElementBlock("view", { key: index2 }, [ vue.createVNode($setup["BadOutCard"], { item }, null, 8, ["item"]) ]); }), 128 /* KEYED_FRAGMENT */ )) ]) ]), vue.createCommentVNode(" 底部按钮 "), vue.createElementVNode("view", { class: "fixed-bottom" }, [ vue.createVNode(_component_u_button, { size: "large", type: "warning", text: "反馈", onClick: $setup.openRemarkDialog }), vue.createVNode(_component_u_button, { size: "large", type: "primary", text: "确定出库", onClick: $setup.onConfirm }) ]), vue.createCommentVNode(" 备注弹窗 "), vue.createVNode($setup["RemarkDialog"], { visible: $setup.remarkVisible, "onUpdate:visible": _cache[1] || (_cache[1] = ($event) => $setup.remarkVisible = $event), "initial-value": $setup.currentRemark, onConfirm: $setup.handleRemarkConfirm }, null, 8, ["visible", "initial-value"]) ]); } const PagesIndexWmsBadOutOrder = /* @__PURE__ */ _export_sfc(_sfc_main$D, [["render", _sfc_render$C], ["__scopeId", "data-v-43bc1c65"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/wms/bad-out-order.vue"]]); const _sfc_main$C = { __name: "bad-off", setup(__props, { expose: __expose }) { __expose(); const searchText = vue.ref(""); const taskList = vue.ref([ { taskNo: "XJ20245451421", warehouse: "河南仓", quantity: 40, status: "待作业" }, { taskNo: "XJ20245451421", warehouse: "河南仓", quantity: 40, status: "待作业" } ]); const onSearch = () => { }; const openScan = () => { uni.scanCode({ success: (res2) => { searchText.value = res2.result; }, fail: (err) => { uni.showToast({ title: "扫码失败", icon: "error" }); } }); }; const handleTaskClick = (task) => { uni.navigateTo({ url: `/pages/index/wms/task-detail?taskNo=${task.taskNo}` }); }; const __returned__ = { searchText, taskList, onSearch, openScan, handleTaskClick, ref: vue.ref }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$B(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createCommentVNode(" 任务列表 "), vue.createElementVNode("view", { class: "task-list" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.taskList, (item, index2) => { return vue.openBlock(), vue.createElementBlock("view", { key: index2, class: "task-card", onClick: ($event) => $setup.handleTaskClick(item) }, [ vue.createElementVNode("view", { class: "task-header" }, [ vue.createElementVNode( "text", { class: "task-no" }, "作业单号:" + vue.toDisplayString(item.taskNo), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "task-content" }, [ vue.createElementVNode("view", { class: "flex-a mb-10" }, [ vue.createElementVNode("text", { class: "label" }, "仓库:"), vue.createElementVNode( "text", { class: "value" }, vue.toDisplayString(item.warehouse), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "flex-a mb-10" }, [ vue.createElementVNode("text", { class: "label" }, "任务数量:"), vue.createElementVNode( "text", { class: "value" }, vue.toDisplayString(item.quantity), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "flex-a" }, [ vue.createElementVNode("text", { class: "label" }, "作业状态:"), vue.createElementVNode( "text", { class: "value" }, vue.toDisplayString(item.status), 1 /* TEXT */ ) ]) ]) ], 8, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ]) ]); } const PagesIndexWmsBadOff = /* @__PURE__ */ _export_sfc(_sfc_main$C, [["render", _sfc_render$B], ["__scopeId", "data-v-58677b56"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/wms/bad-off.vue"]]); const _sfc_main$B = { __name: "order-query", setup(__props, { expose: __expose }) { __expose(); const query = vue.reactive({ searchType: 2, search: "" }); const orderQuery = () => { if (!query.search) { uni.$u.toast("请输入快递单号/订单编号"); return; } uni.navigateTo({ url: `/pages/index/wms/order-query-list?id=${query.search}` }); }; function openScan() { uni.scanCode({ success: (res2) => { query.search = res2.result; orderQuery(); } }); } onLoad(() => { uni.$u.useGlobalEvent((e) => { if (e.barcode) { query.search = e.barcode; orderQuery(); } }); }); const __returned__ = { query, orderQuery, openScan, reactive: vue.reactive, ref: vue.ref, get onLoad() { return onLoad; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$A(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_search = resolveEasycom(vue.resolveDynamicComponent("u-search"), __easycom_4$2); const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createCommentVNode(" 底部扫码输入框 "), vue.createElementVNode("view", { class: "fixed-bottom pad-20", style: { "background": "#ffffff" } }, [ vue.createVNode(_component_u_search, { placeholder: "请输入快递单号/订单编号", searchIconSize: 24, bgColor: "#f6f7f6", onSearch: $setup.orderQuery, modelValue: $setup.query.search, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.query.search = $event), "custom-style": "font-size:32rpx", "placeholder-style": "font-size:32rpx", clearabled: true, focus: false, showAction: false, height: 42 }, null, 8, ["modelValue"]), vue.createVNode(_component_u_icon, { name: "scan", size: "34", color: "#19be6b", onClick: $setup.openScan }) ]) ]); } const PagesIndexWmsOrderQuery = /* @__PURE__ */ _export_sfc(_sfc_main$B, [["render", _sfc_render$A], ["__scopeId", "data-v-c65e1cc0"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/wms/order-query.vue"]]); const props$5 = { props: { // 是否显示圆点 isDot: { type: Boolean, default: props$E.badge.isDot }, // 显示的内容 value: { type: [Number, String], default: props$E.badge.value }, // 显示的内容 modelValue: { type: [Number, String], default: props$E.badge.modelValue }, // 是否显示 show: { type: Boolean, default: props$E.badge.show }, // 最大值,超过最大值会显示 '{max}+' max: { type: [Number, String], default: props$E.badge.max }, // 主题类型,error|warning|success|primary type: { type: String, default: props$E.badge.type }, // 当数值为 0 时,是否展示 Badge showZero: { type: Boolean, default: props$E.badge.showZero }, // 背景颜色,优先级比type高,如设置,type参数会失效 bgColor: { type: [String, null], default: props$E.badge.bgColor }, // 字体颜色 color: { type: [String, null], default: props$E.badge.color }, // 徽标形状,circle-四角均为圆角,horn-左下角为直角 shape: { type: String, default: props$E.badge.shape }, // 设置数字的显示方式,overflow|ellipsis|limit // overflow会根据max字段判断,超出显示`${max}+` // ellipsis会根据max判断,超出显示`${max}...` // limit会依据1000作为判断条件,超出1000,显示`${value/1000}K`,比如2.2k、3.34w,最多保留2位小数 numberType: { type: String, default: props$E.badge.numberType }, // 设置badge的位置偏移,格式为 [x, y],也即设置的为top和right的值,absolute为true时有效 offset: { type: Array, default: props$E.badge.offset }, // 是否反转背景和字体颜色 inverted: { type: Boolean, default: props$E.badge.inverted }, // 是否绝对定位 absolute: { type: Boolean, default: props$E.badge.absolute } } }; const _sfc_main$A = { name: "u-badge", mixins: [mpMixin, props$5, mixin], computed: { // 是否将badge中心与父组件右上角重合 boxStyle() { let style = {}; return style; }, // 整个组件的样式 badgeStyle() { const style = {}; if (this.color) { style.color = this.color; } if (this.bgColor && !this.inverted) { style.backgroundColor = this.bgColor; } if (this.absolute) { style.position = "absolute"; if (this.offset.length) { const top = this.offset[0]; const right = this.offset[1] || top; style.top = uni.$u.addUnit(top); style.right = uni.$u.addUnit(right); } } return style; }, showValue() { switch (this.numberType) { case "overflow": return Number(this.value) > Number(this.max) ? this.max + "+" : this.value; case "ellipsis": return Number(this.value) > Number(this.max) ? "..." : this.value; case "limit": return Number(this.value) > 999 ? Number(this.value) >= 9999 ? Math.floor(this.value / 1e4 * 100) / 100 + "w" : Math.floor(this.value / 1e3 * 100) / 100 + "k" : this.value; default: return Number(this.value); } } } }; function _sfc_render$z(_ctx, _cache, $props, $setup, $data, $options) { return _ctx.show && ((Number(_ctx.value) === 0 ? _ctx.showZero : true) || _ctx.isDot) ? (vue.openBlock(), vue.createElementBlock( "text", { key: 0, class: vue.normalizeClass([[_ctx.isDot ? "u-badge--dot" : "u-badge--not-dot", _ctx.inverted && "u-badge--inverted", _ctx.shape === "horn" && "u-badge--horn", `u-badge--${_ctx.type}${_ctx.inverted ? "--inverted" : ""}`], "u-badge"]), style: vue.normalizeStyle([_ctx.$u.addStyle(_ctx.customStyle), $options.badgeStyle]) }, vue.toDisplayString(_ctx.isDot ? "" : $options.showValue), 7 /* TEXT, CLASS, STYLE */ )) : vue.createCommentVNode("v-if", true); } const __easycom_0$1 = /* @__PURE__ */ _export_sfc(_sfc_main$A, [["render", _sfc_render$z], ["__scopeId", "data-v-06cca9b7"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-badge/u-badge.vue"]]); const props$4 = { props: { // 滑块的移动过渡时间,单位ms duration: { type: Number, default: props$E.tabs.duration }, // tabs标签数组 list: { type: Array, default: props$E.tabs.list }, // 滑块颜色 lineColor: { type: String, default: props$E.tabs.lineColor }, // 菜单选择中时的样式 activeStyle: { type: [String, Object], default: props$E.tabs.activeStyle }, // 菜单非选中时的样式 inactiveStyle: { type: [String, Object], default: props$E.tabs.inactiveStyle }, // 滑块长度 lineWidth: { type: [String, Number], default: props$E.tabs.lineWidth }, // 滑块高度 lineHeight: { type: [String, Number], default: props$E.tabs.lineHeight }, // 滑块背景显示大小,当滑块背景设置为图片时使用 lineBgSize: { type: String, default: props$E.tabs.lineBgSize }, // 菜单item的样式 itemStyle: { type: [String, Object], default: props$E.tabs.itemStyle }, // 菜单是否可滚动 scrollable: { type: Boolean, default: props$E.tabs.scrollable }, // 当前选中标签的索引 current: { type: [Number, String], default: props$E.tabs.current }, // 默认读取的键名 keyName: { type: String, default: props$E.tabs.keyName } } }; const _sfc_main$z = { name: "u-tabs", mixins: [mpMixin, mixin, props$4], data() { return { firstTime: true, scrollLeft: 0, scrollViewWidth: 0, lineOffsetLeft: 0, tabsRect: { left: 0 }, innerCurrent: 0, moving: false }; }, watch: { current: { immediate: true, handler(newValue, oldValue) { if (newValue !== this.innerCurrent) { this.innerCurrent = newValue; this.$nextTick(() => { this.resize(); }); } } }, // list变化时,重新渲染list各项信息 list() { this.$nextTick(() => { this.resize(); }); } }, computed: { textStyle() { return (index2) => { const style = {}; const customeStyle = index2 === this.innerCurrent ? uni.$u.addStyle(this.activeStyle) : uni.$u.addStyle( this.inactiveStyle ); if (this.list[index2].disabled) { style.color = "#c8c9cc"; } return uni.$u.deepMerge(customeStyle, style); }; }, propsBadge() { return uni.$u.props.badge; } }, async mounted() { this.init(); }, emits: ["click", "change"], methods: { setLineLeft() { const tabItem = this.list[this.innerCurrent]; if (!tabItem) { return; } let lineOffsetLeft = this.list.slice(0, this.innerCurrent).reduce((total, curr) => total + curr.rect.width, 0); const lineWidth = uni.$u.getPx(this.lineWidth); this.lineOffsetLeft = lineOffsetLeft + (tabItem.rect.width - lineWidth) / 2; if (this.firstTime) { setTimeout(() => { this.firstTime = false; }, 10); } }, // nvue下设置滑块的位置 animation(x, duration = 0) { }, // 点击某一个标签 clickHandler(item, index2) { this.$emit("click", { ...item, index: index2 }); if (item.disabled) return; this.innerCurrent = index2; this.resize(); this.$emit("change", { ...item, index: index2 }); }, init() { uni.$u.sleep().then(() => { this.resize(); }); }, setScrollLeft() { const tabRect = this.list[this.innerCurrent]; const offsetLeft = this.list.slice(0, this.innerCurrent).reduce((total, curr) => { return total + curr.rect.width; }, 0); const windowWidth = uni.$u.sys().windowWidth; let scrollLeft = offsetLeft - (this.tabsRect.width - tabRect.rect.width) / 2 - (windowWidth - this.tabsRect.right) / 2 + this.tabsRect.left / 2; scrollLeft = Math.min(scrollLeft, this.scrollViewWidth - this.tabsRect.width); this.scrollLeft = Math.max(0, scrollLeft); }, // 获取所有标签的尺寸 resize() { if (this.list.length === 0) { return; } Promise.all([this.getTabsRect(), this.getAllItemRect()]).then(([tabsRect, itemRect = []]) => { this.tabsRect = tabsRect; this.scrollViewWidth = 0; itemRect.map((item, index2) => { this.scrollViewWidth += item.width; this.list[index2].rect = item; }); this.setLineLeft(); this.setScrollLeft(); }); }, // 获取导航菜单的尺寸 getTabsRect() { return new Promise((resolve) => { this.queryRect("u-tabs__wrapper__scroll-view").then((size) => resolve(size)); }); }, // 获取所有标签的尺寸 getAllItemRect() { return new Promise((resolve) => { const promiseAllArr = this.list.map((item, index2) => this.queryRect( `u-tabs__wrapper__nav__item-${index2}`, true )); Promise.all(promiseAllArr).then((sizes) => resolve(sizes)); }); }, // 获取各个标签的尺寸 queryRect(el, item) { return new Promise((resolve) => { this.$uGetRect(`.${el}`).then((size) => { resolve(size); }); }); } } }; function _sfc_render$y(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_badge = resolveEasycom(vue.resolveDynamicComponent("u-badge"), __easycom_0$1); return vue.openBlock(), vue.createElementBlock("view", { class: "u-tabs" }, [ vue.createElementVNode("view", { class: "u-tabs__wrapper" }, [ vue.renderSlot(_ctx.$slots, "left", {}, void 0, true), vue.createElementVNode("view", { class: "u-tabs__wrapper__scroll-view-wrapper" }, [ vue.createElementVNode("scroll-view", { "scroll-x": _ctx.scrollable, "scroll-left": $data.scrollLeft, "scroll-with-animation": "", class: "u-tabs__wrapper__scroll-view", "show-scrollbar": false, ref: "u-tabs__wrapper__scroll-view" }, [ vue.createElementVNode( "view", { class: "u-tabs__wrapper__nav", ref: "u-tabs__wrapper__nav" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(_ctx.list, (item, index2) => { return vue.openBlock(), vue.createElementBlock("view", { class: vue.normalizeClass(["u-tabs__wrapper__nav__item", [`u-tabs__wrapper__nav__item-${index2}`, item.disabled && "u-tabs__wrapper__nav__item--disabled"]]), key: index2, onClick: ($event) => $options.clickHandler(item, index2), ref_for: true, ref: `u-tabs__wrapper__nav__item-${index2}`, style: vue.normalizeStyle([_ctx.$u.addStyle(_ctx.itemStyle), { flex: _ctx.scrollable ? "" : 1 }]) }, [ vue.createElementVNode( "text", { class: vue.normalizeClass([[item.disabled && "u-tabs__wrapper__nav__item__text--disabled"], "u-tabs__wrapper__nav__item__text"]), style: vue.normalizeStyle([$options.textStyle(index2)]) }, vue.toDisplayString(item[_ctx.keyName]), 7 /* TEXT, CLASS, STYLE */ ), vue.createVNode(_component_u_badge, { show: !!(item.badge && (item.badge.show || item.badge.isDot || item.badge.value)), isDot: item.badge && item.badge.isDot || $options.propsBadge.isDot, value: item.badge && item.badge.value || $options.propsBadge.value, max: item.badge && item.badge.max || $options.propsBadge.max, type: item.badge && item.badge.type || $options.propsBadge.type, showZero: item.badge && item.badge.showZero || $options.propsBadge.showZero, bgColor: item.badge && item.badge.bgColor || $options.propsBadge.bgColor, color: item.badge && item.badge.color || $options.propsBadge.color, shape: item.badge && item.badge.shape || $options.propsBadge.shape, numberType: item.badge && item.badge.numberType || $options.propsBadge.numberType, inverted: item.badge && item.badge.inverted || $options.propsBadge.inverted, customStyle: "margin-left: 4px;" }, null, 8, ["show", "isDot", "value", "max", "type", "showZero", "bgColor", "color", "shape", "numberType", "inverted"]) ], 14, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )), vue.createElementVNode( "view", { class: "u-tabs__wrapper__nav__line", ref: "u-tabs__wrapper__nav__line", style: vue.normalizeStyle([{ width: _ctx.$u.addUnit(_ctx.lineWidth), transform: `translate(${$data.lineOffsetLeft}px)`, transitionDuration: `${$data.firstTime ? 0 : _ctx.duration}ms`, height: _ctx.$u.addUnit(_ctx.lineHeight), background: _ctx.lineColor, backgroundSize: _ctx.lineBgSize }]) }, null, 4 /* STYLE */ ) ], 512 /* NEED_PATCH */ ) ], 8, ["scroll-x", "scroll-left"]) ]), vue.renderSlot(_ctx.$slots, "right", {}, void 0, true) ]) ]); } const __easycom_4$1 = /* @__PURE__ */ _export_sfc(_sfc_main$z, [["render", _sfc_render$y], ["__scopeId", "data-v-02b0c54f"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-tabs/u-tabs.vue"]]); const _sfc_main$y = { __name: "order-query-list", setup(__props, { expose: __expose }) { __expose(); const list1 = vue.reactive([{ name: "商品明细" }, { name: "操作记录" }]); const activeTab = vue.ref(0); const query = vue.reactive({ searchType: 2, search: "" }); const determineSearchType = (search) => { const isNumberString = /^\d+$/.test(search.toString()); return isNumberString ? 1 : 2; }; const detail = vue.ref({}); const orderQuery = () => { if (!query.search) { uni.$u.toast("请输入快递单号/订单编号"); uni.$u.ttsModule.speak("请输入快递单号/订单编号"); return; } query.searchType = determineSearchType(query.search); uni.$u.http.get("/app/stock/findOrder", { params: query }).then((res2) => { if (res2.code == 200) { detail.value = res2.data; uni.$u.ttsModule.speak("查询成功"); getOperationLogs(res2.data.orderId); } else { uni.$u.toast(res2.msg); uni.$u.ttsModule.speak(res2.msg); } }); }; const operationLogs = vue.ref([]); const getOperationLogs = (orderId) => { uni.$u.http.get("/app/stock/getGodownStocklog", { params: { orderId } }).then((res2) => { if (res2.code == 200) { operationLogs.value = res2.data; } }); }; function handleTabChange(tab) { activeTab.value = tab.index; } function openScan() { uni.scanCode({ success: (res2) => { query.search = res2.result; orderQuery(); } }); } onLoad((options) => { if (options.id) { query.search = options.id; orderQuery(); } uni.$u.useGlobalEvent((e) => { if (e.barcode) { getDetailByCode(e.barcode); } }); }); const __returned__ = { list1, activeTab, query, determineSearchType, detail, orderQuery, operationLogs, getOperationLogs, handleTabChange, openScan, reactive: vue.reactive, ref: vue.ref, get onLoad() { return onLoad; }, BookInfo }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$x(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_tabs = resolveEasycom(vue.resolveDynamicComponent("u-tabs"), __easycom_4$1); const _component_u_search = resolveEasycom(vue.resolveDynamicComponent("u-search"), __easycom_4$2); const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ $setup.detail.orderId ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "header" }, [ vue.createElementVNode("view", { class: "flex-d" }, [ vue.createElementVNode( "text", null, "订单编号: " + vue.toDisplayString($setup.detail.orderId), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "mt-16" }, "库位: " + vue.toDisplayString($setup.detail.positionCode), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "status" }, [ vue.createElementVNode( "text", null, vue.toDisplayString($setup.detail.stockStatus == 1 ? "已入库" : "已出库"), 1 /* TEXT */ ) ]) ])) : vue.createCommentVNode("v-if", true), $setup.detail.orderId ? (vue.openBlock(), vue.createElementBlock("view", { key: 1, style: { "background-color": "#ffffff" }, class: "pad-5 mt-20" }, [ vue.createVNode(_component_u_tabs, { list: $setup.list1, modelValue: $setup.activeTab, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.activeTab = $event), itemStyle: { height: "44px", width: "48%" }, onChange: $setup.handleTabChange }, null, 8, ["list", "modelValue"]), $setup.activeTab === 0 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "product-details" }, [ vue.createVNode($setup["BookInfo"], { bookList: $setup.detail.detailVoList, detail: $setup.detail, isShow: false }, null, 8, ["bookList", "detail"]) ])) : (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "operation-logs mt-20" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.operationLogs, (log, index2) => { return vue.openBlock(), vue.createElementBlock("view", { key: index2, class: "log-item" }, [ vue.createElementVNode( "text", null, vue.toDisplayString(log.createTime), 1 /* TEXT */ ), vue.createElementVNode( "text", null, vue.toDisplayString(log.createName), 1 /* TEXT */ ), vue.createElementVNode( "text", null, vue.toDisplayString(log.content), 1 /* TEXT */ ) ]); }), 128 /* KEYED_FRAGMENT */ )) ])) ])) : vue.createCommentVNode("v-if", true), vue.createCommentVNode(" 底部扫码输入框 "), vue.createElementVNode("view", { class: "fixed-bottom pad-20", style: { "background": "#ffffff" } }, [ vue.createVNode(_component_u_search, { placeholder: "请输入快递单号/订单编号", searchIconSize: 24, bgColor: "#f6f7f6", onSearch: $setup.orderQuery, modelValue: $setup.query.search, "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.query.search = $event), "custom-style": "font-size:32rpx", "placeholder-style": "font-size:32rpx", clearabled: true, focus: false, showAction: false, height: 42 }, null, 8, ["modelValue"]), vue.createVNode(_component_u_icon, { name: "scan", size: "34", color: "#19be6b", onClick: $setup.openScan }) ]) ]); } const PagesIndexWmsOrderQueryList = /* @__PURE__ */ _export_sfc(_sfc_main$y, [["render", _sfc_render$x], ["__scopeId", "data-v-13461b03"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/wms/order-query-list.vue"]]); const _sfc_main$x = { __name: "location-order", setup(__props, { expose: __expose }) { __expose(); const positionCode = vue.ref(""); const onSearch = () => { if (positionCode.value) { uni.navigateTo({ url: "/pages/index/wms/location-order-list?positionCode=" + positionCode.value }); } else { uni.$u.toast("请输入库位编号"); } }; function openScan() { uni.scanCode({ success: (res2) => { positionCode.value = res2.result; onSearch(); } }); } onLoad(() => { uni.$u.useGlobalEvent((e) => { if (e.barcode) { positionCode.value = e.barcode; onSearch(); } }); }); const __returned__ = { positionCode, onSearch, openScan, ref: vue.ref, get onLoad() { return onLoad; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$w(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_search = resolveEasycom(vue.resolveDynamicComponent("u-search"), __easycom_4$2); const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createCommentVNode(" 底部扫码输入框 "), vue.createElementVNode("view", { class: "fixed-bottom pad-20", style: { "background": "#ffffff" } }, [ vue.createVNode(_component_u_search, { placeholder: "请输入库位编号", searchIconSize: 24, bgColor: "#f6f7f6", onSearch: $setup.onSearch, modelValue: $setup.positionCode, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.positionCode = $event), clearabled: true, focus: false, showAction: false, height: 42 }, null, 8, ["modelValue"]), vue.createVNode(_component_u_icon, { name: "scan", size: "32", color: "#19be6b", onClick: $setup.openScan }) ]) ]); } const PagesIndexWmsLocationOrder = /* @__PURE__ */ _export_sfc(_sfc_main$x, [["render", _sfc_render$w], ["__scopeId", "data-v-38a6ed3a"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/wms/location-order.vue"]]); const _imports_0 = "/static/img/share.png"; const _sfc_main$w = { __name: "LocationOrderItem", props: { item: { type: Object, required: true }, isCheck: { type: Boolean, default: false } }, emits: ["select"], setup(__props, { expose: __expose, emit: __emit }) { __expose(); const props2 = __props; const emit2 = __emit; const toggleSelect = () => { emit2("select", props2.item); }; const handleQuickJump = () => { uni.navigateTo({ url: `/pages/index/wms/order-query-list?id=${props2.item.orderId}` }); }; const __returned__ = { props: props2, emit: emit2, toggleSelect, handleQuickJump }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$v(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); return vue.openBlock(), vue.createElementBlock("view", { class: "order-item" }, [ vue.createElementVNode("view", { class: "order-header" }, [ vue.createElementVNode("view", { class: "order-info" }, [ vue.createElementVNode("view", { class: "info-row" }, [ vue.createElementVNode("text", { class: "label" }, "订单编号:"), vue.createElementVNode( "text", { class: "value" }, vue.toDisplayString($props.item.orderId), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "info-row" }, [ vue.createElementVNode("text", { class: "label" }, "不良数量:"), vue.createElementVNode( "text", { class: "value" }, vue.toDisplayString($props.item.badNum), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "info-row" }, [ vue.createElementVNode("text", { class: "label" }, "物流单号:"), vue.createElementVNode( "text", { class: "value" }, vue.toDisplayString($props.item.waybillCode), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "info-row" }, [ vue.createElementVNode("text", { class: "label" }, "验货完成日期:"), vue.createElementVNode( "text", { class: "value" }, vue.toDisplayString($props.item.auditFinishTime), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "info-row" }, [ vue.createElementVNode("text", { class: "label" }, "录入人:"), vue.createElementVNode( "text", { class: "value" }, vue.toDisplayString($props.item.auditUserName), 1 /* TEXT */ ) ]) ]), $props.isCheck ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "check-icon" }, [ vue.createVNode(_component_u_icon, { name: $props.item.checked ? "checkmark-circle-fill" : "checkmark-circle", color: $props.item.checked ? "#19be6b" : "#c8c9cc", size: "28", onClick: $setup.toggleSelect }, null, 8, ["name", "color"]) ])) : vue.createCommentVNode("v-if", true), vue.createElementVNode("view", { class: "flex flex-d flex-a-c flex-j-c quick-jump", onClick: $setup.handleQuickJump }, [ vue.createElementVNode("image", { src: _imports_0, mode: "widthFix", style: { "width": "30px" } }), vue.createElementVNode("text", { style: { "font-size": "28rpx", "color": "#19be6b" } }, "快速跳转") ]) ]) ]); } const LocationOrderItem = /* @__PURE__ */ _export_sfc(_sfc_main$w, [["render", _sfc_render$v], ["__scopeId", "data-v-b4edd1b0"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/wms/components/LocationOrderItem.vue"]]); const _sfc_main$v = { __name: "location-order-list", setup(__props, { expose: __expose }) { __expose(); const orderCode = vue.ref(""); const originList = vue.ref([]); const orderList = vue.ref([]); const detail = vue.ref({}); const getOrderListByPositionCode = (positionCode) => { uni.$u.http.get("/app/stock/getOrderByPositionCode?positionCode=" + positionCode).then((res2) => { if (res2.code == 200) { detail.value = res2.data; orderList.value = res2.data.godownStockLogResults; originList.value = res2.data.godownStockLogResults; if (originList.value.length > 0) { uni.$u.ttsModule.speak("查询到" + originList.value.length + "条订单"); } else { uni.$u.toast("暂无订单"); uni.$u.ttsModule.speak("暂无订单"); } } else { uni.$u.toast(res2.msg); uni.$u.ttsModule.speak(res2.msg); } }); }; const onSearch = () => { if (!orderCode.value) { orderList.value = originList.value; uni.$u.toast("请输入订单号或物流单号"); return; } const searchValue = String(orderCode.value).trim(); const isNumeric = /^[0-9]+$/.test(searchValue); const result = originList.value.filter((item) => { if (isNumeric) { return item.orderId === orderCode.value; } else { return item.waybillCode === orderCode.value; } }); orderList.value = result; }; function openScan() { uni.scanCode({ success: (res2) => { orderCode.value = res2.result; onSearch(); } }); } onLoad((options) => { if (options.positionCode) { getOrderListByPositionCode(options.positionCode); } uni.$u.useGlobalEvent((e) => { if (e.barcode) { orderCode.value = res.result; onSearch(); } }); }); const __returned__ = { orderCode, originList, orderList, detail, getOrderListByPositionCode, onSearch, openScan, reactive: vue.reactive, ref: vue.ref, get onLoad() { return onLoad; }, LocationOrderItem }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$u(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_search = resolveEasycom(vue.resolveDynamicComponent("u-search"), __easycom_4$2); const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createElementVNode("view", { class: "header" }, [ vue.createElementVNode("view", { class: "flex-d" }, [ vue.createElementVNode( "text", null, "仓库: " + vue.toDisplayString($setup.detail.godownName), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "mt-16" }, "库位编号: " + vue.toDisplayString($setup.detail.positionCode), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "mt-16" }, "订单数量: " + vue.toDisplayString($setup.originList.length), 1 /* TEXT */ ) ]) ]), vue.createElementVNode("view", { class: "product-details" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.orderList, (item, index2) => { return vue.openBlock(), vue.createBlock($setup["LocationOrderItem"], { key: index2, item }, null, 8, ["item"]); }), 128 /* KEYED_FRAGMENT */ )) ]), vue.createCommentVNode(" 底部扫码输入框 "), vue.createElementVNode("view", { class: "fixed-bottom pad-20", style: { "background": "#ffffff" } }, [ vue.createVNode(_component_u_search, { placeholder: "请输入快递单号/订单编号", searchIconSize: 24, bgColor: "#f6f7f6", onSearch: $setup.onSearch, modelValue: $setup.orderCode, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.orderCode = $event), clearabled: true, focus: false, showAction: false, height: 42 }, null, 8, ["modelValue"]), vue.createVNode(_component_u_icon, { name: "scan", size: "36", color: "#19be6b", onClick: $setup.openScan }) ]) ]); } const PagesIndexWmsLocationOrderList = /* @__PURE__ */ _export_sfc(_sfc_main$v, [["render", _sfc_render$u], ["__scopeId", "data-v-3e424560"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/wms/location-order-list.vue"]]); const _sfc_main$u = { __name: "location-select", setup(__props, { expose: __expose }) { __expose(); const searchText = vue.ref(""); const locations = vue.ref([]); function getLocationListByGodownId(godownId2, code2 = "") { uni.$u.http.get("/app/stock/getGodownPosition?godownId=" + godownId2 + "&code=" + code2).then((res2) => { if (res2.code == 200) { locations.value = res2.data; } }); } const scrollHeight = vue.ref(0); const onSearch = () => { getLocationListByGodownId(godownId.value, searchText.value); }; const openScan = () => { uni.scanCode({ success: (res2) => { searchText.value = res2.result; onSearch(); }, fail: (err) => { uni.showToast({ title: "扫码失败", icon: "error" }); } }); }; const selectLocation = (item) => { uni.$emit("updateLocation", item); uni.navigateBack(); }; const godownId = vue.ref(""); const positionCode = vue.ref(""); onLoad((opts) => { godownId.value = opts.godownId; positionCode.value = opts.positionCode; getLocationListByGodownId(godownId.value); scrollHeight.value = uni.getSystemInfoSync().windowHeight - 44 - 60; uni.$u.useGlobalEvent((e) => { if (e.barcode) { searchText.value = e.barcode; getLocationListByGodownId(godownId.value, e.barcode); } }); }); const __returned__ = { searchText, locations, getLocationListByGodownId, scrollHeight, onSearch, openScan, selectLocation, godownId, positionCode, ref: vue.ref, computed: vue.computed, onMounted: vue.onMounted, get onLoad() { return onLoad; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$t(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_search = resolveEasycom(vue.resolveDynamicComponent("u-search"), __easycom_4$2); const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createCommentVNode(" 库位列表 "), vue.createElementVNode( "scroll-view", { "scroll-y": "", class: "location-list", style: vue.normalizeStyle({ height: $setup.scrollHeight + "px" }) }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.locations, (item, index2) => { return vue.openBlock(), vue.createElementBlock("view", { key: index2, class: vue.normalizeClass(["location-item", item === $setup.positionCode ? "location-item-selected" : ""]), "hover-class": "location-item-hover", onClick: ($event) => $setup.selectLocation(item) }, [ vue.createElementVNode( "text", null, vue.toDisplayString(item), 1 /* TEXT */ ) ], 10, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ], 4 /* STYLE */ ), vue.createCommentVNode(" 底部搜索框 "), vue.createElementVNode("view", { class: "fixed-bottom pad-20", style: { "background": "#ffffff" } }, [ vue.createVNode(_component_u_search, { modelValue: $setup.searchText, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.searchText = $event), placeholder: "请输入库位条码", "show-action": false, clearabled: true, onChange: $setup.onSearch, height: "40", disabled: true, onClick: _cache[1] || (_cache[1] = ($event) => $setup.searchText = "") }, null, 8, ["modelValue"]), vue.createVNode(_component_u_icon, { name: "scan", size: "28", color: "#19be6b", onClick: $setup.openScan }) ]) ]); } const PagesIndexWmsLocationSelect = /* @__PURE__ */ _export_sfc(_sfc_main$u, [["render", _sfc_render$t], ["__scopeId", "data-v-b26ec186"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/wms/location-select.vue"]]); const _sfc_main$t = { __name: "warehouse-select", setup(__props, { expose: __expose }) { __expose(); const searchText = vue.ref(""); const warehouses = vue.ref([]); function getGodownListByName(name = "") { uni.$u.http.post("/app/appUser/searchGodown?name=" + name).then((res2) => { if (res2.code == 200) { warehouses.value = res2.data; } }); } getGodownListByName(); const onSearch = () => { getGodownListByName(searchText.value); }; const selectWarehouse = (item) => { uni.$emit("updateWarehouse", item); uni.navigateBack(); }; const selectedId = vue.ref(); onLoad((options) => { if (options.godownId) { selectedId.value = options.godownId; } }); const __returned__ = { searchText, warehouses, getGodownListByName, onSearch, selectWarehouse, selectedId, ref: vue.ref, computed: vue.computed, get onLoad() { return onLoad; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$s(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_search = resolveEasycom(vue.resolveDynamicComponent("u-search"), __easycom_4$2); return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createCommentVNode(" 搜索框 "), vue.createElementVNode("view", { class: "search-area" }, [ vue.createVNode(_component_u_search, { modelValue: $setup.searchText, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.searchText = $event), placeholder: "请输入仓库名称", "show-action": false, clearabled: true, onChange: $setup.onSearch, height: "40", "placeholder-style": "font-size:16px" }, null, 8, ["modelValue"]) ]), vue.createCommentVNode(" 仓库列表 "), vue.createElementVNode("view", { class: "warehouse-list" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.warehouses, (item, index2) => { return vue.openBlock(), vue.createElementBlock("view", { key: index2, class: vue.normalizeClass(["warehouse-item", { "warehouse-item-active": item.id == $setup.selectedId }]), "hover-class": "warehouse-item-hover", onClick: ($event) => $setup.selectWarehouse(item) }, [ vue.createElementVNode( "text", null, vue.toDisplayString(index2 + 1) + "." + vue.toDisplayString(item.godownName), 1 /* TEXT */ ) ], 10, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ]) ]); } const PagesIndexWmsWarehouseSelect = /* @__PURE__ */ _export_sfc(_sfc_main$t, [["render", _sfc_render$s], ["__scopeId", "data-v-c3e02812"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/wms/warehouse-select.vue"]]); const _sfc_main$s = { __name: "speedy-check", setup(__props, { expose: __expose }) { __expose(); const showCheckMethodPicker = vue.ref(false); const checkMethod = vue.ref("实际数量"); const checkMethodOptions = ["实际数量", "增加数量", "减少数量"]; const location2 = vue.ref("k01-01-4A"); const searchValue = vue.ref(""); const products = vue.ref([ { orderNo: "4846464", logisticsNo: "DPK2023497491611", inspectionDate: "2024-11-14", badCount: 5, operator: "李程雪" }, { orderNo: "4846464", logisticsNo: "DPK2023497491611", inspectionDate: "2024-11-14", badCount: 5, operator: "李程雪" } ]); const onCheckMethodConfirm = (e) => { checkMethod.value = e.value[0]; showCheckMethodPicker.value = false; }; const handleLocationSelect = () => { uni.navigateTo({ url: "/pages/location-select/index" }); }; const onSearch = () => { }; const openScan = () => { }; function handleAdd() { uni.navigateTo({ url: "/pages/index/wms/speedy-check-add" }); } const __returned__ = { showCheckMethodPicker, checkMethod, checkMethodOptions, location: location2, searchValue, products, onCheckMethodConfirm, handleLocationSelect, onSearch, openScan, handleAdd, reactive: vue.reactive, ref: vue.ref, LocationOrderItem }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$r(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); const _component_u_text = resolveEasycom(vue.resolveDynamicComponent("u-text"), __easycom_1$8); const _component_u_navbar = resolveEasycom(vue.resolveDynamicComponent("u-navbar"), __easycom_2$2); const _component_u_cell = resolveEasycom(vue.resolveDynamicComponent("u-cell"), __easycom_1$6); const _component_u_cell_group = resolveEasycom(vue.resolveDynamicComponent("u-cell-group"), __easycom_2$5); const _component_u_picker = resolveEasycom(vue.resolveDynamicComponent("u-picker"), __easycom_1$1); const _component_u_search = resolveEasycom(vue.resolveDynamicComponent("u-search"), __easycom_4$2); return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createVNode(_component_u_navbar, { title: "快速盘点", border: false, fixed: "", "safe-area-inset-top": "" }, { left: vue.withCtx(() => [ vue.createVNode(_component_u_icon, { name: "arrow-left", color: "#333333", size: "20", onClick: _ctx.goBack }, null, 8, ["onClick"]) ]), right: vue.withCtx(() => [ vue.createVNode(_component_u_text, { type: "primary", text: "提交", onClick: _ctx.onSubmit }, null, 8, ["onClick"]) ]), _: 1 /* STABLE */ }), vue.createCommentVNode(" 盘点信息选择区域 "), vue.createElementVNode("view", { class: "select-area", style: { "margin-top": "44px" } }, [ vue.createVNode(_component_u_cell_group, null, { default: vue.withCtx(() => [ vue.createVNode(_component_u_cell, { title: "盘点方式", value: $setup.checkMethod, onClick: _cache[0] || (_cache[0] = ($event) => $setup.showCheckMethodPicker = true), isLink: "" }, null, 8, ["value"]), vue.createVNode(_component_u_cell, { title: "目标库位", value: $setup.location, onClick: $setup.handleLocationSelect, isLink: "" }, null, 8, ["value"]) ]), _: 1 /* STABLE */ }) ]), vue.createCommentVNode(" 盘点方式选择器 "), vue.createVNode(_component_u_picker, { show: $setup.showCheckMethodPicker, columns: [$setup.checkMethodOptions], onConfirm: $setup.onCheckMethodConfirm, onCancel: _cache[1] || (_cache[1] = ($event) => $setup.showCheckMethodPicker = false) }, null, 8, ["show", "columns"]), vue.createCommentVNode(" 订单列表 "), vue.createElementVNode("view", { class: "product-details" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.products, (item, index2) => { return vue.openBlock(), vue.createBlock($setup["LocationOrderItem"], { key: index2, item }, null, 8, ["item"]); }), 128 /* KEYED_FRAGMENT */ )) ]), vue.createElementVNode("view", { class: "add-btn", onClick: $setup.handleAdd }, [ vue.createVNode(_component_u_icon, { name: "plus-circle", size: "40", color: "#19be6b", onClick: $setup.openScan }) ]), vue.createCommentVNode(" 底部扫码输入框 "), vue.createElementVNode("view", { class: "fixed-bottom pad-20", style: { "background": "#ffffff" } }, [ vue.createVNode(_component_u_search, { placeholder: "请输入快递单号/订单编号", modelValue: $setup.searchValue, "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $setup.searchValue = $event), onConfirm: $setup.onSearch, "show-action": false, "custom-style": "margin-right:10px" }, null, 8, ["modelValue"]), vue.createVNode(_component_u_icon, { name: "scan", size: "28", color: "#19be6b", onClick: $setup.openScan }) ]) ]); } const PagesIndexWmsSpeedyCheck = /* @__PURE__ */ _export_sfc(_sfc_main$s, [["render", _sfc_render$r], ["__scopeId", "data-v-283ebe02"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/wms/speedy-check.vue"]]); const _sfc_main$r = { __name: "BookItemOrder", props: { book: Object, index: Number }, emits: ["remove"], setup(__props, { expose: __expose, emit: __emit }) { __expose(); const props2 = __props; const emit2 = __emit; const removeBook = () => { emit2("remove", { book: props2.book, index: props2.index }); }; const __returned__ = { props: props2, emit: emit2, removeBook }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$q(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); return vue.openBlock(), vue.createElementBlock("view", { class: "book-item" }, [ vue.createElementVNode("image", { class: "book-image", src: $props.book.cover, mode: "aspectFill" }, null, 8, ["src"]), vue.createElementVNode("view", { class: "book-info" }, [ vue.createElementVNode("view", { class: "book-title" }, [ vue.createElementVNode( "text", null, vue.toDisplayString($props.book.bookName), 1 /* TEXT */ ), vue.createVNode(_component_u_icon, { name: "close", size: "18", onClick: $setup.removeBook }) ]), vue.createElementVNode("view", { class: "flex-a flex-1" }, [ vue.createElementVNode("view", { class: "book-details flex-d" }, [ vue.createElementVNode( "text", null, "ISBN: " + vue.toDisplayString($props.book.isbn), 1 /* TEXT */ ), vue.createElementVNode( "text", null, "定价: " + vue.toDisplayString($props.book.price), 1 /* TEXT */ ), vue.createElementVNode( "text", null, "折扣: " + vue.toDisplayString($props.book.recycleDiscount), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "book-stats flex-d ml-20" }, [ vue.createElementVNode( "text", null, "数量: " + vue.toDisplayString($props.book.quantity), 1 /* TEXT */ ), vue.createElementVNode( "text", null, "预估单价: " + vue.toDisplayString($props.book.expectPrice), 1 /* TEXT */ ), vue.createElementVNode( "text", { style: { "color": "#ff0000" } }, "审核金额: " + vue.toDisplayString($props.book.auditPrice), 1 /* TEXT */ ) ]) ]) ]) ]); } const BookItem = /* @__PURE__ */ _export_sfc(_sfc_main$r, [["render", _sfc_render$q], ["__scopeId", "data-v-97928f7a"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/components/BookItemOrder.vue"]]); const _sfc_main$q = { __name: "check-order", setup(__props, { expose: __expose }) { __expose(); const bookList = vue.ref([]); const totalBooks = vue.computed(() => bookList.value.length); const totalPrice = vue.computed(() => bookList.value.reduce((sum, book) => sum + parseFloat(book.auditPrice), 0).toFixed(2)); const removeBook = ({ book, index: index2 }) => { bookList.value.splice(index2, 1); }; const handleSubmit = () => { if (bookList.value.length === 0) { uni.$u.toast("请先添加书籍"); return; } uni.$u.http.post("/app/offlineorder/submitOfflineOrder", bookList.value).then((res2) => { if (res2.code == 200) { uni.$u.toast("提交成功"); bookList.value.length = 0; } }); }; const handleScan = () => { uni.scanCode({ success: (res2) => { handleBarcode(res2.result); formatAppLog("log", "at pages/index/offline/check-order.vue:51", "扫码结果:", res2.result); }, fail: (res2) => { formatAppLog("log", "at pages/index/offline/check-order.vue:55", "扫码失败:", res2); uni.$u.toast("扫码失败"); } }); }; const handleBarcode = (barcode) => { formatAppLog("log", "at pages/index/offline/check-order.vue:62", "扫码结果:", barcode); uni.$u.http.get(`/app/offlineorder/getBookInfo/${barcode}`).then((res2) => { if (res2.code == 200) { res2.data.quantity = 1; let item = bookList.value.find((item2) => item2.isbn === res2.data.isbn); if (item) { item.quantity += 1; item.auditPrice = (item.expectPrice * item.quantity).toFixed(2); return; } else { res2.data.auditPrice = (res2.data.expectPrice * res2.data.quantity).toFixed(2); bookList.value.push(res2.data); } } }); }; onLoad(() => { uni.$u.useGlobalEvent((e) => { handleBarcode(e.barcode); }); }); const __returned__ = { bookList, totalBooks, totalPrice, removeBook, handleSubmit, handleScan, handleBarcode, ref: vue.ref, computed: vue.computed, get onLoad() { return onLoad; }, BookItem }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$p(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_button = resolveEasycom(vue.resolveDynamicComponent("u-button"), __easycom_3$6); return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createElementVNode("view", { class: "book-list" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.bookList, (book, index2) => { return vue.openBlock(), vue.createBlock($setup["BookItem"], { key: index2, book, onRemove: $setup.removeBook }, null, 8, ["book"]); }), 128 /* KEYED_FRAGMENT */ )) ]), vue.createCommentVNode(" 底部信息和按钮 "), vue.createElementVNode("view", { class: "footer fixed-bottom flex-d", style: { "padding-top": "10rpx" } }, [ $setup.bookList.length > 0 ? (vue.openBlock(), vue.createElementBlock("text", { key: 0, class: "pad-10" }, [ vue.createTextVNode("共 "), vue.createElementVNode( "text", { style: { "color": "#ff0000" } }, vue.toDisplayString($setup.totalBooks), 1 /* TEXT */ ), vue.createTextVNode(" 本,预估回收价 "), vue.createElementVNode( "text", { style: { "color": "#ff0000" } }, "¥" + vue.toDisplayString($setup.totalPrice), 1 /* TEXT */ ) ])) : vue.createCommentVNode("v-if", true), vue.createElementVNode("view", { class: "flex-a mt-12" }, [ vue.createVNode(_component_u_button, { size: "large", type: "primary", text: "提交", onClick: $setup.handleSubmit }), vue.createVNode(_component_u_button, { size: "large", type: "warning", text: "扫码", onClick: $setup.handleScan }) ]) ]) ]); } const PagesIndexOfflineCheckOrder = /* @__PURE__ */ _export_sfc(_sfc_main$q, [["render", _sfc_render$p], ["__scopeId", "data-v-8fea8cdb"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/offline/check-order.vue"]]); const _sfc_main$p = { __name: "check-record", setup(__props, { expose: __expose }) { __expose(); const scrollRef = vue.ref(null); const refreshList = () => { var _a; (_a = scrollRef.value) == null ? void 0 : _a.resetUpScroll(); }; let dataList = vue.ref([]); const updateList = (data) => { dataList.value = data; }; const __returned__ = { scrollRef, refreshList, get dataList() { return dataList; }, set dataList(v) { dataList = v; }, updateList, PageScroll, ref: vue.ref }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$o(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_sticky = resolveEasycom(vue.resolveDynamicComponent("u-sticky"), __easycom_1$3); return vue.openBlock(), vue.createElementBlock("view", { class: "common-page", style: { "padding": "0" } }, [ vue.createVNode( $setup["PageScroll"], { requestStr: "/app/offlineorder/getUserStat", onUpdateList: $setup.updateList, ref: "scrollRef" }, { default: vue.withCtx(() => [ vue.createVNode(_component_u_sticky, { customNavHeight: 0 }, { default: vue.withCtx(() => [ vue.createElementVNode("view", { class: "search-area flex-a" }, [ vue.createElementVNode("view", { class: "text-item flex-1" }, "核单时间"), vue.createElementVNode("view", { class: "text-item flex-1" }, "核单数量"), vue.createElementVNode("view", { class: "text-item flex-1" }, "核单本数"), vue.createElementVNode("view", { class: "text-item flex-1" }, "预估金额") ]) ]), _: 1 /* STABLE */ }), vue.createElementVNode("view", { class: "list-con" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.dataList, (item, index2) => { return vue.openBlock(), vue.createElementBlock("view", { key: index2, class: "flex-a" }, [ vue.createElementVNode( "view", { class: "text-item flex-1" }, vue.toDisplayString(item.statDate), 1 /* TEXT */ ), vue.createElementVNode( "view", { class: "text-item flex-1" }, vue.toDisplayString(item.totalNum), 1 /* TEXT */ ), vue.createElementVNode( "view", { class: "text-item flex-1" }, vue.toDisplayString(item.bookNum), 1 /* TEXT */ ), vue.createElementVNode( "view", { class: "text-item flex-1" }, vue.toDisplayString(item.expectAmount), 1 /* TEXT */ ) ]); }), 128 /* KEYED_FRAGMENT */ )) ]) ]), _: 1 /* STABLE */ }, 512 /* NEED_PATCH */ ) ]); } const PagesIndexOfflineCheckRecord = /* @__PURE__ */ _export_sfc(_sfc_main$p, [["render", _sfc_render$o], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/offline/check-record.vue"]]); const props$3 = { props: { // 内置图标名称,或图片路径,建议绝对路径 icon: { type: String, default: props$E.empty.icon }, // 提示文字 text: { type: String, default: props$E.empty.text }, // 文字颜色 textColor: { type: String, default: props$E.empty.textColor }, // 文字大小 textSize: { type: [String, Number], default: props$E.empty.textSize }, // 图标的颜色 iconColor: { type: String, default: props$E.empty.iconColor }, // 图标的大小 iconSize: { type: [String, Number], default: props$E.empty.iconSize }, // 选择预置的图标类型 mode: { type: String, default: props$E.empty.mode }, // 图标宽度,单位px width: { type: [String, Number], default: props$E.empty.width }, // 图标高度,单位px height: { type: [String, Number], default: props$E.empty.height }, // 是否显示组件 show: { type: Boolean, default: props$E.empty.show }, // 组件距离上一个元素之间的距离,默认px单位 marginTop: { type: [String, Number], default: props$E.empty.marginTop } } }; const _sfc_main$o = { name: "u-empty", mixins: [mpMixin, mixin, props$3], data() { return { icons: { car: "购物车为空", page: "页面不存在", search: "没有搜索结果", address: "没有收货地址", wifi: "没有WiFi", order: "订单为空", coupon: "没有优惠券", favor: "暂无收藏", permission: "无权限", history: "无历史记录", news: "无新闻列表", message: "消息列表为空", list: "列表为空", data: "数据为空", comment: "暂无评论" } }; }, computed: { // 组件样式 emptyStyle() { const style = {}; style.marginTop = uni.$u.addUnit(this.marginTop); return uni.$u.deepMerge(uni.$u.addStyle(this.customStyle), style); }, // 文本样式 textStyle() { const style = {}; style.color = this.textColor; style.fontSize = uni.$u.addUnit(this.textSize); return style; }, // 判断icon是否图片路径 isSrc() { return this.icon.indexOf("/") >= 0; } } }; function _sfc_render$n(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); return _ctx.show ? (vue.openBlock(), vue.createElementBlock( "view", { key: 0, class: "u-empty", style: vue.normalizeStyle([$options.emptyStyle]) }, [ !$options.isSrc ? (vue.openBlock(), vue.createBlock(_component_u_icon, { key: 0, name: _ctx.mode === "message" ? "chat" : `empty-${_ctx.mode}`, size: _ctx.iconSize, color: _ctx.iconColor, "margin-top": "14" }, null, 8, ["name", "size", "color"])) : (vue.openBlock(), vue.createElementBlock("image", { key: 1, style: vue.normalizeStyle({ width: _ctx.$u.addUnit(_ctx.width), height: _ctx.$u.addUnit(_ctx.height) }), src: _ctx.icon, mode: "widthFix" }, null, 12, ["src"])), vue.createElementVNode( "text", { class: "u-empty__text", style: vue.normalizeStyle([$options.textStyle]) }, vue.toDisplayString(_ctx.text ? _ctx.text : $data.icons[_ctx.mode]), 5 /* TEXT, STYLE */ ), _ctx.$slots.default || _ctx.$slots.$default ? (vue.openBlock(), vue.createElementBlock("view", { key: 2, class: "u-empty__wrap" }, [ vue.renderSlot(_ctx.$slots, "default", {}, void 0, true) ])) : vue.createCommentVNode("v-if", true) ], 4 /* STYLE */ )) : vue.createCommentVNode("v-if", true); } const __easycom_3$1 = /* @__PURE__ */ _export_sfc(_sfc_main$o, [["render", _sfc_render$n], ["__scopeId", "data-v-8dd5928e"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-empty/u-empty.vue"]]); const _sfc_main$n = { __name: "scan-book", setup(__props, { expose: __expose }) { __expose(); const searchValue = vue.ref(""); const scannedISBN = vue.ref(""); const currentTab = vue.ref(0); const tabsList = [ { name: "简介" }, { name: "轨迹" } ]; const bookInfo = vue.ref(null); const handleSearch = () => { if (!searchValue.value) return; loadBookInfo(searchValue.value); }; const handleScan = () => { uni.scanCode({ success: (res2) => { searchValue.value = res2.result; scannedISBN.value = res2.result; loadBookInfo(res2.result); } }); }; const loadBookInfo = (isbn) => { uni.$u.http.get(`/app/book/getBookByIsbn/${isbn}`).then((res2) => { if (res2.code == 200) { bookInfo.value = res2.data; } }); }; const __returned__ = { searchValue, scannedISBN, currentTab, tabsList, bookInfo, handleSearch, handleScan, loadBookInfo, ref: vue.ref }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$m(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); const _component_u_search = resolveEasycom(vue.resolveDynamicComponent("u-search"), __easycom_4$2); const _component_u_sticky = resolveEasycom(vue.resolveDynamicComponent("u-sticky"), __easycom_1$3); const _component_u_empty = resolveEasycom(vue.resolveDynamicComponent("u-empty"), __easycom_3$1); const _component_u_tabs = resolveEasycom(vue.resolveDynamicComponent("u-tabs"), __easycom_4$1); const _component_u_button = resolveEasycom(vue.resolveDynamicComponent("u-button"), __easycom_3$6); return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createCommentVNode(" 顶部搜索框 "), vue.createVNode(_component_u_sticky, null, { default: vue.withCtx(() => [ vue.createElementVNode("view", { class: "search-area" }, [ vue.createVNode(_component_u_search, { modelValue: $setup.searchValue, "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.searchValue = $event), placeholder: "扫描/输入ISBN或SH码", "show-action": true, actionText: "查询", onSearch: $setup.handleSearch, onCustom: $setup.handleSearch }, { suffixIcon: vue.withCtx(() => [ $setup.searchValue ? (vue.openBlock(), vue.createBlock(_component_u_icon, { key: 0, name: "close", size: "20", onClick: _cache[0] || (_cache[0] = ($event) => $setup.searchValue = "") })) : vue.createCommentVNode("v-if", true) ]), _: 1 /* STABLE */ }, 8, ["modelValue"]) ]) ]), _: 1 /* STABLE */ }), vue.createCommentVNode(" 已扫描ISBN显示 "), $setup.scannedISBN ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "isbn-display" }, [ vue.createElementVNode( "text", null, "已查询ISBN:" + vue.toDisplayString($setup.scannedISBN), 1 /* TEXT */ ) ])) : vue.createCommentVNode("v-if", true), vue.createCommentVNode(" 内容区域 "), vue.createElementVNode("view", { class: "content" }, [ vue.createCommentVNode(" 空状态 "), !$setup.bookInfo ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "empty-state" }, [ vue.createVNode(_component_u_empty, { mode: "data", text: "暂无扫描数据", "margin-top": "100" }) ])) : (vue.openBlock(), vue.createElementBlock( vue.Fragment, { key: 1 }, [ vue.createCommentVNode(" 书籍详情 "), vue.createElementVNode("view", { class: "book-detail" }, [ vue.createElementVNode("view", { class: "common-card mb-20" }, [ vue.createElementVNode("view", { class: "flex flex-d flex-a-c" }, [ vue.createElementVNode("image", { class: "book-image", src: $setup.bookInfo.cover, mode: "heightFix" }, null, 8, ["src"]), vue.createElementVNode( "text", { class: "ml-20 font-15" }, vue.toDisplayString($setup.bookInfo.bookName), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "book-status" }, [ vue.createElementVNode( "text", { class: "status-text" }, "状态:" + vue.toDisplayString($setup.bookInfo.recycleStatus ? "已加入回收书单" : "未加入回收书单"), 1 /* TEXT */ ), $setup.bookInfo.recycleTime ? (vue.openBlock(), vue.createElementBlock( "text", { key: 0, class: "time-text" }, "加入时间:" + vue.toDisplayString($setup.bookInfo.recycleTime), 1 /* TEXT */ )) : vue.createCommentVNode("v-if", true) ]) ]), vue.createCommentVNode(" 基本信息 "), vue.createElementVNode("view", { class: "common-card info-section mb-20" }, [ vue.createElementVNode("view", { class: "price-info" }, [ vue.createElementVNode("text", { class: "label" }, "定价:"), vue.createElementVNode( "text", { class: "price" }, "¥" + vue.toDisplayString($setup.bookInfo.price), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "recycle-price" }, "回收价:¥" + vue.toDisplayString($setup.bookInfo.expectPrice), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "book-info" }, [ vue.createElementVNode("view", { class: "info-item" }, [ vue.createElementVNode("text", { class: "label" }, "ISBN:"), vue.createElementVNode( "text", null, vue.toDisplayString($setup.bookInfo.isbn), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "info-item" }, [ vue.createElementVNode("text", { class: "label" }, "语言:"), vue.createElementVNode( "text", null, vue.toDisplayString($setup.bookInfo.lang || "-"), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "info-item" }, [ vue.createElementVNode("text", { class: "label" }, "作者:"), vue.createElementVNode( "text", null, vue.toDisplayString($setup.bookInfo.author), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "info-item" }, [ vue.createElementVNode("text", { class: "label" }, "出版社:"), vue.createElementVNode( "text", null, vue.toDisplayString($setup.bookInfo.publish), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "info-item" }, [ vue.createElementVNode("text", { class: "label" }, "出版时间:"), vue.createElementVNode( "text", null, vue.toDisplayString($setup.bookInfo.pubDate), 1 /* TEXT */ ) ]) ]) ]), vue.createCommentVNode(" 简介和轨迹 "), vue.createElementVNode("view", { class: "common-card tabs-section", style: { "padding": "0" } }, [ vue.createVNode(_component_u_tabs, { list: $setup.tabsList, modelValue: $setup.currentTab, "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $setup.currentTab = $event), lineColor: "#19be6b" }, null, 8, ["modelValue"]), vue.createElementVNode("view", { class: "tab-content" }, [ $setup.currentTab === 0 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "intro-content" }, [ vue.createElementVNode("text", { class: "section-title" }, "内容简介:"), vue.createElementVNode( "text", { class: "content-text" }, vue.toDisplayString($setup.bookInfo.contentBlurb), 1 /* TEXT */ ), vue.createElementVNode("text", { class: "section-title" }, "作者简介:"), vue.createElementVNode( "text", { class: "content-text" }, vue.toDisplayString($setup.bookInfo.anthorBlurb), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "content-text" }, vue.toDisplayString($setup.bookInfo.catalog), 1 /* TEXT */ ) ])) : (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "track-content" }, [ vue.createElementVNode( "text", null, vue.toDisplayString($setup.bookInfo.track), 1 /* TEXT */ ) ])) ]) ]) ]) ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */ )) ]), vue.createCommentVNode(" 底部扫描按钮 "), vue.createElementVNode("view", { class: "fixed-bottom" }, [ vue.createVNode(_component_u_button, { size: "large", type: "primary", text: "扫码(ISBN或SH码)", onClick: $setup.handleScan }) ]) ]); } const PagesIndexEntryScanBook = /* @__PURE__ */ _export_sfc(_sfc_main$n, [["render", _sfc_render$m], ["__scopeId", "data-v-04d3117d"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/entry/scan-book.vue"]]); const _sfc_main$m = { __name: "book-weight", setup(__props, { expose: __expose }) { __expose(); const customStyle = { height: "100rpx", fontSize: "32rpx" }; const labelStyle = { fontSize: "32rpx" }; const placeholderStyle2 = vue.ref("fontSize: 32rpx"); const form = vue.ref({ weight: "", isbn: "" }); const rules2 = { weight: [ { required: true, message: "请输入重量", trigger: "blur" }, { type: "number", message: "重量必须是数字", trigger: "blur" } ], isbn: [{ required: true, message: "请输入ISBN", trigger: "blur" }] }; function handleScan() { uni.scanCode({ success: (res2) => { form.value.isbn = res2.result; } }); } const formRef = vue.ref(null); const submitForm = () => { formRef.value.validate().then((valid) => { if (valid) { uni.$u.http.post("/app/weighChangeLog/add", form.value).then((res2) => { if (res2.code == 200) { uni.$u.toast("修改成功"); form.value.isbn = ""; form.value.weight = ""; } else { uni.$u.toast(res2.msg); } }); } }); }; onLoad(() => { uni.$u.useGlobalEvent((e) => { form.value.isbn = e.barcode; }); }); const __returned__ = { customStyle, labelStyle, placeholderStyle: placeholderStyle2, form, rules: rules2, handleScan, formRef, submitForm, ref: vue.ref, get onLoad() { return onLoad; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$l(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_input = resolveEasycom(vue.resolveDynamicComponent("u-input"), __easycom_0$f); const _component_u_form_item = resolveEasycom(vue.resolveDynamicComponent("u-form-item"), __easycom_1$a); const _component_u_form = resolveEasycom(vue.resolveDynamicComponent("u-form"), __easycom_2$7); const _component_u_button = resolveEasycom(vue.resolveDynamicComponent("u-button"), __easycom_3$6); return vue.openBlock(), vue.createElementBlock("view", { class: "common-page" }, [ vue.createVNode(_component_u_form, { model: $setup.form, rules: $setup.rules, ref: "formRef", labelWidth: "90px", errorType: "toast", labelStyle: $setup.labelStyle }, { default: vue.withCtx(() => [ vue.createVNode(_component_u_form_item, { label: "重量(克)", prop: "weight", required: "" }, { default: vue.withCtx(() => [ vue.createVNode(_component_u_input, { placeholderStyle: $setup.placeholderStyle, customStyle: $setup.customStyle, modelValue: $setup.form.weight, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.form.weight = $event), placeholder: "请输入数值", clearable: "" }, null, 8, ["placeholderStyle", "modelValue"]) ]), _: 1 /* STABLE */ }), vue.createVNode(_component_u_form_item, { label: "ISBN", prop: "isbn", required: "" }, { default: vue.withCtx(() => [ vue.createVNode(_component_u_input, { placeholderStyle: $setup.placeholderStyle, customStyle: $setup.customStyle, modelValue: $setup.form.isbn, "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.form.isbn = $event), placeholder: "请输入编码", clearable: "" }, null, 8, ["placeholderStyle", "modelValue"]) ]), _: 1 /* STABLE */ }) ]), _: 1 /* STABLE */ }, 8, ["model"]), vue.createElementVNode("view", { class: "fixed-bottom" }, [ vue.createVNode(_component_u_button, { size: "large", type: "warning", text: "扫码", onClick: $setup.handleScan }), vue.createVNode(_component_u_button, { size: "large", type: "success", text: "提交", onClick: $setup.submitForm }) ]) ]); } const PagesIndexEntryBookWeight = /* @__PURE__ */ _export_sfc(_sfc_main$m, [["render", _sfc_render$l], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/entry/book-weight.vue"]]); const props$2 = { props: { // 显示文字 title: { type: String, default: props$E.alert.title }, // 主题,success/warning/info/error type: { type: String, default: props$E.alert.type }, // 辅助性文字 description: { type: String, default: props$E.alert.description }, // 是否可关闭 closable: { type: Boolean, default: props$E.alert.closable }, // 是否显示图标 showIcon: { type: Boolean, default: props$E.alert.showIcon }, // 浅或深色调,light-浅色,dark-深色 effect: { type: String, default: props$E.alert.effect }, // 文字是否居中 center: { type: Boolean, default: props$E.alert.center }, // 字体大小 fontSize: { type: [String, Number], default: props$E.alert.fontSize } } }; const _sfc_main$l = { name: "u-alert", mixins: [mpMixin, mixin, props$2], data() { return { show: true }; }, computed: { iconColor() { return this.effect === "light" ? this.type : "#fff"; }, // 不同主题对应不同的图标 iconName() { switch (this.type) { case "success": return "checkmark-circle-fill"; case "error": return "close-circle-fill"; case "warning": return "error-circle-fill"; case "info": return "info-circle-fill"; case "primary": return "more-circle-fill"; default: return "error-circle-fill"; } } }, methods: { // 点击内容 clickHandler() { this.$emit("click"); }, // 点击关闭按钮 closeHandler() { this.show = false; } } }; function _sfc_render$k(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); const _component_u_transition = resolveEasycom(vue.resolveDynamicComponent("u-transition"), __easycom_1$5); return vue.openBlock(), vue.createBlock(_component_u_transition, { mode: "fade", show: $data.show }, { default: vue.withCtx(() => [ vue.createElementVNode( "view", { class: vue.normalizeClass(["u-alert", [`u-alert--${_ctx.type}--${_ctx.effect}`]]), onClick: _cache[1] || (_cache[1] = vue.withModifiers((...args) => $options.clickHandler && $options.clickHandler(...args), ["stop"])), style: vue.normalizeStyle([_ctx.$u.addStyle(_ctx.customStyle)]) }, [ _ctx.showIcon ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "u-alert__icon" }, [ vue.createVNode(_component_u_icon, { name: $options.iconName, size: "18", color: $options.iconColor }, null, 8, ["name", "color"]) ])) : vue.createCommentVNode("v-if", true), vue.createElementVNode( "view", { class: "u-alert__content", style: vue.normalizeStyle([{ paddingRight: _ctx.closable ? "20px" : 0 }]) }, [ _ctx.title ? (vue.openBlock(), vue.createElementBlock( "text", { key: 0, class: vue.normalizeClass(["u-alert__content__title", [_ctx.effect === "dark" ? "u-alert__text--dark" : `u-alert__text--${_ctx.type}--light`]]), style: vue.normalizeStyle([{ fontSize: _ctx.$u.addUnit(_ctx.fontSize), textAlign: _ctx.center ? "center" : "left" }]) }, vue.toDisplayString(_ctx.title), 7 /* TEXT, CLASS, STYLE */ )) : vue.createCommentVNode("v-if", true), _ctx.description ? (vue.openBlock(), vue.createElementBlock( "text", { key: 1, class: vue.normalizeClass(["u-alert__content__desc", [_ctx.effect === "dark" ? "u-alert__text--dark" : `u-alert__text--${_ctx.type}--light`]]), style: vue.normalizeStyle([{ fontSize: _ctx.$u.addUnit(_ctx.fontSize), textAlign: _ctx.center ? "center" : "left" }]) }, vue.toDisplayString(_ctx.description), 7 /* TEXT, CLASS, STYLE */ )) : vue.createCommentVNode("v-if", true) ], 4 /* STYLE */ ), _ctx.closable ? (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "u-alert__close", onClick: _cache[0] || (_cache[0] = vue.withModifiers((...args) => $options.closeHandler && $options.closeHandler(...args), ["stop"])) }, [ vue.createVNode(_component_u_icon, { name: "close", color: $options.iconColor, size: "15" }, null, 8, ["color"]) ])) : vue.createCommentVNode("v-if", true) ], 6 /* CLASS, STYLE */ ) ]), _: 1 /* STABLE */ }, 8, ["show"]); } const __easycom_3 = /* @__PURE__ */ _export_sfc(_sfc_main$l, [["render", _sfc_render$k], ["__scopeId", "data-v-158e540a"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-alert/u-alert.vue"]]); const _sfc_main$k = { __name: "logistics-detail", setup(__props, { expose: __expose }) { __expose(); const logisticsInfo = vue.ref([]); function getLogisticsDetail(orderId) { uni.$u.http.get(`/app/orderinfo/getOrderExpressList?orderId=${orderId}`).then((res2) => { if (res2.code == 200) { logisticsInfo.value = res2.data; } }); } function handleButtonClick(status, reason) { uni.$u.http.post("/app/orderexception/update", { id: id.value, checkStatus: status, refusalReason: reason }).then((res2) => { if (res2.code == 200) { checkStatus.value = status; uni.$u.toast("操作成功"); emit("refresh"); } else { uni.$u.toast(res2.msg); } }); } const checkStatus = vue.ref(0); const id = vue.ref(0); onLoad((e) => { checkStatus.value = e.status; id.value = e.id; getLogisticsDetail(e.orderId); }); const __returned__ = { logisticsInfo, getLogisticsDetail, handleButtonClick, checkStatus, id, ref: vue.ref, get onLoad() { return onLoad; }, ApproveButton, RejectButton }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$j(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_alert = resolveEasycom(vue.resolveDynamicComponent("u-alert"), __easycom_3); const _component_u_sticky = resolveEasycom(vue.resolveDynamicComponent("u-sticky"), __easycom_1$3); const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createCommentVNode(" 物流公司信息 "), vue.createVNode(_component_u_sticky, null, { default: vue.withCtx(() => [ vue.createVNode(_component_u_alert, { title: `物流公司:京东快递`, type: "warning" }) ]), _: 1 /* STABLE */ }), vue.createCommentVNode(" 自定义物流轨迹时间轴 "), vue.createElementVNode("scroll-view", { "scroll-y": "", class: "timeline-container" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.logisticsInfo, (item, index2) => { return vue.openBlock(), vue.createElementBlock("view", { key: index2, class: "timeline-item" }, [ vue.createElementVNode("view", { class: "timeline-icon" }, [ vue.createVNode(_component_u_icon, { name: "map-fill", color: "#19be6b", size: "16" }) ]), vue.createElementVNode("view", { class: "timeline-content" }, [ vue.createElementVNode( "text", { class: "title" }, vue.toDisplayString(item.title), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "desc" }, vue.toDisplayString(item.description), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "time" }, vue.toDisplayString(item.time), 1 /* TEXT */ ) ]), index2 < $setup.logisticsInfo.length - 1 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "timeline-line" })) : vue.createCommentVNode("v-if", true) ]); }), 128 /* KEYED_FRAGMENT */ )) ]), vue.createCommentVNode(" 底部操作按钮 "), $setup.checkStatus == 1 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "fixed-bottom" }, [ vue.createVNode($setup["RejectButton"], { size: "large", onReject: _cache[0] || (_cache[0] = (reason) => $setup.handleButtonClick(3, reason)) }), vue.createVNode($setup["ApproveButton"], { size: "large", onApprove: _cache[1] || (_cache[1] = ($event) => $setup.handleButtonClick(2)) }) ])) : vue.createCommentVNode("v-if", true) ]); } const PagesIndexExpressLogisticsDetail = /* @__PURE__ */ _export_sfc(_sfc_main$k, [["render", _sfc_render$j], ["__scopeId", "data-v-8e52fe94"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/express/logistics-detail.vue"]]); const _sfc_main$j = { __name: "task-detail", setup(__props, { expose: __expose }) { __expose(); const currentTask = vue.ref(0); const totalTasks = vue.ref(77); const currentIndex = vue.ref(1); const nextLocation = vue.ref("K01-02-4A"); const orderInfo = vue.ref({ orderNo: "4571211", logisticsNo: "DPK203156442584", badCount: 10 }); const ttsModule2 = vue.ref(null); vue.onMounted(() => { ttsModule2.value = new VolumeTTS(); }); const searchText = vue.ref(""); const badList = vue.ref([{ image: "https://img20.360buyimg.com/da/jfs/t1/141592/25/8861/261559/5f68d8c1E33ed78ab/698ad655bfcfbaed.png", title: "公文写作教程", isbn: "978704051555", price: 49.5, discount: 0.85, quantity: 5, set: "不是", good: 0, average: 0, bad: 1, reason: "明显泛黄水印/发霉/明显异味" }]); const handleNextTask = () => { if (currentTask.value < totalTasks.value) { currentTask.value++; VolumeTTS.speak(nextLocation.value); } }; const onSearch = () => { }; const onSubmit = () => { uni.showModal({ title: "确认提示", content: "是否确认提交本次下架?", success: (res2) => { if (res2.confirm) { uni.showToast({ title: "提交成功", icon: "success" }); ttsModule2.value.speak("任务已提交"); } } }); }; function goBack() { uni.showModal({ title: "确认提示", content: "是否确认放弃本次下架?", success: (res2) => { if (res2.confirm) { uni.navigateBack(); ttsModule2.value.speak("任务已放弃"); } } }); } const openScan = () => { uni.scanCode({ success: (res2) => { searchText.value = res2.result; }, fail: (err) => { uni.showToast({ title: "扫码失败", icon: "error" }); } }); }; const __returned__ = { currentTask, totalTasks, currentIndex, nextLocation, orderInfo, ttsModule: ttsModule2, searchText, badList, handleNextTask, onSearch, onSubmit, goBack, openScan, ref: vue.ref, onMounted: vue.onMounted, BadOutCard, get VolumeTTS() { return VolumeTTS; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$i(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); const _component_u_text = resolveEasycom(vue.resolveDynamicComponent("u-text"), __easycom_1$8); const _component_u_navbar = resolveEasycom(vue.resolveDynamicComponent("u-navbar"), __easycom_2$2); const _component_u_alert = resolveEasycom(vue.resolveDynamicComponent("u-alert"), __easycom_3); const _component_u_search = resolveEasycom(vue.resolveDynamicComponent("u-search"), __easycom_4$2); return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createCommentVNode(" 顶部导航栏 "), vue.createVNode(_component_u_navbar, { title: "下架任务", border: false, fixed: "", "safe-area-inset-top": "" }, { left: vue.withCtx(() => [ vue.createVNode(_component_u_icon, { name: "arrow-left", color: "#333333", size: "20", onClick: $setup.goBack }) ]), right: vue.withCtx(() => [ vue.createVNode(_component_u_text, { type: "primary", text: "提交", onClick: $setup.onSubmit }) ]), _: 1 /* STABLE */ }), vue.createCommentVNode(" 任务进度 "), vue.createElementVNode("view", { class: "progress-section" }, [ vue.createVNode(_component_u_alert, { title: "当前任务", type: "info", center: "" }), vue.createElementVNode("view", { class: "flex flex-j-b pad-10", style: { "padding-right": "40rpx" } }, [ vue.createElementVNode("view", { class: "next-task", onClick: $setup.handleNextTask }, [ vue.createElementVNode("text", null, "上一个") ]), vue.createElementVNode("view", { class: "flex-c" }, [ vue.createElementVNode("text", null, [ vue.createTextVNode( vue.toDisplayString($setup.currentTask), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "progress-text font-18 color-green" }, "/" + vue.toDisplayString($setup.totalTasks), 1 /* TEXT */ ) ]) ]), vue.createElementVNode("view", { class: "color-green", onClick: $setup.handleNextTask }, [ vue.createElementVNode("text", null, "下一个") ]) ]) ]), vue.createCommentVNode(" 库位信息 "), vue.createElementVNode("view", { class: "flex flex-j-b pad-10 next-location", style: { "padding-right": "40rpx", "align-items": "center" } }, [ vue.createElementVNode( "view", { class: "font-14 mb-20" }, vue.toDisplayString($setup.currentIndex) + "/" + vue.toDisplayString($setup.totalTasks), 1 /* TEXT */ ), vue.createElementVNode("view", { class: "flex-d" }, [ vue.createElementVNode( "view", { class: "font-20 text-center" }, vue.toDisplayString($setup.nextLocation), 1 /* TEXT */ ), vue.createElementVNode( "view", { class: "location-detail font-13 mt-10" }, "下一库位 " + vue.toDisplayString($setup.nextLocation), 1 /* TEXT */ ) ]), vue.createVNode(_component_u_icon, { name: "attach", size: "28" }) ]), vue.createCommentVNode(" 订单信息 "), vue.createElementVNode("view", { class: "order-info" }, [ vue.createElementVNode( "view", { class: "info-item" }, "订单编号:" + vue.toDisplayString($setup.orderInfo.orderNo), 1 /* TEXT */ ), vue.createElementVNode( "view", { class: "info-item" }, "物流单号:" + vue.toDisplayString($setup.orderInfo.logisticsNo), 1 /* TEXT */ ), vue.createElementVNode( "view", { class: "info-item" }, "不良数量:" + vue.toDisplayString($setup.orderInfo.badCount), 1 /* TEXT */ ) ]), vue.createCommentVNode(" 极差商品列表 "), vue.createElementVNode("view", { class: "bad-list" }, [ vue.createElementVNode("view", { class: "list-title mb-6 mt-20" }, "极差"), (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.badList, (item, index2) => { return vue.openBlock(), vue.createElementBlock("view", { key: index2 }, [ vue.createVNode($setup["BadOutCard"], { item }, null, 8, ["item"]) ]); }), 128 /* KEYED_FRAGMENT */ )) ]), vue.createCommentVNode(" 底部搜索框 "), vue.createElementVNode("view", { class: "fixed-bottom pad-20", style: { "background": "#ffffff" } }, [ vue.createVNode(_component_u_search, { modelValue: $setup.searchText, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.searchText = $event), placeholder: "请输入订单编号", "show-action": false, clearabled: true, onChange: $setup.onSearch, height: "40" }, null, 8, ["modelValue"]), vue.createVNode(_component_u_icon, { name: "scan", size: "28", color: "#19be6b", onClick: $setup.openScan }) ]) ]); } const PagesIndexWmsTaskDetail = /* @__PURE__ */ _export_sfc(_sfc_main$j, [["render", _sfc_render$i], ["__scopeId", "data-v-ca763ad9"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/wms/task-detail.vue"]]); const _sfc_main$i = { __name: "speedy-check-add", setup(__props, { expose: __expose }) { __expose(); const location2 = vue.ref("k01-01-4A"); const searchValue = vue.ref(""); const products = vue.ref([ { orderNo: "4846464", logisticsNo: "DPK2023497491611", inspectionDate: "2024-11-14", badCount: 5, operator: "李程雪", checked: false }, { orderNo: "4846464", logisticsNo: "DPK2023497491611", inspectionDate: "2024-11-14", badCount: 5, operator: "李程雪", checked: false } ]); const isAllSelected = vue.computed(() => { return products.value.length > 0 && products.value.every((item) => item.checked); }); const toggleItemSelect = (item) => { item.checked = !item.checked; }; const toggleSelectAll = () => { const newState = !isAllSelected.value; products.value.forEach((item) => { item.checked = newState; }); }; const onSubmit = () => { const selectedItems = products.value.filter((item) => item.checked); uni.$emit("selectedProducts", selectedItems); uni.navigateBack(); }; const goBack = () => { uni.navigateBack(); }; const __returned__ = { location: location2, searchValue, products, isAllSelected, toggleItemSelect, toggleSelectAll, onSubmit, goBack, ref: vue.ref, computed: vue.computed, LocationOrderItem }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$h(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); const _component_u_text = resolveEasycom(vue.resolveDynamicComponent("u-text"), __easycom_1$8); const _component_u_navbar = resolveEasycom(vue.resolveDynamicComponent("u-navbar"), __easycom_2$2); return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createVNode(_component_u_navbar, { title: "选择商品", border: false, fixed: "", "safe-area-inset-top": "" }, { left: vue.withCtx(() => [ vue.createVNode(_component_u_icon, { name: "arrow-left", color: "#333333", size: "20", onClick: $setup.goBack }) ]), right: vue.withCtx(() => [ vue.createVNode(_component_u_text, { type: "primary", text: "确定", onClick: $setup.onSubmit }) ]), _: 1 /* STABLE */ }), vue.createCommentVNode(" 库位显示 "), vue.createElementVNode("view", { class: "location-info" }, [ vue.createElementVNode( "text", null, vue.toDisplayString($setup.location), 1 /* TEXT */ ) ]), vue.createCommentVNode(" 订单列表 "), vue.createElementVNode("view", { class: "product-details" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.products, (item, index2) => { return vue.openBlock(), vue.createBlock($setup["LocationOrderItem"], { isCheck: "", key: index2, item, onSelect: $setup.toggleItemSelect }, null, 8, ["item"]); }), 128 /* KEYED_FRAGMENT */ )) ]), vue.createCommentVNode(" 底部全选栏 "), vue.createElementVNode("view", { class: "fixed-bottom" }, [ vue.createElementVNode("view", { class: "select-all", onClick: $setup.toggleSelectAll }, [ vue.createVNode(_component_u_icon, { name: $setup.isAllSelected ? "checkmark-circle-fill" : "checkmark-circle", color: $setup.isAllSelected ? "#19be6b" : "#c8c9cc", size: "28" }, null, 8, ["name", "color"]), vue.createElementVNode("text", { class: "select-text" }, "全选") ]), vue.createElementVNode( "text", { class: "order-count" }, "订单总数: " + vue.toDisplayString($setup.products.length), 1 /* TEXT */ ) ]) ]); } const PagesIndexWmsSpeedyCheckAdd = /* @__PURE__ */ _export_sfc(_sfc_main$i, [["render", _sfc_render$h], ["__scopeId", "data-v-dabb4347"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/index/wms/speedy-check-add.vue"]]); const _sfc_main$h = { __name: "user-info", setup(__props, { expose: __expose }) { __expose(); const userInfo = vue.ref({ avatar: "/static/images/avatar.jpg", name: "无", gender: "无", birthday: "无", education: "无", school: "无", username: "用户账号", account: "fxt", createTime: "2024-06-12 12:00:00", lastLogin: "", company: "无", employeeId: "无", position: "无", phone: "18888888888", email: "无", address: "无" }); function getUserInfo() { uni.$u.http.get("/app/appUser/getUserInfoById").then((res2) => { if (res2.code == 200) { userInfo.value = res2.data; } }); } getUserInfo(); function setAvatar(avatarfile) { uni.$u.http.post("/app/appUser/setAvatar", { avatarfile }).then((res2) => { if (res2.code == 200) { userInfo.value.avatar = avatarfile; uni.showToast({ title: "头像设置成功", icon: "success" }); } }); } const handleEditAvatar = () => { const token = uni.getStorageSync("token"); uni.chooseImage({ count: 1, success: (res2) => { const filePath = res2.tempFilePaths[0]; uni.uploadFile({ url: `${baseUrl}/common/upload`, filePath, name: "file", header: { "Authorization": token }, success: (uploadRes) => { formatAppLog("log", "at pages/my/page/user-info.vue:126", uploadRes, "uploadRes"); const data = JSON.parse(uploadRes.data); if (data.code === 200) { setAvatar(data.data); } else { uni.showToast({ title: "上传失败", icon: "none" }); } }, fail: () => { uni.showToast({ title: "上传失败", icon: "none" }); } }); } }); }; const __returned__ = { userInfo, getUserInfo, setAvatar, handleEditAvatar, ref: vue.ref, get baseUrl() { return baseUrl; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$g(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_avatar = resolveEasycom(vue.resolveDynamicComponent("u-avatar"), __easycom_0$c); const _component_u_button = resolveEasycom(vue.resolveDynamicComponent("u-button"), __easycom_3$6); const _component_u_cell = resolveEasycom(vue.resolveDynamicComponent("u-cell"), __easycom_1$6); const _component_u_cell_group = resolveEasycom(vue.resolveDynamicComponent("u-cell-group"), __easycom_2$5); return vue.openBlock(), vue.createElementBlock("view", { class: "user-info-page" }, [ vue.createCommentVNode(" 头像区域 "), vue.createElementVNode("view", { class: "avatar-section" }, [ vue.createElementVNode("view", { class: "avatar-wrap" }, [ vue.createElementVNode("text", null, "头像:"), vue.createVNode(_component_u_avatar, { size: 50, src: $setup.userInfo.avatar }, null, 8, ["src"]), vue.createVNode(_component_u_button, { type: "success", style: { "width": "200rpx" }, size: "small", onClick: $setup.handleEditAvatar }, { default: vue.withCtx(() => [ vue.createTextVNode("去修改") ]), _: 1 /* STABLE */ }) ]) ]), vue.createCommentVNode(" 基本信息区域 "), vue.createElementVNode("view", { class: "info-section" }, [ vue.createElementVNode("view", { class: "section-title" }, "基本信息"), vue.createElementVNode("view", { class: "info-card" }, [ vue.createVNode(_component_u_cell_group, { border: false }, { default: vue.withCtx(() => [ vue.createVNode(_component_u_cell, { title: "姓名", value: $setup.userInfo.nickName || "无" }, null, 8, ["value"]), vue.createVNode(_component_u_cell, { title: "性别", value: $setup.userInfo.sex == 0 ? "男" : $setup.userInfo.sex == 1 ? "女" : "未知" }, null, 8, ["value"]), vue.createVNode(_component_u_cell, { title: "生日", value: $setup.userInfo.birthday || "无" }, null, 8, ["value"]), vue.createVNode(_component_u_cell, { title: "学历", value: $setup.userInfo.education || "无" }, null, 8, ["value"]), vue.createVNode(_component_u_cell, { title: "毕业学校", value: $setup.userInfo.school || "无", border: false }, null, 8, ["value"]) ]), _: 1 /* STABLE */ }) ]) ]), vue.createCommentVNode(" 账号信息区域 "), vue.createElementVNode("view", { class: "info-section" }, [ vue.createElementVNode("view", { class: "section-title" }, "用户账号"), vue.createElementVNode("view", { class: "info-card" }, [ vue.createVNode(_component_u_cell_group, { border: false }, { default: vue.withCtx(() => [ vue.createVNode(_component_u_cell, { title: "账号", value: $setup.userInfo.userName }, null, 8, ["value"]), vue.createVNode(_component_u_cell, { title: "创建日期", value: $setup.userInfo.createTime }, null, 8, ["value"]), vue.createVNode(_component_u_cell, { title: "最近登录", value: $setup.userInfo.loginDate || "--", border: false }, null, 8, ["value"]) ]), _: 1 /* STABLE */ }) ]) ]), vue.createCommentVNode(" 员工资料区域 "), vue.createElementVNode("view", { class: "info-section" }, [ vue.createElementVNode("view", { class: "section-title" }, "员工资料"), vue.createElementVNode("view", { class: "info-card" }, [ vue.createVNode(_component_u_cell_group, { border: false }, { default: vue.withCtx(() => [ vue.createVNode(_component_u_cell, { title: "公司", value: $setup.userInfo.company || "无" }, null, 8, ["value"]), vue.createVNode(_component_u_cell, { title: "员工编号", value: $setup.userInfo.employeeId || "无" }, null, 8, ["value"]), vue.createVNode(_component_u_cell, { title: "职位", value: $setup.userInfo.position || "无", border: false }, null, 8, ["value"]) ]), _: 1 /* STABLE */ }) ]) ]), vue.createCommentVNode(" 联系方式区域 "), vue.createElementVNode("view", { class: "info-section" }, [ vue.createElementVNode("view", { class: "section-title" }, "联系方式"), vue.createElementVNode("view", { class: "info-card" }, [ vue.createVNode(_component_u_cell_group, { border: false }, { default: vue.withCtx(() => [ vue.createVNode(_component_u_cell, { title: "电话", value: $setup.userInfo.phonenumber }, null, 8, ["value"]), vue.createVNode(_component_u_cell, { title: "邮箱", value: $setup.userInfo.email || "无" }, null, 8, ["value"]), vue.createVNode(_component_u_cell, { title: "住址", value: $setup.userInfo.address || "无", border: false }, null, 8, ["value"]) ]), _: 1 /* STABLE */ }) ]) ]) ]); } const PagesMyPageUserInfo = /* @__PURE__ */ _export_sfc(_sfc_main$h, [["render", _sfc_render$g], ["__scopeId", "data-v-804eca28"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/my/page/user-info.vue"]]); const _sfc_main$g = { __name: "warehouse", setup(__props, { expose: __expose }) { __expose(); const showPicker = vue.ref(false); const selectedWarehouse = vue.ref(""); const warehouseList = vue.ref([]); const getWarehouseList = () => { uni.$u.http.post("/app/appUser/searchGodown?name=").then((res2) => { if (res2.code == 200) { warehouseList.value = res2.data.filter((v) => v.useStatus == 1).map((v) => ({ text: v.godownName, value: v.id })); } }); }; getWarehouseList(); const getWarehouse = () => { uni.$u.http.get("/app/appUser/getUserBindGodown").then((res2) => { var _a; if (res2.code == 200) { selectedWarehouse.value = (_a = res2.data) == null ? void 0 : _a.godownName; } }); }; getWarehouse(); const saveWarehouse = (godownId) => { uni.$u.http.post("/app/appUser/bingowGodown?godownId=" + godownId).then((res2) => { if (res2.code == 200) { uni.showToast({ title: "设置默认仓库成功", icon: "success" }); } }); }; const onConfirm = (e) => { const [{ value: value2, text }] = e.value; selectedWarehouse.value = text; showPicker.value = false; formatAppLog("log", "at pages/my/page/warehouse.vue:75", e, "xxxxxx"); saveWarehouse(value2); }; const __returned__ = { showPicker, selectedWarehouse, warehouseList, getWarehouseList, getWarehouse, saveWarehouse, onConfirm, ref: vue.ref }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); const _component_u_picker = resolveEasycom(vue.resolveDynamicComponent("u-picker"), __easycom_1$1); return vue.openBlock(), vue.createElementBlock("view", { class: "warehouse-select" }, [ vue.createElementVNode("view", { class: "select-wrap", onClick: _cache[0] || (_cache[0] = ($event) => $setup.showPicker = true) }, [ vue.createElementVNode("text", { class: "required-label" }, "*"), vue.createElementVNode("text", { class: "label" }, "默认仓库"), vue.createElementVNode("view", { class: "picker-value" }, [ vue.createElementVNode( "text", { class: vue.normalizeClass(["value-text", !$setup.selectedWarehouse && "placeholder"]) }, vue.toDisplayString($setup.selectedWarehouse || "请选择仓库"), 3 /* TEXT, CLASS */ ), vue.createVNode(_component_u_icon, { name: "arrow-right", color: "#999", size: "16" }) ]) ]), vue.createCommentVNode(" 仓库选择器 "), vue.createVNode(_component_u_picker, { show: $setup.showPicker, columns: [$setup.warehouseList], onConfirm: $setup.onConfirm, onCancel: _cache[1] || (_cache[1] = ($event) => $setup.showPicker = false), onClose: _cache[2] || (_cache[2] = ($event) => $setup.showPicker = false), title: "选择仓库", confirmText: "确定", cancelText: "取消" }, null, 8, ["show", "columns"]) ]); } const PagesMyPageWarehouse = /* @__PURE__ */ _export_sfc(_sfc_main$g, [["render", _sfc_render$f], ["__scopeId", "data-v-972eecda"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/my/page/warehouse.vue"]]); const _sfc_main$f = { __name: "school", setup(__props, { expose: __expose }) { __expose(); const schoolName = vue.ref(""); const schoolList = vue.ref([]); const getSchoolList = () => { uni.$u.http.get("/app/appConf/getPadSchoolBroadcast").then((res2) => { if (res2.code == 200) { schoolList.value = res2.data; } }); }; getSchoolList(); const handleSubmit = () => { if (schoolList.value.length === 0) { uni.$u.toast("请至少添加一所学校"); return; } uni.$u.http.post("/app/appConf/setPadSchoolBroadcast", schoolList.value).then((res2) => { if (res2.code == 200) { uni.showToast({ title: "设置成功", icon: "success" }); } }); }; const handleAddSchool = () => { if (!schoolName.value.trim()) { uni.$u.toast("请输入学校名称"); return; } schoolList.value.push({ schoolName: schoolName.value, id: "" }); schoolName.value = ""; }; const handleRemoveSchool = (index2) => { schoolList.value.splice(index2, 1); }; const __returned__ = { schoolName, schoolList, getSchoolList, handleSubmit, handleAddSchool, handleRemoveSchool, ref: vue.ref }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$e(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_icon = resolveEasycom(vue.resolveDynamicComponent("u-icon"), __easycom_0$g); const _component_u_input = resolveEasycom(vue.resolveDynamicComponent("u-input"), __easycom_0$f); const _component_u_tag = resolveEasycom(vue.resolveDynamicComponent("u-tag"), __easycom_2$4); const _component_u_button = resolveEasycom(vue.resolveDynamicComponent("u-button"), __easycom_3$6); return vue.openBlock(), vue.createElementBlock("view", { class: "school-add" }, [ vue.createCommentVNode(" 输入区域 "), vue.createElementVNode("view", { class: "input-section" }, [ vue.createElementVNode("view", { class: "input-header" }, [ vue.createElementVNode("text", { class: "required" }, "*"), vue.createElementVNode("text", { class: "label" }, "学校名称:"), vue.createVNode(_component_u_input, { modelValue: $setup.schoolName, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.schoolName = $event), placeholder: "请输入一个学校名称", border: "false", class: "input" }, { suffix: vue.withCtx(() => [ vue.createVNode(_component_u_icon, { name: "plus", size: "24", color: "#666", onClick: $setup.handleAddSchool }) ]), _: 1 /* STABLE */ }, 8, ["modelValue"]) ]) ]), vue.createCommentVNode(" 学校列表 "), vue.createElementVNode("view", { class: "school-list" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($setup.schoolList, (item, index2) => { return vue.openBlock(), vue.createElementBlock("view", { class: "school-item", key: index2 }, [ vue.createVNode(_component_u_tag, { text: item.schoolName, closable: "", size: "large" }, null, 8, ["text"]) ]); }), 128 /* KEYED_FRAGMENT */ )) ]), vue.createCommentVNode(" 底部提交按钮 "), vue.createElementVNode("view", { class: "fixed-bottom" }, [ vue.createVNode(_component_u_button, { size: "large", type: "success", block: "", onClick: $setup.handleSubmit }, { default: vue.withCtx(() => [ vue.createTextVNode("提交") ]), _: 1 /* STABLE */ }) ]) ]); } const PagesMyPageSchool = /* @__PURE__ */ _export_sfc(_sfc_main$f, [["render", _sfc_render$e], ["__scopeId", "data-v-6d6c87ab"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/my/page/school.vue"]]); const _sfc_main$e = { __name: "audit-unfinished", setup(__props, { expose: __expose }) { __expose(); const __returned__ = { orderItem }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$d(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "audit-list" }, [ vue.createVNode($setup["orderItem"]), vue.createVNode($setup["orderItem"]), vue.createVNode($setup["orderItem"]) ]); } const PagesMyPageAuditUnfinished = /* @__PURE__ */ _export_sfc(_sfc_main$e, [["render", _sfc_render$d], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/my/page/audit-unfinished.vue"]]); const _sfc_main$d = { __name: "version", setup(__props, { expose: __expose }) { __expose(); const userInfo = vue.reactive({ version: "v_2024050400_1", // Example version number updateStatus: "已经是新版本" // Example update status }); function checkForUpdates() { setTimeout(() => { { userInfo.updateStatus = "发现新版本,正在下载..."; downloadNewVersion(); } }, 1e3); } function downloadNewVersion() { setTimeout(() => { userInfo.updateStatus = "下载完成,准备安装"; }, 2e3); } const __returned__ = { userInfo, checkForUpdates, downloadNewVersion, reactive: vue.reactive }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_cell = resolveEasycom(vue.resolveDynamicComponent("u-cell"), __easycom_1$6); const _component_u_cell_group = resolveEasycom(vue.resolveDynamicComponent("u-cell-group"), __easycom_2$5); return vue.openBlock(), vue.createElementBlock("view", { class: "version-info-page" }, [ vue.createVNode(_component_u_cell_group, { border: false, customStyle: "background:#ffffff" }, { default: vue.withCtx(() => [ vue.createVNode(_component_u_cell, { title: "当前版本号(正式版)", value: $setup.userInfo.version || "无" }, null, 8, ["value"]), vue.createVNode(_component_u_cell, { title: "检测更新", value: $setup.userInfo.updateStatus || "无", border: false, onClick: $setup.checkForUpdates }, null, 8, ["value"]) ]), _: 1 /* STABLE */ }) ]); } const PagesMyPageVersion = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["render", _sfc_render$c], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/my/page/version.vue"]]); const props$1 = { props: { // 是否为加载中状态 loading: { type: Boolean, default: props$E.switch.loading }, // 是否为禁用装填 disabled: { type: Boolean, default: props$E.switch.disabled }, // 开关尺寸,单位px size: { type: [String, Number], default: props$E.switch.size }, // 打开时的背景颜色 activeColor: { type: String, default: props$E.switch.activeColor }, // 关闭时的背景颜色 inactiveColor: { type: String, default: props$E.switch.inactiveColor }, // 通过v-model双向绑定的值 modelValue: { type: [Boolean, String, Number], default: props$E.switch.value }, // switch打开时的值 activeValue: { type: [String, Number, Boolean], default: props$E.switch.activeValue }, // switch关闭时的值 inactiveValue: { type: [String, Number, Boolean], default: props$E.switch.inactiveValue }, // 是否开启异步变更,开启后需要手动控制输入值 asyncChange: { type: Boolean, default: props$E.switch.asyncChange }, // 圆点与外边框的距离 space: { type: [String, Number], default: props$E.switch.space } } }; const _sfc_main$c = { name: "u-switch", mixins: [mpMixin, mixin, props$1], watch: { modelValue: { immediate: true, handler(n) { if (n !== this.inactiveValue && n !== this.activeValue) { uni.$u.error("v-model绑定的值必须为inactiveValue、activeValue二者之一"); } } } }, data() { return { bgColor: "#ffffff" }; }, computed: { isActive() { return this.modelValue === this.activeValue; }, switchStyle() { let style = {}; style.width = uni.$u.addUnit(this.size * 2 + 2); style.height = uni.$u.addUnit(Number(this.size) + 2); if (this.customInactiveColor) { style.borderColor = "rgba(0, 0, 0, 0)"; } style.backgroundColor = this.isActive ? this.activeColor : this.inactiveColor; return style; }, nodeStyle() { let style = {}; style.width = uni.$u.addUnit(this.size - this.space); style.height = uni.$u.addUnit(this.size - this.space); const translateX = this.isActive ? uni.$u.addUnit(this.space) : uni.$u.addUnit(this.size); style.transform = `translateX(-${translateX})`; return style; }, bgStyle() { let style = {}; style.width = uni.$u.addUnit(Number(this.size) * 2 - this.size / 2); style.height = uni.$u.addUnit(this.size); style.backgroundColor = this.inactiveColor; style.transform = `scale(${this.isActive ? 0 : 1})`; return style; }, customInactiveColor() { return this.inactiveColor !== "#fff" && this.inactiveColor !== "#ffffff"; } }, emits: ["update:modelValue", "change"], methods: { clickHandler() { if (!this.disabled && !this.loading) { const oldValue = this.isActive ? this.inactiveValue : this.activeValue; if (!this.asyncChange) { this.$emit("update:modelValue", oldValue); } this.$nextTick(() => { this.$emit("change", oldValue); }); } } } }; function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_loading_icon = resolveEasycom(vue.resolveDynamicComponent("u-loading-icon"), __easycom_0$d); return vue.openBlock(), vue.createElementBlock( "view", { class: vue.normalizeClass(["u-switch", [_ctx.disabled && "u-switch--disabled"]]), style: vue.normalizeStyle([$options.switchStyle, _ctx.$u.addStyle(_ctx.customStyle)]), onClick: _cache[0] || (_cache[0] = (...args) => $options.clickHandler && $options.clickHandler(...args)) }, [ vue.createElementVNode( "view", { class: "u-switch__bg", style: vue.normalizeStyle([$options.bgStyle]) }, null, 4 /* STYLE */ ), vue.createElementVNode( "view", { class: vue.normalizeClass(["u-switch__node", [_ctx.modelValue && "u-switch__node--on"]]), style: vue.normalizeStyle([$options.nodeStyle]), ref: "u-switch__node" }, [ vue.createVNode(_component_u_loading_icon, { show: _ctx.loading, mode: "circle", timingFunction: "linear", color: _ctx.modelValue ? _ctx.activeColor : "#AAABAD", size: _ctx.size * 0.6 }, null, 8, ["show", "color", "size"]) ], 6 /* CLASS, STYLE */ ) ], 6 /* CLASS, STYLE */ ); } const __easycom_0 = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["render", _sfc_render$b], ["__scopeId", "data-v-6ab257b3"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-switch/u-switch.vue"]]); const props = { props: { // 最小可选值 min: { type: [Number, String], default: props$E.slider.min }, // 最大可选值 max: { type: [Number, String], default: props$E.slider.max }, // 步长,取值必须大于 0,并且可被(max - min)整除 step: { type: [Number, String], default: props$E.slider.step }, // 当前取值 value: { type: [Number, String], default: props$E.slider.value }, // 滑块右侧已选择部分的背景色 activeColor: { type: String, default: props$E.slider.activeColor }, // 滑块左侧未选择部分的背景色 inactiveColor: { type: String, default: props$E.slider.inactiveColor }, // 滑块的大小,取值范围为 12 - 28 blockSize: { type: [Number, String], default: props$E.slider.blockSize }, // 滑块的颜色 blockColor: { type: String, default: props$E.slider.blockColor }, // 禁用状态 disabled: { type: Boolean, default: props$E.slider.disabled }, // 是否显示当前的选择值 showValue: { type: Boolean, default: props$E.slider.showValue } } }; const _sfc_main$b = { name: "u--slider", mixins: [mpMixin, mixin, props], methods: { // 拖动过程中触发 changingHandler(e) { const { value: value2 } = e.detail; this.$emit("input", value2); this.$emit("changing", value2); }, // 滑动结束时触发 changeHandler(e) { const { value: value2 } = e.detail; this.$emit("input", value2); this.$emit("change", value2); } } }; function _sfc_render$a(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock( "view", { class: "u-slider", style: vue.normalizeStyle([_ctx.$u.addStyle(_ctx.customStyle)]) }, [ vue.createElementVNode("slider", { min: _ctx.min, max: _ctx.max, step: _ctx.step, value: _ctx.value, activeColor: _ctx.activeColor, inactiveColor: _ctx.inactiveColor, blockSize: _ctx.$u.getPx(_ctx.blockSize), blockColor: _ctx.blockColor, showValue: _ctx.showValue, disabled: _ctx.disabled, onChanging: _cache[0] || (_cache[0] = (...args) => $options.changingHandler && $options.changingHandler(...args)), onChange: _cache[1] || (_cache[1] = (...args) => $options.changeHandler && $options.changeHandler(...args)) }, null, 40, ["min", "max", "step", "value", "activeColor", "inactiveColor", "blockSize", "blockColor", "showValue", "disabled"]) ], 4 /* STYLE */ ); } const __easycom_4 = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["render", _sfc_render$a], ["__scopeId", "data-v-7b84e269"], ["__file", "E:/书嗨项目/shuhi-app-fornt/uni_modules/uview-plus/components/u-slider/u-slider.vue"]]); const _sfc_main$a = { __name: "volume", setup(__props, { expose: __expose }) { __expose(); const settings = vue.ref({ audioStartSwitch: true, audioStart: "书嗨,不辜负每一个爱书的人", audioSpeed: 10, audioVolume: 5, "audioPlay": false, "audioClick": false }); function changeSpeed(value2) { settings.value.audioSpeed = value2; } function changeVolume(value2) { settings.value.audioVolume = value2; } const getVoiceBroadcast = () => { uni.$u.http.get("/app/appConf/getAudioConfig").then((res2) => { if (res2.code == 200) { settings.value = res2.data; } }); }; getVoiceBroadcast(); const saveVoiceBroadcast = () => { uni.$u.http.post("/app/appConf/setAudioConfig", settings.value).then((res2) => { if (res2.code == 200) { uni.showToast({ title: "设置成功", icon: "success" }); initTTS(); } }); }; const tts = vue.ref(null); const initTTS = () => { let params = { speed: settings.value.audioSpeed / 10, // 将 0-10 转换为 0-1 pitch: settings.value.audioVolume, // 将 0-10 转换为 0-1 volume: 1 }; tts.value = new VolumeTTS(params); settings.value.audioStartSwitch && tts.value.speak(settings.value.audioStart); }; function stopPlayback() { tts.value && tts.value.stop(); uni.showToast({ title: "已停止播放", icon: "none" }); } function restartApp() { uni.showModal({ title: "提示", content: "确定要重启应用吗?", success: function(res2) { if (res2.confirm) { plus.runtime.restart(); } } }); } function loadSettings() { try { const savedSettings = uni.getStorageSync("tts_settings"); if (savedSettings) { Object.assign(settings, savedSettings); } } catch (error2) { formatAppLog("error", "at pages/my/page/volume.vue:161", "加载设置失败:", error2); } } function playClickSound() { if (!settings.audioClick) return; const audio = uni.createInnerAudioContext(); audio.src = "/static/audio/click.mp3"; audio.play(); } vue.onMounted(async () => { loadSettings(); }); const __returned__ = { settings, changeSpeed, changeVolume, getVoiceBroadcast, saveVoiceBroadcast, tts, initTTS, stopPlayback, restartApp, loadSettings, playClickSound, ref: vue.ref, reactive: vue.reactive, onMounted: vue.onMounted, get VolumeTTS() { return VolumeTTS; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$9(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_switch = resolveEasycom(vue.resolveDynamicComponent("u-switch"), __easycom_0); const _component_u_cell = resolveEasycom(vue.resolveDynamicComponent("u-cell"), __easycom_1$6); const _component_u_cell_group = resolveEasycom(vue.resolveDynamicComponent("u-cell-group"), __easycom_2$5); const _component_u_textarea = resolveEasycom(vue.resolveDynamicComponent("u-textarea"), __easycom_3$2); const _component_u_slider = resolveEasycom(vue.resolveDynamicComponent("u-slider"), __easycom_4); const _component_u_button = resolveEasycom(vue.resolveDynamicComponent("u-button"), __easycom_3$6); return vue.openBlock(), vue.createElementBlock("view", { class: "settings-container" }, [ vue.createCommentVNode(" 设置选项组 "), vue.createElementVNode("view", { class: "settings-section" }, [ vue.createVNode(_component_u_cell_group, { border: false }, { default: vue.withCtx(() => [ vue.createCommentVNode(" 语音播报设置 "), vue.createVNode(_component_u_cell, { title: "语音播报", label: "控制除app启动提示外所有语音播报的开关", "border-bottom": true }, { "right-icon": vue.withCtx(() => [ vue.createVNode(_component_u_switch, { modelValue: $setup.settings.audioPlay, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.settings.audioPlay = $event), activeColor: "#4cd964" }, null, 8, ["modelValue"]) ]), _: 1 /* STABLE */ }), vue.createCommentVNode(" 点击音效设置 "), vue.createVNode(_component_u_cell, { title: "点击音效", "border-bottom": true }, { "right-icon": vue.withCtx(() => [ vue.createVNode(_component_u_switch, { modelValue: $setup.settings.audioClick, "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.settings.audioClick = $event), activeColor: "#4cd964" }, null, 8, ["modelValue"]) ]), _: 1 /* STABLE */ }), vue.createCommentVNode(" 启动提示语设置 "), vue.createVNode(_component_u_cell, { title: "启动提示语", "border-bottom": true }, { "right-icon": vue.withCtx(() => [ vue.createVNode(_component_u_switch, { modelValue: $setup.settings.audioStartSwitch, "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $setup.settings.audioStartSwitch = $event), activeColor: "#4cd964" }, null, 8, ["modelValue"]) ]), _: 1 /* STABLE */ }) ]), _: 1 /* STABLE */ }), vue.createCommentVNode(" 启动提示语输入框 "), vue.createElementVNode("view", { class: "input-section" }, [ vue.createVNode(_component_u_textarea, { modelValue: $setup.settings.audioStart, "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => $setup.settings.audioStart = $event), placeholder: "输入启动时要说的内容,比如:欢迎使用书嗨/很开心又见到你啦", height: "100" }, null, 8, ["modelValue"]) ]), vue.createCommentVNode(" 语速设置 "), vue.createElementVNode("view", { class: "slider-section" }, [ vue.createElementVNode("view", { class: "slider-title" }, [ vue.createElementVNode("text", null, "设置语速"), vue.createElementVNode("text", { class: "subtitle" }, "(部分机型不支持)") ]), vue.createVNode(_component_u_slider, { value: $setup.settings.audioSpeed, max: 20, min: 5, step: 1, showValue: "", onChange: $setup.changeSpeed }, null, 8, ["value"]) ]), vue.createCommentVNode(" 音调设置 "), vue.createElementVNode("view", { class: "slider-section" }, [ vue.createElementVNode("view", { class: "slider-title" }, [ vue.createElementVNode("text", null, "设置音调"), vue.createElementVNode("text", { class: "subtitle" }, "(部分机型不支持)") ]), vue.createVNode(_component_u_slider, { value: $setup.settings.audioVolume, max: 10, min: 1, step: 1, showValue: "", onChange: $setup.changeVolume }, null, 8, ["value"]) ]), vue.createCommentVNode(" 操作按钮 "), vue.createElementVNode("view", { class: "button-group" }, [ vue.createVNode(_component_u_button, { type: "primary", text: "保存设置并试听", onClick: $setup.saveVoiceBroadcast }), vue.createVNode(_component_u_button, { type: "warning", text: "停止播放", onClick: $setup.stopPlayback, plain: true }), vue.createVNode(_component_u_button, { type: "error", text: "重启app", onClick: $setup.restartApp, plain: true }) ]) ]) ]); } const PagesMyPageVolume = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["render", _sfc_render$9], ["__scopeId", "data-v-983b50b6"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/my/page/volume.vue"]]); const _sfc_main$9 = { __name: "book-display", setup(__props, { expose: __expose }) { __expose(); const settings = vue.reactive({ showRecyclePrice: false, showRecycleStatus: false, showStock: false, showDetail: false }); function loadSettings() { uni.$u.http.get("/app/appConf/getBookShowConfig").then((res2) => { if (res2.code == 200) { Object.assign(settings, res2.data); } }); } function saveSettings() { uni.$u.http.post("/app/appConf/setBookShowConfig", settings).then((res2) => { if (res2.code == 200) { uni.showToast({ title: "设置已保存", icon: "success" }); } else { uni.showToast({ title: "保存设置失败", icon: "error" }); } }); } vue.onMounted(() => { loadSettings(); }); const __returned__ = { settings, loadSettings, saveSettings, reactive: vue.reactive, onMounted: vue.onMounted }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_switch = resolveEasycom(vue.resolveDynamicComponent("u-switch"), __easycom_0); const _component_u_cell = resolveEasycom(vue.resolveDynamicComponent("u-cell"), __easycom_1$6); const _component_u_cell_group = resolveEasycom(vue.resolveDynamicComponent("u-cell-group"), __easycom_2$5); const _component_u_button = resolveEasycom(vue.resolveDynamicComponent("u-button"), __easycom_3$6); return vue.openBlock(), vue.createElementBlock("view", { class: "settings-container" }, [ vue.createCommentVNode(" 设置列表 "), vue.createVNode(_component_u_cell_group, { border: false, class: "settings-group" }, { default: vue.withCtx(() => [ vue.createVNode(_component_u_cell, { title: "是否展示回收价", "border-bottom": true }, { "right-icon": vue.withCtx(() => [ vue.createVNode(_component_u_switch, { modelValue: $setup.settings.showRecyclePrice, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.settings.showRecyclePrice = $event), activeColor: "#4cd964" }, null, 8, ["modelValue"]) ]), _: 1 /* STABLE */ }), vue.createVNode(_component_u_cell, { title: "是否展示回收状态", "border-bottom": true }, { "right-icon": vue.withCtx(() => [ vue.createVNode(_component_u_switch, { modelValue: $setup.settings.showRecycleStatus, "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.settings.showRecycleStatus = $event), activeColor: "#4cd964" }, null, 8, ["modelValue"]) ]), _: 1 /* STABLE */ }), vue.createVNode(_component_u_cell, { title: "是否展示库存信息", "border-bottom": true }, { "right-icon": vue.withCtx(() => [ vue.createVNode(_component_u_switch, { modelValue: $setup.settings.showStock, "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $setup.settings.showStock = $event), activeColor: "#4cd964" }, null, 8, ["modelValue"]) ]), _: 1 /* STABLE */ }), vue.createVNode(_component_u_cell, { title: "是否默认展开商品详情", "border-bottom": false }, { "right-icon": vue.withCtx(() => [ vue.createVNode(_component_u_switch, { modelValue: $setup.settings.showDetail, "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => $setup.settings.showDetail = $event), activeColor: "#4cd964" }, null, 8, ["modelValue"]) ]), _: 1 /* STABLE */ }) ]), _: 1 /* STABLE */ }), vue.createVNode(_component_u_button, { class: "mt-40", type: "primary", onClick: $setup.saveSettings }, { default: vue.withCtx(() => [ vue.createTextVNode("保存") ]), _: 1 /* STABLE */ }) ]); } const PagesMyPageBookDisplay = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["render", _sfc_render$8], ["__scopeId", "data-v-30e61b0d"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/my/page/book-display.vue"]]); const _sfc_main$8 = { __name: "password", setup(__props, { expose: __expose }) { __expose(); const formRef = vue.ref(null); const loading = vue.ref(false); const showPassword = vue.reactive({ old: false, new: false, confirm: false }); const formData = vue.reactive({ oldPassword: "", newPassword: "", confirmPassword: "" }); const rules2 = { oldPassword: [{ required: true, message: "请输入原密码", trigger: ["blur", "change"] }, { min: 6, message: "密码长度不能小于6位", trigger: ["blur", "change"] }], newPassword: [{ required: true, message: "请输入新密码", trigger: ["blur", "change"] }, { min: 6, message: "密码长度不能小于6位", trigger: ["blur", "change"] }, { validator: (rule, value2, callback) => { if (value2 === formData.oldPassword) { callback(new Error("新密码不能与原密码相同")); } else { callback(); } }, trigger: ["blur", "change"] }], confirmPassword: [{ required: true, message: "请再次输入新密码", trigger: ["blur", "change"] }, { validator: (rule, value2, callback) => { if (value2 !== formData.newPassword) { callback(new Error("两次输入的密码不一致")); } else { callback(); } }, trigger: ["blur", "change"] }] }; function submitForm() { if (!formRef.value) return; formRef.value.validate().then((valid) => { if (valid) { loading.value = true; uni.$u.http.post("/app/appUser/updatePwd", formData).then((res2) => { if (res2.code == 200) { uni.showModal({ title: "提示", content: "密码修改成功,是否确定要退出重新登录?", success: (res3) => { if (res3.confirm) { uni.clearStorageSync(); uni.reLaunch({ url: "/pages/login/login" }); } else { uni.navigateBack({ delta: 1 }); } } }); } }).finally(() => { loading.value = false; }); } }); } function resetForm() { if (!formRef.value) return; formRef.value.resetFields(); } const __returned__ = { formRef, loading, showPassword, formData, rules: rules2, submitForm, resetForm, ref: vue.ref, reactive: vue.reactive }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) { const _component_u_input = resolveEasycom(vue.resolveDynamicComponent("u-input"), __easycom_0$f); const _component_u_form_item = resolveEasycom(vue.resolveDynamicComponent("u-form-item"), __easycom_1$a); const _component_u_form = resolveEasycom(vue.resolveDynamicComponent("u-form"), __easycom_2$7); const _component_u_button = resolveEasycom(vue.resolveDynamicComponent("u-button"), __easycom_3$6); return vue.openBlock(), vue.createElementBlock("view", { class: "password-container" }, [ vue.createVNode(_component_u_form, { model: $setup.formData, rules: $setup.rules, ref: "formRef", labelPosition: "top", borderBottom: true, labelWidth: "300px", "error-type": "toast" }, { default: vue.withCtx(() => [ vue.createVNode(_component_u_form_item, { label: "原密码", prop: "oldPassword", borderBottom: "" }, { default: vue.withCtx(() => [ vue.createVNode(_component_u_input, { modelValue: $setup.formData.oldPassword, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.formData.oldPassword = $event), type: "password", placeholder: "请输入原密码", border: false }, null, 8, ["modelValue"]) ]), _: 1 /* STABLE */ }), vue.createVNode(_component_u_form_item, { label: "新密码", prop: "newPassword", borderBottom: "" }, { default: vue.withCtx(() => [ vue.createVNode(_component_u_input, { modelValue: $setup.formData.newPassword, "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.formData.newPassword = $event), type: "password", placeholder: "请输入新密码", border: false }, null, 8, ["modelValue"]) ]), _: 1 /* STABLE */ }), vue.createVNode(_component_u_form_item, { label: "确认新密码", prop: "confirmPassword", borderBottom: "" }, { default: vue.withCtx(() => [ vue.createVNode(_component_u_input, { modelValue: $setup.formData.confirmPassword, "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $setup.formData.confirmPassword = $event), type: "password", placeholder: "请再次输入新密码", border: false }, null, 8, ["modelValue"]) ]), _: 1 /* STABLE */ }) ]), _: 1 /* STABLE */ }, 8, ["model"]), vue.createElementVNode("view", { class: "submit-btn" }, [ vue.createVNode(_component_u_button, { type: "primary", text: "修改密码", onClick: $setup.submitForm, loading: $setup.loading }, null, 8, ["loading"]) ]) ]); } const PagesMyPagePassword = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["render", _sfc_render$7], ["__scopeId", "data-v-b88a898e"], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/my/page/password.vue"]]); const _sfc_main$7 = {}; function _sfc_render$6(_ctx, _cache) { return vue.openBlock(), vue.createElementBlock("view"); } const PagesOrderStatPendingReview = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["render", _sfc_render$6], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/order/stat/pending-review.vue"]]); const _sfc_main$6 = {}; function _sfc_render$5(_ctx, _cache) { return vue.openBlock(), vue.createElementBlock("view"); } const PagesOrderStatPendingPick = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["render", _sfc_render$5], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/order/stat/pending-pick.vue"]]); const _sfc_main$5 = {}; function _sfc_render$4(_ctx, _cache) { return vue.openBlock(), vue.createElementBlock("view"); } const PagesOrderStatPendingSign = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["render", _sfc_render$4], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/order/stat/pending-sign.vue"]]); const _sfc_main$4 = {}; function _sfc_render$3(_ctx, _cache) { return vue.openBlock(), vue.createElementBlock("view"); } const PagesOrderStatPendingConfirm = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["render", _sfc_render$3], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/order/stat/pending-confirm.vue"]]); const _sfc_main$3 = {}; function _sfc_render$2(_ctx, _cache) { return vue.openBlock(), vue.createElementBlock("view"); } const PagesOrderStatPendingAudit = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["render", _sfc_render$2], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/order/stat/pending-audit.vue"]]); const _sfc_main$2 = {}; function _sfc_render$1(_ctx, _cache) { return vue.openBlock(), vue.createElementBlock("view"); } const PagesOrderStatPendingPayment = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render$1], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/order/stat/pending-payment.vue"]]); const _sfc_main$1 = {}; function _sfc_render(_ctx, _cache) { return vue.openBlock(), vue.createElementBlock("view"); } const PagesOrderStatReceiveStat = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render], ["__file", "E:/书嗨项目/shuhi-app-fornt/pages/order/stat/receive-stat.vue"]]); __definePage("pages/login/login", PagesLoginLogin); __definePage("pages/index/index", PagesIndexIndex); __definePage("pages/my/my", PagesMyMy); __definePage("pages/order/index", PagesOrderIndex); __definePage("pages/book/index", PagesBookIndex); __definePage("pages/index/express/transfer-sign", PagesIndexExpressTransferSign); __definePage("pages/index/express/scan", PagesIndexExpressScan); __definePage("pages/index/express/quick-check", PagesIndexExpressQuickCheck); __definePage("pages/index/express/quick-unpack", PagesIndexExpressQuickUnpack); __definePage("pages/index/express/route-exception", PagesIndexExpressRouteException); __definePage("pages/index/express/warehouse-sign", PagesIndexExpressWarehouseSign); __definePage("pages/index/express/weight-modify", PagesIndexExpressWeightModify); __definePage("pages/index/audit/confirm-receipt", PagesIndexAuditConfirmReceipt); __definePage("pages/index/audit/scan-order", PagesIndexAuditScanOrder); __definePage("pages/index/audit/isbn-order", PagesIndexAuditIsbnOrder); __definePage("pages/index/audit/express-order", PagesIndexAuditExpressOrder); __definePage("pages/index/detail/index", PagesIndexDetailIndex); __definePage("pages/index/detail/book-audit", PagesIndexDetailBookAudit); __definePage("pages/index/detail/batch-audit", PagesIndexDetailBatchAudit); __definePage("pages/index/audit/sender", PagesIndexAuditSender); __definePage("pages/index/statistic/audit", PagesIndexStatisticAudit); __definePage("pages/index/statistic/after-sale", PagesIndexStatisticAfterSale); __definePage("pages/index/statistic/package", PagesIndexStatisticPackage); __definePage("pages/index/wms/medium-in", PagesIndexWmsMediumIn); __definePage("pages/index/wms/good-in", PagesIndexWmsGoodIn); __definePage("pages/index/wms/secondary-in", PagesIndexWmsSecondaryIn); __definePage("pages/index/wms/bad-in", PagesIndexWmsBadIn); __definePage("pages/index/wms/bad-out", PagesIndexWmsBadOut); __definePage("pages/index/wms/bad-out-order", PagesIndexWmsBadOutOrder); __definePage("pages/index/wms/bad-off", PagesIndexWmsBadOff); __definePage("pages/index/wms/order-query", PagesIndexWmsOrderQuery); __definePage("pages/index/wms/order-query-list", PagesIndexWmsOrderQueryList); __definePage("pages/index/wms/location-order", PagesIndexWmsLocationOrder); __definePage("pages/index/wms/location-order-list", PagesIndexWmsLocationOrderList); __definePage("pages/index/wms/location-select", PagesIndexWmsLocationSelect); __definePage("pages/index/wms/warehouse-select", PagesIndexWmsWarehouseSelect); __definePage("pages/index/wms/speedy-check", PagesIndexWmsSpeedyCheck); __definePage("pages/index/offline/check-order", PagesIndexOfflineCheckOrder); __definePage("pages/index/offline/check-record", PagesIndexOfflineCheckRecord); __definePage("pages/index/entry/scan-book", PagesIndexEntryScanBook); __definePage("pages/index/entry/book-weight", PagesIndexEntryBookWeight); __definePage("pages/index/express/logistics-detail", PagesIndexExpressLogisticsDetail); __definePage("pages/index/wms/task-detail", PagesIndexWmsTaskDetail); __definePage("pages/index/wms/speedy-check-add", PagesIndexWmsSpeedyCheckAdd); __definePage("pages/my/page/user-info", PagesMyPageUserInfo); __definePage("pages/my/page/warehouse", PagesMyPageWarehouse); __definePage("pages/my/page/school", PagesMyPageSchool); __definePage("pages/my/page/audit-unfinished", PagesMyPageAuditUnfinished); __definePage("pages/my/page/version", PagesMyPageVersion); __definePage("pages/my/page/volume", PagesMyPageVolume); __definePage("pages/my/page/book-display", PagesMyPageBookDisplay); __definePage("pages/my/page/password", PagesMyPagePassword); __definePage("pages/order/stat/pending-review", PagesOrderStatPendingReview); __definePage("pages/order/stat/pending-pick", PagesOrderStatPendingPick); __definePage("pages/order/stat/pending-sign", PagesOrderStatPendingSign); __definePage("pages/order/stat/pending-confirm", PagesOrderStatPendingConfirm); __definePage("pages/order/stat/pending-audit", PagesOrderStatPendingAudit); __definePage("pages/order/stat/pending-payment", PagesOrderStatPendingPayment); __definePage("pages/order/stat/receive-stat", PagesOrderStatReceiveStat); function useInit() { var barcodeModel = requireNativePlugin("iData-BarcodePlugin-BarcodeModule"); barcodeModel.initScan((ret) => { formatAppLog("log", "at utils/useBarcodeModule.js:9", "初始化扫描", ret); }); } function useGlobalEvent(onChange) { var globalEvent = requireNativePlugin("globalEvent"); globalEvent.addEventListener("iDataBarcodeEvent", function(e) { onChange && onChange(e); }); } function useGlobalEventRemove() { var globalEvent = requireNativePlugin("globalEvent"); globalEvent.removeEventListener("iDataBarcodeEvent"); } function useRouteMonitor(onChange) { uni.addInterceptor("navigateTo", { invoke(e) { var _a; const pages2 = getCurrentPages(); const from = ((_a = pages2[pages2.length - 1]) == null ? void 0 : _a.route) || ""; onChange && onChange(e.url, from); formatAppLog("log", "at utils/useRouteMonitor.js:18", "navigateTo", e.url, from); return e; } }); uni.addInterceptor("redirectTo", { invoke(e) { var _a; const pages2 = getCurrentPages(); const from = ((_a = pages2[pages2.length - 1]) == null ? void 0 : _a.route) || ""; onChange && onChange(e.url, from); formatAppLog("log", "at utils/useRouteMonitor.js:28", "redirectTo", e.url, from); return e; } }); uni.addInterceptor("reLaunch", { invoke(e) { var _a; const pages2 = getCurrentPages(); const from = ((_a = pages2[pages2.length - 1]) == null ? void 0 : _a.route) || ""; onChange && onChange(e.url, from); formatAppLog("log", "at utils/useRouteMonitor.js:38", "reLaunch", e.url, from); return e; } }); uni.addInterceptor("switchTab", { invoke(e) { var _a; const pages2 = getCurrentPages(); const from = ((_a = pages2[pages2.length - 1]) == null ? void 0 : _a.route) || ""; onChange && onChange(e.url, from); formatAppLog("log", "at utils/useRouteMonitor.js:48", "switchTab", e.url, from); return e; } }); } const _sfc_main = { __name: "App", setup(__props, { expose: __expose }) { __expose(); onLaunch(() => { formatAppLog("log", "at App.vue:10", "App Launch"); if (!store.token) { let token = uni.getStorageSync("token"); if (token) { store.setToken(token); let userInfo = uni.getStorageSync("userInfo"); if (userInfo) { if (userInfo.userId) { store.setUserInfo(userInfo); } } } } useInit(); }); onShow(() => { formatAppLog("log", "at App.vue:30", "App Show"); useRouteMonitor((url2, from) => { formatAppLog("log", "at App.vue:34", "onShow", url2, from); useGlobalEventRemove(); }); }); onHide(() => { formatAppLog("log", "at App.vue:43", "App Hide"); }); const __returned__ = { get onLaunch() { return onLaunch; }, get onShow() { return onShow; }, get onHide() { return onHide; }, get store() { return store; }, get useGlobalEventRemove() { return useGlobalEventRemove; }, get useInit() { return useInit; }, get useRouteMonitor() { return useRouteMonitor; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }; const App = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "E:/书嗨项目/shuhi-app-fornt/App.vue"]]); const { toString } = Object.prototype; function isArray(val) { return toString.call(val) === "[object Array]"; } function isObject(val) { return val !== null && typeof val === "object"; } function isDate(val) { return toString.call(val) === "[object Date]"; } function isURLSearchParams(val) { return typeof URLSearchParams !== "undefined" && val instanceof URLSearchParams; } function forEach(obj, fn) { if (obj === null || typeof obj === "undefined") { return; } if (typeof obj !== "object") { obj = [obj]; } if (isArray(obj)) { for (let i = 0, l = obj.length; i < l; i++) { fn.call(null, obj[i], i, obj); } } else { for (const key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { fn.call(null, obj[key], key, obj); } } } } function isPlainObject(obj) { return Object.prototype.toString.call(obj) === "[object Object]"; } function deepMerge$1() { const result = {}; function assignValue(val, key) { if (typeof result[key] === "object" && typeof val === "object") { result[key] = deepMerge$1(result[key], val); } else if (typeof val === "object") { result[key] = deepMerge$1({}, val); } else { result[key] = val; } } for (let i = 0, l = arguments.length; i < l; i++) { forEach(arguments[i], assignValue); } return result; } function isUndefined(val) { return typeof val === "undefined"; } function encode(val) { return encodeURIComponent(val).replace(/%40/gi, "@").replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%20/g, "+").replace(/%5B/gi, "[").replace(/%5D/gi, "]"); } function buildURL(url2, params) { if (!params) { return url2; } let serializedParams; if (isURLSearchParams(params)) { serializedParams = params.toString(); } else { const parts = []; forEach(params, (val, key) => { if (val === null || typeof val === "undefined") { return; } if (isArray(val)) { key = `${key}[]`; } else { val = [val]; } forEach(val, (v) => { if (isDate(v)) { v = v.toISOString(); } else if (isObject(v)) { v = JSON.stringify(v); } parts.push(`${encode(key)}=${encode(v)}`); }); }); serializedParams = parts.join("&"); } if (serializedParams) { const hashmarkIndex = url2.indexOf("#"); if (hashmarkIndex !== -1) { url2 = url2.slice(0, hashmarkIndex); } url2 += (url2.indexOf("?") === -1 ? "?" : "&") + serializedParams; } return url2; } function isAbsoluteURL(url2) { return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url2); } function combineURLs(baseURL, relativeURL) { return relativeURL ? `${baseURL.replace(/\/+$/, "")}/${relativeURL.replace(/^\/+/, "")}` : baseURL; } function buildFullPath(baseURL, requestedURL) { if (baseURL && !isAbsoluteURL(requestedURL)) { return combineURLs(baseURL, requestedURL); } return requestedURL; } function settle(resolve, reject, response) { const { validateStatus } = response.config; const status = response.statusCode; if (status && (!validateStatus || validateStatus(status))) { resolve(response); } else { reject(response); } } const mergeKeys$1 = (keys, config2) => { const config3 = {}; keys.forEach((prop) => { if (!isUndefined(config2[prop])) { config3[prop] = config2[prop]; } }); return config3; }; const adapter = (config2) => new Promise((resolve, reject) => { const fullPath = buildURL(buildFullPath(config2.baseURL, config2.url), config2.params); const _config = { url: fullPath, header: config2.header, complete: (response) => { config2.fullPath = fullPath; response.config = config2; try { if (typeof response.data === "string") { response.data = JSON.parse(response.data); } } catch (e) { } settle(resolve, reject, response); } }; let requestTask; if (config2.method === "UPLOAD") { delete _config.header["content-type"]; delete _config.header["Content-Type"]; const otherConfig = { filePath: config2.filePath, name: config2.name }; const optionalKeys = [ "files", "timeout", "formData" ]; requestTask = uni.uploadFile({ ..._config, ...otherConfig, ...mergeKeys$1(optionalKeys, config2) }); } else if (config2.method === "DOWNLOAD") { if (!isUndefined(config2.timeout)) { _config.timeout = config2.timeout; } requestTask = uni.downloadFile(_config); } else { const optionalKeys = [ "data", "method", "timeout", "dataType", "responseType", "sslVerify", "firstIpv4" ]; requestTask = uni.request({ ..._config, ...mergeKeys$1(optionalKeys, config2) }); } if (config2.getTask) { config2.getTask(requestTask, config2); } }); const dispatchRequest = (config2) => adapter(config2); function InterceptorManager() { this.handlers = []; } InterceptorManager.prototype.use = function use(fulfilled, rejected) { this.handlers.push({ fulfilled, rejected }); return this.handlers.length - 1; }; InterceptorManager.prototype.eject = function eject(id) { if (this.handlers[id]) { this.handlers[id] = null; } }; InterceptorManager.prototype.forEach = function forEach2(fn) { this.handlers.forEach((h) => { if (h !== null) { fn(h); } }); }; const mergeKeys = (keys, globalsConfig, config2) => { const config3 = {}; keys.forEach((prop) => { if (!isUndefined(config2[prop])) { config3[prop] = config2[prop]; } else if (!isUndefined(globalsConfig[prop])) { config3[prop] = globalsConfig[prop]; } }); return config3; }; const mergeConfig = (globalsConfig, config2 = {}) => { const method = config2.method || globalsConfig.method || "GET"; let config3 = { baseURL: globalsConfig.baseURL || "", method, url: config2.url || "", params: config2.params || {}, custom: { ...globalsConfig.custom || {}, ...config2.custom || {} }, header: deepMerge$1(globalsConfig.header || {}, config2.header || {}) }; const defaultToConfig2Keys = ["getTask", "validateStatus"]; config3 = { ...config3, ...mergeKeys(defaultToConfig2Keys, globalsConfig, config2) }; if (method === "DOWNLOAD") { if (!isUndefined(config2.timeout)) { config3.timeout = config2.timeout; } else if (!isUndefined(globalsConfig.timeout)) { config3.timeout = globalsConfig.timeout; } } else if (method === "UPLOAD") { delete config3.header["content-type"]; delete config3.header["Content-Type"]; const uploadKeys = [ "files", "filePath", "name", "timeout", "formData" ]; uploadKeys.forEach((prop) => { if (!isUndefined(config2[prop])) { config3[prop] = config2[prop]; } }); if (isUndefined(config3.timeout) && !isUndefined(globalsConfig.timeout)) { config3.timeout = globalsConfig.timeout; } } else { const defaultsKeys = [ "data", "timeout", "dataType", "responseType", "sslVerify", "firstIpv4" ]; config3 = { ...config3, ...mergeKeys(defaultsKeys, globalsConfig, config2) }; } return config3; }; const defaults = { baseURL: "", header: {}, method: "GET", dataType: "json", responseType: "text", custom: {}, timeout: 6e4, sslVerify: true, firstIpv4: false, validateStatus: function validateStatus(status) { return status >= 200 && status < 300; } }; var clone = function() { function _instanceof(obj, type2) { return type2 != null && obj instanceof type2; } var nativeMap; try { nativeMap = Map; } catch (_) { nativeMap = function() { }; } var nativeSet; try { nativeSet = Set; } catch (_) { nativeSet = function() { }; } var nativePromise; try { nativePromise = Promise; } catch (_) { nativePromise = function() { }; } function clone2(parent, circular, depth, prototype, includeNonEnumerable) { if (typeof circular === "object") { depth = circular.depth; prototype = circular.prototype; includeNonEnumerable = circular.includeNonEnumerable; circular = circular.circular; } var allParents = []; var allChildren = []; var useBuffer = typeof Buffer != "undefined"; if (typeof circular == "undefined") circular = true; if (typeof depth == "undefined") depth = Infinity; function _clone(parent2, depth2) { if (parent2 === null) return null; if (depth2 === 0) return parent2; var child; var proto; if (typeof parent2 != "object") { return parent2; } if (_instanceof(parent2, nativeMap)) { child = new nativeMap(); } else if (_instanceof(parent2, nativeSet)) { child = new nativeSet(); } else if (_instanceof(parent2, nativePromise)) { child = new nativePromise(function(resolve, reject) { parent2.then(function(value2) { resolve(_clone(value2, depth2 - 1)); }, function(err) { reject(_clone(err, depth2 - 1)); }); }); } else if (clone2.__isArray(parent2)) { child = []; } else if (clone2.__isRegExp(parent2)) { child = new RegExp(parent2.source, __getRegExpFlags(parent2)); if (parent2.lastIndex) child.lastIndex = parent2.lastIndex; } else if (clone2.__isDate(parent2)) { child = new Date(parent2.getTime()); } else if (useBuffer && Buffer.isBuffer(parent2)) { if (Buffer.from) { child = Buffer.from(parent2); } else { child = new Buffer(parent2.length); parent2.copy(child); } return child; } else if (_instanceof(parent2, Error)) { child = Object.create(parent2); } else { if (typeof prototype == "undefined") { proto = Object.getPrototypeOf(parent2); child = Object.create(proto); } else { child = Object.create(prototype); proto = prototype; } } if (circular) { var index2 = allParents.indexOf(parent2); if (index2 != -1) { return allChildren[index2]; } allParents.push(parent2); allChildren.push(child); } if (_instanceof(parent2, nativeMap)) { parent2.forEach(function(value2, key) { var keyChild = _clone(key, depth2 - 1); var valueChild = _clone(value2, depth2 - 1); child.set(keyChild, valueChild); }); } if (_instanceof(parent2, nativeSet)) { parent2.forEach(function(value2) { var entryChild = _clone(value2, depth2 - 1); child.add(entryChild); }); } for (var i in parent2) { var attrs = Object.getOwnPropertyDescriptor(parent2, i); if (attrs) { child[i] = _clone(parent2[i], depth2 - 1); } try { var objProperty = Object.getOwnPropertyDescriptor(parent2, i); if (objProperty.set === "undefined") { continue; } child[i] = _clone(parent2[i], depth2 - 1); } catch (e) { if (e instanceof TypeError) { continue; } else if (e instanceof ReferenceError) { continue; } } } if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(parent2); for (var i = 0; i < symbols.length; i++) { var symbol = symbols[i]; var descriptor = Object.getOwnPropertyDescriptor(parent2, symbol); if (descriptor && !descriptor.enumerable && !includeNonEnumerable) { continue; } child[symbol] = _clone(parent2[symbol], depth2 - 1); Object.defineProperty(child, symbol, descriptor); } } if (includeNonEnumerable) { var allPropertyNames = Object.getOwnPropertyNames(parent2); for (var i = 0; i < allPropertyNames.length; i++) { var propertyName = allPropertyNames[i]; var descriptor = Object.getOwnPropertyDescriptor(parent2, propertyName); if (descriptor && descriptor.enumerable) { continue; } child[propertyName] = _clone(parent2[propertyName], depth2 - 1); Object.defineProperty(child, propertyName, descriptor); } } return child; } return _clone(parent, depth); } clone2.clonePrototype = function clonePrototype(parent) { if (parent === null) return null; var c = function() { }; c.prototype = parent; return new c(); }; function __objToStr(o) { return Object.prototype.toString.call(o); } clone2.__objToStr = __objToStr; function __isDate(o) { return typeof o === "object" && __objToStr(o) === "[object Date]"; } clone2.__isDate = __isDate; function __isArray(o) { return typeof o === "object" && __objToStr(o) === "[object Array]"; } clone2.__isArray = __isArray; function __isRegExp(o) { return typeof o === "object" && __objToStr(o) === "[object RegExp]"; } clone2.__isRegExp = __isRegExp; function __getRegExpFlags(re) { var flags = ""; if (re.global) flags += "g"; if (re.ignoreCase) flags += "i"; if (re.multiline) flags += "m"; return flags; } clone2.__getRegExpFlags = __getRegExpFlags; return clone2; }(); class Request { /** * @param {Object} arg - 全局配置 * @param {String} arg.baseURL - 全局根路径 * @param {Object} arg.header - 全局header * @param {String} arg.method = [GET|POST|PUT|DELETE|CONNECT|HEAD|OPTIONS|TRACE] - 全局默认请求方式 * @param {String} arg.dataType = [json] - 全局默认的dataType * @param {String} arg.responseType = [text|arraybuffer] - 全局默认的responseType。支付宝小程序不支持 * @param {Object} arg.custom - 全局默认的自定义参数 * @param {Number} arg.timeout - 全局默认的超时时间,单位 ms。默认60000。H5(HBuilderX 2.9.9+)、APP(HBuilderX 2.9.9+)、微信小程序(2.10.0)、支付宝小程序 * @param {Boolean} arg.sslVerify - 全局默认的是否验证 ssl 证书。默认true.仅App安卓端支持(HBuilderX 2.3.3+) * @param {Boolean} arg.withCredentials - 全局默认的跨域请求时是否携带凭证(cookies)。默认false。仅H5支持(HBuilderX 2.6.15+) * @param {Boolean} arg.firstIpv4 - 全DNS解析时优先使用ipv4。默认false。仅 App-Android 支持 (HBuilderX 2.8.0+) * @param {Function(statusCode):Boolean} arg.validateStatus - 全局默认的自定义验证器。默认statusCode >= 200 && statusCode < 300 */ constructor(arg = {}) { if (!isPlainObject(arg)) { arg = {}; formatAppLog("warn", "at uni_modules/uview-plus/libs/luch-request/core/Request.js:39", "设置全局参数必须接收一个Object"); } this.config = clone({ ...defaults, ...arg }); this.interceptors = { request: new InterceptorManager(), response: new InterceptorManager() }; } /** * @Function * @param {Request~setConfigCallback} f - 设置全局默认配置 */ setConfig(f) { this.config = f(this.config); } middleware(config2) { config2 = mergeConfig(this.config, config2); const chain = [dispatchRequest, void 0]; let promise2 = Promise.resolve(config2); this.interceptors.request.forEach((interceptor) => { chain.unshift(interceptor.fulfilled, interceptor.rejected); }); this.interceptors.response.forEach((interceptor) => { chain.push(interceptor.fulfilled, interceptor.rejected); }); while (chain.length) { promise2 = promise2.then(chain.shift(), chain.shift()); } return promise2; } /** * @Function * @param {Object} config - 请求配置项 * @prop {String} options.url - 请求路径 * @prop {Object} options.data - 请求参数 * @prop {Object} [options.responseType = config.responseType] [text|arraybuffer] - 响应的数据类型 * @prop {Object} [options.dataType = config.dataType] - 如果设为 json,会尝试对返回的数据做一次 JSON.parse * @prop {Object} [options.header = config.header] - 请求header * @prop {Object} [options.method = config.method] - 请求方法 * @returns {Promise} */ request(config2 = {}) { return this.middleware(config2); } get(url2, options = {}) { return this.middleware({ url: url2, method: "GET", ...options }); } post(url2, data, options = {}) { return this.middleware({ url: url2, data, method: "POST", ...options }); } put(url2, data, options = {}) { return this.middleware({ url: url2, data, method: "PUT", ...options }); } delete(url2, data, options = {}) { return this.middleware({ url: url2, data, method: "DELETE", ...options }); } options(url2, data, options = {}) { return this.middleware({ url: url2, data, method: "OPTIONS", ...options }); } upload(url2, config2 = {}) { config2.url = url2; config2.method = "UPLOAD"; return this.middleware(config2); } download(url2, config2 = {}) { config2.url = url2; config2.method = "DOWNLOAD"; return this.middleware(config2); } } class Router { constructor() { this.config = { type: "navigateTo", url: "", delta: 1, // navigateBack页面后退时,回退的层数 params: {}, // 传递的参数 animationType: "pop-in", // 窗口动画,只在APP有效 animationDuration: 300, // 窗口动画持续时间,单位毫秒,只在APP有效 intercept: false // 是否需要拦截 }; this.route = this.route.bind(this); } // 判断url前面是否有"/",如果没有则加上,否则无法跳转 addRootPath(url2) { return url2[0] === "/" ? url2 : `/${url2}`; } // 整合路由参数 mixinParam(url2, params) { url2 = url2 && this.addRootPath(url2); let query = ""; if (/.*\/.*\?.*=.*/.test(url2)) { query = uni.$u.queryParams(params, false); return url2 += `&${query}`; } query = uni.$u.queryParams(params); return url2 += query; } // 对外的方法名称 async route(options = {}, params = {}) { let mergeConfig2 = {}; if (typeof options === "string") { mergeConfig2.url = this.mixinParam(options, params); mergeConfig2.type = "navigateTo"; } else { mergeConfig2 = uni.$u.deepMerge(this.config, options); mergeConfig2.url = this.mixinParam(options.url, options.params); } if (mergeConfig2.url === uni.$u.page()) return; if (params.intercept) { this.config.intercept = params.intercept; } mergeConfig2.params = params; mergeConfig2 = uni.$u.deepMerge(this.config, mergeConfig2); if (typeof uni.$u.routeIntercept === "function") { const isNext = await new Promise((resolve, reject) => { uni.$u.routeIntercept(mergeConfig2, resolve); }); isNext && this.openPage(mergeConfig2); } else { this.openPage(mergeConfig2); } } // 执行路由跳转 openPage(config2) { const { url: url2, type: type2, delta, animationType, animationDuration } = config2; if (config2.type == "navigateTo" || config2.type == "to") { uni.navigateTo({ url: url2, animationType, animationDuration }); } if (config2.type == "redirectTo" || config2.type == "redirect") { uni.redirectTo({ url: url2 }); } if (config2.type == "switchTab" || config2.type == "tab") { uni.switchTab({ url: url2 }); } if (config2.type == "reLaunch" || config2.type == "launch") { uni.reLaunch({ url: url2 }); } if (config2.type == "navigateBack" || config2.type == "back") { uni.navigateBack({ delta }); } } } const route = new Router().route; function colorGradient(startColor = "rgb(0, 0, 0)", endColor = "rgb(255, 255, 255)", step = 10) { const startRGB = hexToRgb(startColor, false); const startR = startRGB[0]; const startG = startRGB[1]; const startB = startRGB[2]; const endRGB = hexToRgb(endColor, false); const endR = endRGB[0]; const endG = endRGB[1]; const endB = endRGB[2]; const sR = (endR - startR) / step; const sG = (endG - startG) / step; const sB = (endB - startB) / step; const colorArr = []; for (let i = 0; i < step; i++) { let hex = rgbToHex(`rgb(${Math.round(sR * i + startR)},${Math.round(sG * i + startG)},${Math.round(sB * i + startB)})`); if (i === 0) hex = rgbToHex(startColor); if (i === step - 1) hex = rgbToHex(endColor); colorArr.push(hex); } return colorArr; } function hexToRgb(sColor, str = true) { const reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/; sColor = String(sColor).toLowerCase(); if (sColor && reg.test(sColor)) { if (sColor.length === 4) { let sColorNew = "#"; for (let i = 1; i < 4; i += 1) { sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1)); } sColor = sColorNew; } const sColorChange = []; for (let i = 1; i < 7; i += 2) { sColorChange.push(parseInt(`0x${sColor.slice(i, i + 2)}`)); } if (!str) { return sColorChange; } return `rgb(${sColorChange[0]},${sColorChange[1]},${sColorChange[2]})`; } if (/^(rgb|RGB)/.test(sColor)) { const arr = sColor.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(","); return arr.map((val) => Number(val)); } return sColor; } function rgbToHex(rgb) { const _this = rgb; const reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/; if (/^(rgb|RGB)/.test(_this)) { const aColor = _this.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(","); let strHex = "#"; for (let i = 0; i < aColor.length; i++) { let hex = Number(aColor[i]).toString(16); hex = String(hex).length == 1 ? `${0}${hex}` : hex; if (hex === "0") { hex += hex; } strHex += hex; } if (strHex.length !== 7) { strHex = _this; } return strHex; } if (reg.test(_this)) { const aNum = _this.replace(/#/, "").split(""); if (aNum.length === 6) { return _this; } if (aNum.length === 3) { let numHex = "#"; for (let i = 0; i < aNum.length; i += 1) { numHex += aNum[i] + aNum[i]; } return numHex; } } else { return _this; } } function colorToRgba(color2, alpha) { color2 = rgbToHex(color2); const reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/; let sColor = String(color2).toLowerCase(); if (sColor && reg.test(sColor)) { if (sColor.length === 4) { let sColorNew = "#"; for (let i = 1; i < 4; i += 1) { sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1)); } sColor = sColorNew; } const sColorChange = []; for (let i = 1; i < 7; i += 2) { sColorChange.push(parseInt(`0x${sColor.slice(i, i + 2)}`)); } return `rgba(${sColorChange.join(",")},${alpha})`; } return sColor; } const colorGradient$1 = { colorGradient, hexToRgb, rgbToHex, colorToRgba }; function email(value2) { return /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/.test(value2); } function mobile(value2) { return /^1[23456789]\d{9}$/.test(value2); } function url(value2) { return /^((https|http|ftp|rtsp|mms):\/\/)(([0-9a-zA-Z_!~*'().&=+$%-]+: )?[0-9a-zA-Z_!~*'().&=+$%-]+@)?(([0-9]{1,3}.){3}[0-9]{1,3}|([0-9a-zA-Z_!~*'()-]+.)*([0-9a-zA-Z][0-9a-zA-Z-]{0,61})?[0-9a-zA-Z].[a-zA-Z]{2,6})(:[0-9]{1,4})?((\/?)|(\/[0-9a-zA-Z_!~*'().;?:@&=+$,%#-]+)+\/?)$/.test(value2); } function date(value2) { if (!value2) return false; if (number(value2)) value2 = +value2; return !/Invalid|NaN/.test(new Date(value2).toString()); } function dateISO(value2) { return /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(value2); } function number(value2) { return /^[\+-]?(\d+\.?\d*|\.\d+|\d\.\d+e\+\d+)$/.test(value2); } function string(value2) { return typeof value2 === "string"; } function digits(value2) { return /^\d+$/.test(value2); } function idCard(value2) { return /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/.test( value2 ); } function carNo(value2) { const xreg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/; const creg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/; if (value2.length === 7) { return creg.test(value2); } if (value2.length === 8) { return xreg.test(value2); } return false; } function amount(value2) { return /^[1-9]\d*(,\d{3})*(\.\d{1,2})?$|^0\.\d{1,2}$/.test(value2); } function chinese(value2) { const reg = /^[\u4e00-\u9fa5]+$/gi; return reg.test(value2); } function letter(value2) { return /^[a-zA-Z]*$/.test(value2); } function enOrNum(value2) { const reg = /^[0-9a-zA-Z]*$/g; return reg.test(value2); } function contains(value2, param) { return value2.indexOf(param) >= 0; } function range$1(value2, param) { return value2 >= param[0] && value2 <= param[1]; } function rangeLength(value2, param) { return value2.length >= param[0] && value2.length <= param[1]; } function landline(value2) { const reg = /^\d{3,4}-\d{7,8}(-\d{3,4})?$/; return reg.test(value2); } function empty(value2) { switch (typeof value2) { case "undefined": return true; case "string": if (value2.replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g, "").length == 0) return true; break; case "boolean": if (!value2) return true; break; case "number": if (value2 === 0 || isNaN(value2)) return true; break; case "object": if (value2 === null || value2.length === 0) return true; for (const i in value2) { return false; } return true; } return false; } function jsonString(value2) { if (typeof value2 === "string") { try { const obj = JSON.parse(value2); if (typeof obj === "object" && obj) { return true; } return false; } catch (e) { return false; } } return false; } function array(value2) { if (typeof Array.isArray === "function") { return Array.isArray(value2); } return Object.prototype.toString.call(value2) === "[object Array]"; } function object(value2) { return Object.prototype.toString.call(value2) === "[object Object]"; } function code$1(value2, len = 6) { return new RegExp(`^\\d{${len}}$`).test(value2); } function func(value2) { return typeof value2 === "function"; } function promise(value2) { return object(value2) && func(value2.then) && func(value2.catch); } function image(value2) { const newValue = value2.split("?")[0]; const IMAGE_REGEXP = /\.(jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg)/i; return IMAGE_REGEXP.test(newValue); } function video(value2) { const VIDEO_REGEXP = /\.(mp4|mpg|mpeg|dat|asf|avi|rm|rmvb|mov|wmv|flv|mkv|m3u8)/i; return VIDEO_REGEXP.test(value2); } function regExp(o) { return o && Object.prototype.toString.call(o) === "[object RegExp]"; } const test = { email, mobile, url, date, dateISO, number, digits, idCard, carNo, amount, chinese, letter, enOrNum, contains, range: range$1, rangeLength, empty, isEmpty: empty, jsonString, landline, object, array, code: code$1, func, promise, video, image, regExp, string }; let timeout = null; function debounce(func2, wait = 500, immediate = false) { if (timeout !== null) clearTimeout(timeout); if (immediate) { const callNow = !timeout; timeout = setTimeout(() => { timeout = null; }, wait); if (callNow) typeof func2 === "function" && func2(); } else { timeout = setTimeout(() => { typeof func2 === "function" && func2(); }, wait); } } let flag; function throttle(func2, wait = 500, immediate = true) { if (immediate) { if (!flag) { flag = true; typeof func2 === "function" && func2(); setTimeout(() => { flag = false; }, wait); } } else if (!flag) { flag = true; setTimeout(() => { flag = false; typeof func2 === "function" && func2(); }, wait); } } function strip(num, precision = 15) { return +parseFloat(Number(num).toPrecision(precision)); } function digitLength(num) { const eSplit = num.toString().split(/[eE]/); const len = (eSplit[0].split(".")[1] || "").length - +(eSplit[1] || 0); return len > 0 ? len : 0; } function float2Fixed(num) { if (num.toString().indexOf("e") === -1) { return Number(num.toString().replace(".", "")); } const dLen = digitLength(num); return dLen > 0 ? strip(Number(num) * Math.pow(10, dLen)) : Number(num); } function checkBoundary(num) { { if (num > Number.MAX_SAFE_INTEGER || num < Number.MIN_SAFE_INTEGER) { formatAppLog("warn", "at uni_modules/uview-plus/libs/function/digit.js:45", `${num} 超出了精度限制,结果可能不正确`); } } } function iteratorOperation(arr, operation) { const [num1, num2, ...others] = arr; let res2 = operation(num1, num2); others.forEach((num) => { res2 = operation(res2, num); }); return res2; } function times(...nums) { if (nums.length > 2) { return iteratorOperation(nums, times); } const [num1, num2] = nums; const num1Changed = float2Fixed(num1); const num2Changed = float2Fixed(num2); const baseNum = digitLength(num1) + digitLength(num2); const leftValue = num1Changed * num2Changed; checkBoundary(leftValue); return leftValue / Math.pow(10, baseNum); } function divide(...nums) { if (nums.length > 2) { return iteratorOperation(nums, divide); } const [num1, num2] = nums; const num1Changed = float2Fixed(num1); const num2Changed = float2Fixed(num2); checkBoundary(num1Changed); checkBoundary(num2Changed); return times(num1Changed / num2Changed, strip(Math.pow(10, digitLength(num2) - digitLength(num1)))); } function round(num, ratio) { const base = Math.pow(10, ratio); let result = divide(Math.round(Math.abs(times(num, base))), base); if (num < 0 && result !== 0) { result = times(result, -1); } return result; } function range(min = 0, max = 0, value2 = 0) { return Math.max(min, Math.min(max, Number(value2))); } function getPx(value2, unit = false) { if (test.number(value2)) { return unit ? `${value2}px` : Number(value2); } if (/(rpx|upx)$/.test(value2)) { return unit ? `${uni.upx2px(parseInt(value2))}px` : Number(uni.upx2px(parseInt(value2))); } return unit ? `${parseInt(value2)}px` : parseInt(value2); } function sleep(value2 = 30) { return new Promise((resolve) => { setTimeout(() => { resolve(); }, value2); }); } function os() { return uni.getSystemInfoSync().platform.toLowerCase(); } function sys() { return uni.getSystemInfoSync(); } function random(min, max) { if (min >= 0 && max > 0 && max >= min) { const gab = max - min + 1; return Math.floor(Math.random() * gab + min); } return 0; } function guid(len = 32, firstU = true, radix = null) { const chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""); const uuid = []; radix = radix || chars.length; if (len) { for (let i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix]; } else { let r; uuid[8] = uuid[13] = uuid[18] = uuid[23] = "-"; uuid[14] = "4"; for (let i = 0; i < 36; i++) { if (!uuid[i]) { r = 0 | Math.random() * 16; uuid[i] = chars[i == 19 ? r & 3 | 8 : r]; } } } if (firstU) { uuid.shift(); return `u${uuid.join("")}`; } return uuid.join(""); } function $parent(name = void 0) { let parent = this.$parent; while (parent) { if (parent.$options && parent.$options.name !== name) { parent = parent.$parent; } else { return parent; } } return false; } function addStyle(customStyle, target = "object") { if (test.empty(customStyle) || typeof customStyle === "object" && target === "object" || target === "string" && typeof customStyle === "string") { return customStyle; } if (target === "object") { customStyle = trim(customStyle); const styleArray = customStyle.split(";"); const style = {}; for (let i = 0; i < styleArray.length; i++) { if (styleArray[i]) { const item = styleArray[i].split(":"); style[trim(item[0])] = trim(item[1]); } } return style; } let string2 = ""; for (const i in customStyle) { const key = i.replace(/([A-Z])/g, "-$1").toLowerCase(); string2 += `${key}:${customStyle[i]};`; } return trim(string2); } function addUnit(value2 = "auto", unit = "") { if (!unit) { unit = uni.$u.config.unit || "px"; } value2 = String(value2); return test.number(value2) ? `${value2}${unit}` : value2; } function deepClone(obj) { if ([null, void 0, NaN, false].includes(obj)) return obj; if (typeof obj !== "object" && typeof obj !== "function") { return obj; } const o = test.array(obj) ? [] : {}; for (const i in obj) { if (obj.hasOwnProperty(i)) { o[i] = typeof obj[i] === "object" ? deepClone(obj[i]) : obj[i]; } } return o; } function deepMerge(target = {}, source = {}) { target = deepClone(target); if (typeof target !== "object" || typeof source !== "object") return false; for (const prop in source) { if (!source.hasOwnProperty(prop)) continue; if (prop in target) { if (typeof target[prop] !== "object") { target[prop] = source[prop]; } else if (typeof source[prop] !== "object") { target[prop] = source[prop]; } else if (target[prop].concat && source[prop].concat) { target[prop] = target[prop].concat(source[prop]); } else { target[prop] = deepMerge(target[prop], source[prop]); } } else { target[prop] = source[prop]; } } return target; } function error(err) { { formatAppLog("error", "at uni_modules/uview-plus/libs/function/index.js:238", `uView提示:${err}`); } } function randomArray(array3 = []) { return array3.sort(() => Math.random() - 0.5); } if (!String.prototype.padStart) { String.prototype.padStart = function(maxLength, fillString = " ") { if (Object.prototype.toString.call(fillString) !== "[object String]") { throw new TypeError( "fillString must be String" ); } const str = this; if (str.length >= maxLength) return String(str); const fillLength = maxLength - str.length; let times2 = Math.ceil(fillLength / fillString.length); while (times2 >>= 1) { fillString += fillString; if (times2 === 1) { fillString += fillString; } } return fillString.slice(0, fillLength) + str; }; } function timeFormat(dateTime = null, formatStr = "yyyy-mm-dd") { let date3; if (!dateTime) { date3 = /* @__PURE__ */ new Date(); } else if (/^\d{10}$/.test(dateTime.toString().trim())) { date3 = new Date(dateTime * 1e3); } else if (typeof dateTime === "string" && /^\d+$/.test(dateTime.trim())) { date3 = new Date(Number(dateTime)); } else { date3 = new Date( typeof dateTime === "string" ? dateTime.replace(/-/g, "/") : dateTime ); } const timeSource = { "y": date3.getFullYear().toString(), // 年 "m": (date3.getMonth() + 1).toString().padStart(2, "0"), // 月 "d": date3.getDate().toString().padStart(2, "0"), // 日 "h": date3.getHours().toString().padStart(2, "0"), // 时 "M": date3.getMinutes().toString().padStart(2, "0"), // 分 "s": date3.getSeconds().toString().padStart(2, "0") // 秒 // 有其他格式化字符需求可以继续添加,必须转化成字符串 }; for (const key in timeSource) { const [ret] = new RegExp(`${key}+`).exec(formatStr) || []; if (ret) { const beginIndex = key === "y" && ret.length === 2 ? 2 : 0; formatStr = formatStr.replace(ret, timeSource[key].slice(beginIndex)); } } return formatStr; } function timeFrom(timestamp = null, format2 = "yyyy-mm-dd") { if (timestamp == null) timestamp = Number(/* @__PURE__ */ new Date()); timestamp = parseInt(timestamp); if (timestamp.toString().length == 10) timestamp *= 1e3; let timer = (/* @__PURE__ */ new Date()).getTime() - timestamp; timer = parseInt(timer / 1e3); let tips = ""; switch (true) { case timer < 300: tips = "刚刚"; break; case (timer >= 300 && timer < 3600): tips = `${parseInt(timer / 60)}分钟前`; break; case (timer >= 3600 && timer < 86400): tips = `${parseInt(timer / 3600)}小时前`; break; case (timer >= 86400 && timer < 2592e3): tips = `${parseInt(timer / 86400)}天前`; break; default: if (format2 === false) { if (timer >= 2592e3 && timer < 365 * 86400) { tips = `${parseInt(timer / (86400 * 30))}个月前`; } else { tips = `${parseInt(timer / (86400 * 365))}年前`; } } else { tips = timeFormat(timestamp, format2); } } return tips; } function trim(str, pos = "both") { str = String(str); if (pos == "both") { return str.replace(/^\s+|\s+$/g, ""); } if (pos == "left") { return str.replace(/^\s*/, ""); } if (pos == "right") { return str.replace(/(\s*$)/g, ""); } if (pos == "all") { return str.replace(/\s+/g, ""); } return str; } function queryParams(data = {}, isPrefix = true, arrayFormat = "brackets") { const prefix = isPrefix ? "?" : ""; const _result = []; if (["indices", "brackets", "repeat", "comma"].indexOf(arrayFormat) == -1) arrayFormat = "brackets"; for (const key in data) { const value2 = data[key]; if (["", void 0, null].indexOf(value2) >= 0) { continue; } if (value2.constructor === Array) { switch (arrayFormat) { case "indices": for (let i = 0; i < value2.length; i++) { _result.push(`${key}[${i}]=${value2[i]}`); } break; case "brackets": value2.forEach((_value) => { _result.push(`${key}[]=${_value}`); }); break; case "repeat": value2.forEach((_value) => { _result.push(`${key}=${_value}`); }); break; case "comma": let commaStr = ""; value2.forEach((_value) => { commaStr += (commaStr ? "," : "") + _value; }); _result.push(`${key}=${commaStr}`); break; default: value2.forEach((_value) => { _result.push(`${key}[]=${_value}`); }); } } else { _result.push(`${key}=${value2}`); } } return _result.length ? prefix + _result.join("&") : ""; } function toast(title, duration = 2e3) { uni.showToast({ title: String(title), icon: "none", duration }); } function type2icon(type2 = "success", fill = false) { if (["primary", "info", "error", "warning", "success"].indexOf(type2) == -1) type2 = "success"; let iconName = ""; switch (type2) { case "primary": iconName = "info-circle"; break; case "info": iconName = "info-circle"; break; case "error": iconName = "close-circle"; break; case "warning": iconName = "error-circle"; break; case "success": iconName = "checkmark-circle"; break; default: iconName = "checkmark-circle"; } if (fill) iconName += "-fill"; return iconName; } function priceFormat(number3, decimals = 0, decimalPoint = ".", thousandsSeparator = ",") { number3 = `${number3}`.replace(/[^0-9+-Ee.]/g, ""); const n = !isFinite(+number3) ? 0 : +number3; const prec = !isFinite(+decimals) ? 0 : Math.abs(decimals); const sep = typeof thousandsSeparator === "undefined" ? "," : thousandsSeparator; const dec = typeof decimalPoint === "undefined" ? "." : decimalPoint; let s = ""; s = (prec ? round(n, prec) + "" : `${Math.round(n)}`).split("."); const re = /(-?\d+)(\d{3})/; while (re.test(s[0])) { s[0] = s[0].replace(re, `$1${sep}$2`); } if ((s[1] || "").length < prec) { s[1] = s[1] || ""; s[1] += new Array(prec - s[1].length + 1).join("0"); } return s.join(dec); } function getDuration(value2, unit = true) { const valueNum = parseInt(value2); if (unit) { if (/s$/.test(value2)) return value2; return value2 > 30 ? `${value2}ms` : `${value2}s`; } if (/ms$/.test(value2)) return valueNum; if (/s$/.test(value2)) return valueNum > 30 ? valueNum : valueNum * 1e3; return valueNum; } function padZero(value2) { return `00${value2}`.slice(-2); } function formValidate(instance, event) { const formItem = uni.$u.$parent.call(instance, "u-form-item"); const form = uni.$u.$parent.call(instance, "u-form"); if (formItem && form) { form.validateField(formItem.prop, () => { }, event); } } function getProperty(obj, key) { if (!obj) { return; } if (typeof key !== "string" || key === "") { return ""; } if (key.indexOf(".") !== -1) { const keys = key.split("."); let firstObj = obj[keys[0]] || {}; for (let i = 1; i < keys.length; i++) { if (firstObj) { firstObj = firstObj[keys[i]]; } } return firstObj; } return obj[key]; } function setProperty(obj, key, value2) { if (!obj) { return; } const inFn = function(_obj, keys, v) { if (keys.length === 1) { _obj[keys[0]] = v; return; } while (keys.length > 1) { const k = keys[0]; if (!_obj[k] || typeof _obj[k] !== "object") { _obj[k] = {}; } keys.shift(); inFn(_obj[k], keys, v); } }; if (typeof key !== "string" || key === "") ; else if (key.indexOf(".") !== -1) { const keys = key.split("."); inFn(obj, keys, value2); } else { obj[key] = value2; } } function page() { const pages2 = getCurrentPages(); return `/${pages2[pages2.length - 1].route || ""}`; } function pages() { const pages2 = getCurrentPages(); return pages2; } function setConfig({ props: props2 = {}, config: config2 = {}, color: color2 = {}, zIndex: zIndex2 = {} }) { const { deepMerge: deepMerge2 } = uni.$u; uni.$u.config = deepMerge2(uni.$u.config, config2); uni.$u.props = deepMerge2(uni.$u.props, props2); uni.$u.color = deepMerge2(uni.$u.color, color2); uni.$u.zIndex = deepMerge2(uni.$u.zIndex, zIndex2); } const index = { range, getPx, sleep, os, sys, random, guid, $parent, addStyle, addUnit, deepClone, deepMerge, error, randomArray, timeFormat, timeFrom, trim, queryParams, toast, type2icon, priceFormat, getDuration, padZero, formValidate, getProperty, setProperty, page, pages, setConfig }; const zIndex = { toast: 10090, noNetwork: 10080, // popup包含popup,actionsheet,keyboard,picker的值 popup: 10075, mask: 10070, navbar: 980, topTips: 975, sticky: 970, indexListSticky: 965 }; let platform = "none"; platform = "vue3"; platform = "plus"; const platform$1 = platform; const $u = { route, date: index.timeFormat, // 另名date colorGradient: colorGradient$1.colorGradient, hexToRgb: colorGradient$1.hexToRgb, rgbToHex: colorGradient$1.rgbToHex, colorToRgba: colorGradient$1.colorToRgba, test, type: ["primary", "success", "error", "warning", "info"], http: new Request(), config, // uView配置信息相关,比如版本号 zIndex, debounce, throttle, mixin, mpMixin, props: props$E, ...index, color, platform: platform$1 }; uni.$u = $u; const install = (Vue2) => { Vue2.config.globalProperties.$u = $u; Vue2.config.globalProperties.$nextTick = (cb) => { cb(); }; Vue2.mixin(mixin); }; const uviewPlus = { install }; const share = { data() { return { // 默认的全局分享内容 share: { title: "标题", path: "/pages/home/home", // 这里是分享的页面 imageUrl: "" // 这里是分析的图片,如果不写则默认截取当前分享页为分享图片 } }; }, // 定义全局分享 // 1.发送给朋友 onShareAppMessage(res2) { return { title: this.share.title, path: this.share.path, imageUrl: this.share.imageUrl }; }, //2.分享到朋友圈 onShareTimeline(res2) { return { title: this.share.title, path: this.share.path, imageUrl: this.share.imageUrl }; } }; let ttsModule = new VolumeTTS(); useInit(); uni.$u.ttsModule = ttsModule; uni.$u.useGlobalEvent = useGlobalEvent; function createApp() { const app = vue.createVueApp(App); initRequest(); const pinia2 = createPinia(); app.use(pinia2).use(uviewPlus); app.mixin(share); return { app, pinia: pinia2 }; } const { app: __app__, Vuex: __Vuex__, Pinia: __Pinia__ } = createApp(); uni.Vuex = __Vuex__; uni.Pinia = __Pinia__; __app__.provide("__globalStyles", __uniConfig.styles); __app__._component.mpType = "app"; __app__._component.render = () => { }; __app__.mount("#app"); })(Vue);