9.20 界面502

This commit is contained in:
2025-09-20 22:09:15 +08:00
parent 44ac2723a0
commit 3894cc1c57
38 changed files with 411 additions and 241 deletions

View File

@@ -37,32 +37,32 @@
{
"pagePath": "pages/index/index",
"text": "首页",
"iconPath": "static/logo.png",
"selectedIconPath": "static/logo.png"
"iconPath": "static/icons/home.png",
"selectedIconPath": "static/icons/home.png"
},
{
"pagePath": "pages/product/list",
"text": "货品",
"iconPath": "static/logo.png",
"selectedIconPath": "static/logo.png"
"iconPath": "static/icons/product.png",
"selectedIconPath": "static/icons/product.png"
},
{
"pagePath": "pages/order/create",
"text": "开单",
"iconPath": "static/logo.png",
"selectedIconPath": "static/logo.png"
"iconPath": "static/icons/icons8-purchase-order-100.png",
"selectedIconPath": "static/icons/icons8-purchase-order-100.png"
},
{
"pagePath": "pages/detail/index",
"text": "明细",
"iconPath": "static/logo.png",
"selectedIconPath": "static/logo.png"
"iconPath": "static/icons/icons8-more-details-100.png",
"selectedIconPath": "static/icons/icons8-more-details-100.png"
},
{
"pagePath": "pages/my/index",
"text": "我的",
"iconPath": "static/logo.png",
"selectedIconPath": "static/logo.png"
"iconPath": "static/icons/icons8-account-male-100.png",
"selectedIconPath": "static/icons/icons8-account-male-100.png"
}
]
},

View File

@@ -1,4 +1,6 @@
"use strict";
const _imports_0$1 = "/static/icons/icons8-shopping-cart-100.png";
const _imports_0 = "/static/logo.png";
exports._imports_0 = _imports_0;
exports._imports_0 = _imports_0$1;
exports._imports_0$1 = _imports_0;
//# sourceMappingURL=../../.sourcemap/mp-weixin/common/assets.js.map

View File

@@ -172,8 +172,10 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
b: common_vendor.t(it.customerName || it.supplierName || it.accountName || it.remark || "-"),
c: common_vendor.t(it.orderNo || it.code || it.id),
d: common_vendor.t((it.amount || 0).toFixed(2)),
e: it.id,
f: common_vendor.o(($event) => $options.openDetail(it), it.id)
e: Number(it.amount || 0) >= 0 ? 1 : "",
f: Number(it.amount || 0) < 0 ? 1 : "",
g: it.id,
h: common_vendor.o(($event) => $options.openDetail(it), it.id)
};
})
} : {}, {

View File

@@ -1 +1 @@
<view class="page"><view class="seg"><view class="{{['seg-item', a]}}" bindtap="{{b}}">自定义</view><view class="{{['seg-item', c]}}" bindtap="{{d}}">本周</view><view class="{{['seg-item', e]}}" bindtap="{{f}}">今日</view><view class="{{['seg-item', g]}}" bindtap="{{h}}">本月</view><view class="{{['seg-item', i]}}" bindtap="{{j}}">本年</view></view><view class="content"><view class="biz-tabs"><view wx:for="{{k}}" wx:for-item="b" wx:key="b" class="{{['biz', b.c]}}" bindtap="{{b.d}}">{{b.a}}</view></view><view class="panel"><view class="toolbar"><view class="search"><input class="search-input" placeholder="{{l}}" bindconfirm="{{m}}" value="{{n}}" bindinput="{{o}}"/></view><view class="period">{{p}}</view><button size="mini" bindtap="{{q}}">查询</button></view><view class="total">合计:¥{{r}}</view><scroll-view scroll-y class="list" bindscrolltolower="{{v}}"><block wx:if="{{s}}"><view wx:for="{{t}}" wx:for-item="it" wx:key="e" class="item" bindtap="{{it.f}}"><view class="item-left"><view class="date">{{it.a}}</view><view class="name">{{it.b}}</view><view class="no">{{it.c}}</view></view><view class="amount">¥ {{it.d}}</view><view class="arrow"></view></view></block><view wx:else class="empty">暂无数据</view></scroll-view><view class="fab" bindtap="{{w}}"></view></view></view></view>
<view class="page"><view class="seg"><view class="{{['seg-item', a]}}" bindtap="{{b}}">自定义</view><view class="{{['seg-item', c]}}" bindtap="{{d}}">本周</view><view class="{{['seg-item', e]}}" bindtap="{{f}}">今日</view><view class="{{['seg-item', g]}}" bindtap="{{h}}">本月</view><view class="{{['seg-item', i]}}" bindtap="{{j}}">本年</view></view><view class="content"><view class="biz-tabs"><view wx:for="{{k}}" wx:for-item="b" wx:key="b" class="{{['biz', b.c]}}" bindtap="{{b.d}}">{{b.a}}</view></view><view class="panel"><view class="toolbar"><view class="search"><input class="search-input" placeholder="{{l}}" bindconfirm="{{m}}" value="{{n}}" bindinput="{{o}}"/></view><view class="period">{{p}}</view><button size="mini" bindtap="{{q}}">查询</button></view><view class="total">合计:¥{{r}}</view><scroll-view scroll-y class="list" bindscrolltolower="{{v}}"><block wx:if="{{s}}"><view wx:for="{{t}}" wx:for-item="it" wx:key="g" class="item" bindtap="{{it.h}}"><view class="item-left"><view class="date">{{it.a}}</view><view class="name">{{it.b}}</view><view class="no">{{it.c}}</view></view><view class="{{['amount', it.e && 'in', it.f && 'out']}}">¥ {{it.d}}</view><view class="arrow"></view></view></block><view wx:else class="empty">暂无数据</view></scroll-view><view class="fab" bindtap="{{w}}"></view></view></view></view>

View File

@@ -31,17 +31,20 @@
}
.seg {
display: flex;
background: #ffffff;
background: #fff;
border-bottom: 2rpx solid #e5e7eb;
}
.seg-item {
flex: 1;
padding: 22rpx 0;
padding: 18rpx 0;
text-align: center;
color: #444;
}
.seg-item.active {
color: #4C8DFF;
font-weight: 600;
color: #fff;
background: #4C8DFF;
border-radius: 12rpx;
margin: 8rpx;
}
.content {
display: flex;
@@ -49,8 +52,9 @@
min-height: 0;
}
.biz-tabs {
width: 120rpx;
background: #f1f1f1;
width: 140rpx;
background: #fff;
border-right: 2rpx solid #e5e7eb;
display: flex;
flex-direction: column;
}
@@ -62,24 +66,26 @@
color: #4C8DFF;
}
.biz.active {
background: #4C8DFF;
color: #fff;
border-radius: 0 16rpx 16rpx 0;
background: rgba(76, 141, 255, 0.1);
color: #4C8DFF;
font-weight: 700;
}
.panel {
flex: 1;
display: flex;
flex-direction: column;
background: #ffffff;
background: #fff;
margin: 16rpx;
border-radius: 16rpx;
padding: 12rpx;
border: 2rpx solid #e5e7eb;
}
.toolbar {
display: flex;
align-items: center;
gap: 12rpx;
padding: 8rpx 6rpx;
border-bottom: 2rpx solid #e5e7eb;
}
.search {
flex: 1;
@@ -99,19 +105,23 @@
.total {
color: #4C8DFF;
font-weight: 700;
padding: 6rpx 6rpx 12rpx;
padding: 10rpx 6rpx 12rpx;
background: #fff;
}
.list {
flex: 1;
}
.item {
display: flex;
display: grid;
grid-template-columns: 1fr auto auto;
align-items: center;
padding: 20rpx 10rpx;
gap: 8rpx;
padding: 18rpx 12rpx;
border-bottom: 1rpx solid #e5e7eb;
}
.item-left {
flex: 1;
display: flex;
flex-direction: column;
}
.date {
color: #444;
@@ -129,6 +139,13 @@
.amount {
color: #111;
font-weight: 700;
text-align: right;
}
.amount.in {
color: #16a34a;
}
.amount.out {
color: #dc2626;
}
.arrow {
color: #8c99b0;
@@ -148,11 +165,12 @@
bottom: 120rpx;
width: 100rpx;
height: 100rpx;
background: #4C8DFF;
color: #fff;
background: #fff;
color: #4C8DFF;
border: 2rpx solid #4C8DFF;
border-radius: 50rpx;
text-align: center;
line-height: 100rpx;
font-size: 48rpx;
box-shadow: 0 8rpx 20rpx rgba(0, 0, 0, 0.15);
box-shadow: 0 8rpx 20rpx rgba(76, 141, 255, 0.18);
}

View File

@@ -113,7 +113,7 @@ const _sfc_main = {
},
goDetail() {
try {
common_vendor.index.__f__("log", "at pages/index/index.vue:176", "[index] goDetail → /pages/detail/index");
common_vendor.index.__f__("log", "at pages/index/index.vue:177", "[index] goDetail → /pages/detail/index");
} catch (e) {
}
common_vendor.index.switchTab({ url: "/pages/detail/index" });
@@ -135,15 +135,11 @@ const _sfc_main = {
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return common_vendor.e({
a: common_vendor.t($data.kpi.todaySales),
b: common_vendor.t($data.kpi.monthSales),
c: common_vendor.t($data.kpi.monthProfit),
d: common_vendor.t($data.kpi.stockCount),
e: $data.loadingNotices
a: $data.loadingNotices
}, $data.loadingNotices ? {} : $data.noticeError ? {
g: common_vendor.t($data.noticeError)
c: common_vendor.t($data.noticeError)
} : !$data.notices.length ? {} : {
i: common_vendor.f($data.notices, (n, idx, i0) => {
e: common_vendor.f($data.notices, (n, idx, i0) => {
return common_vendor.e({
a: common_vendor.t(n.text),
b: n.tag
@@ -155,8 +151,12 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
});
})
}, {
f: $data.noticeError,
h: !$data.notices.length,
b: $data.noticeError,
d: !$data.notices.length,
f: common_vendor.t($data.kpi.todaySales),
g: common_vendor.t($data.kpi.monthSales),
h: common_vendor.t($data.kpi.monthProfit),
i: common_vendor.t($data.kpi.stockCount),
j: common_vendor.f($data.features, (item, k0, i0) => {
return common_vendor.e({
a: item.img

View File

@@ -1 +1 @@
<view class="home"><view class="hero"><view class="hero-top"><text class="brand">五金配件管家</text><view class="cta"><text class="cta-text">咨询</text></view></view><view class="kpi"><view class="kpi-item"><text class="kpi-label">今日销售额</text><text class="kpi-value">{{a}}</text></view><view class="kpi-item"><text class="kpi-label">本月销售额</text><text class="kpi-value">{{b}}</text></view><view class="kpi-item"><text class="kpi-label">本月利润</text><text class="kpi-value">{{c}}</text></view><view class="kpi-item"><text class="kpi-label">库存商品数量</text><text class="kpi-value">{{d}}</text></view></view></view><view class="notice"><view class="notice-left">广告</view><view wx:if="{{e}}" class="notice-swiper" style="display:flex;align-items:center;color:#6b5a2a">加载中...</view><view wx:elif="{{f}}" class="notice-swiper" style="display:flex;align-items:center;color:#dd524d">{{g}}</view><view wx:elif="{{h}}" class="notice-swiper" style="display:flex;align-items:center;color:#6b5a2a">暂无公告</view><swiper wx:else class="notice-swiper" circular autoplay interval="4000" duration="400" vertical><swiper-item wx:for="{{i}}" wx:for-item="n" wx:key="e"><view class="notice-item" bindtap="{{n.d}}"><text class="notice-text">{{n.a}}</text><text wx:if="{{n.b}}" class="notice-tag">{{n.c}}</text></view></swiper-item></swiper></view><view class="section-title"><text class="section-text">常用功能</text></view><view class="grid-wrap"><view class="grid"><view wx:for="{{j}}" wx:for-item="item" wx:key="g" class="grid-item" bindtap="{{item.h}}"><view class="icon icon-squircle"><image wx:if="{{item.a}}" src="{{item.b}}" class="icon-img" mode="aspectFit" binderror="{{item.c}}"></image><text wx:elif="{{item.d}}" class="icon-emoji">{{item.e}}</text><view wx:else class="icon-placeholder"></view></view><text class="grid-chip">{{item.f}}</text></view></view></view></view>
<view class="home"><view class="notice"><view class="notice-left">告</view><view wx:if="{{a}}" class="notice-swiper" style="display:flex;align-items:center;color:#6b5a2a">加载中...</view><view wx:elif="{{b}}" class="notice-swiper" style="display:flex;align-items:center;color:#dd524d">{{c}}</view><view wx:elif="{{d}}" class="notice-swiper" style="display:flex;align-items:center;color:#6b5a2a">暂无公告</view><swiper wx:else class="notice-swiper" circular autoplay interval="4000" duration="400" vertical><swiper-item wx:for="{{e}}" wx:for-item="n" wx:key="e"><view class="notice-item" bindtap="{{n.d}}"><text class="notice-text">{{n.a}}</text><text wx:if="{{n.b}}" class="notice-tag">{{n.c}}</text></view></swiper-item></swiper></view><view class="hero"><view class="hero-top"><text class="brand">五金配件管家</text><view class="cta"><text class="cta-text">咨询</text></view></view><view class="kpi"><view class="kpi-item"><text class="kpi-label">今日销售额</text><text class="kpi-value">{{f}}</text></view><view class="kpi-item"><text class="kpi-label">本月销售额</text><text class="kpi-value">{{g}}</text></view><view class="kpi-item"><text class="kpi-label">本月利润</text><text class="kpi-value">{{h}}</text></view><view class="kpi-item"><text class="kpi-label">库存商品数量</text><text class="kpi-value">{{i}}</text></view></view></view><view class="section-title"><text class="section-text">常用功能</text></view><view class="grid-wrap"><view class="feature-grid"><view wx:for="{{j}}" wx:for-item="item" wx:key="g" class="feature-card" bindtap="{{item.h}}"><view class="fc-icon"><image wx:if="{{item.a}}" src="{{item.b}}" class="fc-img" mode="aspectFit" binderror="{{item.c}}"></image><text wx:elif="{{item.d}}" class="fc-emoji">{{item.e}}</text><view wx:else class="fc-placeholder"></view></view><view class="fc-title">{{item.f}}</view></view></view></view></view>

View File

@@ -142,13 +142,19 @@
font-weight: 700;
letter-spacing: 1rpx;
}
/* KPI 卡片化布局2×2 */
.kpi {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 8rpx;
grid-template-columns: repeat(2, 1fr);
gap: 16rpx;
}
.kpi-item {
text-align: center;
background: #ffffff;
border: 2rpx solid #e5e7eb;
border-radius: 16rpx;
padding: 16rpx 8rpx;
}
.kpi-label {
opacity: 0.9;
@@ -171,6 +177,33 @@
color: #4C8DFF;
}
/* 常用功能:胶囊+阴影卡片样式的图标栅格(旧风格保留以防回退) */
.grid {
grid-row-gap: 36rpx;
grid-column-gap: 26rpx;
padding: 32rpx 24rpx 28rpx;
}
.grid-item {
position: relative;
}
.icon-squircle {
width: 140rpx;
height: 140rpx;
border-radius: 28rpx;
background: #fff;
border: 2rpx solid #e5e7eb;
box-shadow: 0 10rpx 20rpx rgba(0, 0, 0, 0.06);
}
.grid-chip {
margin-top: 12rpx;
padding: 6rpx 14rpx;
border-radius: 999rpx;
background: rgba(76, 141, 255, 0.12);
color: #4C8DFF;
font-size: 26rpx;
font-weight: 700;
}
/* 功能容器:整体玻璃面板,增强融入感 */
.grid-wrap {
margin: 0 20rpx 32rpx;
@@ -181,77 +214,51 @@
box-shadow: none;
}
/* 功能九宫格 */
.grid {
/* 新版功能卡片宫格(更现代卡片风) */
.feature-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-row-gap: 64rpx;
grid-column-gap: 36rpx;
padding: 40rpx 28rpx 28rpx;
grid-template-columns: repeat(2, 1fr);
gap: 18rpx;
padding: 18rpx 18rpx 24rpx;
}
.grid-item {
.feature-card {
background: #fff;
border: 2rpx solid #e5e7eb;
border-radius: 16rpx;
box-shadow: 0 10rpx 20rpx rgba(0, 0, 0, 0.06);
padding: 18rpx;
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
gap: 12rpx;
}
.icon {
.fc-icon {
width: 96rpx;
height: 96rpx;
border-radius: 16rpx;
background: #f1f1f1;
display: flex;
align-items: center;
justify-content: center;
}
.fc-img {
width: 72rpx;
height: 72rpx;
}
.fc-emoji {
font-size: 56rpx;
}
.fc-placeholder {
width: 72rpx;
height: 72rpx;
border-radius: 12rpx;
background: #f1f1f1;
border: 2rpx solid #e5e7eb;
}
.fc-title {
margin-left: 2rpx;
font-size: 30rpx;
font-weight: 700;
color: #111;
position: relative;
}
.icon-squircle {
width: 132rpx;
height: 132rpx;
border-radius: 28rpx;
background: #f1f1f1;
border: 2rpx solid #e5e7eb;
box-shadow: none;
overflow: hidden;
}
.icon-squircle::before {
content: "";
position: absolute;
left: -30%;
top: -40%;
width: 160%;
height: 70%;
background: linear-gradient(to bottom, rgba(255, 255, 255, 0.9), rgba(255, 255, 255, 0));
transform: rotate(12deg);
}
.icon-img {
width: 96rpx;
height: 96rpx;
}
.icon-emoji {
font-size: 60rpx;
line-height: 1;
}
.icon-placeholder {
width: 84rpx;
height: 84rpx;
border-radius: 18rpx;
background: #f1f1f1;
border: 2rpx solid #e5e7eb;
box-shadow: none;
}
.icon-text {
font-size: 46rpx;
font-weight: 700;
}
.grid-title {
display: none;
}
.grid-chip {
margin-top: 14rpx;
padding: 8rpx 16rpx;
border-radius: 999rpx;
background: #4C8DFF;
color: #fff;
font-size: 28rpx;
font-weight: 700;
}
/* 底部操作条:浅色半透明 + 金色主按钮 */

View File

@@ -16,7 +16,7 @@ const _sfc_main = {
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return {
a: common_assets._imports_0,
a: common_assets._imports_0$1,
b: common_vendor.o((...args) => $options.openPolicy && $options.openPolicy(...args)),
c: common_vendor.o((...args) => $options.openTerms && $options.openTerms(...args)),
d: common_vendor.o((...args) => $options.openComplaint && $options.openComplaint(...args))

View File

@@ -337,15 +337,23 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
Y: $data.order.orderTime,
Z: common_vendor.o((...args) => $options.onDateChange && $options.onDateChange(...args))
}) : $data.biz === "sale" || $data.biz === "purchase" ? {
ab: common_vendor.t($options.totalQuantity),
ac: common_vendor.t($options.totalAmount.toFixed(2)),
ad: common_vendor.o((...args) => $options.chooseProduct && $options.chooseProduct(...args))
ab: common_vendor.t($data.biz === "sale" ? "客户" : "供应商"),
ac: common_vendor.t($data.biz === "sale" ? $options.customerLabel : $options.supplierLabel),
ad: common_vendor.o(($event) => $data.biz === "sale" ? $options.chooseCustomer() : $options.chooseSupplier()),
ae: common_vendor.t($data.order.orderTime),
af: $data.order.orderTime,
ag: common_vendor.o((...args) => $options.onDateChange && $options.onDateChange(...args)),
ah: common_assets._imports_0,
ai: common_vendor.o((...args) => $options.chooseProduct && $options.chooseProduct(...args)),
aj: common_vendor.t($options.totalQuantity),
ak: common_vendor.t($options.totalAmount.toFixed(2)),
al: common_vendor.o((...args) => $options.chooseProduct && $options.chooseProduct(...args))
} : {
ae: $data.counterpartyType === "customer" ? 1 : "",
af: common_vendor.o(($event) => $options.setCounterparty("customer")),
ag: $data.counterpartyType === "supplier" ? 1 : "",
ah: common_vendor.o(($event) => $options.setCounterparty("supplier")),
ai: common_vendor.f($data.biz === "income" ? $options.incomeCategories : $options.expenseCategories, (c, k0, i0) => {
am: $data.counterpartyType === "customer" ? 1 : "",
an: common_vendor.o(($event) => $options.setCounterparty("customer")),
ao: $data.counterpartyType === "supplier" ? 1 : "",
ap: common_vendor.o(($event) => $options.setCounterparty("supplier")),
aq: common_vendor.f($data.biz === "income" ? $options.incomeCategories : $options.expenseCategories, (c, k0, i0) => {
return {
a: common_vendor.t(c.label),
b: c.key,
@@ -353,23 +361,23 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
d: common_vendor.o(($event) => $data.activeCategory = c.key, c.key)
};
}),
aj: common_vendor.t($options.counterpartyLabel),
ak: common_vendor.o((...args) => $options.chooseCounterparty && $options.chooseCounterparty(...args)),
al: common_vendor.t($options.accountLabel),
am: common_vendor.o((...args) => $options.chooseAccount && $options.chooseAccount(...args)),
an: $data.trxAmount,
ao: common_vendor.o(common_vendor.m(($event) => $data.trxAmount = $event.detail.value, {
ar: common_vendor.t($options.counterpartyLabel),
as: common_vendor.o((...args) => $options.chooseCounterparty && $options.chooseCounterparty(...args)),
at: common_vendor.t($options.accountLabel),
av: common_vendor.o((...args) => $options.chooseAccount && $options.chooseAccount(...args)),
aw: $data.trxAmount,
ax: common_vendor.o(common_vendor.m(($event) => $data.trxAmount = $event.detail.value, {
number: true
})),
ap: $data.order.remark,
aq: common_vendor.o(($event) => $data.order.remark = $event.detail.value)
ay: $data.order.remark,
az: common_vendor.o(($event) => $data.order.remark = $event.detail.value)
}, {
aa: $data.biz === "sale" || $data.biz === "purchase",
ar: !$data.items.length
aA: !$data.items.length
}, !$data.items.length ? {
as: common_assets._imports_0
aB: common_assets._imports_0
} : {
at: common_vendor.f($data.items, (it, idx, i0) => {
aC: common_vendor.f($data.items, (it, idx, i0) => {
return {
a: common_vendor.t(it.productName),
b: common_vendor.o([common_vendor.m(($event) => it.quantity = $event.detail.value, {
@@ -385,8 +393,8 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
};
})
}, {
av: common_vendor.o((...args) => $options.saveAndReset && $options.saveAndReset(...args)),
aw: common_vendor.o((...args) => $options.submit && $options.submit(...args))
aD: common_vendor.o((...args) => $options.saveAndReset && $options.saveAndReset(...args)),
aE: common_vendor.o((...args) => $options.submit && $options.submit(...args))
});
}
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]);

View File

@@ -1 +1 @@
<view class="order"><view class="tabs"><text class="{{[a && 'active']}}" bindtap="{{b}}">销售</text><text class="{{[c && 'active']}}" bindtap="{{d}}">进货</text><text class="{{[e && 'active']}}" bindtap="{{f}}">其他收入</text><text class="{{[g && 'active']}}" bindtap="{{h}}">其他支出</text></view><view wx:if="{{i}}" class="subtabs"><button class="{{['subbtn', j && 'active']}}" bindtap="{{k}}">出货</button><button class="{{['subbtn', l && 'active']}}" bindtap="{{m}}">退货</button><button class="{{['subbtn', n && 'active']}}" bindtap="{{o}}">收款</button></view><view wx:elif="{{p}}" class="subtabs"><button class="{{['subbtn', q && 'active']}}" bindtap="{{r}}">进货</button><button class="{{['subbtn', s && 'active']}}" bindtap="{{t}}">退货</button><button class="{{['subbtn', v && 'active']}}" bindtap="{{w}}">付款</button></view><picker mode="date" value="{{y}}" bindchange="{{z}}"><view class="field"><text class="label">时间</text><text class="value">{{x}}</text></view></picker><view wx:if="{{A}}" class="field" bindtap="{{C}}"><text class="label">客户</text><text class="value">{{B}}</text></view><view wx:elif="{{D}}" class="field" bindtap="{{F}}"><text class="label">供应商</text><text class="value">{{E}}</text></view><view wx:if="{{G}}"><view wx:if="{{H}}" class="field" bindtap="{{J}}"><text class="label">客户</text><text class="value">{{I}}</text></view><view wx:else class="field" bindtap="{{L}}"><text class="label">供应商</text><text class="value">{{K}}</text></view><view class="field pay-row"><text class="label">现金</text><input class="pay-input" type="digit" placeholder="0.00" bindinput="{{M}}" value="{{N}}"/></view><view class="field pay-row"><text class="label">银行存款</text><input class="pay-input" type="digit" placeholder="0.00" bindinput="{{O}}" value="{{P}}"/></view><view class="field pay-row"><text class="label">微信</text><input class="pay-input" type="digit" placeholder="0.00" bindinput="{{Q}}" value="{{R}}"/></view><view class="collapse-trigger" bindtap="{{T}}">{{S}}</view><view class="textarea"><view class="amount-badge">总金额:{{U}}</view><block wx:if="{{r0}}"><textarea maxlength="200" placeholder="备注最多输入200个字" value="{{V}}" bindinput="{{W}}"></textarea></block><view class="date-mini"><picker mode="date" value="{{Y}}" bindchange="{{Z}}"><text>{{X}}</text></picker></view></view></view><view wx:elif="{{aa}}"><view class="summary"><text>选中货品({{ab}}</text><text>合计金额:¥ {{ac}}</text></view><view class="add" bindtap="{{ad}}">+</view></view><view wx:else><view class="subtabs"><button class="{{['subbtn', ae && 'active']}}" bindtap="{{af}}">客户</button><button class="{{['subbtn', ag && 'active']}}" bindtap="{{ah}}">供应商</button></view><view class="chips"><view wx:for="{{ai}}" wx:for-item="c" wx:key="b" class="{{['chip', c.c && 'active']}}" bindtap="{{c.d}}">{{c.a}}</view></view><view class="field" bindtap="{{ak}}"><text class="label">往来单位</text><text class="value">{{aj}}</text></view><view class="field" bindtap="{{am}}"><text class="label">结算账户</text><text class="value">{{al}}</text></view><view class="field"><text class="label">金额</text><input class="value" type="digit" placeholder="0.00" value="{{an}}" bindinput="{{ao}}"/></view><view class="textarea"><block wx:if="{{r0}}"><textarea maxlength="200" placeholder="备注最多输入200个字" value="{{ap}}" bindinput="{{aq}}"></textarea></block></view></view><view wx:if="{{ar}}" class="empty"><image src="{{as}}" mode="widthFix" class="empty-img"></image><text class="empty-text">购物车里空空如也</text><text class="empty-sub">扫描或点击 “+” 选择商品吧</text></view><view wx:else class="list"><view wx:for="{{at}}" wx:for-item="it" wx:key="g" class="row"><view class="col name">{{it.a}}</view><view class="col qty"><input type="number" bindinput="{{it.b}}" value="{{it.c}}"/></view><view class="col price"><input type="number" bindinput="{{it.d}}" value="{{it.e}}"/></view><view class="col amount">¥ {{it.f}}</view></view></view><view class="bottom"><button class="ghost" bindtap="{{av}}">再记一笔</button><button class="primary" bindtap="{{aw}}">保存</button></view></view>
<view class="order"><view class="tabs"><text class="{{[a && 'active']}}" bindtap="{{b}}">销售</text><text class="{{[c && 'active']}}" bindtap="{{d}}">进货</text><text class="{{[e && 'active']}}" bindtap="{{f}}">其他收入</text><text class="{{[g && 'active']}}" bindtap="{{h}}">其他支出</text></view><view wx:if="{{i}}" class="subtabs"><button class="{{['subbtn', j && 'active']}}" bindtap="{{k}}">出货</button><button class="{{['subbtn', l && 'active']}}" bindtap="{{m}}">退货</button><button class="{{['subbtn', n && 'active']}}" bindtap="{{o}}">收款</button></view><view wx:elif="{{p}}" class="subtabs"><button class="{{['subbtn', q && 'active']}}" bindtap="{{r}}">进货</button><button class="{{['subbtn', s && 'active']}}" bindtap="{{t}}">退货</button><button class="{{['subbtn', v && 'active']}}" bindtap="{{w}}">付款</button></view><picker mode="date" value="{{y}}" bindchange="{{z}}"><view class="field"><text class="label">时间</text><text class="value">{{x}}</text></view></picker><view wx:if="{{A}}" class="field" bindtap="{{C}}"><text class="label">客户</text><text class="value">{{B}}</text></view><view wx:elif="{{D}}" class="field" bindtap="{{F}}"><text class="label">供应商</text><text class="value">{{E}}</text></view><view wx:if="{{G}}"><view wx:if="{{H}}" class="field" bindtap="{{J}}"><text class="label">客户</text><text class="value">{{I}}</text></view><view wx:else class="field" bindtap="{{L}}"><text class="label">供应商</text><text class="value">{{K}}</text></view><view class="field pay-row"><text class="label">现金</text><input class="pay-input" type="digit" placeholder="0.00" bindinput="{{M}}" value="{{N}}"/></view><view class="field pay-row"><text class="label">银行存款</text><input class="pay-input" type="digit" placeholder="0.00" bindinput="{{O}}" value="{{P}}"/></view><view class="field pay-row"><text class="label">微信</text><input class="pay-input" type="digit" placeholder="0.00" bindinput="{{Q}}" value="{{R}}"/></view><view class="collapse-trigger" bindtap="{{T}}">{{S}}</view><view class="textarea"><view class="amount-badge">总金额:{{U}}</view><block wx:if="{{r0}}"><textarea maxlength="200" placeholder="备注最多输入200个字" value="{{V}}" bindinput="{{W}}"></textarea></block><view class="date-mini"><picker mode="date" value="{{Y}}" bindchange="{{Z}}"><text>{{X}}</text></picker></view></view></view><view wx:elif="{{aa}}"><view class="info-card"><view class="info-field" bindtap="{{ad}}"><text class="info-label">{{ab}}</text><text class="info-value">{{ac}}</text></view><picker class="info-field" mode="date" value="{{af}}" bindchange="{{ag}}"><view><text class="info-label">时间</text><text class="info-value">{{ae}}</text></view></picker><button class="info-action" bindtap="{{ai}}"><image src="{{ah}}" class="info-icon" mode="aspectFit"/><text>加商品</text></button></view><view class="summary"><text>选中货品({{aj}}</text><text>合计金额:¥ {{ak}}</text></view><view class="add" bindtap="{{al}}">+</view></view><view wx:else><view class="subtabs"><button class="{{['subbtn', am && 'active']}}" bindtap="{{an}}">客户</button><button class="{{['subbtn', ao && 'active']}}" bindtap="{{ap}}">供应商</button></view><view class="chips"><view wx:for="{{aq}}" wx:for-item="c" wx:key="b" class="{{['chip', c.c && 'active']}}" bindtap="{{c.d}}">{{c.a}}</view></view><view class="field" bindtap="{{as}}"><text class="label">往来单位</text><text class="value">{{ar}}</text></view><view class="field" bindtap="{{av}}"><text class="label">结算账户</text><text class="value">{{at}}</text></view><view class="field"><text class="label">金额</text><input class="value" type="digit" placeholder="0.00" value="{{aw}}" bindinput="{{ax}}"/></view><view class="textarea"><block wx:if="{{r0}}"><textarea maxlength="200" placeholder="备注最多输入200个字" value="{{ay}}" bindinput="{{az}}"></textarea></block></view></view><view wx:if="{{aA}}" class="empty"><image src="{{aB}}" mode="widthFix" class="empty-img"></image><text class="empty-text">购物车里空空如也</text><text class="empty-sub">扫描或点击 “+” 选择商品吧</text></view><view wx:else class="list"><view wx:for="{{aC}}" wx:for-item="it" wx:key="g" class="row"><view class="col name">{{it.a}}</view><view class="col qty"><input type="number" bindinput="{{it.b}}" value="{{it.c}}"/></view><view class="col price"><input type="number" bindinput="{{it.d}}" value="{{it.e}}"/></view><view class="col amount">¥ {{it.f}}</view></view></view><view class="bottom"><button class="ghost" bindtap="{{aD}}">再记一笔</button><button class="primary" bindtap="{{aE}}">保存</button></view></view>

View File

@@ -67,23 +67,34 @@
.value {
color: #111;
}
/* 汇总卡片:白底卡片+主色按钮 */
.summary {
display: flex;
justify-content: space-between;
padding: 22rpx 24rpx;
align-items: center;
padding: 16rpx 18rpx;
margin: 12rpx 16rpx;
background: #fff;
border: 2rpx solid #e5e7eb;
border-radius: 16rpx;
color: #111;
}
/* 加号改为图标按钮 */
.add {
margin: 24rpx auto;
margin: 18rpx auto;
width: 120rpx;
height: 120rpx;
border-radius: 20rpx;
background: #4C8DFF;
color: #fff;
border-radius: 24rpx;
background: #fff;
border: 2rpx solid #4C8DFF;
color: #4C8DFF;
font-size: 72rpx;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 6rpx 16rpx rgba(76, 141, 255, 0.12);
}
.empty {
display: flex;
@@ -93,14 +104,18 @@
color: #444;
}
.empty-img {
width: 220rpx;
margin-bottom: 20rpx;
width: 160rpx;
margin-bottom: 16rpx;
}
.empty-text {
margin-bottom: 8rpx;
}
.list {
background: #ffffff;
background: #fff;
margin: 0 16rpx 12rpx;
border: 2rpx solid #e5e7eb;
border-radius: 16rpx;
overflow: hidden;
}
.row {
display: grid;
@@ -181,4 +196,51 @@
.chip.active {
background: #4C8DFF;
color: #fff;
}
/* 顶部旧 tabs 简化隐藏(改为更简洁布局) */
.tabs {
display: none;
}
/* 快捷操作宫格 */
/* 信息卡片式表达(更稳重) */
.info-card {
display: grid;
grid-template-columns: 1fr 1fr auto;
gap: 10rpx;
margin: 12rpx 16rpx 0;
background: #fff;
border: 2rpx solid #e5e7eb;
border-radius: 16rpx;
padding: 10rpx;
align-items: center;
}
.info-field {
background: #ffffff;
border: 2rpx solid #e5e7eb;
border-radius: 12rpx;
padding: 10rpx 12rpx;
}
.info-label {
color: #444;
font-size: 24rpx;
margin-right: 8rpx;
}
.info-value {
color: #111;
font-weight: 700;
}
.info-action {
display: flex;
align-items: center;
gap: 6rpx;
background: #4C8DFF;
color: #fff;
border-radius: 12rpx;
padding: 12rpx 14rpx;
}
.info-icon {
width: 32rpx;
height: 32rpx;
}

View File

@@ -1 +1 @@
<scroll-view scroll-y class="page"><view class="card"><view class="row"><text class="label">商品名称</text><input placeholder="必填" value="{{a}}" bindinput="{{b}}"/></view><view class="row"><text class="label">条形码</text><input placeholder="可扫码或输入" value="{{c}}" bindinput="{{d}}"/></view><view class="row"><text class="label">品牌/型号/规格/产地</text></view><view class="row"><input placeholder="品牌" value="{{e}}" bindinput="{{f}}"/></view><view class="row"><input placeholder="型号" value="{{g}}" bindinput="{{h}}"/></view><view class="row"><input placeholder="规格" value="{{i}}" bindinput="{{j}}"/></view><view class="row"><input placeholder="产地" value="{{k}}" bindinput="{{l}}"/></view><view class="row"><picker mode="selector" range="{{n}}" bindchange="{{o}}"><view class="picker">主单位:{{m}}</view></picker><picker mode="selector" range="{{q}}" bindchange="{{r}}"><view class="picker">类别:{{p}}</view></picker></view></view><view class="card"><view class="row"><text class="label">库存与安全库存</text></view><view class="row"><input type="number" placeholder="当前库存" value="{{s}}" bindinput="{{t}}"/><input type="number" placeholder="安全库存下限" value="{{v}}" bindinput="{{w}}"/><input type="number" placeholder="安全库存上限" value="{{x}}" bindinput="{{y}}"/></view></view><view class="card"><view class="row"><text class="label">价格(进价/零售/批发/大单)</text></view><view class="row prices"><input type="number" placeholder="进货价" value="{{z}}" bindinput="{{A}}"/><input type="number" placeholder="零售价" value="{{B}}" bindinput="{{C}}"/><input type="number" placeholder="批发价" value="{{D}}" bindinput="{{E}}"/><input type="number" placeholder="大单价" value="{{F}}" bindinput="{{G}}"/></view></view><view class="card"><text class="label">图片</text><image-uploader wx:if="{{I}}" u-i="a18e43b2-0" bind:__l="__l" bindupdateModelValue="{{H}}" u-p="{{I}}"/></view><view class="card"><text class="label">备注</text><block wx:if="{{r0}}"><textarea placeholder="可选" auto-height value="{{J}}" bindinput="{{K}}"/></block></view><view class="fixed"><button type="default" bindtap="{{L}}">保存</button><button type="primary" bindtap="{{M}}">保存并继续</button></view></scroll-view>
<scroll-view scroll-y class="page"><view class="hero small"><text class="title">编辑货品</text><text class="sub">完善基础信息与价格</text></view><view class="card"><view class="row"><text class="label">商品名称</text><input placeholder="必填" value="{{a}}" bindinput="{{b}}"/></view><view class="row"><text class="label">条形码</text><input placeholder="可扫码或输入" value="{{c}}" bindinput="{{d}}"/></view><view class="row"><text class="label">品牌/型号/规格/产地</text></view><view class="row"><input placeholder="品牌" value="{{e}}" bindinput="{{f}}"/></view><view class="row"><input placeholder="型号" value="{{g}}" bindinput="{{h}}"/></view><view class="row"><input placeholder="规格" value="{{i}}" bindinput="{{j}}"/></view><view class="row"><input placeholder="产地" value="{{k}}" bindinput="{{l}}"/></view><view class="row"><picker mode="selector" range="{{n}}" bindchange="{{o}}"><view class="picker">主单位:{{m}}</view></picker><picker mode="selector" range="{{q}}" bindchange="{{r}}"><view class="picker">类别:{{p}}</view></picker></view></view><view class="card"><view class="row"><text class="label">库存与安全库存</text></view><view class="row"><input type="number" placeholder="当前库存" value="{{s}}" bindinput="{{t}}"/><input type="number" placeholder="安全库存下限" value="{{v}}" bindinput="{{w}}"/><input type="number" placeholder="安全库存上限" value="{{x}}" bindinput="{{y}}"/></view></view><view class="card"><view class="row"><text class="label">价格(进价/零售/批发/大单)</text></view><view class="row prices"><input type="number" placeholder="进货价" value="{{z}}" bindinput="{{A}}"/><input type="number" placeholder="零售价" value="{{B}}" bindinput="{{C}}"/><input type="number" placeholder="批发价" value="{{D}}" bindinput="{{E}}"/><input type="number" placeholder="大单价" value="{{F}}" bindinput="{{G}}"/></view></view><view class="card"><text class="label">图片</text><image-uploader wx:if="{{I}}" u-i="a18e43b2-0" bind:__l="__l" bindupdateModelValue="{{H}}" u-p="{{I}}"/></view><view class="card"><text class="label">备注</text><block wx:if="{{r0}}"><textarea placeholder="可选" auto-height value="{{J}}" bindinput="{{K}}"/></block></view><view class="fixed"><button class="ghost" bindtap="{{L}}">保存</button><button class="primary" bindtap="{{M}}">保存并继续</button></view></scroll-view>

View File

@@ -28,11 +28,29 @@
background: #ffffff;
height: 100vh;
}
.hero.small {
margin: 16rpx;
padding: 16rpx;
background: #ffffff;
border: 2rpx solid #e5e7eb;
border-radius: 16rpx;
}
.hero.small .title {
font-size: 32rpx;
font-weight: 800;
color: #111;
}
.hero.small .sub {
margin-left: 12rpx;
color: #444;
font-size: 24rpx;
}
.card {
background: #ffffff;
margin: 16rpx;
padding: 16rpx;
border-radius: 12rpx;
border-radius: 16rpx;
border: 2rpx solid #e5e7eb;
}
.row {
display: flex;
@@ -47,16 +65,18 @@
.row input {
flex: 1;
background: #f1f1f1;
border-radius: 10rpx;
padding: 12rpx;
border-radius: 12rpx;
padding: 14rpx;
color: #111;
border: 2rpx solid #e5e7eb;
}
.picker {
padding: 8rpx 12rpx;
padding: 10rpx 14rpx;
background: #f1f1f1;
border-radius: 10rpx;
border-radius: 12rpx;
color: #444;
margin-left: 8rpx;
border: 2rpx solid #e5e7eb;
}
.prices input {
width: 30%;
@@ -70,4 +90,21 @@
padding: 12rpx 16rpx;
display: flex;
gap: 16rpx;
border-top: 2rpx solid #e5e7eb;
}
.fixed .primary {
flex: 1;
background: #4C8DFF;
color: #fff;
border-radius: 999rpx;
padding: 18rpx 0;
font-weight: 700;
}
.fixed .ghost {
flex: 1;
background: #ffffff;
color: #4C8DFF;
border: 2rpx solid rgba(76, 141, 255, 0.45);
border-radius: 999rpx;
padding: 18rpx 0;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 831 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 387 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB