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

@@ -1,4 +1,4 @@
<script>
"D:\wx\PartsInquiry\frontend\static\icons\icons8-account-male-100.png"<script>
export default {
onLaunch: function() {
console.log('App Launch')

View File

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

View File

@@ -36,7 +36,7 @@
<view class="name">{{ it.customerName || it.supplierName || it.accountName || it.remark || '-' }}</view>
<view class="no">{{ it.orderNo || it.code || it.id }}</view>
</view>
<view class="amount">¥ {{ (it.amount || 0).toFixed(2) }}</view>
<view class="amount" :class="{ in: Number(it.amount||0) >= 0, out: Number(it.amount||0) < 0 }">¥ {{ (it.amount || 0).toFixed(2) }}</view>
<view class="arrow"></view>
</view>
</block>
@@ -134,29 +134,31 @@ export default {
<style lang="scss">
.page { display:flex; flex-direction: column; height: 100vh; }
.seg { display:flex; background:$uni-bg-color-grey; }
.seg-item { flex:1; padding: 22rpx 0; text-align:center; color:$uni-text-color-grey; }
.seg-item.active { color:$uni-color-primary; font-weight: 600; }
.seg { display:flex; background:#fff; border-bottom:2rpx solid $uni-border-color; }
.seg-item { flex:1; padding: 18rpx 0; text-align:center; color:$uni-text-color-grey; }
.seg-item.active { color:#fff; background:$uni-color-primary; border-radius: 12rpx; margin: 8rpx; }
.content { display:flex; flex:1; min-height: 0; }
.biz-tabs { width: 120rpx; background:$uni-bg-color-hover; display:flex; flex-direction: column; }
.biz-tabs { width: 140rpx; background:#fff; border-right:2rpx solid $uni-border-color; display:flex; flex-direction: column; }
.biz { flex:0 0 120rpx; display:flex; align-items:center; justify-content:center; color:$uni-color-primary; }
.biz.active { background:$uni-color-primary; color:#fff; border-radius: 0 16rpx 16rpx 0; }
.biz.active { background:rgba(76,141,255,0.10); color:$uni-color-primary; font-weight:700; }
.panel { flex:1; display:flex; flex-direction: column; background:$uni-bg-color-grey; margin: 16rpx; border-radius: 16rpx; padding: 12rpx; }
.toolbar { display:flex; align-items: center; gap: 12rpx; padding: 8rpx 6rpx; }
.panel { flex:1; display:flex; flex-direction: column; background:#fff; margin: 16rpx; border-radius: 16rpx; padding: 12rpx; border:2rpx solid $uni-border-color; }
.toolbar { display:flex; align-items: center; gap: 12rpx; padding: 8rpx 6rpx; border-bottom:2rpx solid $uni-border-color; }
.search { flex:1; }
.search-input { width:100%; background:$uni-bg-color-hover; border-radius: 12rpx; padding: 12rpx; color:$uni-text-color; }
.period { color:$uni-text-color-grey; font-size: 24rpx; padding: 0 6rpx; }
.total { color:$uni-color-primary; font-weight: 700; padding: 6rpx 6rpx 12rpx; }
.total { color:$uni-color-primary; font-weight: 700; padding: 10rpx 6rpx 12rpx; background:#fff; }
.list { flex:1; }
.item { display:flex; align-items:center; padding: 20rpx 10rpx; border-bottom: 1rpx solid $uni-border-color; }
.item-left { flex:1; }
.item { display:grid; grid-template-columns: 1fr auto auto; align-items:center; gap: 8rpx; padding: 18rpx 12rpx; border-bottom: 1rpx solid $uni-border-color; }
.item-left { display:flex; flex-direction: column; }
.date { color:$uni-text-color-grey; font-size: 24rpx; }
.name { color:$uni-text-color; margin: 4rpx 0; font-weight: 600; }
.no { color:#99a2b3; font-size: 22rpx; }
.amount { color:$uni-text-color; font-weight: 700; }
.amount { color:$uni-text-color; font-weight: 700; text-align:right; }
.amount.in { color:#16a34a; }
.amount.out { color:#dc2626; }
.arrow { color:#8c99b0; font-size: 40rpx; margin-left: 8rpx; }
.empty { height: 50vh; display:flex; align-items:center; justify-content:center; color:$uni-text-color-grey; }
.fab { position: fixed; right: 30rpx; bottom: 120rpx; width: 100rpx; height: 100rpx; background:$uni-color-primary; color:#fff; border-radius: 50rpx; text-align:center; line-height: 100rpx; font-size: 48rpx; box-shadow: 0 8rpx 20rpx rgba(0,0,0,0.15); }
.fab { position: fixed; right: 30rpx; bottom: 120rpx; width: 100rpx; height: 100rpx; background:#fff; color:$uni-color-primary; border:2rpx solid $uni-color-primary; border-radius: 50rpx; text-align:center; line-height: 100rpx; font-size: 48rpx; box-shadow: 0 8rpx 20rpx rgba(76,141,255,0.18); }
</style>

View File

@@ -1,5 +1,20 @@
<template>
<view class="home">
<!-- 公告栏置顶显示可点击查看详情 -->
<view class="notice">
<view class="notice-left">公告</view>
<view v-if="loadingNotices" class="notice-swiper" style="display:flex;align-items:center;color:#6b5a2a;">加载中...</view>
<view v-else-if="noticeError" class="notice-swiper" style="display:flex;align-items:center;color:#dd524d;">{{ noticeError }}</view>
<view v-else-if="!notices.length" class="notice-swiper" style="display:flex;align-items:center;color:#6b5a2a;">暂无公告</view>
<swiper v-else class="notice-swiper" circular autoplay interval="4000" duration="400" vertical>
<swiper-item v-for="(n, idx) in notices" :key="idx">
<view class="notice-item" @click="onNoticeTap(n)">
<text class="notice-text">{{ n.text }}</text>
<text v-if="n.tag" class="notice-tag">{{ n.tag }}</text>
</view>
</swiper-item>
</swiper>
</view>
<!-- 顶部统计卡片 -->
<view class="hero">
<view class="hero-top">
@@ -28,21 +43,7 @@
</view>
</view>
<!-- 广告栏自动轮播可点击查看详情 -->
<view class="notice">
<view class="notice-left">广告</view>
<view v-if="loadingNotices" class="notice-swiper" style="display:flex;align-items:center;color:#6b5a2a;">加载中...</view>
<view v-else-if="noticeError" class="notice-swiper" style="display:flex;align-items:center;color:#dd524d;">{{ noticeError }}</view>
<view v-else-if="!notices.length" class="notice-swiper" style="display:flex;align-items:center;color:#6b5a2a;">暂无公告</view>
<swiper v-else class="notice-swiper" circular autoplay interval="4000" duration="400" vertical>
<swiper-item v-for="(n, idx) in notices" :key="idx">
<view class="notice-item" @click="onNoticeTap(n)">
<text class="notice-text">{{ n.text }}</text>
<text v-if="n.tag" class="notice-tag">{{ n.tag }}</text>
</view>
</swiper-item>
</swiper>
</view>
<!-- 告栏已上移到顶部 -->
<!-- 分割标题产品与功能 -->
<view class="section-title">
@@ -51,14 +52,14 @@
<!-- 功能九宫格玻璃容器 + 圆角方形图标 -->
<view class="grid-wrap">
<view class="grid">
<view class="grid-item" v-for="item in features" :key="item.key" @click="onFeatureTap(item)">
<view class="icon icon-squircle">
<image v-if="item.img" :src="item.img" class="icon-img" mode="aspectFit" @error="onIconError(item)"></image>
<text v-else-if="item.emoji" class="icon-emoji">{{ item.emoji }}</text>
<view v-else class="icon-placeholder"></view>
<view class="feature-grid">
<view class="feature-card" v-for="item in features" :key="item.key" @click="onFeatureTap(item)">
<view class="fc-icon">
<image v-if="item.img" :src="item.img" class="fc-img" mode="aspectFit" @error="onIconError(item)"></image>
<text v-else-if="item.emoji" class="fc-emoji">{{ item.emoji }}</text>
<view v-else class="fc-placeholder"></view>
</view>
<text class="grid-chip">{{ item.title }}</text>
<view class="fc-title">{{ item.title }}</view>
</view>
</view>
</view>
@@ -271,8 +272,9 @@
.cta-text { color: #fff; font-size: 30rpx; font-weight: 700; letter-spacing: 1rpx; }
.kpi { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8rpx; }
.kpi-item { text-align: center; }
/* KPI 卡片化布局2×2 */
.kpi { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16rpx; }
.kpi-item { text-align: center; background:#ffffff; border: 2rpx solid $uni-border-color; border-radius: 16rpx; padding: 16rpx 8rpx; }
.kpi-label {
opacity: 0.9;
font-size: 26rpx;
@@ -286,6 +288,13 @@
}
.kpi-value { display: block; margin-top: 8rpx; font-size: 56rpx; font-weight: 800; color: $uni-color-primary; }
/* 常用功能:胶囊+阴影卡片样式的图标栅格(旧风格保留以防回退) */
.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 $uni-border-color; 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: $uni-color-primary; font-size: 26rpx; font-weight: 700; }
/* 功能容器:整体玻璃面板,增强融入感 */
.grid-wrap {
margin: 0 20rpx 32rpx;
@@ -296,32 +305,14 @@
box-shadow: none;
}
/* 功能九宫格 */
.grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-row-gap: 64rpx;
grid-column-gap: 36rpx;
padding: 40rpx 28rpx 28rpx;
}
.grid-item { display: flex; flex-direction: column; align-items: center; text-align: center; }
.icon { display: flex; align-items: center; justify-content: center; color: $uni-text-color; position: relative; }
.icon-squircle {
width: 132rpx; height: 132rpx;
border-radius: 28rpx;
background: $uni-bg-color-hover;
border: 2rpx solid $uni-border-color;
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.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: $uni-bg-color-hover; border: 2rpx solid $uni-border-color; 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: $uni-color-primary; color: #fff; font-size: 28rpx; font-weight: 700; }
/* 新版功能卡片宫格(更现代卡片风) */
.feature-grid { display:grid; grid-template-columns: repeat(2, 1fr); gap: 18rpx; padding: 18rpx 18rpx 24rpx; }
.feature-card { background:#fff; border:2rpx solid $uni-border-color; border-radius: 16rpx; box-shadow: 0 10rpx 20rpx rgba(0,0,0,0.06); padding: 18rpx; display:flex; align-items:center; gap: 12rpx; }
.fc-icon { width: 96rpx; height: 96rpx; border-radius: 16rpx; background: $uni-bg-color-hover; 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: $uni-bg-color-hover; border: 2rpx solid $uni-border-color; }
.fc-title { margin-left: 2rpx; font-size: 30rpx; font-weight: 700; color: $uni-text-color; }
/* 底部操作条:浅色半透明 + 金色主按钮 */
.bottom-bar {

View File

@@ -78,6 +78,23 @@
<!-- 已选商品与合计销售/进货 出入库 -->
<view v-else-if="biz==='sale' || biz==='purchase'">
<!-- 快捷操作加商品/选择客户(或供应商)/选择日期 不改功能只换排版 -->
<view class="info-card">
<view class="info-field" @click="biz==='sale' ? chooseCustomer() : chooseSupplier()">
<text class="info-label">{{ biz==='sale' ? '客户' : '供应商' }}</text>
<text class="info-value">{{ biz==='sale' ? customerLabel : supplierLabel }}</text>
</view>
<picker class="info-field" mode="date" :value="order.orderTime" @change="onDateChange">
<view>
<text class="info-label">时间</text>
<text class="info-value">{{ order.orderTime }}</text>
</view>
</picker>
<button class="info-action" @click="chooseProduct">
<image src="/static/icons/icons8-shopping-cart-100.png" class="info-icon" mode="aspectFit" />
<text>加商品</text>
</button>
</view>
<view class="summary">
<text>选中货品{{ totalQuantity }}</text>
<text>合计金额¥ {{ totalAmount.toFixed(2) }}</text>
@@ -116,7 +133,7 @@
<!-- 购物车空态 -->
<view class="empty" v-if="!items.length">
<image src="/static/logo.png" mode="widthFix" class="empty-img"></image>
<image src="/static/icons/icons8-shopping-cart-100.png" mode="widthFix" class="empty-img"></image>
<text class="empty-text">购物车里空空如也</text>
<text class="empty-sub">扫描或点击 + 选择商品吧</text>
</view>
@@ -355,12 +372,14 @@
.field { display:flex; justify-content: space-between; padding: 22rpx 24rpx; background: $uni-bg-color-grey; border-bottom: 1rpx solid $uni-border-color; }
.label { color:$uni-text-color-grey; }
.value { color:$uni-text-color; }
.summary { display:flex; justify-content: space-between; padding: 22rpx 24rpx; color:$uni-text-color; }
.add { margin: 24rpx auto; width: 120rpx; height: 120rpx; border-radius: 20rpx; background: $uni-color-primary; color:#fff; font-size: 72rpx; display:flex; align-items:center; justify-content:center; }
/* 汇总卡片:白底卡片+主色按钮 */
.summary { display:flex; justify-content: space-between; align-items:center; padding: 16rpx 18rpx; margin: 12rpx 16rpx; background:#fff; border:2rpx solid $uni-border-color; border-radius: 16rpx; color:$uni-text-color; }
/* 加号改为图标按钮 */
.add { margin: 18rpx auto; width: 120rpx; height: 120rpx; border-radius: 24rpx; background: #fff; border:2rpx solid $uni-color-primary; color:$uni-color-primary; 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; flex-direction: column; align-items:center; padding: 60rpx 0; color:$uni-text-color-grey; }
.empty-img { width: 220rpx; margin-bottom: 20rpx; }
.empty-img { width: 160rpx; margin-bottom: 16rpx; }
.empty-text { margin-bottom: 8rpx; }
.list { background:$uni-bg-color-grey; }
.list { background:#fff; margin: 0 16rpx 12rpx; border:2rpx solid $uni-border-color; border-radius: 16rpx; overflow: hidden; }
.row { display:grid; grid-template-columns: 1.5fr 1fr 1fr 1fr; gap: 12rpx; padding: 16rpx 12rpx; align-items:center; border-bottom: 1rpx solid $uni-border-color; }
.col.name { padding-left: 12rpx; }
.col.amount { text-align:right; padding-right: 12rpx; color:$uni-text-color; }
@@ -375,6 +394,18 @@
.chips { display:flex; flex-wrap: wrap; gap: 12rpx; padding: 12rpx 24rpx; }
.chip { padding: 10rpx 20rpx; border-radius: 999rpx; background: $uni-bg-color-hover; color:$uni-text-color-grey; }
.chip.active { background: $uni-color-primary; 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 $uni-border-color; border-radius: 16rpx; padding: 10rpx; align-items:center; }
.info-field { background:$uni-bg-color-grey; border:2rpx solid $uni-border-color; border-radius: 12rpx; padding: 10rpx 12rpx; }
.info-label { color:$uni-text-color-grey; font-size: 24rpx; margin-right: 8rpx; }
.info-value { color:$uni-text-color; font-weight: 700; }
.info-action { display:flex; align-items:center; gap: 6rpx; background:$uni-color-primary; color:#fff; border-radius: 12rpx; padding: 12rpx 14rpx; }
.info-icon { width: 32rpx; height: 32rpx; }
</style>

View File

@@ -1,5 +1,10 @@
<template>
<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>
@@ -71,8 +76,8 @@
</view>
<view class="fixed">
<button type="default" @click="save(false)">保存</button>
<button type="primary" @click="save(true)">保存并继续</button>
<button class="ghost" @click="save(false)">保存</button>
<button class="primary" @click="save(true)">保存并继续</button>
</view>
</scroll-view>
</template>
@@ -201,13 +206,18 @@ export default {
<style lang="scss">
.page { background:$uni-bg-color; height: 100vh; }
.card { background:$uni-bg-color-grey; margin: 16rpx; padding: 16rpx; border-radius: 12rpx; }
.hero.small { margin: 16rpx; padding: 16rpx; background: #ffffff; border: 2rpx solid $uni-border-color; border-radius: 16rpx; }
.hero.small .title { font-size: 32rpx; font-weight: 800; color: $uni-text-color; }
.hero.small .sub { margin-left: 12rpx; color: $uni-text-color-grey; font-size: 24rpx; }
.card { background:#ffffff; margin: 16rpx; padding: 16rpx; border-radius: 16rpx; border: 2rpx solid $uni-border-color; }
.row { display:flex; gap: 12rpx; align-items: center; margin-bottom: 12rpx; }
.label { width: 180rpx; color:$uni-text-color-grey; }
.row input { flex:1; background:$uni-bg-color-hover; border-radius: 10rpx; padding: 12rpx; color:$uni-text-color; }
.picker { padding: 8rpx 12rpx; background:$uni-bg-color-hover; border-radius: 10rpx; color:$uni-text-color-grey; margin-left: 8rpx; }
.row input { flex:1; background:$uni-bg-color-hover; border-radius: 12rpx; padding: 14rpx; color:$uni-text-color; border: 2rpx solid $uni-border-color; }
.picker { padding: 10rpx 14rpx; background:$uni-bg-color-hover; border-radius: 12rpx; color:$uni-text-color-grey; margin-left: 8rpx; border: 2rpx solid $uni-border-color; }
.prices input { width: 30%; }
.fixed { position: fixed; left: 0; right: 0; bottom: 0; background:$uni-bg-color-grey; padding: 12rpx 16rpx; display:flex; gap: 16rpx; }
.fixed { position: fixed; left: 0; right: 0; bottom: 0; background:#ffffff; padding: 12rpx 16rpx; display:flex; gap: 16rpx; border-top: 2rpx solid $uni-border-color; }
.fixed .primary { flex:1; background: $uni-color-primary; color:#fff; border-radius: 999rpx; padding: 18rpx 0; font-weight: 700; }
.fixed .ghost { flex:1; background:#ffffff; color:$uni-color-primary; border: 2rpx solid rgba($uni-color-primary, .45); border-radius: 999rpx; padding: 18rpx 0; }
</style>

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

View File

@@ -1 +1 @@
{"version":3,"file":"app.js","sources":["App.vue","main.js"],"sourcesContent":["<script>\n\texport default {\n\t\tonLaunch: function() {\n\t\t\tconsole.log('App Launch')\n\t\t},\n\t\tonShow: function() {\n\t\t\tconsole.log('App Show')\n\t\t},\n\t\tonHide: function() {\n\t\t\tconsole.log('App Hide')\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\">\n\t/*每个页面公共css */\n\tpage{\n\t\tbackground-color: $uni-bg-color;\n\t\tcolor: $uni-text-color;\n\t\t-webkit-font-smoothing: antialiased;\n\t\t-moz-osx-font-smoothing: grayscale;\n\t}\n\t/* 强制所有端白底(防止小程序旧样式残留覆盖) */\n\t.uni-page-body, uni-page-body {\n\t\tbackground-color: $uni-bg-color !important;\n\t}\n\t/* 小程序节点:强制 wx-view 白底 */\n\twx-view { background-color: #ffffff !important; }\n\t/* 例外:需要有主色底的元素,强制还原 */\n\t.cta, .notice-left, .fab {\n\t\tbackground-color: $uni-color-primary !important;\n\t\tborder-color: $uni-color-primary !important;\n\t\tcolor: #ffffff !important;\n\t}\n\t.cta .cta-text { color:#ffffff !important; font-weight: 700; }\n\t/* 覆盖历史深色背景(统一纯白/浅灰) */\n\t.home, .report, .order, .me, .page { background: $uni-bg-color !important; }\n\t.notice, .hero, .grid-wrap, .panel, .card, .tabs, .seg, .list, .search, .summary, .toolbar, .item { background: $uni-bg-color-grey !important; }\n\t.text-secondary{\n\t\tcolor:$uni-text-color-grey;\n\t}\n\t.card{\n\t\tbackground-color:$uni-bg-color-grey;\n\t\tborder:1px solid $uni-border-color;\n\t\tborder-radius: 8rpx;\n\t}\n\t.primary{\n\t\tcolor:$uni-color-primary;\n\t}\n\n\t/* 底部原生 tabBarH5/APP端可生效字体加大 */\n\t.uni-tabbar__label, .uni-tabbar__text{\n\t\tfont-size: 28rpx !important;\n\t\tfont-weight: 700 !important;\n\t}\n\n\t/* 图表统一透明底(常见容器/画布选择器) */\n\tcanvas, .ec-canvas, .echarts, .charts, .chart, .ucharts-box{\n\t\tbackground-color: transparent !important;\n\t}\n</style>\n","import App from './App'\r\n\r\n// #ifndef VUE3\r\nimport Vue from 'vue'\r\nimport './uni.promisify.adaptor'\r\nVue.config.productionTip = false\r\nApp.mpType = 'app'\r\nconst app = new Vue({\r\n ...App\r\n})\r\napp.$mount()\r\n// #endif\r\n\r\n// #ifdef VUE3\r\nimport { createSSRApp } from 'vue'\r\nexport function createApp() {\r\n const app = createSSRApp(App)\r\n return {\r\n app\r\n }\r\n}\r\n// #endif\r\n\r\n// 规范化 WebSocket 关闭码(仅微信小程序)\r\n// #ifdef MP-WEIXIN\r\nif (typeof uni !== 'undefined' && typeof uni.connectSocket === 'function') {\r\n const _connectSocket = uni.connectSocket\r\n uni.connectSocket = function(options) {\r\n const task = _connectSocket.call(this, options)\r\n if (task && typeof task.close === 'function') {\r\n const _close = task.close\r\n task.close = function(params = {}) {\r\n if (params && typeof params === 'object') {\r\n const codeNum = Number(params.code)\r\n const isValid = codeNum === 1000 || (codeNum >= 3000 && codeNum <= 4999)\r\n if (!isValid) {\r\n params.code = 1000\r\n if (!params.reason) params.reason = 'normalized from invalid close code'\r\n }\r\n }\r\n return _close.call(this, params)\r\n }\r\n }\r\n return task\r\n }\r\n}\r\n// #endif"],"names":["uni","createSSRApp","App"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AACC,MAAK,YAAU;AAAA,EACd,UAAU,WAAW;AACpBA,kBAAAA,MAAY,MAAA,OAAA,gBAAA,YAAY;AAAA,EACxB;AAAA,EACD,QAAQ,WAAW;AAClBA,kBAAAA,MAAY,MAAA,OAAA,gBAAA,UAAU;AAAA,EACtB;AAAA,EACD,QAAQ,WAAW;AAClBA,kBAAAA,MAAY,MAAA,OAAA,iBAAA,UAAU;AAAA,EACvB;AACD;ACIM,SAAS,YAAY;AAC1B,QAAM,MAAMC,cAAY,aAACC,SAAG;AAC5B,SAAO;AAAA,IACL;AAAA,EACD;AACH;AAKA,IAAI,OAAOF,cAAG,UAAK,eAAe,OAAOA,cAAAA,MAAI,kBAAkB,YAAY;AACzE,QAAM,iBAAiBA,cAAAA,MAAI;AAC3BA,sBAAI,gBAAgB,SAAS,SAAS;AACpC,UAAM,OAAO,eAAe,KAAK,MAAM,OAAO;AAC9C,QAAI,QAAQ,OAAO,KAAK,UAAU,YAAY;AAC5C,YAAM,SAAS,KAAK;AACpB,WAAK,QAAQ,SAAS,SAAS,IAAI;AACjC,YAAI,UAAU,OAAO,WAAW,UAAU;AACxC,gBAAM,UAAU,OAAO,OAAO,IAAI;AAClC,gBAAM,UAAU,YAAY,OAAS,WAAW,OAAQ,WAAW;AACnE,cAAI,CAAC,SAAS;AACZ,mBAAO,OAAO;AACd,gBAAI,CAAC,OAAO;AAAQ,qBAAO,SAAS;AAAA,UACrC;AAAA,QACF;AACD,eAAO,OAAO,KAAK,MAAM,MAAM;AAAA,MAChC;AAAA,IACF;AACD,WAAO;AAAA,EACR;AACH;;;"}
{"version":3,"file":"app.js","sources":["App.vue","main.js"],"sourcesContent":["\"D:\\wx\\PartsInquiry\\frontend\\static\\icons\\icons8-account-male-100.png\"<script>\n\texport default {\n\t\tonLaunch: function() {\n\t\t\tconsole.log('App Launch')\n\t\t},\n\t\tonShow: function() {\n\t\t\tconsole.log('App Show')\n\t\t},\n\t\tonHide: function() {\n\t\t\tconsole.log('App Hide')\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\">\n\t/*每个页面公共css */\n\tpage{\n\t\tbackground-color: $uni-bg-color;\n\t\tcolor: $uni-text-color;\n\t\t-webkit-font-smoothing: antialiased;\n\t\t-moz-osx-font-smoothing: grayscale;\n\t}\n\t/* 强制所有端白底(防止小程序旧样式残留覆盖) */\n\t.uni-page-body, uni-page-body {\n\t\tbackground-color: $uni-bg-color !important;\n\t}\n\t/* 小程序节点:强制 wx-view 白底 */\n\twx-view { background-color: #ffffff !important; }\n\t/* 例外:需要有主色底的元素,强制还原 */\n\t.cta, .notice-left, .fab {\n\t\tbackground-color: $uni-color-primary !important;\n\t\tborder-color: $uni-color-primary !important;\n\t\tcolor: #ffffff !important;\n\t}\n\t.cta .cta-text { color:#ffffff !important; font-weight: 700; }\n\t/* 覆盖历史深色背景(统一纯白/浅灰) */\n\t.home, .report, .order, .me, .page { background: $uni-bg-color !important; }\n\t.notice, .hero, .grid-wrap, .panel, .card, .tabs, .seg, .list, .search, .summary, .toolbar, .item { background: $uni-bg-color-grey !important; }\n\t.text-secondary{\n\t\tcolor:$uni-text-color-grey;\n\t}\n\t.card{\n\t\tbackground-color:$uni-bg-color-grey;\n\t\tborder:1px solid $uni-border-color;\n\t\tborder-radius: 8rpx;\n\t}\n\t.primary{\n\t\tcolor:$uni-color-primary;\n\t}\n\n\t/* 底部原生 tabBarH5/APP端可生效字体加大 */\n\t.uni-tabbar__label, .uni-tabbar__text{\n\t\tfont-size: 28rpx !important;\n\t\tfont-weight: 700 !important;\n\t}\n\n\t/* 图表统一透明底(常见容器/画布选择器) */\n\tcanvas, .ec-canvas, .echarts, .charts, .chart, .ucharts-box{\n\t\tbackground-color: transparent !important;\n\t}\n</style>\n","import App from './App'\r\n\r\n// #ifndef VUE3\r\nimport Vue from 'vue'\r\nimport './uni.promisify.adaptor'\r\nVue.config.productionTip = false\r\nApp.mpType = 'app'\r\nconst app = new Vue({\r\n ...App\r\n})\r\napp.$mount()\r\n// #endif\r\n\r\n// #ifdef VUE3\r\nimport { createSSRApp } from 'vue'\r\nexport function createApp() {\r\n const app = createSSRApp(App)\r\n return {\r\n app\r\n }\r\n}\r\n// #endif\r\n\r\n// 规范化 WebSocket 关闭码(仅微信小程序)\r\n// #ifdef MP-WEIXIN\r\nif (typeof uni !== 'undefined' && typeof uni.connectSocket === 'function') {\r\n const _connectSocket = uni.connectSocket\r\n uni.connectSocket = function(options) {\r\n const task = _connectSocket.call(this, options)\r\n if (task && typeof task.close === 'function') {\r\n const _close = task.close\r\n task.close = function(params = {}) {\r\n if (params && typeof params === 'object') {\r\n const codeNum = Number(params.code)\r\n const isValid = codeNum === 1000 || (codeNum >= 3000 && codeNum <= 4999)\r\n if (!isValid) {\r\n params.code = 1000\r\n if (!params.reason) params.reason = 'normalized from invalid close code'\r\n }\r\n }\r\n return _close.call(this, params)\r\n }\r\n }\r\n return task\r\n }\r\n}\r\n// #endif"],"names":["uni","createSSRApp","App"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AACC,MAAK,YAAU;AAAA,EACd,UAAU,WAAW;AACpBA,kBAAAA,MAAY,MAAA,OAAA,gBAAA,YAAY;AAAA,EACxB;AAAA,EACD,QAAQ,WAAW;AAClBA,kBAAAA,MAAY,MAAA,OAAA,gBAAA,UAAU;AAAA,EACtB;AAAA,EACD,QAAQ,WAAW;AAClBA,kBAAAA,MAAY,MAAA,OAAA,iBAAA,UAAU;AAAA,EACvB;AACD;ACIM,SAAS,YAAY;AAC1B,QAAM,MAAMC,cAAY,aAACC,SAAG;AAC5B,SAAO;AAAA,IACL;AAAA,EACD;AACH;AAKA,IAAI,OAAOF,cAAG,UAAK,eAAe,OAAOA,cAAAA,MAAI,kBAAkB,YAAY;AACzE,QAAM,iBAAiBA,cAAAA,MAAI;AAC3BA,sBAAI,gBAAgB,SAAS,SAAS;AACpC,UAAM,OAAO,eAAe,KAAK,MAAM,OAAO;AAC9C,QAAI,QAAQ,OAAO,KAAK,UAAU,YAAY;AAC5C,YAAM,SAAS,KAAK;AACpB,WAAK,QAAQ,SAAS,SAAS,IAAI;AACjC,YAAI,UAAU,OAAO,WAAW,UAAU;AACxC,gBAAM,UAAU,OAAO,OAAO,IAAI;AAClC,gBAAM,UAAU,YAAY,OAAS,WAAW,OAAQ,WAAW;AACnE,cAAI,CAAC,SAAS;AACZ,mBAAO,OAAO;AACd,gBAAI,CAAC,OAAO;AAAQ,qBAAO,SAAS;AAAA,UACrC;AAAA,QACF;AACD,eAAO,OAAO,KAAK,MAAM,MAAM;AAAA,MAChC;AAAA,IACF;AACD,WAAO;AAAA,EACR;AACH;;;"}

View File

@@ -1 +1 @@
{"version":3,"file":"assets.js","sources":["static/logo.png"],"sourcesContent":["export default \"__VITE_ASSET__46719607__\""],"names":[],"mappings":";AAAA,MAAe,aAAA;;"}
{"version":3,"file":"assets.js","sources":["static/icons/icons8-shopping-cart-100.png","static/logo.png"],"sourcesContent":["export default \"__VITE_ASSET__c6fa5b3f__\"","export default \"__VITE_ASSET__46719607__\""],"names":[],"mappings":";AAAA,MAAe,eAAA;ACAf,MAAe,aAAA;;;"}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

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;
@@ -182,3 +197,50 @@
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