You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1645 lines
59 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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 global = uni.requireGlobal();
ArrayBuffer = global.ArrayBuffer;
Int8Array = global.Int8Array;
Uint8Array = global.Uint8Array;
Uint8ClampedArray = global.Uint8ClampedArray;
Int16Array = global.Int16Array;
Uint16Array = global.Uint16Array;
Int32Array = global.Int32Array;
Uint32Array = global.Uint32Array;
Float32Array = global.Float32Array;
Float64Array = global.Float64Array;
BigInt64Array = global.BigInt64Array;
BigUint64Array = global.BigUint64Array;
}
;
if (uni.restoreGlobal) {
uni.restoreGlobal(Vue, weex, plus, setTimeout, clearTimeout, setInterval, clearInterval);
}
(function(vue) {
"use strict";
function requireNativePlugin(name) {
return weex.requireModule(name);
}
function formatAppLog(type, filename, ...args) {
if (uni.__log__) {
uni.__log__(type, filename, ...args);
} else {
console[type].apply(console, [...args, filename]);
}
}
const BASE_API = "http://192.168.60.99:8004/";
const config = {
BASE_API
};
function login(username, password) {
return new Promise((resolve, reject) => {
uni.request({
url: BASE_API + "api/admin/auth/login",
method: "POST",
data: {
username,
password
},
success: resolve,
fail: reject
});
});
}
function getUserInfo() {
const token = uni.getStorageSync("token");
return new Promise((resolve, reject) => {
uni.request({
url: BASE_API + "api/admin/auth/me",
method: "POST",
data: {
token
},
success: resolve,
fail: reject
});
});
}
function getMaterialInfo(id) {
const token = uni.getStorageSync("token");
return new Promise((resolve, reject) => {
uni.request({
url: BASE_API + "api/admin/inventory/show",
method: "GET",
data: {
id,
token
},
success: resolve,
fail: reject
});
});
}
function getInventoryTaskList(data) {
const token = uni.getStorageSync("token");
return new Promise((resolve, reject) => {
uni.request({
url: BASE_API + "api/admin/inventory/index",
method: "GET",
data: {
...data,
token
},
success: resolve,
fail: reject
});
});
}
function saveInventoryCheck(data) {
const token = uni.getStorageSync("token");
return new Promise((resolve, reject) => {
formatAppLog("log", "at api.js:87", "confirm接口");
uni.request({
url: BASE_API + "api/admin/material-infos-plan-link/confirm",
method: "POST",
data: {
...data,
token
},
success: resolve,
fail: reject
});
});
}
function uploadFile(filePath) {
const token = uni.getStorageSync("token");
return new Promise((resolve, reject) => {
uni.uploadFile({
url: BASE_API + "api/admin/upload-file",
filePath,
name: "file",
formData: { token },
success: (res) => {
try {
const data = JSON.parse(res.data);
resolve(data);
} catch (e) {
reject(e);
}
},
fail: reject
});
});
}
const _export_sfc = (sfc, props) => {
const target = sfc.__vccOpts || sfc;
for (const [key, val] of props) {
target[key] = val;
}
return target;
};
let keyDownTime = 1;
let runtimeBarcodeFlag = false;
let runtimeAsyncFlag = false;
let runtimeVoiceFlag = true;
const _sfc_main$5 = {
data() {
return {
currentDate: "",
taskList: [],
showH5Scan: false,
html5QrCode: null,
scanType: "",
// 'inventory' or 'view'
// 标签盘点相关数据
btn1Info: "开始盘点",
tagsAmount: 0,
//读取到的标签总数
btn2Disabled: false,
//禁用按键
btn3Disabled: false,
//禁用按键
cbDisabled: false,
//是否禁用
dataList: [],
// list展示的标签列表首次最多加载offset个待上拉加载更多时加载tempList中的数据
pageNum: 100,
// 每页加载数量
offset: 50,
// 第一页加载的数量/已加载的数量
epcList: [],
// 过滤所用列表只存标签的EPC信息
tempList: [],
// 标签缓存列表,缓存标签信息,等待上拉至列表底部时,按页加载缓存列表中的数据
asyncFlag: false,
// 异步盘点标志
voiceFlag: true,
// 声音播放标志
barcodeFlag: false,
// 二维码扫描标志
main: null,
// Android主Activity
hhwUHFController: null,
// UHF控制器
globalEvent: null,
// 事件监听
receiver: null
// Android广播接收器
};
},
created() {
runtimeAsyncFlag = this.asyncFlag;
runtimeVoiceFlag = this.voiceFlag;
runtimeBarcodeFlag = this.barcodeFlag;
},
onLoad() {
this.updateDate();
this.initAndroidComponents();
this.initUHFEvent();
},
onShow() {
formatAppLog("log", "at pages/index/index.vue:156", "inventory Show");
this.initBarcodeScan();
this.disableBarcodeScanKey();
this.registerKeyReceiver();
},
onHide() {
formatAppLog("log", "at pages/index/index.vue:167", "inventory Hide");
if (this.main && this.receiver) {
this.main.unregisterReceiver(this.receiver);
}
},
methods: {
updateDate() {
const now = /* @__PURE__ */ new Date();
const year = now.getFullYear();
const month = String(now.getMonth() + 1).padStart(2, "0");
const day = String(now.getDate()).padStart(2, "0");
this.currentDate = `${year}-${month}-${day}`;
},
handleScan(type) {
this.scanType = type;
uni.scanCode({
success: (res) => {
let id = res.result.trim();
formatAppLog("log", "at pages/index/index.vue:271", "id2:", id);
id = this.normalizeScannedId(id);
if (!id) {
uni.showToast({ title: "二维码无效", icon: "none" });
return;
}
if (!/^\d+$/.test(id)) {
uni.showToast({ title: "二维码信息错误", icon: "none" });
return;
}
if (type === "inventory") {
uni.navigateTo({ url: `/pages/inventory/inventory?code=${encodeURIComponent(id)}` });
} else {
uni.navigateTo({ url: `/pages/inventory/inventory?code=${encodeURIComponent(id)}&view=1` });
}
},
fail: () => {
uni.showToast({ title: "扫码失败", icon: "none" });
}
});
},
scanInventory() {
this.handleScan("inventory");
},
scanView() {
this.handleScan("view");
},
closeH5Scan() {
this.showH5Scan = false;
if (this.html5QrCode) {
this.html5QrCode.stop().then(() => {
this.html5QrCode.clear();
});
}
},
goTaskDetail(item) {
if (!item) {
return;
}
if (!item.raw) {
uni.showToast({
title: "暂无更多详情",
icon: "none"
});
return;
}
const raw = item.raw;
const title = raw.zichanmingcheng || raw.name || item.title || "";
const time = raw.updated_at || raw.created_at || "";
const status = raw.status || "";
const statusText = raw.status_text || item.statusText || "";
uni.navigateTo({
url: `/pages/task-detail/task-detail?title=${encodeURIComponent(title)}&time=${encodeURIComponent(time)}&status=${status}&statusText=${encodeURIComponent(statusText)}`
});
},
// 初始化Android组件
initAndroidComponents() {
try {
this.main = plus.android.runtimeMainActivity();
this.hhwUHFController = getApp().globalData.hhwUHFController;
this.globalEvent = getApp().globalData.globalEvent;
} catch (e) {
formatAppLog("error", "at pages/index/index.vue:339", "初始化Android组件失败:", e);
}
},
// 初始化UHF事件监听
initUHFEvent() {
if (this.globalEvent) {
this.globalEvent.addEventListener("uhf_tag_event", (e) => {
this.handleUHFEvent(e);
});
}
},
// 处理UHF事件
handleUHFEvent(e) {
formatAppLog("log", "at pages/index/index.vue:355", e.tag_info_list);
var result = e.tag_info_list;
if (result == null) {
var event = e.inventory_event;
if (event == "stopInventory") {
uni.showToast({
title: "停止盘点",
icon: "none"
});
this.btn2Disabled = false;
this.btn3Disabled = false;
this.cbDisabled = false;
this.btn1Info = "开始盘点";
}
return;
}
for (var i = 0; i < result.length; i++) {
var id = i;
var epcHex = this.bytes2HexString(result[i].EpcId);
var epc = this.hexToString(epcHex);
var rssi = result[i].RSSI;
var tag = {
id,
epc,
count: 1,
rssi
};
var index = this.epcList.indexOf(epc);
if (index == -1) {
tag.id = this.epcList.length;
if (this.dataList.length < this.offset) {
this.dataList.push(tag);
}
this.tempList.push(tag);
this.epcList.push(epc);
} else {
tag.id = index;
tag.count = this.tempList[index].count + 1;
if (index < this.dataList.length) {
this.$set(this.dataList, index, tag);
}
this.$set(this.tempList, index, tag);
}
}
this.tagsAmount = this.epcList.length;
},
// 注册按键接收器
registerKeyReceiver() {
if (!this.main)
return;
var IntentFilter = plus.android.importClass("android.content.IntentFilter");
var filter = new IntentFilter();
filter.addAction("android.rfid.FUN_KEY");
this.receiver = plus.android.implements("io.dcloud.feature.internal.reflect.BroadcastReceiver", {
onReceive: (context, intent) => {
plus.android.importClass(intent);
var code = intent.getIntExtra("keyCode", 0);
var keyDown = intent.getBooleanExtra("keydown", false);
if (keyDown && keyDownTime == 1 && code == 137) {
formatAppLog("log", "at pages/index/index.vue:416", "inventory", "receive keyUp code: " + code);
if (runtimeBarcodeFlag) {
this.startBarcodeScan();
} else {
this.startInventory();
}
keyDownTime++;
} else if (!keyDown) {
if (runtimeBarcodeFlag) {
this.stopBarcodeScan();
} else {
this.stopInventory();
}
keyDownTime = 1;
}
}
});
this.main.registerReceiver(this.receiver, filter);
},
// 屏蔽二维码扫描扳机
disableBarcodeScanKey() {
if (!this.main)
return;
var Intent = plus.android.importClass("android.content.Intent");
var intent = new Intent("com.rfid.KEY_SET");
var keyValueArray = ["137"];
intent.putExtra("keyValueArray", keyValueArray);
intent.putExtra("137", false);
this.main.sendBroadcast(intent);
},
// 字节数组转十六进制字符
bytes2HexString(byteArray) {
return Array.from(byteArray, function(byte) {
return ("0" + (byte & 255).toString(16)).slice(-2);
}).join("");
},
// 十六进制字符串转字节数组
hexString2Bytes(str) {
var pos = 0;
var len = str.length;
if (len % 2 != 0) {
return null;
}
len /= 2;
var hexA = new Array();
for (var i = 0; i < len; i++) {
var s = str.substr(pos, 2);
var v = parseInt(s, 16);
hexA.push(v);
pos += 2;
}
return hexA;
},
// 十六进制字符串转原始数字字符串反向操作parseInt(id, 10).toString(16)
hexToString(hexStr) {
if (!hexStr)
return "";
let clean = hexStr.replace(/\s+/g, "").toUpperCase();
const num = parseInt(clean, 16);
if (isNaN(num)) {
return hexStr;
}
return num.toString();
},
// 格式化物资列表数据
formatMaterialList(res) {
const list = res && res.data && res.data.list && res.data.list.data ? res.data.list.data : [];
formatAppLog("log", "at pages/index/index.vue:490", "list:", list);
return list.map((item) => ({
// 用于跳转的ID后端字段兼容
id: item.id || item.material_info_id || item.inventory_id || "",
// 表格展示字段
zichanmingcheng: item.zichanmingcheng || "",
total_num: item.total_num ?? item.inventorys_total ?? item.zaikushuliang ?? 0
}));
},
// 规范化扫码ID允许 "3715.000" => "3715"
normalizeScannedId(value) {
if (!value)
return "";
const v = String(value).trim();
if (/^\d+$/.test(v))
return v;
if (/^\d+(?:\.\d+)?$/.test(v)) {
const num = Number(v);
if (!Number.isNaN(num) && Number.isFinite(num)) {
return Math.trunc(num).toString();
}
}
return "";
},
// 从物资列表进入盘点页面
goInventoryFromList(item) {
const code = item && (item.id || item.material_info_id || item.inventory_id);
if (!code) {
uni.showToast({ title: "无法获取物资ID", icon: "none" });
return;
}
uni.navigateTo({ url: `/pages/inventory/inventory?code=${encodeURIComponent(code)}` });
},
// 初始化二维码扫描
initBarcodeScan() {
if (!this.main)
return;
var Intent = plus.android.importClass("android.content.Intent");
var intent = new Intent("com.rfid.SCAN_INIT");
this.main.sendBroadcast(intent);
},
// 触发二维码扫描
startBarcodeScan() {
if (!this.main)
return;
var Intent = plus.android.importClass("android.content.Intent");
var intent = new Intent("com.rfid.SCAN_CMD");
this.main.sendBroadcast(intent);
},
// 暂停二维码扫描
stopBarcodeScan() {
if (!this.main)
return;
var Intent = plus.android.importClass("android.content.Intent");
var intent = new Intent("com.rfid.STOP_SCAN");
this.main.sendBroadcast(intent);
},
// 处理盘点按钮点击
handleInventory() {
if (this.btn1Info == "开始盘点") {
this.startInventory();
} else {
this.stopInventory();
}
},
// 开始盘点
startInventory() {
if (!this.hhwUHFController) {
uni.showToast({
title: "UHF控制器未初始化",
icon: "none"
});
return;
}
this.btn2Disabled = true;
this.btn3Disabled = true;
this.cbDisabled = true;
this.btn1Info = "停止盘点";
this.hhwUHFController.setCancleInventoryFilter();
if (runtimeAsyncFlag) {
this.hhwUHFController.startInventory(30, 0, true, 0, runtimeVoiceFlag, (result) => {
formatAppLog("log", "at pages/index/index.vue:581", "inventory inventory", "startInventory " + result);
});
} else {
formatAppLog("log", "at pages/index/index.vue:585", "async_flag");
this.hhwUHFController.startInventory(30, 0, false, 0, runtimeVoiceFlag, (result) => {
formatAppLog("log", "at pages/index/index.vue:587", "inventory inventory", "startInventory " + result);
});
}
},
// 停止盘点
stopInventory() {
if (!this.hhwUHFController) {
return;
}
if (runtimeAsyncFlag) {
this.hhwUHFController.stopInventory(true);
} else {
this.hhwUHFController.stopInventory(false);
}
},
// 清空标签
clearTags() {
this.dataList = [];
this.tempList = [];
this.epcList = [];
this.tagsAmount = 0;
this.offset = 50;
this.taskList = [];
},
// 查看物资
viewMaterials() {
const idsSource = this.epcList.length ? this.epcList : this.dataList.map((item) => item.epc).filter(Boolean);
if (!idsSource.length) {
uni.showToast({
title: "请先获取标签数据",
icon: "none"
});
return;
}
const ids = idsSource.join(",");
uni.showLoading({
title: "查询中..."
});
getInventoryTaskList({ ids, page: 1, page_size: 999 }).then((res) => {
uni.hideLoading();
formatAppLog("log", "at pages/index/index.vue:632", "res:", res);
const materialList = this.formatMaterialList(res);
if (materialList.length === 0) {
this.taskList = [];
uni.showToast({
title: "未查询到物资信息",
icon: "none"
});
return;
}
this.taskList = materialList;
}).catch((err) => {
formatAppLog("error", "at pages/index/index.vue:645", "viewMaterials error", err);
uni.hideLoading();
uni.showToast({
title: "获取物资失败",
icon: "none"
});
});
},
// 加载更多
loadmore() {
formatAppLog("log", "at pages/index/index.vue:655", "inventory loadmore", "dataList size1: " + this.dataList.length, "temList size: " + this.tempList.length);
if (this.dataList.length >= this.tempList.length) {
formatAppLog("log", "at pages/index/index.vue:657", "inventory loadmore", "nomore");
return;
}
var size;
if (this.tempList.length - this.offset >= this.pageNum) {
size = this.pageNum;
} else {
size = this.tempList.length - this.offset;
}
for (var i = this.offset; i < size + this.offset; i++) {
this.dataList.push(this.tempList[i]);
}
this.offset = this.offset + size;
},
// 异步选项改变
onAsyncChange(e) {
this.asyncFlag = e.detail.value[0] === "async_checkbox";
runtimeAsyncFlag = this.asyncFlag;
},
// 声音选项改变
onVoiceChange(e) {
this.voiceFlag = e.detail.value[0] === "voice_checkbox";
runtimeVoiceFlag = this.voiceFlag;
},
// 二维码扫描选项改变
onBarcodeChange(e) {
this.barcodeFlag = e.detail.value[0] === "barcode_checkbox";
runtimeBarcodeFlag = this.barcodeFlag;
}
}
};
function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createElementBlock("view", { class: "index-bg" }, [
vue.createElementVNode("view", { class: "index-content" }, [
vue.createElementVNode("view", { class: "btn-group" }, [
vue.createElementVNode("button", {
class: "main-btn",
onClick: _cache[0] || (_cache[0] = (...args) => $options.scanInventory && $options.scanInventory(...args))
}, "扫码盘点"),
vue.createElementVNode("button", {
class: "main-btn outline",
onClick: _cache[1] || (_cache[1] = (...args) => $options.scanView && $options.scanView(...args))
}, "扫码查看")
]),
vue.createElementVNode("view", { class: "inventory-section" }, [
vue.createElementVNode("view", { class: "inventory-header" }, [
vue.createElementVNode("text", { class: "inventory-title" }, "标签盘点"),
vue.createElementVNode(
"text",
{ class: "tags-amount" },
"标签数量: " + vue.toDisplayString($data.tagsAmount),
1
/* TEXT */
)
]),
vue.createElementVNode(
"scroll-view",
{
class: "tag-list",
"scroll-y": "",
onScrolltolower: _cache[2] || (_cache[2] = (...args) => $options.loadmore && $options.loadmore(...args)),
"lower-threshold": "50"
},
[
vue.createElementVNode("view", { class: "list-item-head" }, [
vue.createElementVNode("text", { class: "list-item-text-id" }, "序号"),
vue.createElementVNode("text", { class: "list-item-text-epc" }, "标签信息"),
vue.createElementVNode("text", { class: "list-item-text-count" }, "次数"),
vue.createElementVNode("text", { class: "list-item-text-rssi" }, "信号强度")
]),
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList($data.dataList, (item) => {
return vue.openBlock(), vue.createElementBlock("view", {
class: "list-item",
key: item.id
}, [
vue.createElementVNode(
"text",
{ class: "list-item-text-id" },
vue.toDisplayString(item.id + 1),
1
/* TEXT */
),
vue.createElementVNode(
"text",
{ class: "list-item-text-epc" },
vue.toDisplayString(item.epc),
1
/* TEXT */
),
vue.createElementVNode(
"text",
{ class: "list-item-text-count" },
vue.toDisplayString(item.count),
1
/* TEXT */
),
vue.createElementVNode(
"text",
{ class: "list-item-text-rssi" },
vue.toDisplayString(item.rssi),
1
/* TEXT */
)
]);
}),
128
/* KEYED_FRAGMENT */
))
],
32
/* NEED_HYDRATION */
),
vue.createElementVNode("view", { class: "inventory-options" }),
vue.createElementVNode("view", { class: "inventory-btn-box" }, [
vue.createElementVNode(
"button",
{
type: "primary",
onClick: _cache[3] || (_cache[3] = (...args) => $options.handleInventory && $options.handleInventory(...args)),
class: "inventory-btn"
},
vue.toDisplayString($data.btn1Info),
1
/* TEXT */
),
vue.createElementVNode("button", {
type: "primary",
disabled: $data.btn2Disabled,
onClick: _cache[4] || (_cache[4] = (...args) => $options.viewMaterials && $options.viewMaterials(...args)),
class: "inventory-btn"
}, "查看物资", 8, ["disabled"])
]),
vue.createElementVNode("view", null, [
vue.createElementVNode("button", {
type: "primary",
disabled: $data.btn3Disabled,
onClick: _cache[5] || (_cache[5] = (...args) => $options.clearTags && $options.clearTags(...args)),
class: "inventory-btn clear-btn"
}, "清空", 8, ["disabled"])
])
]),
vue.createElementVNode("view", { class: "task-section" }, [
vue.createElementVNode("view", { class: "task-title" }, "物资列表"),
vue.createElementVNode("view", { class: "task-list" }, [
vue.createElementVNode("view", {
class: "task-item",
style: { "font-weight": "600" }
}, [
vue.createElementVNode("view", { class: "task-info" }, [
vue.createElementVNode("text", { class: "task-name" }, "物资名称")
]),
vue.createElementVNode("view", {
class: "task-info",
style: { "flex-direction": "row", "align-items": "center", "gap": "8rpx" }
}, [
vue.createElementVNode("text", { class: "task-time" }, "库存")
]),
vue.createElementVNode("view", {
class: "task-info",
style: { "width": "120rpx", "text-align": "right" }
}, [
vue.createElementVNode("text", { class: "task-time" }, "操作")
])
]),
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList($data.taskList, (item, idx) => {
return vue.openBlock(), vue.createElementBlock("view", {
class: "task-item",
key: idx
}, [
vue.createElementVNode("view", { class: "task-info" }, [
vue.createElementVNode(
"text",
{ class: "task-name" },
vue.toDisplayString(item.zichanmingcheng),
1
/* TEXT */
)
]),
vue.createElementVNode("view", {
class: "task-info",
style: { "flex-direction": "row", "align-items": "center", "gap": "8rpx" }
}, [
vue.createElementVNode(
"text",
{ class: "task-time" },
vue.toDisplayString(item.total_num),
1
/* TEXT */
)
]),
vue.createElementVNode("view", {
class: "task-info",
style: { "width": "120rpx", "display": "flex", "justify-content": "flex-end" }
}, [
vue.createElementVNode("button", {
size: "mini",
type: "primary",
onClick: vue.withModifiers(($event) => $options.goInventoryFromList(item), ["stop"])
}, "盘点", 8, ["onClick"])
])
]);
}),
128
/* KEYED_FRAGMENT */
))
])
]),
$data.showH5Scan ? (vue.openBlock(), vue.createElementBlock("div", {
key: 0,
class: "h5-scan-modal"
}, [
vue.createElementVNode("div", {
id: "reader",
style: { "width": "300px", "height": "300px", "margin": "0 auto" }
}),
vue.createElementVNode("button", {
onClick: _cache[6] || (_cache[6] = (...args) => $options.closeH5Scan && $options.closeH5Scan(...args))
}, "关闭")
])) : vue.createCommentVNode("v-if", true)
])
]);
}
const PagesIndexIndex = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["render", _sfc_render$4], ["__file", "/Users/mac/Documents/朗业/2025/h-苏州河道处/y-应急保障/stocktaking/pages/index/index.vue"]]);
const _sfc_main$4 = {
data() {
return {
userInfo: {}
};
},
onShow() {
getUserInfo().then((response) => {
if (response.data) {
formatAppLog("log", "at pages/profile/profile.vue:36", "返回数据", response.data);
this.userInfo = response.data;
} else {
uni.showToast({
title: response.data.errmsg || "获取信息失败",
icon: "none"
});
}
}).catch(() => {
uni.showToast({ title: "网络错误", icon: "none" });
});
},
methods: {
logout() {
uni.removeStorageSync("token");
uni.reLaunch({ url: "/pages/login/login" });
}
}
};
function _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createElementBlock("view", { class: "profile-container" }, [
vue.createElementVNode("view", { class: "avatar-section" }, [
vue.createElementVNode("image", {
class: "avatar",
src: $data.userInfo.avatar || "/static/profile/avatar.png",
mode: "aspectFill"
}, null, 8, ["src"])
]),
vue.createElementVNode("view", { class: "info-section" }, [
vue.createElementVNode("view", { class: "info-item" }, [
vue.createElementVNode("text", { class: "label" }, "用户名:"),
vue.createElementVNode(
"text",
{ class: "value" },
vue.toDisplayString($data.userInfo.username || "-"),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "info-item" }, [
vue.createElementVNode("text", { class: "label" }, "姓名:"),
vue.createElementVNode(
"text",
{ class: "value" },
vue.toDisplayString($data.userInfo.name || "-"),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "info-item" }, [
vue.createElementVNode("text", { class: "label" }, "部门:"),
vue.createElementVNode(
"text",
{ class: "value" },
vue.toDisplayString($data.userInfo.department && $data.userInfo.department.name || "-"),
1
/* TEXT */
)
])
]),
vue.createElementVNode("button", {
class: "logout-btn",
onClick: _cache[0] || (_cache[0] = (...args) => $options.logout && $options.logout(...args))
}, "退出登录")
]);
}
const PagesProfileProfile = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["render", _sfc_render$3], ["__file", "/Users/mac/Documents/朗业/2025/h-苏州河道处/y-应急保障/stocktaking/pages/profile/profile.vue"]]);
const _sfc_main$3 = {
data() {
return {
username: "",
password: ""
};
},
methods: {
handleLogin() {
if (!this.username || !this.password) {
uni.showToast({
title: "请输入用户名和密码",
icon: "none"
});
return;
}
uni.showLoading({ title: "登录中...", mask: true });
login(this.username, this.password).then((response) => {
uni.hideLoading();
formatAppLog("log", "at pages/login/login.vue:41", response);
if (response.data && response.data.errcode !== void 0) {
uni.showToast({
title: response.data.errmsg || "登录失败",
icon: "none"
});
} else if (response.data) {
formatAppLog("log", "at pages/login/login.vue:48", response.data.access_token);
if (response.data.access_token) {
uni.setStorageSync("token", response.data.access_token);
}
uni.showToast({
title: "登录成功",
icon: "success",
duration: 1500
});
setTimeout(() => {
uni.switchTab({
url: "/pages/index/index"
});
}, 1500);
}
}).catch(() => {
uni.hideLoading();
uni.showToast({ title: "网络错误", icon: "none" });
});
}
}
};
function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createElementBlock("view", { class: "login-bg" }, [
vue.createElementVNode("view", { class: "login-card" }, [
vue.createElementVNode("view", { class: "login-title" }, "欢迎登录"),
vue.createElementVNode("view", { class: "login-subtitle" }, "河道防汛物资管理系统"),
vue.createElementVNode("view", { class: "form-group" }, [
vue.createElementVNode("text", { class: "form-label" }, "用户名"),
vue.withDirectives(vue.createElementVNode(
"input",
{
class: "form-input",
type: "text",
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $data.username = $event),
placeholder: "请输入用户名"
},
null,
512
/* NEED_PATCH */
), [
[vue.vModelText, $data.username]
])
]),
vue.createElementVNode("view", { class: "form-group" }, [
vue.createElementVNode("text", { class: "form-label" }, "密码"),
vue.withDirectives(vue.createElementVNode(
"input",
{
class: "form-input",
type: "password",
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $data.password = $event),
placeholder: "请输入密码"
},
null,
512
/* NEED_PATCH */
), [
[vue.vModelText, $data.password]
])
]),
vue.createElementVNode("button", {
class: "login-btn",
onClick: _cache[2] || (_cache[2] = (...args) => $options.handleLogin && $options.handleLogin(...args))
}, "登 录")
])
]);
}
const PagesLoginLogin = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["render", _sfc_render$2], ["__file", "/Users/mac/Documents/朗业/2025/h-苏州河道处/y-应急保障/stocktaking/pages/login/login.vue"]]);
const _sfc_main$2 = {
data() {
return {
result: ""
};
},
methods: {
doScan() {
uni.scanCode({
success: (res) => {
this.result = res.result;
},
fail: () => {
uni.showToast({ title: "扫码失败", icon: "none" });
}
});
}
}
};
function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createElementBlock("view", { class: "scan-bg" }, [
vue.createElementVNode("view", { class: "scan-title" }, "扫码盘点"),
vue.createElementVNode("button", {
class: "scan-btn",
onClick: _cache[0] || (_cache[0] = (...args) => $options.doScan && $options.doScan(...args))
}, "点击开始扫码"),
$data.result ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "scan-result"
}, [
vue.createElementVNode("text", { class: "result-label" }, "扫码结果:"),
vue.createElementVNode(
"text",
{ class: "result-value" },
vue.toDisplayString($data.result),
1
/* TEXT */
)
])) : vue.createCommentVNode("v-if", true)
]);
}
const PagesScanScan = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render$1], ["__file", "/Users/mac/Documents/朗业/2025/h-苏州河道处/y-应急保障/stocktaking/pages/scan/scan.vue"]]);
const _sfc_main$1 = {
data() {
return {
isViewMode: false,
stockQty: "",
countQty: "",
remark: "",
photo: "",
photos: [],
material_info_id: "",
// 物资信息
firstCategory: "-",
secondCategory: "-",
categoryName: "-",
materialName: "-",
materialCode: "-",
materialType: "-",
materialSpec: "-",
materialSize: "-",
unit: "-",
// 库存信息
batchNumber: "-",
sequenceNumber: "-",
waitNum: "-",
// 物资明细
productionDate: "-",
storageDate: "-",
materialStatus: "-",
reserveMethod: "-",
warehouseName: "-",
shelfName: "-",
shelfLayer: "-",
levelCategory: "-",
propertyInfo: "-",
isFixedAsset: "-",
fixedAssetCode: "-",
reserveYears: "-",
storageRequirement: "-",
maintenanceRequirement: "-",
maintenanceFrequency: "-",
material_infos_plan_id: "",
materialId: ""
};
},
onLoad(options) {
this.isViewMode = options.view === "1";
this.date = this.getToday();
this.materialId = options.code;
formatAppLog("log", "at pages/inventory/inventory.vue:196", "materialId:", this.materialId);
if (this.materialId) {
getMaterialInfo(this.materialId).then((response) => {
formatAppLog("log", "at pages/inventory/inventory.vue:199", "response:", response);
if (response.data) {
const data = response.data;
this.material_info_id = data.wuzibianma_material_infos_wuzibianma_relation.id;
const relation = data.wuzibianma_material_infos_wuzibianma_relation || {};
const fenleiDetail = relation.fenlei_detail || {};
const wuzizhuangtaiDetail = data.wuzizhuangtai_detail || {};
const chubeifangshiDetail = data.chubeifangshi_detail || {};
const dengjifenleiDetail = data.dengjifenlei_detail || {};
const chanquanxinxiDetail = data.chanquanxinxi_detail || {};
const materialstorages = data.materialstorages || {};
const shelfs = data.shelfs || {};
const equipmentMaintainConfig = data.equipment_maintain_config || {};
const materialInfoType = data.material_info_type || "";
if (materialInfoType) {
const parts = materialInfoType.split("-");
this.firstCategory = parts[0] || "-";
this.secondCategory = parts.length > 1 ? parts[1] : parts[0] || "-";
}
this.categoryName = fenleiDetail.name || "-";
this.materialName = data.zichanmingcheng || "-";
this.materialCode = data.wuzibianma || "-";
this.materialType = data.wuzileixing || "-";
this.materialSpec = relation.guigexinghao || data.guigexinghao || "-";
this.materialSize = relation.wuziguige || "-";
this.unit = relation.jiliangdanwei || data.jiliangdanwei || "-";
this.batchNumber = data.rukupici || "-";
this.stockQty = data.zaikushuliang || data.inventorys_total || "0";
this.sequenceNumber = data.shunxuhao || "-";
this.waitNum = data.wait_num || "-";
this.productionDate = data.shengchanriqi || "-";
this.storageDate = data.rukuriqi || "-";
this.materialStatus = wuzizhuangtaiDetail.value || "-";
this.reserveMethod = chubeifangshiDetail.value || "-";
this.warehouseName = materialstorages.cangkumingcheng || "-";
this.shelfName = shelfs.huojiamingcheng || "-";
this.shelfLayer = data.huojiaceng || "-";
this.levelCategory = dengjifenleiDetail.value || "-";
this.propertyInfo = chanquanxinxiDetail.value || "-";
this.isFixedAsset = data.shifouweigudingzichan || "-";
this.fixedAssetCode = data.gudingzichanbianma || "-";
this.reserveYears = data.chubeinianxian || "-";
this.storageRequirement = data.cunfangyaoqiu || "-";
this.maintenanceRequirement = data.weihuyaoqiu || "-";
this.maintenanceFrequency = equipmentMaintainConfig.name || "-";
this.material_infos_plan_id = data.material_infos_plan_id || "";
} else {
uni.showToast({ title: "未获取到物资信息", icon: "none" });
}
}).catch(() => {
uni.showToast({ title: "获取物资信息失败", icon: "none" });
});
}
},
methods: {
getToday() {
const now = /* @__PURE__ */ new Date();
const y = now.getFullYear();
const m = String(now.getMonth() + 1).padStart(2, "0");
const d = String(now.getDate()).padStart(2, "0");
return `${y}-${m}-${d}`;
},
choosePhoto() {
if (this.photos.length >= 3) {
uni.showToast({ title: "最多上传3张照片", icon: "none" });
return;
}
uni.chooseImage({
count: 3 - this.photos.length,
success: (res) => {
this.photos = [...this.photos, ...res.tempFilePaths];
}
});
},
deletePhoto(index) {
this.photos.splice(index, 1);
},
async submit() {
if (!this.countQty) {
uni.showToast({ title: "请输入盘点数量", icon: "none" });
return;
}
if (!/^(0|[1-9][0-9]*)$/.test(this.countQty)) {
uni.showToast({ title: "盘点数量必须为0或正整数", icon: "none" });
return;
}
uni.showLoading({ title: "提交中..." });
let file_ids = [];
for (let i = 0; i < this.photos.length; i++) {
try {
const res = await uploadFile(this.photos[i]);
if (res && res.id) {
file_ids.push(res.id);
}
} catch (e) {
uni.hideLoading();
uni.showToast({ title: "图片上传失败", icon: "none" });
return;
}
}
const data = {
status: "1",
material_info_id: this.material_info_id,
// 或实际物资id字段
inventory_id: this.materialId,
check_num: this.countQty,
remark: this.remark,
file_ids
// 其他参数如 material_infos_plan_id、status、check_date 可按需补充
};
formatAppLog("log", "at pages/inventory/inventory.vue:370", "data:", data);
saveInventoryCheck(data).then((res) => {
formatAppLog("log", "at pages/inventory/inventory.vue:373", "res:", res);
uni.hideLoading();
if (res && (!res.data || res.data.errcode === void 0)) {
uni.showToast({ title: "盘点提交成功", icon: "success" });
setTimeout(() => {
uni.reLaunch({ url: "/pages/index/index" });
}, 1200);
} else {
uni.showToast({ title: res.data.errmsg || "提交失败", icon: "none" });
}
}).catch(() => {
uni.hideLoading();
uni.showToast({ title: "提交失败", icon: "none" });
});
}
}
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return vue.openBlock(), vue.createElementBlock("view", { class: "inventory-bg" }, [
vue.createElementVNode("view", { class: "inventory-card" }, [
vue.createElementVNode("view", { class: "readonly-group" }, [
vue.createElementVNode("view", { class: "readonly-item" }, [
vue.createElementVNode("text", { class: "readonly-label" }, "一级分类"),
vue.createElementVNode(
"text",
{ class: "readonly-value" },
vue.toDisplayString($data.firstCategory),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "readonly-item" }, [
vue.createElementVNode("text", { class: "readonly-label" }, "二级分类"),
vue.createElementVNode(
"text",
{ class: "readonly-value" },
vue.toDisplayString($data.secondCategory),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "readonly-item" }, [
vue.createElementVNode("text", { class: "readonly-label" }, "所属种类"),
vue.createElementVNode(
"text",
{ class: "readonly-value" },
vue.toDisplayString($data.categoryName),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "readonly-item" }, [
vue.createElementVNode("text", { class: "readonly-label" }, "物资名称"),
vue.createElementVNode(
"text",
{ class: "readonly-value" },
vue.toDisplayString($data.materialName),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "readonly-item" }, [
vue.createElementVNode("text", { class: "readonly-label" }, "物资类型"),
vue.createElementVNode(
"text",
{ class: "readonly-value" },
vue.toDisplayString($data.materialType),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "readonly-item" }, [
vue.createElementVNode("text", { class: "readonly-label" }, "物资型号"),
vue.createElementVNode(
"text",
{ class: "readonly-value" },
vue.toDisplayString($data.materialSpec),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "readonly-item" }, [
vue.createElementVNode("text", { class: "readonly-label" }, "物资规格"),
vue.createElementVNode(
"text",
{ class: "readonly-value" },
vue.toDisplayString($data.materialSize),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "readonly-item" }, [
vue.createElementVNode("text", { class: "readonly-label" }, "单位"),
vue.createElementVNode(
"text",
{ class: "readonly-value" },
vue.toDisplayString($data.unit),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "readonly-item" }, [
vue.createElementVNode("text", { class: "readonly-label" }, "入库批次"),
vue.createElementVNode(
"text",
{ class: "readonly-value" },
vue.toDisplayString($data.batchNumber),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "readonly-item" }, [
vue.createElementVNode("text", { class: "readonly-label" }, "在库数量"),
vue.createElementVNode(
"text",
{ class: "readonly-value" },
vue.toDisplayString($data.stockQty) + vue.toDisplayString($data.unit ? " " + $data.unit : ""),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "readonly-item" }, [
vue.createElementVNode("text", { class: "readonly-label" }, "顺序号"),
vue.createElementVNode(
"text",
{ class: "readonly-value" },
vue.toDisplayString($data.sequenceNumber),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "readonly-item" }, [
vue.createElementVNode("text", { class: "readonly-label" }, "待出库"),
vue.createElementVNode(
"text",
{ class: "readonly-value" },
vue.toDisplayString($data.waitNum),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "readonly-item" }, [
vue.createElementVNode("text", { class: "readonly-label" }, "生产日期"),
vue.createElementVNode(
"text",
{ class: "readonly-value" },
vue.toDisplayString($data.productionDate),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "readonly-item" }, [
vue.createElementVNode("text", { class: "readonly-label" }, "入库日期"),
vue.createElementVNode(
"text",
{ class: "readonly-value" },
vue.toDisplayString($data.storageDate),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "readonly-item" }, [
vue.createElementVNode("text", { class: "readonly-label" }, "物资状态"),
vue.createElementVNode(
"text",
{ class: "readonly-value" },
vue.toDisplayString($data.materialStatus),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "readonly-item" }, [
vue.createElementVNode("text", { class: "readonly-label" }, "储备方式"),
vue.createElementVNode(
"text",
{ class: "readonly-value" },
vue.toDisplayString($data.reserveMethod),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "readonly-item" }, [
vue.createElementVNode("text", { class: "readonly-label" }, "所在仓库"),
vue.createElementVNode(
"view",
{ class: "readonly-value" },
vue.toDisplayString($data.warehouseName),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "readonly-item" }, [
vue.createElementVNode("text", { class: "readonly-label" }, "所在货架"),
vue.createElementVNode(
"text",
{ class: "readonly-value" },
vue.toDisplayString($data.shelfName),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "readonly-item" }, [
vue.createElementVNode("text", { class: "readonly-label" }, "所在货架层"),
vue.createElementVNode(
"text",
{ class: "readonly-value" },
vue.toDisplayString($data.shelfLayer),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "readonly-item" }, [
vue.createElementVNode("text", { class: "readonly-label" }, "等级分类"),
vue.createElementVNode(
"text",
{ class: "readonly-value" },
vue.toDisplayString($data.levelCategory),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "readonly-item" }, [
vue.createElementVNode("text", { class: "readonly-label" }, "产权信息"),
vue.createElementVNode(
"text",
{ class: "readonly-value" },
vue.toDisplayString($data.propertyInfo),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "readonly-item" }, [
vue.createElementVNode("text", { class: "readonly-label" }, "是否为固定资产"),
vue.createElementVNode(
"text",
{ class: "readonly-value" },
vue.toDisplayString($data.isFixedAsset),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "readonly-item" }, [
vue.createElementVNode("text", { class: "readonly-label" }, "固定资产编码"),
vue.createElementVNode(
"text",
{ class: "readonly-value" },
vue.toDisplayString($data.fixedAssetCode),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "readonly-item" }, [
vue.createElementVNode("text", { class: "readonly-label" }, "储备年限"),
vue.createElementVNode(
"text",
{ class: "readonly-value" },
vue.toDisplayString($data.reserveYears),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "readonly-item" }, [
vue.createElementVNode("text", { class: "readonly-label" }, "存放要求"),
vue.createElementVNode(
"text",
{ class: "readonly-value" },
vue.toDisplayString($data.storageRequirement),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "readonly-item" }, [
vue.createElementVNode("text", { class: "readonly-label" }, "维护要求"),
vue.createElementVNode(
"text",
{ class: "readonly-value" },
vue.toDisplayString($data.maintenanceRequirement),
1
/* TEXT */
)
]),
vue.createElementVNode("view", { class: "readonly-item" }, [
vue.createElementVNode("text", { class: "readonly-label" }, "保养频次"),
vue.createElementVNode(
"text",
{ class: "readonly-value" },
vue.toDisplayString($data.maintenanceFrequency),
1
/* TEXT */
)
])
]),
!$data.isViewMode ? (vue.openBlock(), vue.createElementBlock("view", {
key: 0,
class: "form-group"
}, [
vue.createElementVNode("text", { class: "form-label" }, "盘点数量"),
vue.withDirectives(vue.createElementVNode(
"input",
{
class: "form-input",
type: "number",
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $data.countQty = $event),
placeholder: "请输入盘点数量"
},
null,
512
/* NEED_PATCH */
), [
[vue.vModelText, $data.countQty]
])
])) : vue.createCommentVNode("v-if", true),
!$data.isViewMode ? (vue.openBlock(), vue.createElementBlock("view", {
key: 1,
class: "form-group"
}, [
vue.createElementVNode("text", { class: "form-label" }, "盘点备注"),
vue.withDirectives(vue.createElementVNode(
"textarea",
{
class: "form-textarea",
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $data.remark = $event),
placeholder: "请输入备注信息"
},
null,
512
/* NEED_PATCH */
), [
[vue.vModelText, $data.remark]
])
])) : vue.createCommentVNode("v-if", true),
!$data.isViewMode ? (vue.openBlock(), vue.createElementBlock("view", {
key: 2,
class: "form-group"
}, [
vue.createElementVNode("text", { class: "form-label" }, "照片上传"),
vue.createElementVNode("view", { class: "photo-upload" }, [
(vue.openBlock(true), vue.createElementBlock(
vue.Fragment,
null,
vue.renderList($data.photos, (photo, index) => {
return vue.openBlock(), vue.createElementBlock("view", {
key: index,
class: "photo-preview"
}, [
vue.createElementVNode("image", {
src: photo,
mode: "aspectFill",
class: "photo-img"
}, null, 8, ["src"]),
vue.createElementVNode("view", {
class: "photo-del",
onClick: ($event) => $options.deletePhoto(index)
}, [
vue.createElementVNode("text", { class: "delete-icon" }, "×")
], 8, ["onClick"])
]);
}),
128
/* KEYED_FRAGMENT */
)),
$data.photos.length < 3 ? (vue.openBlock(), vue.createElementBlock("button", {
key: 0,
class: "photo-btn",
onClick: _cache[2] || (_cache[2] = (...args) => $options.choosePhoto && $options.choosePhoto(...args))
}, [
vue.createElementVNode("text", { class: "iconfont icon-camera" }),
vue.createElementVNode("text", { class: "btn-text" }, "上传照片")
])) : vue.createCommentVNode("v-if", true)
])
])) : vue.createCommentVNode("v-if", true),
!$data.isViewMode ? (vue.openBlock(), vue.createElementBlock("button", {
key: 3,
class: "submit-btn",
onClick: _cache[3] || (_cache[3] = (...args) => $options.submit && $options.submit(...args))
}, "提交盘点")) : vue.createCommentVNode("v-if", true)
])
]);
}
const PagesInventoryInventory = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render], ["__file", "/Users/mac/Documents/朗业/2025/h-苏州河道处/y-应急保障/stocktaking/pages/inventory/inventory.vue"]]);
__definePage("pages/index/index", PagesIndexIndex);
__definePage("pages/profile/profile", PagesProfileProfile);
__definePage("pages/login/login", PagesLoginLogin);
__definePage("pages/scan/scan", PagesScanScan);
__definePage("pages/inventory/inventory", PagesInventoryInventory);
let main = plus.android.runtimeMainActivity();
if (uni.getSystemInfoSync().platform == "android") {
plus.runtime.quit = function() {
setTimeout(() => {
main.finish();
}, 10);
};
}
var hhwUHFController;
const _sfc_main = {
globalData: {
hhwUHFController: requireNativePlugin("HL-HHWUHFController"),
globalEvent: requireNativePlugin("globalEvent")
},
onLaunch: function() {
formatAppLog("log", "at App.vue:18", "App Launch");
hhwUHFController = getApp().globalData.hhwUHFController;
const token = uni.getStorageSync("token");
if (!token) {
uni.reLaunch({ url: "/pages/login/login" });
formatAppLog("log", "at App.vue:25", "App Launch token1234", token);
} else {
uni.reLaunch({ url: "/pages/index/index" });
}
},
onShow: function() {
formatAppLog("log", "at App.vue:31", "App Show");
hhwUHFController.setDebuggable(true, (result) => {
formatAppLog("log", "at App.vue:34", "App Show", "setDebuggable: " + result);
});
var enterTime = Date.now();
var outTime = enterTime;
hhwUHFController.initUhf((result) => {
outTime = Date.now();
formatAppLog("log", "at App.vue:41", "App Show", "initUHF: " + result, "cusTime: " + (outTime - enterTime));
uni.showToast({
title: "初始化成功",
icon: "none",
duration: 1e3
});
});
},
onHide: function() {
formatAppLog("log", "at App.vue:50", "App Hide");
hhwUHFController.closeUhf((result) => {
formatAppLog("log", "at App.vue:53", "App Hide", "closeUhf: " + result);
uni.showToast({
title: "关闭成功",
icon: "none",
duration: 1e3
});
});
}
};
const App = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "/Users/mac/Documents/朗业/2025/h-苏州河道处/y-应急保障/stocktaking/App.vue"]]);
function createApp() {
const app = vue.createVueApp(App);
app.config.globalProperties.$config = config;
return {
app
};
}
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);