9.20 界面502
@@ -1,4 +1,4 @@
|
|||||||
<script>
|
"D:\wx\PartsInquiry\frontend\static\icons\icons8-account-male-100.png"<script>
|
||||||
export default {
|
export default {
|
||||||
onLaunch: function() {
|
onLaunch: function() {
|
||||||
console.log('App Launch')
|
console.log('App Launch')
|
||||||
|
|||||||
@@ -134,11 +134,11 @@
|
|||||||
"backgroundColor": "#FFFFFF",
|
"backgroundColor": "#FFFFFF",
|
||||||
"borderStyle": "black",
|
"borderStyle": "black",
|
||||||
"list": [
|
"list": [
|
||||||
{ "pagePath": "pages/index/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/logo.png", "selectedIconPath": "static/logo.png" },
|
{ "pagePath": "pages/product/list", "text": "货品", "iconPath": "static/icons/product.png", "selectedIconPath": "static/icons/product.png" },
|
||||||
{ "pagePath": "pages/order/create", "text": "开单", "iconPath": "static/logo.png", "selectedIconPath": "static/logo.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/logo.png", "selectedIconPath": "static/logo.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/logo.png", "selectedIconPath": "static/logo.png" }
|
{ "pagePath": "pages/my/index", "text": "我的", "iconPath": "static/icons/icons8-account-male-100.png", "selectedIconPath": "static/icons/icons8-account-male-100.png" }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"uniIdRouter": {}
|
"uniIdRouter": {}
|
||||||
|
|||||||
@@ -30,15 +30,15 @@
|
|||||||
<!-- 列表 -->
|
<!-- 列表 -->
|
||||||
<scroll-view scroll-y class="list" @scrolltolower="loadMore">
|
<scroll-view scroll-y class="list" @scrolltolower="loadMore">
|
||||||
<block v-if="items.length">
|
<block v-if="items.length">
|
||||||
<view class="item" v-for="it in items" :key="it.id" @click="openDetail(it)">
|
<view class="item" v-for="it in items" :key="it.id" @click="openDetail(it)">
|
||||||
<view class="item-left">
|
<view class="item-left">
|
||||||
<view class="date">{{ formatDate(it.orderTime || it.txTime || it.createdAt) }}</view>
|
<view class="date">{{ formatDate(it.orderTime || it.txTime || it.createdAt) }}</view>
|
||||||
<view class="name">{{ it.customerName || it.supplierName || it.accountName || it.remark || '-' }}</view>
|
<view class="name">{{ it.customerName || it.supplierName || it.accountName || it.remark || '-' }}</view>
|
||||||
<view class="no">{{ it.orderNo || it.code || it.id }}</view>
|
<view class="no">{{ it.orderNo || it.code || it.id }}</view>
|
||||||
</view>
|
|
||||||
<view class="amount">¥ {{ (it.amount || 0).toFixed(2) }}</view>
|
|
||||||
<view class="arrow">›</view>
|
|
||||||
</view>
|
</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>
|
</block>
|
||||||
<view v-else class="empty">暂无数据</view>
|
<view v-else class="empty">暂无数据</view>
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
@@ -134,29 +134,31 @@ export default {
|
|||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.page { display:flex; flex-direction: column; height: 100vh; }
|
.page { display:flex; flex-direction: column; height: 100vh; }
|
||||||
.seg { display:flex; background:$uni-bg-color-grey; }
|
.seg { display:flex; background:#fff; border-bottom:2rpx solid $uni-border-color; }
|
||||||
.seg-item { flex:1; padding: 22rpx 0; text-align:center; color:$uni-text-color-grey; }
|
.seg-item { flex:1; padding: 18rpx 0; text-align:center; color:$uni-text-color-grey; }
|
||||||
.seg-item.active { color:$uni-color-primary; font-weight: 600; }
|
.seg-item.active { color:#fff; background:$uni-color-primary; border-radius: 12rpx; margin: 8rpx; }
|
||||||
|
|
||||||
.content { display:flex; flex:1; min-height: 0; }
|
.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 { 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; }
|
.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; }
|
.toolbar { display:flex; align-items: center; gap: 12rpx; padding: 8rpx 6rpx; border-bottom:2rpx solid $uni-border-color; }
|
||||||
.search { flex:1; }
|
.search { flex:1; }
|
||||||
.search-input { width:100%; background:$uni-bg-color-hover; border-radius: 12rpx; padding: 12rpx; color:$uni-text-color; }
|
.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; }
|
.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; }
|
.list { flex:1; }
|
||||||
.item { display:flex; align-items:center; padding: 20rpx 10rpx; border-bottom: 1rpx solid $uni-border-color; }
|
.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 { flex:1; }
|
.item-left { display:flex; flex-direction: column; }
|
||||||
.date { color:$uni-text-color-grey; font-size: 24rpx; }
|
.date { color:$uni-text-color-grey; font-size: 24rpx; }
|
||||||
.name { color:$uni-text-color; margin: 4rpx 0; font-weight: 600; }
|
.name { color:$uni-text-color; margin: 4rpx 0; font-weight: 600; }
|
||||||
.no { color:#99a2b3; font-size: 22rpx; }
|
.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; }
|
.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; }
|
.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>
|
</style>
|
||||||
|
|||||||
@@ -1,5 +1,20 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="home">
|
<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">
|
||||||
<view class="hero-top">
|
<view class="hero-top">
|
||||||
@@ -28,21 +43,7 @@
|
|||||||
</view>
|
</view>
|
||||||
</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">
|
<view class="section-title">
|
||||||
@@ -51,14 +52,14 @@
|
|||||||
|
|
||||||
<!-- 功能九宫格(玻璃容器 + 圆角方形图标) -->
|
<!-- 功能九宫格(玻璃容器 + 圆角方形图标) -->
|
||||||
<view class="grid-wrap">
|
<view class="grid-wrap">
|
||||||
<view class="grid">
|
<view class="feature-grid">
|
||||||
<view class="grid-item" v-for="item in features" :key="item.key" @click="onFeatureTap(item)">
|
<view class="feature-card" v-for="item in features" :key="item.key" @click="onFeatureTap(item)">
|
||||||
<view class="icon icon-squircle">
|
<view class="fc-icon">
|
||||||
<image v-if="item.img" :src="item.img" class="icon-img" mode="aspectFit" @error="onIconError(item)"></image>
|
<image v-if="item.img" :src="item.img" class="fc-img" mode="aspectFit" @error="onIconError(item)"></image>
|
||||||
<text v-else-if="item.emoji" class="icon-emoji">{{ item.emoji }}</text>
|
<text v-else-if="item.emoji" class="fc-emoji">{{ item.emoji }}</text>
|
||||||
<view v-else class="icon-placeholder"></view>
|
<view v-else class="fc-placeholder"></view>
|
||||||
</view>
|
</view>
|
||||||
<text class="grid-chip">{{ item.title }}</text>
|
<view class="fc-title">{{ item.title }}</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -271,8 +272,9 @@
|
|||||||
|
|
||||||
.cta-text { color: #fff; font-size: 30rpx; font-weight: 700; letter-spacing: 1rpx; }
|
.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 卡片化布局:2×2 */
|
||||||
.kpi-item { text-align: center; }
|
.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 {
|
.kpi-label {
|
||||||
opacity: 0.9;
|
opacity: 0.9;
|
||||||
font-size: 26rpx;
|
font-size: 26rpx;
|
||||||
@@ -286,6 +288,13 @@
|
|||||||
}
|
}
|
||||||
.kpi-value { display: block; margin-top: 8rpx; font-size: 56rpx; font-weight: 800; color: $uni-color-primary; }
|
.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 {
|
.grid-wrap {
|
||||||
margin: 0 20rpx 32rpx;
|
margin: 0 20rpx 32rpx;
|
||||||
@@ -296,32 +305,14 @@
|
|||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 功能九宫格 */
|
/* 新版功能卡片宫格(更现代卡片风) */
|
||||||
.grid {
|
.feature-grid { display:grid; grid-template-columns: repeat(2, 1fr); gap: 18rpx; padding: 18rpx 18rpx 24rpx; }
|
||||||
display: grid;
|
.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; }
|
||||||
grid-template-columns: repeat(3, 1fr);
|
.fc-icon { width: 96rpx; height: 96rpx; border-radius: 16rpx; background: $uni-bg-color-hover; display:flex; align-items:center; justify-content:center; }
|
||||||
grid-row-gap: 64rpx;
|
.fc-img { width: 72rpx; height: 72rpx; }
|
||||||
grid-column-gap: 36rpx;
|
.fc-emoji { font-size: 56rpx; }
|
||||||
padding: 40rpx 28rpx 28rpx;
|
.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; }
|
||||||
|
|
||||||
.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; }
|
|
||||||
|
|
||||||
/* 底部操作条:浅色半透明 + 金色主按钮 */
|
/* 底部操作条:浅色半透明 + 金色主按钮 */
|
||||||
.bottom-bar {
|
.bottom-bar {
|
||||||
|
|||||||
@@ -78,6 +78,23 @@
|
|||||||
|
|
||||||
<!-- 已选商品与合计(销售/进货 出入库) -->
|
<!-- 已选商品与合计(销售/进货 出入库) -->
|
||||||
<view v-else-if="biz==='sale' || biz==='purchase'">
|
<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">
|
<view class="summary">
|
||||||
<text>选中货品({{ totalQuantity }})</text>
|
<text>选中货品({{ totalQuantity }})</text>
|
||||||
<text>合计金额:¥ {{ totalAmount.toFixed(2) }}</text>
|
<text>合计金额:¥ {{ totalAmount.toFixed(2) }}</text>
|
||||||
@@ -116,7 +133,7 @@
|
|||||||
|
|
||||||
<!-- 购物车空态 -->
|
<!-- 购物车空态 -->
|
||||||
<view class="empty" v-if="!items.length">
|
<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-text">购物车里空空如也</text>
|
||||||
<text class="empty-sub">扫描或点击 “+” 选择商品吧</text>
|
<text class="empty-sub">扫描或点击 “+” 选择商品吧</text>
|
||||||
</view>
|
</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; }
|
.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; }
|
.label { color:$uni-text-color-grey; }
|
||||||
.value { color:$uni-text-color; }
|
.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 { 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; }
|
.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; }
|
.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.name { padding-left: 12rpx; }
|
||||||
.col.amount { text-align:right; padding-right: 12rpx; color:$uni-text-color; }
|
.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; }
|
.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 { padding: 10rpx 20rpx; border-radius: 999rpx; background: $uni-bg-color-hover; color:$uni-text-color-grey; }
|
||||||
.chip.active { background: $uni-color-primary; color:#fff; }
|
.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>
|
</style>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,11 @@
|
|||||||
<template>
|
<template>
|
||||||
<scroll-view scroll-y class="page">
|
<scroll-view scroll-y class="page">
|
||||||
<view class="card">
|
<!-- 顶部标题与操作提示 -->
|
||||||
|
<view class="hero small">
|
||||||
|
<text class="title">编辑货品</text>
|
||||||
|
<text class="sub">完善基础信息与价格</text>
|
||||||
|
</view>
|
||||||
|
<view class="card">
|
||||||
<view class="row">
|
<view class="row">
|
||||||
<text class="label">商品名称</text>
|
<text class="label">商品名称</text>
|
||||||
<input v-model.trim="form.name" placeholder="必填" />
|
<input v-model.trim="form.name" placeholder="必填" />
|
||||||
@@ -37,7 +42,7 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view class="card">
|
<view class="card">
|
||||||
<view class="row">
|
<view class="row">
|
||||||
<text class="label">库存与安全库存</text>
|
<text class="label">库存与安全库存</text>
|
||||||
</view>
|
</view>
|
||||||
@@ -70,10 +75,10 @@
|
|||||||
<textarea v-model.trim="form.remark" placeholder="可选" auto-height />
|
<textarea v-model.trim="form.remark" placeholder="可选" auto-height />
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view class="fixed">
|
<view class="fixed">
|
||||||
<button type="default" @click="save(false)">保存</button>
|
<button class="ghost" @click="save(false)">保存</button>
|
||||||
<button type="primary" @click="save(true)">保存并继续</button>
|
<button class="primary" @click="save(true)">保存并继续</button>
|
||||||
</view>
|
</view>
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -201,13 +206,18 @@ export default {
|
|||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.page { background:$uni-bg-color; height: 100vh; }
|
.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; }
|
.row { display:flex; gap: 12rpx; align-items: center; margin-bottom: 12rpx; }
|
||||||
.label { width: 180rpx; color:$uni-text-color-grey; }
|
.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; }
|
.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: 8rpx 12rpx; background:$uni-bg-color-hover; border-radius: 10rpx; color:$uni-text-color-grey; margin-left: 8rpx; }
|
.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%; }
|
.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>
|
</style>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.4 KiB |
BIN
frontend/static/icons/icons8-account-male-100.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
frontend/static/icons/icons8-more-details-100.png
Normal file
|
After Width: | Height: | Size: 831 B |
BIN
frontend/static/icons/icons8-purchase-order-100.png
Normal file
|
After Width: | Height: | Size: 387 B |
BIN
frontend/static/icons/icons8-shopping-cart-100.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
frontend/static/icons/product.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
@@ -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/* 底部原生 tabBar(H5/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/* 底部原生 tabBar(H5/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;;;"}
|
||||||
@@ -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;;;"}
|
||||||
20
frontend/unpackage/dist/dev/mp-weixin/app.json
vendored
@@ -37,32 +37,32 @@
|
|||||||
{
|
{
|
||||||
"pagePath": "pages/index/index",
|
"pagePath": "pages/index/index",
|
||||||
"text": "首页",
|
"text": "首页",
|
||||||
"iconPath": "static/logo.png",
|
"iconPath": "static/icons/home.png",
|
||||||
"selectedIconPath": "static/logo.png"
|
"selectedIconPath": "static/icons/home.png"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pagePath": "pages/product/list",
|
"pagePath": "pages/product/list",
|
||||||
"text": "货品",
|
"text": "货品",
|
||||||
"iconPath": "static/logo.png",
|
"iconPath": "static/icons/product.png",
|
||||||
"selectedIconPath": "static/logo.png"
|
"selectedIconPath": "static/icons/product.png"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pagePath": "pages/order/create",
|
"pagePath": "pages/order/create",
|
||||||
"text": "开单",
|
"text": "开单",
|
||||||
"iconPath": "static/logo.png",
|
"iconPath": "static/icons/icons8-purchase-order-100.png",
|
||||||
"selectedIconPath": "static/logo.png"
|
"selectedIconPath": "static/icons/icons8-purchase-order-100.png"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pagePath": "pages/detail/index",
|
"pagePath": "pages/detail/index",
|
||||||
"text": "明细",
|
"text": "明细",
|
||||||
"iconPath": "static/logo.png",
|
"iconPath": "static/icons/icons8-more-details-100.png",
|
||||||
"selectedIconPath": "static/logo.png"
|
"selectedIconPath": "static/icons/icons8-more-details-100.png"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"pagePath": "pages/my/index",
|
"pagePath": "pages/my/index",
|
||||||
"text": "我的",
|
"text": "我的",
|
||||||
"iconPath": "static/logo.png",
|
"iconPath": "static/icons/icons8-account-male-100.png",
|
||||||
"selectedIconPath": "static/logo.png"
|
"selectedIconPath": "static/icons/icons8-account-male-100.png"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
const _imports_0$1 = "/static/icons/icons8-shopping-cart-100.png";
|
||||||
const _imports_0 = "/static/logo.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
|
//# sourceMappingURL=../../.sourcemap/mp-weixin/common/assets.js.map
|
||||||
|
|||||||
@@ -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 || "-"),
|
b: common_vendor.t(it.customerName || it.supplierName || it.accountName || it.remark || "-"),
|
||||||
c: common_vendor.t(it.orderNo || it.code || it.id),
|
c: common_vendor.t(it.orderNo || it.code || it.id),
|
||||||
d: common_vendor.t((it.amount || 0).toFixed(2)),
|
d: common_vendor.t((it.amount || 0).toFixed(2)),
|
||||||
e: it.id,
|
e: Number(it.amount || 0) >= 0 ? 1 : "",
|
||||||
f: common_vendor.o(($event) => $options.openDetail(it), it.id)
|
f: Number(it.amount || 0) < 0 ? 1 : "",
|
||||||
|
g: it.id,
|
||||||
|
h: common_vendor.o(($event) => $options.openDetail(it), it.id)
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
} : {}, {
|
} : {}, {
|
||||||
|
|||||||
@@ -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>
|
||||||
@@ -31,17 +31,20 @@
|
|||||||
}
|
}
|
||||||
.seg {
|
.seg {
|
||||||
display: flex;
|
display: flex;
|
||||||
background: #ffffff;
|
background: #fff;
|
||||||
|
border-bottom: 2rpx solid #e5e7eb;
|
||||||
}
|
}
|
||||||
.seg-item {
|
.seg-item {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
padding: 22rpx 0;
|
padding: 18rpx 0;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
color: #444;
|
color: #444;
|
||||||
}
|
}
|
||||||
.seg-item.active {
|
.seg-item.active {
|
||||||
color: #4C8DFF;
|
color: #fff;
|
||||||
font-weight: 600;
|
background: #4C8DFF;
|
||||||
|
border-radius: 12rpx;
|
||||||
|
margin: 8rpx;
|
||||||
}
|
}
|
||||||
.content {
|
.content {
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -49,8 +52,9 @@
|
|||||||
min-height: 0;
|
min-height: 0;
|
||||||
}
|
}
|
||||||
.biz-tabs {
|
.biz-tabs {
|
||||||
width: 120rpx;
|
width: 140rpx;
|
||||||
background: #f1f1f1;
|
background: #fff;
|
||||||
|
border-right: 2rpx solid #e5e7eb;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
@@ -62,24 +66,26 @@
|
|||||||
color: #4C8DFF;
|
color: #4C8DFF;
|
||||||
}
|
}
|
||||||
.biz.active {
|
.biz.active {
|
||||||
background: #4C8DFF;
|
background: rgba(76, 141, 255, 0.1);
|
||||||
color: #fff;
|
color: #4C8DFF;
|
||||||
border-radius: 0 16rpx 16rpx 0;
|
font-weight: 700;
|
||||||
}
|
}
|
||||||
.panel {
|
.panel {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
background: #ffffff;
|
background: #fff;
|
||||||
margin: 16rpx;
|
margin: 16rpx;
|
||||||
border-radius: 16rpx;
|
border-radius: 16rpx;
|
||||||
padding: 12rpx;
|
padding: 12rpx;
|
||||||
|
border: 2rpx solid #e5e7eb;
|
||||||
}
|
}
|
||||||
.toolbar {
|
.toolbar {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 12rpx;
|
gap: 12rpx;
|
||||||
padding: 8rpx 6rpx;
|
padding: 8rpx 6rpx;
|
||||||
|
border-bottom: 2rpx solid #e5e7eb;
|
||||||
}
|
}
|
||||||
.search {
|
.search {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
@@ -99,19 +105,23 @@
|
|||||||
.total {
|
.total {
|
||||||
color: #4C8DFF;
|
color: #4C8DFF;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
padding: 6rpx 6rpx 12rpx;
|
padding: 10rpx 6rpx 12rpx;
|
||||||
|
background: #fff;
|
||||||
}
|
}
|
||||||
.list {
|
.list {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
}
|
}
|
||||||
.item {
|
.item {
|
||||||
display: flex;
|
display: grid;
|
||||||
|
grid-template-columns: 1fr auto auto;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
padding: 20rpx 10rpx;
|
gap: 8rpx;
|
||||||
|
padding: 18rpx 12rpx;
|
||||||
border-bottom: 1rpx solid #e5e7eb;
|
border-bottom: 1rpx solid #e5e7eb;
|
||||||
}
|
}
|
||||||
.item-left {
|
.item-left {
|
||||||
flex: 1;
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
.date {
|
.date {
|
||||||
color: #444;
|
color: #444;
|
||||||
@@ -129,6 +139,13 @@
|
|||||||
.amount {
|
.amount {
|
||||||
color: #111;
|
color: #111;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
.amount.in {
|
||||||
|
color: #16a34a;
|
||||||
|
}
|
||||||
|
.amount.out {
|
||||||
|
color: #dc2626;
|
||||||
}
|
}
|
||||||
.arrow {
|
.arrow {
|
||||||
color: #8c99b0;
|
color: #8c99b0;
|
||||||
@@ -148,11 +165,12 @@
|
|||||||
bottom: 120rpx;
|
bottom: 120rpx;
|
||||||
width: 100rpx;
|
width: 100rpx;
|
||||||
height: 100rpx;
|
height: 100rpx;
|
||||||
background: #4C8DFF;
|
background: #fff;
|
||||||
color: #fff;
|
color: #4C8DFF;
|
||||||
|
border: 2rpx solid #4C8DFF;
|
||||||
border-radius: 50rpx;
|
border-radius: 50rpx;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
line-height: 100rpx;
|
line-height: 100rpx;
|
||||||
font-size: 48rpx;
|
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);
|
||||||
}
|
}
|
||||||
@@ -113,7 +113,7 @@ const _sfc_main = {
|
|||||||
},
|
},
|
||||||
goDetail() {
|
goDetail() {
|
||||||
try {
|
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) {
|
} catch (e) {
|
||||||
}
|
}
|
||||||
common_vendor.index.switchTab({ url: "/pages/detail/index" });
|
common_vendor.index.switchTab({ url: "/pages/detail/index" });
|
||||||
@@ -135,15 +135,11 @@ const _sfc_main = {
|
|||||||
};
|
};
|
||||||
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
||||||
return common_vendor.e({
|
return common_vendor.e({
|
||||||
a: common_vendor.t($data.kpi.todaySales),
|
a: $data.loadingNotices
|
||||||
b: common_vendor.t($data.kpi.monthSales),
|
|
||||||
c: common_vendor.t($data.kpi.monthProfit),
|
|
||||||
d: common_vendor.t($data.kpi.stockCount),
|
|
||||||
e: $data.loadingNotices
|
|
||||||
}, $data.loadingNotices ? {} : $data.noticeError ? {
|
}, $data.loadingNotices ? {} : $data.noticeError ? {
|
||||||
g: common_vendor.t($data.noticeError)
|
c: common_vendor.t($data.noticeError)
|
||||||
} : !$data.notices.length ? {} : {
|
} : !$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({
|
return common_vendor.e({
|
||||||
a: common_vendor.t(n.text),
|
a: common_vendor.t(n.text),
|
||||||
b: n.tag
|
b: n.tag
|
||||||
@@ -155,8 +151,12 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|||||||
});
|
});
|
||||||
})
|
})
|
||||||
}, {
|
}, {
|
||||||
f: $data.noticeError,
|
b: $data.noticeError,
|
||||||
h: !$data.notices.length,
|
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) => {
|
j: common_vendor.f($data.features, (item, k0, i0) => {
|
||||||
return common_vendor.e({
|
return common_vendor.e({
|
||||||
a: item.img
|
a: item.img
|
||||||
|
|||||||
@@ -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>
|
||||||
@@ -142,13 +142,19 @@
|
|||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
letter-spacing: 1rpx;
|
letter-spacing: 1rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* KPI 卡片化布局:2×2 */
|
||||||
.kpi {
|
.kpi {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(4, 1fr);
|
grid-template-columns: repeat(2, 1fr);
|
||||||
gap: 8rpx;
|
gap: 16rpx;
|
||||||
}
|
}
|
||||||
.kpi-item {
|
.kpi-item {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
background: #ffffff;
|
||||||
|
border: 2rpx solid #e5e7eb;
|
||||||
|
border-radius: 16rpx;
|
||||||
|
padding: 16rpx 8rpx;
|
||||||
}
|
}
|
||||||
.kpi-label {
|
.kpi-label {
|
||||||
opacity: 0.9;
|
opacity: 0.9;
|
||||||
@@ -171,6 +177,33 @@
|
|||||||
color: #4C8DFF;
|
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 {
|
.grid-wrap {
|
||||||
margin: 0 20rpx 32rpx;
|
margin: 0 20rpx 32rpx;
|
||||||
@@ -181,77 +214,51 @@
|
|||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 功能九宫格 */
|
/* 新版功能卡片宫格(更现代卡片风) */
|
||||||
.grid {
|
.feature-grid {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(3, 1fr);
|
grid-template-columns: repeat(2, 1fr);
|
||||||
grid-row-gap: 64rpx;
|
gap: 18rpx;
|
||||||
grid-column-gap: 36rpx;
|
padding: 18rpx 18rpx 24rpx;
|
||||||
padding: 40rpx 28rpx 28rpx;
|
|
||||||
}
|
}
|
||||||
.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;
|
display: flex;
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
align-items: center;
|
||||||
text-align: center;
|
gap: 12rpx;
|
||||||
}
|
}
|
||||||
.icon {
|
.fc-icon {
|
||||||
|
width: 96rpx;
|
||||||
|
height: 96rpx;
|
||||||
|
border-radius: 16rpx;
|
||||||
|
background: #f1f1f1;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: 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;
|
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 底部操作条:浅色半透明 + 金色主按钮 */
|
/* 底部操作条:浅色半透明 + 金色主按钮 */
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ const _sfc_main = {
|
|||||||
};
|
};
|
||||||
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
||||||
return {
|
return {
|
||||||
a: common_assets._imports_0,
|
a: common_assets._imports_0$1,
|
||||||
b: common_vendor.o((...args) => $options.openPolicy && $options.openPolicy(...args)),
|
b: common_vendor.o((...args) => $options.openPolicy && $options.openPolicy(...args)),
|
||||||
c: common_vendor.o((...args) => $options.openTerms && $options.openTerms(...args)),
|
c: common_vendor.o((...args) => $options.openTerms && $options.openTerms(...args)),
|
||||||
d: common_vendor.o((...args) => $options.openComplaint && $options.openComplaint(...args))
|
d: common_vendor.o((...args) => $options.openComplaint && $options.openComplaint(...args))
|
||||||
|
|||||||
@@ -337,15 +337,23 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|||||||
Y: $data.order.orderTime,
|
Y: $data.order.orderTime,
|
||||||
Z: common_vendor.o((...args) => $options.onDateChange && $options.onDateChange(...args))
|
Z: common_vendor.o((...args) => $options.onDateChange && $options.onDateChange(...args))
|
||||||
}) : $data.biz === "sale" || $data.biz === "purchase" ? {
|
}) : $data.biz === "sale" || $data.biz === "purchase" ? {
|
||||||
ab: common_vendor.t($options.totalQuantity),
|
ab: common_vendor.t($data.biz === "sale" ? "客户" : "供应商"),
|
||||||
ac: common_vendor.t($options.totalAmount.toFixed(2)),
|
ac: common_vendor.t($data.biz === "sale" ? $options.customerLabel : $options.supplierLabel),
|
||||||
ad: common_vendor.o((...args) => $options.chooseProduct && $options.chooseProduct(...args))
|
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 : "",
|
am: $data.counterpartyType === "customer" ? 1 : "",
|
||||||
af: common_vendor.o(($event) => $options.setCounterparty("customer")),
|
an: common_vendor.o(($event) => $options.setCounterparty("customer")),
|
||||||
ag: $data.counterpartyType === "supplier" ? 1 : "",
|
ao: $data.counterpartyType === "supplier" ? 1 : "",
|
||||||
ah: common_vendor.o(($event) => $options.setCounterparty("supplier")),
|
ap: common_vendor.o(($event) => $options.setCounterparty("supplier")),
|
||||||
ai: common_vendor.f($data.biz === "income" ? $options.incomeCategories : $options.expenseCategories, (c, k0, i0) => {
|
aq: common_vendor.f($data.biz === "income" ? $options.incomeCategories : $options.expenseCategories, (c, k0, i0) => {
|
||||||
return {
|
return {
|
||||||
a: common_vendor.t(c.label),
|
a: common_vendor.t(c.label),
|
||||||
b: c.key,
|
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)
|
d: common_vendor.o(($event) => $data.activeCategory = c.key, c.key)
|
||||||
};
|
};
|
||||||
}),
|
}),
|
||||||
aj: common_vendor.t($options.counterpartyLabel),
|
ar: common_vendor.t($options.counterpartyLabel),
|
||||||
ak: common_vendor.o((...args) => $options.chooseCounterparty && $options.chooseCounterparty(...args)),
|
as: common_vendor.o((...args) => $options.chooseCounterparty && $options.chooseCounterparty(...args)),
|
||||||
al: common_vendor.t($options.accountLabel),
|
at: common_vendor.t($options.accountLabel),
|
||||||
am: common_vendor.o((...args) => $options.chooseAccount && $options.chooseAccount(...args)),
|
av: common_vendor.o((...args) => $options.chooseAccount && $options.chooseAccount(...args)),
|
||||||
an: $data.trxAmount,
|
aw: $data.trxAmount,
|
||||||
ao: common_vendor.o(common_vendor.m(($event) => $data.trxAmount = $event.detail.value, {
|
ax: common_vendor.o(common_vendor.m(($event) => $data.trxAmount = $event.detail.value, {
|
||||||
number: true
|
number: true
|
||||||
})),
|
})),
|
||||||
ap: $data.order.remark,
|
ay: $data.order.remark,
|
||||||
aq: common_vendor.o(($event) => $data.order.remark = $event.detail.value)
|
az: common_vendor.o(($event) => $data.order.remark = $event.detail.value)
|
||||||
}, {
|
}, {
|
||||||
aa: $data.biz === "sale" || $data.biz === "purchase",
|
aa: $data.biz === "sale" || $data.biz === "purchase",
|
||||||
ar: !$data.items.length
|
aA: !$data.items.length
|
||||||
}, !$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 {
|
return {
|
||||||
a: common_vendor.t(it.productName),
|
a: common_vendor.t(it.productName),
|
||||||
b: common_vendor.o([common_vendor.m(($event) => it.quantity = $event.detail.value, {
|
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)),
|
aD: common_vendor.o((...args) => $options.saveAndReset && $options.saveAndReset(...args)),
|
||||||
aw: common_vendor.o((...args) => $options.submit && $options.submit(...args))
|
aE: common_vendor.o((...args) => $options.submit && $options.submit(...args))
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]);
|
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]);
|
||||||
|
|||||||
@@ -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>
|
||||||
@@ -67,23 +67,34 @@
|
|||||||
.value {
|
.value {
|
||||||
color: #111;
|
color: #111;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 汇总卡片:白底卡片+主色按钮 */
|
||||||
.summary {
|
.summary {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
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;
|
color: #111;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 加号改为图标按钮 */
|
||||||
.add {
|
.add {
|
||||||
margin: 24rpx auto;
|
margin: 18rpx auto;
|
||||||
width: 120rpx;
|
width: 120rpx;
|
||||||
height: 120rpx;
|
height: 120rpx;
|
||||||
border-radius: 20rpx;
|
border-radius: 24rpx;
|
||||||
background: #4C8DFF;
|
background: #fff;
|
||||||
color: #fff;
|
border: 2rpx solid #4C8DFF;
|
||||||
|
color: #4C8DFF;
|
||||||
font-size: 72rpx;
|
font-size: 72rpx;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
box-shadow: 0 6rpx 16rpx rgba(76, 141, 255, 0.12);
|
||||||
}
|
}
|
||||||
.empty {
|
.empty {
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -93,14 +104,18 @@
|
|||||||
color: #444;
|
color: #444;
|
||||||
}
|
}
|
||||||
.empty-img {
|
.empty-img {
|
||||||
width: 220rpx;
|
width: 160rpx;
|
||||||
margin-bottom: 20rpx;
|
margin-bottom: 16rpx;
|
||||||
}
|
}
|
||||||
.empty-text {
|
.empty-text {
|
||||||
margin-bottom: 8rpx;
|
margin-bottom: 8rpx;
|
||||||
}
|
}
|
||||||
.list {
|
.list {
|
||||||
background: #ffffff;
|
background: #fff;
|
||||||
|
margin: 0 16rpx 12rpx;
|
||||||
|
border: 2rpx solid #e5e7eb;
|
||||||
|
border-radius: 16rpx;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
.row {
|
.row {
|
||||||
display: grid;
|
display: grid;
|
||||||
@@ -181,4 +196,51 @@
|
|||||||
.chip.active {
|
.chip.active {
|
||||||
background: #4C8DFF;
|
background: #4C8DFF;
|
||||||
color: #fff;
|
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;
|
||||||
}
|
}
|
||||||
@@ -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>
|
||||||
@@ -28,11 +28,29 @@
|
|||||||
background: #ffffff;
|
background: #ffffff;
|
||||||
height: 100vh;
|
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 {
|
.card {
|
||||||
background: #ffffff;
|
background: #ffffff;
|
||||||
margin: 16rpx;
|
margin: 16rpx;
|
||||||
padding: 16rpx;
|
padding: 16rpx;
|
||||||
border-radius: 12rpx;
|
border-radius: 16rpx;
|
||||||
|
border: 2rpx solid #e5e7eb;
|
||||||
}
|
}
|
||||||
.row {
|
.row {
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -47,16 +65,18 @@
|
|||||||
.row input {
|
.row input {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
background: #f1f1f1;
|
background: #f1f1f1;
|
||||||
border-radius: 10rpx;
|
border-radius: 12rpx;
|
||||||
padding: 12rpx;
|
padding: 14rpx;
|
||||||
color: #111;
|
color: #111;
|
||||||
|
border: 2rpx solid #e5e7eb;
|
||||||
}
|
}
|
||||||
.picker {
|
.picker {
|
||||||
padding: 8rpx 12rpx;
|
padding: 10rpx 14rpx;
|
||||||
background: #f1f1f1;
|
background: #f1f1f1;
|
||||||
border-radius: 10rpx;
|
border-radius: 12rpx;
|
||||||
color: #444;
|
color: #444;
|
||||||
margin-left: 8rpx;
|
margin-left: 8rpx;
|
||||||
|
border: 2rpx solid #e5e7eb;
|
||||||
}
|
}
|
||||||
.prices input {
|
.prices input {
|
||||||
width: 30%;
|
width: 30%;
|
||||||
@@ -70,4 +90,21 @@
|
|||||||
padding: 12rpx 16rpx;
|
padding: 12rpx 16rpx;
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 16rpx;
|
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;
|
||||||
}
|
}
|
||||||
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.4 KiB |
BIN
frontend/unpackage/dist/dev/mp-weixin/static/icons/icons8-account-male-100.png
vendored
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
frontend/unpackage/dist/dev/mp-weixin/static/icons/icons8-more-details-100.png
vendored
Normal file
|
After Width: | Height: | Size: 831 B |
BIN
frontend/unpackage/dist/dev/mp-weixin/static/icons/icons8-purchase-order-100.png
vendored
Normal file
|
After Width: | Height: | Size: 387 B |
BIN
frontend/unpackage/dist/dev/mp-weixin/static/icons/icons8-shopping-cart-100.png
vendored
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
frontend/unpackage/dist/dev/mp-weixin/static/icons/product.png
vendored
Normal file
|
After Width: | Height: | Size: 2.6 KiB |