Initial commit - full huishou project

This commit is contained in:
jiapengyu
2026-07-27 14:07:26 +08:00
commit 60790ad1b3
39127 changed files with 5989265 additions and 0 deletions
+162
View File
@@ -0,0 +1,162 @@
"use strict";
const common_vendor = require("../../../common/vendor.js");
const stores_price = require("../../../stores/price.js");
const utils_price = require("../../../utils/price.js");
if (!Array) {
const _easycom_uni_icons2 = common_vendor.resolveComponent("uni-icons");
_easycom_uni_icons2();
}
const _easycom_uni_icons = () => "../../../node-modules/@dcloudio/uni-ui/lib/uni-icons/uni-icons.js";
if (!Math) {
_easycom_uni_icons();
}
const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
__name: "list",
setup(__props) {
const priceStore = stores_price.usePriceStore();
const searchKeyword = common_vendor.ref("");
const showAddModal = common_vendor.ref(false);
const editingItem = common_vendor.ref(null);
const originalCategory = common_vendor.ref("");
const formData = common_vendor.reactive({
category: "",
name: "",
price: "",
unit: "kg"
});
const filteredPrices = common_vendor.computed(() => {
let prices = priceStore.prices;
if (searchKeyword.value) {
const keyword = searchKeyword.value.toLowerCase();
prices = prices.filter(
(item) => item.name.toLowerCase().includes(keyword) || item.category.toLowerCase().includes(keyword)
);
}
return prices;
});
const editPrice = (item) => {
editingItem.value = item;
originalCategory.value = item.category;
formData.category = item.category;
formData.name = item.name;
formData.price = item.price.toString();
formData.unit = item.unit;
showAddModal.value = true;
};
const deletePrice = (category) => {
common_vendor.index.showModal({
title: "确认删除",
content: "确定要删除此品类吗?",
success: (res) => {
if (res.confirm) {
priceStore.deletePrice(category);
common_vendor.index.showToast({ title: "删除成功", icon: "success" });
}
}
});
};
const closeModal = () => {
showAddModal.value = false;
editingItem.value = null;
originalCategory.value = "";
formData.category = "";
formData.name = "";
formData.price = "";
formData.unit = "kg";
};
const savePrice = () => {
if (!formData.category) {
common_vendor.index.showToast({ title: "请输入品类代码", icon: "none" });
return;
}
if (!formData.name) {
common_vendor.index.showToast({ title: "请输入品类名称", icon: "none" });
return;
}
if (!formData.price || parseFloat(formData.price) <= 0) {
common_vendor.index.showToast({ title: "请输入有效单价", icon: "none" });
return;
}
if (editingItem.value) {
priceStore.updatePrice({
category: formData.category,
name: formData.name,
price: parseFloat(formData.price),
unit: formData.unit
});
common_vendor.index.showToast({ title: "修改成功", icon: "success" });
} else {
priceStore.addPrice({
category: formData.category,
name: formData.name,
price: parseFloat(formData.price),
unit: formData.unit
});
common_vendor.index.showToast({ title: "新增成功", icon: "success" });
}
closeModal();
};
const goToHome = () => {
common_vendor.index.redirectTo({ url: "/pages/admin/index" });
};
const goToOrderList = () => {
common_vendor.index.redirectTo({ url: "/pages/admin/order/list" });
};
const goToUserManager = () => {
common_vendor.index.redirectTo({ url: "/pages/admin/user/list" });
};
common_vendor.onMounted(() => {
priceStore.loadPrices();
});
return (_ctx, _cache) => {
return common_vendor.e({
a: common_vendor.o(($event) => showAddModal.value = true),
b: searchKeyword.value,
c: common_vendor.o(($event) => searchKeyword.value = $event.detail.value),
d: common_vendor.f(filteredPrices.value, (item, k0, i0) => {
return {
a: "ce40c64c-0-" + i0,
b: common_vendor.p({
type: common_vendor.unref(utils_price.getCategoryIcon)(item.category),
size: 48,
color: "#3366ff"
}),
c: common_vendor.t(item.name),
d: common_vendor.t(item.category),
e: common_vendor.t(item.price),
f: common_vendor.t(item.unit === "kg" ? "kg" : "个"),
g: common_vendor.o(($event) => editPrice(item), item.category),
h: common_vendor.o(($event) => deletePrice(item.category), item.category),
i: item.category
};
}),
e: filteredPrices.value.length === 0
}, filteredPrices.value.length === 0 ? {} : {}, {
f: common_vendor.o(goToHome),
g: common_vendor.o(goToOrderList),
h: common_vendor.o(goToUserManager),
i: showAddModal.value
}, showAddModal.value ? {
j: common_vendor.t(editingItem.value ? "编辑品类" : "新增品类"),
k: common_vendor.o(closeModal),
l: formData.category,
m: common_vendor.o(($event) => formData.category = $event.detail.value),
n: formData.name,
o: common_vendor.o(($event) => formData.name = $event.detail.value),
p: formData.price,
q: common_vendor.o(($event) => formData.price = $event.detail.value),
r: formData.unit === "kg" ? 1 : "",
s: common_vendor.o(($event) => formData.unit = "kg"),
t: formData.unit === "piece" ? 1 : "",
v: common_vendor.o(($event) => formData.unit = "piece"),
w: common_vendor.o(closeModal),
x: common_vendor.o(savePrice),
y: common_vendor.o(() => {
}),
z: common_vendor.o(closeModal)
} : {});
};
}
});
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-ce40c64c"]]);
wx.createPage(MiniProgramPage);
+7
View File
@@ -0,0 +1,7 @@
{
"navigationStyle": "custom",
"navigationBarTitleText": "价格管理",
"usingComponents": {
"uni-icons": "../../../node-modules/@dcloudio/uni-ui/lib/uni-icons/uni-icons"
}
}
+1
View File
@@ -0,0 +1 @@
<view class="admin-container data-v-ce40c64c"><view class="admin-header data-v-ce40c64c"><view class="header-left data-v-ce40c64c"><text class="header-title data-v-ce40c64c">价格管理</text><text class="header-subtitle data-v-ce40c64c">回收品类价格设置</text></view><view class="header-right data-v-ce40c64c" bindtap="{{a}}"><text class="add-icon data-v-ce40c64c">+</text><text class="add-text data-v-ce40c64c">新增</text></view></view><view class="search-bar data-v-ce40c64c"><view class="search-input-wrap data-v-ce40c64c"><text class="search-icon data-v-ce40c64c">🔍</text><input type="text" class="search-input data-v-ce40c64c" placeholder="搜索品类名称" value="{{b}}" bindinput="{{c}}"/></view></view><view class="category-list data-v-ce40c64c"><view wx:for="{{d}}" wx:for-item="item" wx:key="i" class="category-card data-v-ce40c64c"><view class="category-icon-wrap data-v-ce40c64c"><uni-icons wx:if="{{item.b}}" class="category-icon data-v-ce40c64c" u-i="{{item.a}}" bind:__l="__l" u-p="{{item.b}}"/></view><view class="category-info data-v-ce40c64c"><view class="category-name data-v-ce40c64c">{{item.c}}</view><view class="category-category data-v-ce40c64c">{{item.d}}</view></view><view class="category-price-info data-v-ce40c64c"><view class="price-value data-v-ce40c64c">¥{{item.e}}</view><view class="price-unit data-v-ce40c64c">/{{item.f}}</view></view><view class="category-actions data-v-ce40c64c"><view class="action-btn edit data-v-ce40c64c" bindtap="{{item.g}}">✏️</view><view class="action-btn delete data-v-ce40c64c" bindtap="{{item.h}}">🗑️</view></view></view></view><view wx:if="{{e}}" class="empty-state data-v-ce40c64c"><text class="empty-icon data-v-ce40c64c">📦</text><text class="empty-text data-v-ce40c64c">暂无品类</text></view><view class="tab-bar data-v-ce40c64c"><view class="tab-item data-v-ce40c64c" bindtap="{{f}}"><text class="tab-icon data-v-ce40c64c">🏠</text><text class="tab-text data-v-ce40c64c">首页</text></view><view class="tab-item data-v-ce40c64c" bindtap="{{g}}"><text class="tab-icon data-v-ce40c64c">📋</text><text class="tab-text data-v-ce40c64c">订单</text></view><view class="tab-item active data-v-ce40c64c"><text class="tab-icon data-v-ce40c64c">💰</text><text class="tab-text data-v-ce40c64c">价格</text></view><view class="tab-item data-v-ce40c64c" bindtap="{{h}}"><text class="tab-icon data-v-ce40c64c">👥</text><text class="tab-text data-v-ce40c64c">用户</text></view></view><view wx:if="{{i}}" class="modal-overlay data-v-ce40c64c" bindtap="{{z}}"><view class="modal-box data-v-ce40c64c" catchtap="{{y}}"><view class="modal-header data-v-ce40c64c"><text class="modal-title data-v-ce40c64c">{{j}}</text><view class="modal-close data-v-ce40c64c" bindtap="{{k}}">×</view></view><view class="modal-body data-v-ce40c64c"><view class="form-group data-v-ce40c64c"><text class="form-label data-v-ce40c64c">品类代码</text><input type="text" class="form-input data-v-ce40c64c" placeholder="如:plastic_bottle" value="{{l}}" bindinput="{{m}}"/></view><view class="form-group data-v-ce40c64c"><text class="form-label data-v-ce40c64c">品类名称</text><input type="text" class="form-input data-v-ce40c64c" placeholder="如:塑料瓶" value="{{n}}" bindinput="{{o}}"/></view><view class="form-group data-v-ce40c64c"><text class="form-label data-v-ce40c64c">单价</text><view class="price-input-wrap data-v-ce40c64c"><text class="price-symbol data-v-ce40c64c">¥</text><input type="digit" class="form-input price-input data-v-ce40c64c" placeholder="0.00" value="{{p}}" bindinput="{{q}}"/></view></view><view class="form-group data-v-ce40c64c"><text class="form-label data-v-ce40c64c">单位</text><view class="unit-options data-v-ce40c64c"><view class="{{['unit-option', 'data-v-ce40c64c', r && 'active']}}" bindtap="{{s}}">kg</view><view class="{{['unit-option', 'data-v-ce40c64c', t && 'active']}}" bindtap="{{v}}">个</view></view></view></view><view class="modal-footer data-v-ce40c64c"><view class="modal-btn cancel data-v-ce40c64c" bindtap="{{w}}">取消</view><view class="modal-btn confirm data-v-ce40c64c" bindtap="{{x}}">保存</view></view></view></view></view>
+286
View File
@@ -0,0 +1,286 @@
.admin-container.data-v-ce40c64c {
min-height: 100vh;
background: #f5f5f5;
padding-bottom: 120rpx;
}
.admin-header.data-v-ce40c64c {
display: flex;
justify-content: space-between;
align-items: center;
padding: 60rpx 30rpx 30rpx;
background: linear-gradient(135deg, #3366ff 0%, #254edb 100%);
}
.admin-header .header-left .header-title.data-v-ce40c64c {
font-size: 40rpx;
font-weight: bold;
color: #fff;
display: block;
}
.admin-header .header-left .header-subtitle.data-v-ce40c64c {
font-size: 24rpx;
color: rgba(255, 255, 255, 0.8);
margin-top: 8rpx;
display: block;
}
.admin-header .header-right.data-v-ce40c64c {
display: flex;
align-items: center;
background: rgba(255, 255, 255, 0.2);
padding: 16rpx 32rpx;
border-radius: 40rpx;
}
.admin-header .header-right .add-icon.data-v-ce40c64c {
font-size: 32rpx;
color: #fff;
margin-right: 8rpx;
}
.admin-header .header-right .add-text.data-v-ce40c64c {
font-size: 28rpx;
color: #fff;
}
.search-bar.data-v-ce40c64c {
padding: 20rpx 30rpx;
}
.search-bar .search-input-wrap.data-v-ce40c64c {
display: flex;
align-items: center;
background: #fff;
border-radius: 40rpx;
padding: 0 30rpx;
box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05);
}
.search-bar .search-input-wrap .search-icon.data-v-ce40c64c {
font-size: 28rpx;
margin-right: 20rpx;
}
.search-bar .search-input-wrap .search-input.data-v-ce40c64c {
flex: 1;
height: 80rpx;
font-size: 28rpx;
}
.category-list.data-v-ce40c64c {
padding: 0 30rpx;
}
.category-card.data-v-ce40c64c {
display: flex;
align-items: center;
background: #fff;
border-radius: 20rpx;
padding: 30rpx;
margin-bottom: 20rpx;
box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05);
}
.category-card .category-icon-wrap.data-v-ce40c64c {
width: 80rpx;
height: 80rpx;
border-radius: 50%;
background: linear-gradient(135deg, #3366ff 0%, #254edb 100%);
display: flex;
align-items: center;
justify-content: center;
margin-right: 24rpx;
}
.category-card .category-icon-wrap .category-icon.data-v-ce40c64c {
font-size: 36rpx;
}
.category-card .category-info.data-v-ce40c64c {
flex: 1;
}
.category-card .category-info .category-name.data-v-ce40c64c {
font-size: 32rpx;
font-weight: bold;
color: #333;
}
.category-card .category-info .category-category.data-v-ce40c64c {
font-size: 24rpx;
color: #999;
margin-top: 8rpx;
}
.category-card .category-price-info.data-v-ce40c64c {
text-align: right;
margin-right: 24rpx;
}
.category-card .category-price-info .price-value.data-v-ce40c64c {
font-size: 36rpx;
font-weight: bold;
color: #3366ff;
}
.category-card .category-price-info .price-unit.data-v-ce40c64c {
font-size: 24rpx;
color: #999;
}
.category-card .category-actions.data-v-ce40c64c {
display: flex;
flex-direction: column;
}
.category-card .category-actions .action-btn.data-v-ce40c64c {
width: 60rpx;
height: 60rpx;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 10rpx;
}
.category-card .category-actions .action-btn.edit.data-v-ce40c64c {
background: #fff3e0;
}
.category-card .category-actions .action-btn.delete.data-v-ce40c64c {
background: #ffebee;
}
.empty-state.data-v-ce40c64c {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 100rpx 0;
}
.empty-state .empty-icon.data-v-ce40c64c {
font-size: 100rpx;
margin-bottom: 20rpx;
}
.empty-state .empty-text.data-v-ce40c64c {
font-size: 28rpx;
color: #999;
}
.tab-bar.data-v-ce40c64c {
position: fixed;
bottom: 0;
left: 0;
right: 0;
display: flex;
background: #fff;
padding: 20rpx 0 60rpx;
box-shadow: 0 -2rpx 10rpx rgba(0, 0, 0, 0.05);
}
.tab-bar .tab-item.data-v-ce40c64c {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
}
.tab-bar .tab-item .tab-icon.data-v-ce40c64c {
font-size: 40rpx;
margin-bottom: 8rpx;
}
.tab-bar .tab-item .tab-text.data-v-ce40c64c {
font-size: 22rpx;
color: #999;
}
.tab-bar .tab-item.active .tab-text.data-v-ce40c64c {
color: #3366ff;
font-weight: bold;
}
.modal-overlay.data-v-ce40c64c {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.5);
display: flex;
align-items: center;
justify-content: center;
z-index: 1000;
}
.modal-overlay .modal-box.data-v-ce40c64c {
width: 600rpx;
background: #fff;
border-radius: 30rpx;
overflow: hidden;
}
.modal-overlay .modal-box .modal-header.data-v-ce40c64c {
display: flex;
justify-content: space-between;
align-items: center;
padding: 30rpx;
border-bottom: 1rpx solid #eee;
}
.modal-overlay .modal-box .modal-header .modal-title.data-v-ce40c64c {
font-size: 34rpx;
font-weight: bold;
color: #333;
}
.modal-overlay .modal-box .modal-header .modal-close.data-v-ce40c64c {
font-size: 40rpx;
color: #999;
padding: 10rpx;
}
.modal-overlay .modal-box .modal-body.data-v-ce40c64c {
padding: 30rpx;
}
.modal-overlay .modal-box .modal-body .form-group.data-v-ce40c64c {
margin-bottom: 30rpx;
}
.modal-overlay .modal-box .modal-body .form-group .form-label.data-v-ce40c64c {
font-size: 28rpx;
color: #666;
margin-bottom: 16rpx;
display: block;
}
.modal-overlay .modal-box .modal-body .form-group .form-input.data-v-ce40c64c {
width: 100%;
height: 80rpx;
border: 2rpx solid #eee;
border-radius: 16rpx;
padding: 0 24rpx;
font-size: 28rpx;
box-sizing: border-box;
}
.modal-overlay .modal-box .modal-body .form-group .form-input.price-input.data-v-ce40c64c {
padding-left: 60rpx;
}
.modal-overlay .modal-box .modal-body .form-group .price-input-wrap.data-v-ce40c64c {
position: relative;
}
.modal-overlay .modal-box .modal-body .form-group .price-input-wrap .price-symbol.data-v-ce40c64c {
position: absolute;
left: 24rpx;
top: 50%;
transform: translateY(-50%);
font-size: 28rpx;
color: #3366ff;
font-weight: bold;
}
.modal-overlay .modal-box .modal-body .form-group .unit-options.data-v-ce40c64c {
display: flex;
}
.modal-overlay .modal-box .modal-body .form-group .unit-options .unit-option.data-v-ce40c64c {
flex: 1;
height: 80rpx;
border: 2rpx solid #eee;
border-radius: 16rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 28rpx;
margin-right: 20rpx;
}
.modal-overlay .modal-box .modal-body .form-group .unit-options .unit-option.data-v-ce40c64c:last-child {
margin-right: 0;
}
.modal-overlay .modal-box .modal-body .form-group .unit-options .unit-option.active.data-v-ce40c64c {
border-color: #3366ff;
color: #3366ff;
background: rgba(51, 102, 255, 0.1);
}
.modal-overlay .modal-box .modal-footer.data-v-ce40c64c {
display: flex;
border-top: 1rpx solid #eee;
}
.modal-overlay .modal-box .modal-footer .modal-btn.data-v-ce40c64c {
flex: 1;
height: 88rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 32rpx;
}
.modal-overlay .modal-box .modal-footer .modal-btn.cancel.data-v-ce40c64c {
color: #666;
border-right: 1rpx solid #eee;
}
.modal-overlay .modal-box .modal-footer .modal-btn.confirm.data-v-ce40c64c {
color: #3366ff;
font-weight: bold;
}