Compare commits

..

3 Commits

Author SHA1 Message Date
b7d9f16198 Merge branch 'main' of https://gitea.tonaspace.com/TONASPACE/PartsInquiry 2025-09-20 22:09:25 +08:00
3894cc1c57 9.20 界面502 2025-09-20 22:09:15 +08:00
44ac2723a0 9.20界面 2025-09-20 21:09:27 +08:00
130 changed files with 8301 additions and 768 deletions

View File

@@ -8,22 +8,31 @@ public class NoticeStatusConverter implements AttributeConverter<NoticeStatus, S
@Override
public String convertToDatabaseColumn(NoticeStatus attribute) {
if (attribute == null) return null;
return switch (attribute) {
case DRAFT -> "draft";
case PUBLISHED -> "published";
case OFFLINE -> "offline";
};
switch (attribute) {
case DRAFT:
return "draft";
case PUBLISHED:
return "published";
case OFFLINE:
return "offline";
default:
return "published";
}
}
@Override
public NoticeStatus convertToEntityAttribute(String dbData) {
if (dbData == null) return null;
return switch (dbData) {
case "draft" -> NoticeStatus.DRAFT;
case "published" -> NoticeStatus.PUBLISHED;
case "offline" -> NoticeStatus.OFFLINE;
default -> NoticeStatus.PUBLISHED;
};
switch (dbData) {
case "draft":
return NoticeStatus.DRAFT;
case "published":
return NoticeStatus.PUBLISHED;
case "offline":
return NoticeStatus.OFFLINE;
default:
return NoticeStatus.PUBLISHED;
}
}
}

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')
@@ -12,6 +12,50 @@
}
</script>
<style>
<style lang="scss">
/*每个页面公共css */
page{
background-color: $uni-bg-color;
color: $uni-text-color;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* 强制所有端白底(防止小程序旧样式残留覆盖) */
.uni-page-body, uni-page-body {
background-color: $uni-bg-color !important;
}
/* 小程序节点:强制 wx-view 白底 */
wx-view { background-color: #ffffff !important; }
/* 例外:需要有主色底的元素,强制还原 */
.cta, .notice-left, .fab {
background-color: $uni-color-primary !important;
border-color: $uni-color-primary !important;
color: #ffffff !important;
}
.cta .cta-text { color:#ffffff !important; font-weight: 700; }
/* 覆盖历史深色背景(统一纯白/浅灰) */
.home, .report, .order, .me, .page { background: $uni-bg-color !important; }
.notice, .hero, .grid-wrap, .panel, .card, .tabs, .seg, .list, .search, .summary, .toolbar, .item { background: $uni-bg-color-grey !important; }
.text-secondary{
color:$uni-text-color-grey;
}
.card{
background-color:$uni-bg-color-grey;
border:1px solid $uni-border-color;
border-radius: 8rpx;
}
.primary{
color:$uni-color-primary;
}
/* 底部原生 tabBarH5/APP端可生效字体加大 */
.uni-tabbar__label, .uni-tabbar__text{
font-size: 28rpx !important;
font-weight: 700 !important;
}
/* 图表统一透明底(常见容器/画布选择器) */
canvas, .ec-canvas, .echarts, .charts, .chart, .ucharts-box{
background-color: transparent !important;
}
</style>

View File

@@ -124,20 +124,21 @@
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "五金配件管家",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
"navigationBarBackgroundColor": "#FFFFFF",
"backgroundColor": "#FFFFFF",
"backgroundTextStyle": "dark"
},
"tabBar": {
"color": "#8a7535",
"selectedColor": "#B4880F",
"backgroundColor": "#ffffff",
"color": "#444444",
"selectedColor": "#4C8DFF",
"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

@@ -57,18 +57,18 @@ export default {
}
</script>
<style>
<style lang="scss">
.page { display:flex; flex-direction: column; height: 100vh; }
.form { background:#fff; }
.field { display:flex; align-items:center; justify-content: space-between; padding: 18rpx 20rpx; border-bottom:1rpx solid #f3f3f3; }
.label { color:#666; }
.input { flex:1; text-align: right; color:#333; }
.value { color:#333; }
.form { background:$uni-bg-color-grey; }
.field { display:flex; align-items:center; justify-content: space-between; padding: 18rpx 20rpx; border-bottom:1rpx solid $uni-border-color; }
.label { color:$uni-text-color-grey; }
.input { flex:1; text-align: right; color:$uni-text-color; }
.value { color:$uni-text-color; }
.actions { margin-top: 20rpx; padding: 0 20rpx; }
.primary { width: 100%; background: #3c9cff; color:#fff; border-radius: 8rpx; padding: 22rpx 0; }
.sheet { background:#fff; }
.sheet-item { padding: 26rpx; text-align:center; border-bottom:1rpx solid #f2f2f2; }
.sheet-cancel { padding: 26rpx; text-align:center; color:#666; }
.primary { width: 100%; background: $uni-color-primary; color:#fff; border-radius: 8rpx; padding: 22rpx 0; }
.sheet { background:$uni-bg-color-grey; }
.sheet-item { padding: 26rpx; text-align:center; border-bottom:1rpx solid $uni-border-color; }
.sheet-cancel { padding: 26rpx; text-align:center; color:$uni-text-color-grey; }
</style>

View File

@@ -64,24 +64,24 @@ export default {
}
</script>
<style>
<style lang="scss">
.page { display:flex; flex-direction: column; height: 100vh; }
.filters { display:flex; gap: 16rpx; padding: 16rpx; background:#fff; }
.field { display:flex; justify-content: space-between; align-items:center; padding: 16rpx; border:1rpx solid #eee; border-radius: 12rpx; min-width: 300rpx; }
.label { color:#666; }
.value { color:#333; }
.summary { display:grid; grid-template-columns: repeat(4,1fr); gap: 12rpx; padding: 12rpx 16rpx; background:#fff; border-top:1rpx solid #f1f1f1; border-bottom:1rpx solid #f1f1f1; }
.filters { display:flex; gap: 16rpx; padding: 16rpx; background:$uni-bg-color-grey; }
.field { display:flex; justify-content: space-between; align-items:center; padding: 16rpx; border:1rpx solid $uni-border-color; border-radius: 12rpx; min-width: 300rpx; }
.label { color:$uni-text-color-grey; }
.value { color:$uni-text-color; }
.summary { display:grid; grid-template-columns: repeat(4,1fr); gap: 12rpx; padding: 12rpx 16rpx; background:$uni-bg-color-grey; border-top:1rpx solid $uni-border-color; border-bottom:1rpx solid $uni-border-color; }
.sum-item { padding: 12rpx; text-align:center; }
.k { display:block; color:#888; font-size: 24rpx; }
.v { display:block; margin-top:6rpx; font-weight:700; color:#333; }
.k { display:block; color:$uni-text-color-grey; font-size: 24rpx; }
.v { display:block; margin-top:6rpx; font-weight:700; color:$uni-text-color; }
.list { flex:1; }
.item { padding: 18rpx 16rpx; border-bottom:1rpx solid #f4f4f4; background:#fff; }
.item { padding: 18rpx 16rpx; border-bottom:1rpx solid $uni-border-color; background:$uni-bg-color-grey; }
.row { display:flex; align-items:center; justify-content: space-between; margin-bottom: 6rpx; }
.title { color:#333; }
.title { color:$uni-text-color; }
.amount { font-weight:700; }
.amount.in { color:#2a9d8f; }
.amount.out { color:#d35b5b; }
.meta { color:#999; font-size: 24rpx; }
.meta { color:$uni-text-color-grey; font-size: 24rpx; }
</style>

View File

@@ -41,13 +41,13 @@
}
</script>
<style>
<style lang="scss">
.page { display:flex; flex-direction: column; height: 100vh; }
.list { flex:1; }
.item { padding: 20rpx 24rpx; background:#fff; border-bottom: 1rpx solid #f1f1f1; }
.name { color:#333; margin-bottom: 6rpx; }
.meta { color:#888; font-size: 24rpx; }
.fab { position: fixed; right: 32rpx; bottom: 120rpx; width: 100rpx; height: 100rpx; border-radius: 50%; background:#3c9cff; color:#fff; display:flex; align-items:center; justify-content:center; font-size: 52rpx; box-shadow: 0 10rpx 20rpx rgba(0,0,0,0.18); }
.item { padding: 20rpx 24rpx; background:$uni-bg-color-grey; border-bottom: 1rpx solid $uni-border-color; }
.name { color:$uni-text-color; margin-bottom: 6rpx; }
.meta { color:$uni-text-color-grey; font-size: 24rpx; }
.fab { position: fixed; right: 32rpx; bottom: 120rpx; width: 100rpx; height: 100rpx; border-radius: 50%; background:$uni-color-primary; color:#fff; display:flex; align-items:center; justify-content:center; font-size: 52rpx; box-shadow: 0 10rpx 20rpx rgba(0,0,0,0.18); }
</style>

View File

@@ -69,18 +69,18 @@ export default {
}
</script>
<style>
<style lang="scss">
.page { padding-bottom: 140rpx; }
.card { background:#fff; margin: 16rpx; padding: 12rpx 16rpx; border-radius: 16rpx; }
.row { display:flex; justify-content: space-between; padding: 18rpx 8rpx; border-bottom: 1rpx solid #f3f3f3; }
.card { background:$uni-bg-color-grey; margin: 16rpx; padding: 12rpx 16rpx; border-radius: 16rpx; }
.row { display:flex; justify-content: space-between; padding: 18rpx 8rpx; border-bottom: 1rpx solid $uni-border-color; }
.row:last-child { border-bottom: 0; }
.label { color:#666; }
.value { color:#333; max-width: 60%; text-align: right; }
.value-input { color:#333; text-align: right; flex: 1; }
.emp { color:#107e9b; font-weight: 700; }
.bottom { position: fixed; left:0; right:0; bottom:0; background:#fff; padding: 16rpx 24rpx calc(env(safe-area-inset-bottom) + 16rpx); box-shadow: 0 -4rpx 12rpx rgba(0,0,0,0.06); display:flex; gap: 12rpx; }
.primary { flex:1; background: linear-gradient(135deg, #A0E4FF 0%, #17A2C4 100%); color:#fff; border-radius: 999rpx; padding: 20rpx 0; }
.ghost { flex:1; background:#fff; color:#107e9b; border: 2rpx solid #A0E4FF; border-radius: 999rpx; padding: 18rpx 0; }
.label { color:$uni-text-color-grey; }
.value { color:$uni-text-color; max-width: 60%; text-align: right; }
.value-input { color:$uni-text-color; text-align: right; flex: 1; }
.emp { color:$uni-color-primary; font-weight: 700; }
.bottom { position: fixed; left:0; right:0; bottom:0; background:$uni-bg-color-grey; padding: 16rpx 24rpx calc(env(safe-area-inset-bottom) + 16rpx); box-shadow: 0 -4rpx 12rpx rgba(0,0,0,0.10); display:flex; gap: 12rpx; }
.primary { flex:1; background: $uni-color-primary; color:#fff; border-radius: 999rpx; padding: 20rpx 0; }
.ghost { flex:1; background:$uni-bg-color-grey; color:$uni-color-primary; border: 2rpx solid rgba($uni-color-primary, .35); border-radius: 999rpx; padding: 18rpx 0; }
</style>

View File

@@ -47,14 +47,14 @@ export default {
}
</script>
<style>
<style lang="scss">
.page { padding-bottom: 140rpx; }
.field { display:flex; justify-content: space-between; padding: 22rpx 24rpx; background:#fff; border-bottom:1rpx solid #eee; }
.label { color:#666; }
.value { color:#333; text-align: right; flex: 1; }
.textarea { padding: 16rpx 24rpx; background:#fff; margin-top: 12rpx; }
.bottom { position: fixed; left:0; right:0; bottom:0; background:#fff; padding: 16rpx 24rpx calc(env(safe-area-inset-bottom) + 16rpx); box-shadow: 0 -4rpx 12rpx rgba(0,0,0,0.06); }
.primary { width: 100%; background: linear-gradient(135deg, #A0E4FF 0%, #17A2C4 100%); color:#fff; border-radius: 999rpx; padding: 20rpx 0; }
.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; text-align: right; flex: 1; }
.textarea { padding: 16rpx 24rpx; background:$uni-bg-color-grey; margin-top: 12rpx; }
.bottom { position: fixed; left:0; right:0; bottom:0; background:$uni-bg-color-grey; padding: 16rpx 24rpx calc(env(safe-area-inset-bottom) + 16rpx); box-shadow: 0 -4rpx 12rpx rgba(0,0,0,0.10); }
.primary { width: 100%; background: $uni-color-primary; color:#fff; border-radius: 999rpx; padding: 20rpx 0; }
</style>

View File

@@ -51,16 +51,16 @@
}
</script>
<style>
<style lang="scss">
.page { display:flex; flex-direction: column; height: 100vh; }
.search { display:flex; gap: 12rpx; padding: 16rpx; background:#fff; align-items:center; }
.search input { flex:1; background:#f6f6f6; border-radius: 12rpx; padding: 12rpx; }
.search { display:flex; gap: 12rpx; padding: 16rpx; background:$uni-bg-color-grey; align-items:center; }
.search input { flex:1; background:$uni-bg-color-hover; border-radius: 12rpx; padding: 12rpx; color: $uni-text-color; }
.list { flex:1; }
.item { padding: 20rpx 24rpx; background:#fff; border-bottom: 1rpx solid #f1f1f1; }
.name { color:#333; margin-bottom: 6rpx; }
.meta { color:#888; font-size: 24rpx; }
.bottom { position: fixed; left:0; right:0; bottom:0; background:#fff; padding: 16rpx 24rpx calc(env(safe-area-inset-bottom) + 16rpx); box-shadow: 0 -4rpx 12rpx rgba(0,0,0,0.06); }
.primary { width: 100%; background: linear-gradient(135deg, #A0E4FF 0%, #17A2C4 100%); color:#fff; border-radius: 999rpx; padding: 20rpx 0; }
.item { padding: 20rpx 24rpx; background:$uni-bg-color-grey; border-bottom: 1rpx solid $uni-border-color; }
.name { color:$uni-text-color; margin-bottom: 6rpx; }
.meta { color:$uni-text-color-grey; font-size: 24rpx; }
.bottom { position: fixed; left:0; right:0; bottom:0; background:$uni-bg-color-grey; padding: 16rpx 24rpx calc(env(safe-area-inset-bottom) + 16rpx); box-shadow: 0 -4rpx 12rpx rgba(0,0,0,0.10); }
.primary { width: 100%; background: $uni-color-primary; color:#fff; border-radius: 999rpx; padding: 20rpx 0; }
</style>

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>
@@ -132,31 +132,33 @@ export default {
}
</script>
<style>
<style lang="scss">
.page { display:flex; flex-direction: column; height: 100vh; }
.seg { display:flex; background:#fff; }
.seg-item { flex:1; padding: 22rpx 0; text-align:center; color:#666; }
.seg-item.active { color:#18b566; 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:#eef6ff; display:flex; flex-direction: column; }
.biz { flex:0 0 120rpx; display:flex; align-items:center; justify-content:center; color:#4aa3d6; }
.biz.active { background:#3ac1c9; color:#fff; border-radius: 0 16rpx 16rpx 0; }
.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:rgba(76,141,255,0.10); color:$uni-color-primary; font-weight:700; }
.panel { flex:1; display:flex; flex-direction: column; background:#fff; 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:#f6f6f6; border-radius: 12rpx; padding: 12rpx; }
.period { color:#999; font-size: 24rpx; padding: 0 6rpx; }
.total { color:#18b566; font-weight: 700; padding: 6rpx 6rpx 12rpx; }
.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: 10rpx 6rpx 12rpx; background:#fff; }
.list { flex:1; }
.item { display:flex; align-items:center; padding: 20rpx 10rpx; border-bottom: 1rpx solid #f1f1f1; }
.item-left { flex:1; }
.date { color:#999; font-size: 24rpx; }
.name { color:#333; margin: 4rpx 0; font-weight: 600; }
.no { color:#bbb; font-size: 22rpx; }
.amount { color:#333; font-weight: 700; }
.arrow { color:#ccc; font-size: 40rpx; margin-left: 8rpx; }
.empty { height: 50vh; display:flex; align-items:center; justify-content:center; color:#999; }
.fab { position: fixed; right: 30rpx; bottom: 120rpx; width: 100rpx; height: 100rpx; background:#18b566; 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); }
.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; 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:#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,6 +1,20 @@
<template>
<view class="home">
<image class="home-bg" src="/static/metal-bg.jpg" mode="aspectFill"></image>
<!-- 公告栏置顶显示可点击查看详情 -->
<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">
@@ -29,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">
@@ -52,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>
@@ -193,33 +193,24 @@
}
</script>
<style>
<style lang="scss">
.home {
padding-bottom: 140rpx;
position: relative;
/* 明亮奢华背景:金属拉丝纹理覆盖层 + 柔和浅色渐变 */
background:
repeating-linear-gradient(0deg, rgba(180,180,180,0.12) 0rpx, rgba(180,180,180,0.12) 2rpx, rgba(255,255,255,0.0) 2rpx, rgba(255,255,255,0.0) 10rpx),
linear-gradient(180deg, rgba(255, 255, 255, 0.75) 0%, rgba(255, 255, 255, 0.55) 40%, rgba(255, 255, 255, 0.35) 100%);
/* 纯白背景 */
background: #ffffff;
min-height: 100vh;
}
.home-bg {
position: fixed;
left: 0; top: 0; right: 0; bottom: 0;
width: 100%; height: 100%;
pointer-events: none;
z-index: -1;
}
/* 公告栏 */
.notice {
margin: 0 24rpx 24rpx;
padding: 20rpx 22rpx;
border-radius: 20rpx;
background: rgba(255,255,255,0.78);
backdrop-filter: blur(12rpx);
border: 2rpx solid rgba(203, 166, 61, 0.28);
background: #ffffff;
border: 2rpx solid $uni-border-color;
display: flex;
align-items: center;
gap: 16rpx;
@@ -227,35 +218,34 @@
.notice-left {
flex: 0 0 auto;
display: inline-flex; align-items: center; justify-content: center;
min-width: 96rpx; height: 44rpx;
min-width: 100rpx; height: 52rpx;
padding: 0 16rpx;
border-radius: 999rpx;
background: linear-gradient(135deg, #FFE69A, #F4CF62);
color: #3f320f;
font-size: 24rpx;
background: $uni-color-primary;
color: #fff;
font-size: 28rpx;
font-weight: 800;
}
.notice-swiper { height: 72rpx; flex: 1; }
.notice-item { display: flex; align-items: center; gap: 12rpx; min-height: 72rpx; }
.notice-text { color: #4b3e19; font-size: 28rpx; line-height: 36rpx; font-weight: 600; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.notice-tag { color: #B4880F; font-size: 22rpx; padding: 4rpx 10rpx; border-radius: 999rpx; background: rgba(215,167,46,0.18); }
.notice-text { color: $uni-text-color; font-size: 28rpx; line-height: 36rpx; font-weight: 600; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.notice-tag { color: $uni-color-primary; font-size: 22rpx; padding: 4rpx 10rpx; border-radius: 999rpx; background: rgba(76,141,255,0.18); }
/* 分割标题 */
.section-title { display: flex; align-items: center; gap: 16rpx; padding: 10rpx 28rpx 0; }
.section-title::before { content: ''; display: block; width: 8rpx; height: 28rpx; border-radius: 8rpx; background: linear-gradient(180deg, #FFE69A, #D7A72E); }
.section-text { color: #6b5a2a; font-size: 28rpx; font-weight: 700; letter-spacing: 1rpx; }
.section-title::before { content: ''; display: block; width: 8rpx; height: 28rpx; border-radius: 8rpx; background: $uni-color-primary; }
.section-text { color: $uni-text-color; font-size: 30rpx; font-weight: 700; letter-spacing: 1rpx; }
/* 顶部英雄区:浅色玻璃卡片,带金色描边与柔和阴影 */
.hero {
margin: 24rpx;
padding: 32rpx;
border-radius: 28rpx;
background: rgba(255, 255, 255, 0.65);
backdrop-filter: blur(14rpx);
border: 2rpx solid rgba(203, 166, 61, 0.35);
box-shadow: 0 12rpx 28rpx rgba(0, 0, 0, 0.10), 0 0 0 2rpx rgba(255,255,255,0.60) inset;
color: #473c22;
background: #ffffff;
border: 2rpx solid $uni-border-color;
box-shadow: none;
color: $uni-text-color;
}
.hero-top {
@@ -269,67 +259,60 @@
font-size: 42rpx;
font-weight: 700;
letter-spacing: 2rpx;
color: #B4880F; /* 金色标题 */
color: $uni-color-primary;
}
.cta {
padding: 10rpx 22rpx;
border-radius: 999rpx;
background: linear-gradient(135deg, rgba(255, 220, 128, 0.65), rgba(255, 240, 190, 0.65));
border: 2rpx solid rgba(203, 166, 61, 0.45);
box-shadow: 0 6rpx 14rpx rgba(203, 166, 61, 0.25);
background: $uni-color-primary;
border: 2rpx solid $uni-color-primary;
box-shadow: none;
}
.cta-text { color: #5a4712; font-size: 26rpx; }
.cta-text { color: #fff; font-size: 30rpx; font-weight: 700; letter-spacing: 1rpx; }
.kpi { display: flex; }
.kpi-item { flex: 1; }
.kpi-label { opacity: 0.9; font-size: 24rpx; color: #6b5a2a; }
.kpi-value { display: block; margin-top: 12rpx; font-size: 46rpx; font-weight: 800; color: #B4880F; }
/* 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;
color: $uni-text-color-grey;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
line-height: 32rpx; /* 行高>=字体,避免上沿被裁切 */
min-height: 64rpx; /* 两行高度,防止折行挤压 */
}
.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;
padding: 28rpx 20rpx 12rpx;
border-radius: 24rpx;
background: rgba(255,255,255,0.55);
backdrop-filter: blur(10rpx);
border: 2rpx solid rgba(203,166,61,0.22);
box-shadow: 0 8rpx 18rpx rgba(0,0,0,0.06);
background: #ffffff;
border: 2rpx solid $uni-border-color;
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: #6b5a2a; position: relative; }
.icon-squircle {
width: 132rpx; height: 132rpx;
border-radius: 28rpx;
background: linear-gradient(145deg, rgba(255,255,255,0.92), rgba(255,255,255,0.70));
backdrop-filter: blur(12rpx);
border: 2rpx solid rgba(203,166,61,0.22);
box-shadow: 0 10rpx 24rpx rgba(0,0,0,0.10), 0 0 0 2rpx rgba(255,255,255,0.65) inset;
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:
linear-gradient(135deg, rgba(212,175,55,0.18), rgba(255,255,255,0.0)),
repeating-linear-gradient(90deg, rgba(180,150,60,0.35) 0, rgba(180,150,60,0.35) 8rpx, transparent 8rpx, transparent 16rpx),
repeating-linear-gradient(0deg, rgba(180,150,60,0.20) 0, rgba(180,150,60,0.20) 8rpx, transparent 8rpx, transparent 16rpx);
box-shadow: inset 0 0 0 2rpx rgba(203,166,61,0.28);
}
.icon-text { font-size: 46rpx; font-weight: 700; }
.grid-title { display: none; }
.grid-chip { margin-top: 14rpx; padding: 6rpx 14rpx; border-radius: 999rpx; background: rgba(215,167,46,0.16); color: #5a4a1f; font-size: 22rpx; }
/* 新版功能卡片宫格(更现代卡片风) */
.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

@@ -43,17 +43,17 @@ export default {
}
</script>
<style>
<style lang="scss">
.about { padding: 24rpx; }
.hero { padding: 32rpx 24rpx; display: flex; flex-direction: column; align-items: center; gap: 10rpx; }
.logo { width: 160rpx; height: 160rpx; border-radius: 32rpx; }
.title { margin-top: 8rpx; font-size: 36rpx; font-weight: 800; color: #333; }
.subtitle { font-size: 26rpx; color: #888; }
.card { margin-top: 18rpx; background: #fff; border-radius: 16rpx; overflow: hidden; }
.row { display: flex; align-items: center; padding: 24rpx; border-top: 1rpx solid #f2f2f2; }
.label { color: #666; }
.value { margin-left: auto; color: #333; }
.link { margin-left: auto; color: #1aad19; }
.title { margin-top: 8rpx; font-size: 36rpx; font-weight: 800; color: $uni-text-color; }
.subtitle { font-size: 26rpx; color: $uni-text-color-grey; }
.card { margin-top: 18rpx; background: $uni-bg-color-grey; border-radius: 16rpx; overflow: hidden; }
.row { display: flex; align-items: center; padding: 24rpx; border-top: 1rpx solid $uni-border-color; }
.label { color: $uni-text-color-grey; }
.value { margin-left: auto; color: $uni-text-color; }
.link { margin-left: auto; color: $uni-color-primary; }
</style>

View File

@@ -132,20 +132,20 @@ export default {
}
</script>
<style>
<style lang="scss">
.me { padding: 24rpx; }
.card.user { display: flex; gap: 18rpx; padding: 22rpx; background: #fff; border-radius: 16rpx; box-shadow: 0 6rpx 16rpx rgba(0,0,0,0.06); align-items: center; }
.avatar { width: 120rpx; height: 120rpx; border-radius: 60rpx; background: #f5f5f5; }
.card.user { display: flex; gap: 18rpx; padding: 22rpx; background: $uni-bg-color-grey; border-radius: 16rpx; box-shadow: 0 6rpx 16rpx rgba(0,0,0,0.16); align-items: center; }
.avatar { width: 120rpx; height: 120rpx; border-radius: 60rpx; background: $uni-bg-color-hover; }
.meta { display: flex; flex-direction: column; gap: 6rpx; }
.name { font-size: 34rpx; font-weight: 700; color: #333; }
.phone { font-size: 26rpx; color: #888; }
.role { font-size: 22rpx; color: #999; }
.name { font-size: 34rpx; font-weight: 700; color: $uni-text-color; }
.phone { font-size: 26rpx; color: $uni-text-color-grey; }
.role { font-size: 22rpx; color: $uni-text-color-grey; }
.group { margin-top: 24rpx; background: #fff; border-radius: 16rpx; overflow: hidden; }
.group-title { padding: 18rpx 22rpx; font-size: 26rpx; color: #999; background: #fafafa; }
.cell { display: flex; align-items: center; padding: 26rpx 22rpx; border-top: 1rpx solid #f0f0f0; color: #333; }
.cell .desc { margin-left: auto; margin-right: 8rpx; font-size: 22rpx; color: #999; }
.cell .arrow { margin-left: auto; color: #bbb; }
.group { margin-top: 24rpx; background: $uni-bg-color-grey; border-radius: 16rpx; overflow: hidden; }
.group-title { padding: 18rpx 22rpx; font-size: 26rpx; color: $uni-text-color-grey; background: $uni-bg-color-hover; }
.cell { display: flex; align-items: center; padding: 26rpx 22rpx; border-top: 1rpx solid $uni-border-color; color: $uni-text-color; }
.cell .desc { margin-left: auto; margin-right: 8rpx; font-size: 22rpx; color: $uni-text-color-grey; }
.cell .arrow { margin-left: auto; color: #99a2b3; }
.cell.danger { color: #dd524d; justify-content: center; font-weight: 700; }
</style>

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>
@@ -344,37 +361,51 @@
}
</script>
<style>
<style lang="scss">
.order { padding-bottom: 140rpx; }
.tabs { display: flex; justify-content: space-around; padding: 16rpx 24rpx; }
.tabs text { color: #666; }
.tabs text.active { color: #333; font-weight: 700; }
.tabs text { color: $uni-text-color-grey; }
.tabs text.active { color: $uni-text-color; font-weight: 700; }
.subtabs { display: flex; gap: 16rpx; padding: 0 24rpx 16rpx; }
.subbtn { padding: 10rpx 20rpx; border-radius: 999rpx; background: #f4f4f4; color: #666; }
.subbtn.active { background: #ffe69a; color: #3f320f; }
.field { display:flex; justify-content: space-between; padding: 22rpx 24rpx; background: #fff; border-bottom: 1rpx solid #eee; }
.label { color:#666; }
.value { color:#333; }
.summary { display:flex; justify-content: space-between; padding: 22rpx 24rpx; color:#333; }
.add { margin: 24rpx auto; width: 120rpx; height: 120rpx; border-radius: 20rpx; background: #c7eef7; color:#16a1c4; font-size: 72rpx; display:flex; align-items:center; justify-content:center; }
.empty { display:flex; flex-direction: column; align-items:center; padding: 60rpx 0; color:#888; }
.empty-img { width: 220rpx; margin-bottom: 20rpx; }
.subbtn { padding: 10rpx 20rpx; border-radius: 999rpx; background: $uni-bg-color-hover; color: $uni-text-color-grey; }
.subbtn.active { background: $uni-color-primary; color: #fff; }
.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; 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: 160rpx; margin-bottom: 16rpx; }
.empty-text { margin-bottom: 8rpx; }
.list { background:#fff; }
.row { display:grid; grid-template-columns: 1.5fr 1fr 1fr 1fr; gap: 12rpx; padding: 16rpx 12rpx; align-items:center; border-bottom: 1rpx solid #f3f3f3; }
.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:#333; }
.bottom { position: fixed; left:0; right:0; bottom:0; background:#fff; padding: 16rpx 24rpx calc(env(safe-area-inset-bottom) + 16rpx); box-shadow: 0 -4rpx 12rpx rgba(0,0,0,0.06); }
.primary { width: 100%; background: linear-gradient(135deg, #FFE69A 0%, #F4CF62 45%, #D7A72E 100%); color:#493c1b; border-radius: 999rpx; padding: 20rpx 0; font-weight:800; }
.col.amount { text-align:right; padding-right: 12rpx; color:$uni-text-color; }
.bottom { position: fixed; left:0; right:0; bottom:0; background:$uni-bg-color-grey; padding: 16rpx 24rpx calc(env(safe-area-inset-bottom) + 16rpx); box-shadow: 0 -4rpx 12rpx rgba(0,0,0,0.16); }
.primary { width: 100%; background: $uni-color-primary; color:#fff; border-radius: 999rpx; padding: 20rpx 0; font-weight:800; }
/* 收款/付款页样式 */
.pay-row .pay-input { text-align: right; color:#333; }
.textarea { position: relative; padding: 16rpx 24rpx; background:#fff; border-top: 1rpx solid #eee; }
.amount-badge { position: absolute; right: 24rpx; top: -36rpx; background: #d1f0ff; color:#107e9b; padding: 8rpx 16rpx; border-radius: 12rpx; font-size: 24rpx; }
.date-mini { position: absolute; right: 24rpx; bottom: 20rpx; color:#666; font-size: 24rpx; }
.pay-row .pay-input { text-align: right; color:$uni-text-color; }
.textarea { position: relative; padding: 16rpx 24rpx; background:$uni-bg-color-grey; border-top: 1rpx solid $uni-border-color; }
.amount-badge { position: absolute; right: 24rpx; top: -36rpx; background: $uni-color-primary; color:#fff; padding: 8rpx 16rpx; border-radius: 12rpx; font-size: 24rpx; }
.date-mini { position: absolute; right: 24rpx; bottom: 20rpx; color:$uni-text-color-grey; font-size: 24rpx; }
/* 分类chips样式选中后文字变红 */
.chips { display:flex; flex-wrap: wrap; gap: 12rpx; padding: 12rpx 24rpx; }
.chip { padding: 10rpx 20rpx; border-radius: 999rpx; background: #f4f4f4; color:#666; }
.chip.active { color: #e54d42; }
.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>
@@ -199,15 +204,20 @@ export default {
}
</script>
<style>
.page { background:#f6f6f6; height: 100vh; }
.card { background:#fff; margin: 16rpx; padding: 16rpx; border-radius: 12rpx; }
<style lang="scss">
.page { background:$uni-bg-color; height: 100vh; }
.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:#666; }
.row input { flex:1; background:#f7f7f7; border-radius: 10rpx; padding: 12rpx; }
.picker { padding: 8rpx 12rpx; background:#f0f0f0; border-radius: 10rpx; color:#666; margin-left: 8rpx; }
.label { width: 180rpx; color:$uni-text-color-grey; }
.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:#fff; 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>

View File

@@ -113,23 +113,23 @@ export default {
}
</script>
<style>
<style lang="scss">
.page { display:flex; flex-direction: column; height: 100vh; }
.tabs { display:flex; background:#fff; }
.tab { flex:1; text-align:center; padding: 20rpx 0; color:#666; }
.tab.active { color:#18b566; font-weight: 600; }
.search { display:flex; gap: 12rpx; padding: 16rpx; background:#fff; align-items: center; }
.search input { flex:1; background:#f6f6f6; border-radius: 12rpx; padding: 12rpx; }
.picker { padding: 8rpx 12rpx; background:#f0f0f0; border-radius: 10rpx; color:#666; }
.tabs { display:flex; background:$uni-bg-color-grey; }
.tab { flex:1; text-align:center; padding: 20rpx 0; color:$uni-text-color-grey; }
.tab.active { color:$uni-color-primary; font-weight: 600; }
.search { display:flex; gap: 12rpx; padding: 16rpx; background:$uni-bg-color-grey; align-items: center; }
.search input { flex:1; background:$uni-bg-color-hover; border-radius: 12rpx; padding: 12rpx; color: $uni-text-color; }
.picker { padding: 8rpx 12rpx; background:$uni-bg-color-hover; border-radius: 10rpx; color:$uni-text-color-grey; }
.list { flex:1; }
.item { display:flex; padding: 20rpx; background:#fff; border-bottom: 1rpx solid #f1f1f1; }
.thumb { width: 120rpx; height: 120rpx; border-radius: 12rpx; margin-right: 16rpx; background:#fafafa; }
.item { display:flex; padding: 20rpx; background:$uni-bg-color-grey; border-bottom: 1rpx solid $uni-border-color; }
.thumb { width: 120rpx; height: 120rpx; border-radius: 12rpx; margin-right: 16rpx; background:$uni-bg-color-hover; }
.content { flex:1; }
.name { color:#333; margin-bottom: 6rpx; font-weight: 600; }
.meta { color:#888; font-size: 24rpx; }
.price { margin-left: 20rpx; color:#f60; }
.empty { height: 60vh; display:flex; align-items:center; justify-content:center; color:#999; }
.fab { position: fixed; right: 30rpx; bottom: 120rpx; width: 100rpx; height: 100rpx; background:#18b566; 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); }
.name { color:$uni-text-color; margin-bottom: 6rpx; font-weight: 600; }
.meta { color:$uni-text-color-grey; font-size: 24rpx; }
.price { margin-left: 20rpx; color:$uni-color-primary; }
.empty { height: 60vh; 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); }
</style>

View File

@@ -37,14 +37,14 @@
}
</script>
<style>
<style lang="scss">
.page { display:flex; flex-direction: column; height: 100vh; }
.search { display:flex; gap: 12rpx; padding: 16rpx; background:#fff; }
.search input { flex:1; background:#f6f6f6; border-radius: 12rpx; padding: 12rpx; }
.search { display:flex; gap: 12rpx; padding: 16rpx; background:$uni-bg-color-grey; }
.search input { flex:1; background:$uni-bg-color-hover; border-radius: 12rpx; padding: 12rpx; color:$uni-text-color; }
.list { flex:1; }
.item { padding: 20rpx 24rpx; background:#fff; border-bottom: 1rpx solid #f1f1f1; }
.name { color:#333; margin-bottom: 6rpx; }
.meta { color:#888; font-size: 24rpx; }
.item { padding: 20rpx 24rpx; background:$uni-bg-color-grey; border-bottom: 1rpx solid $uni-border-color; }
.name { color:$uni-text-color; margin-bottom: 6rpx; }
.meta { color:$uni-text-color-grey; font-size: 24rpx; }
</style>

View File

@@ -267,25 +267,25 @@ export default {
}
</script>
<style>
<style lang="scss">
.report { padding: 20rpx; }
.modes { display: flex; gap: 12rpx; margin-bottom: 14rpx; }
.mode-tab { flex: 1; text-align: center; padding: 16rpx 0; border-radius: 999rpx; background: #f4f4f4; color: #666; border: 1rpx solid #e9e9e9; }
.mode-tab.active { background: #1aad19; color: #fff; border-color: #1aad19; font-weight: 700; }
.toolbar { display: flex; align-items: center; gap: 8rpx; background: #fff; padding: 14rpx 16rpx; border-radius: 12rpx; }
.date { padding: 10rpx 16rpx; border: 1rpx solid #eee; border-radius: 8rpx; }
.mode-tab { flex: 1; text-align: center; padding: 16rpx 0; border-radius: 999rpx; background: $uni-bg-color-hover; color: $uni-text-color-grey; border: 1rpx solid $uni-border-color; }
.mode-tab.active { background: $uni-color-primary; color: #fff; border-color: $uni-color-primary; font-weight: 700; }
.toolbar { display: flex; align-items: center; gap: 8rpx; background: $uni-bg-color-grey; padding: 14rpx 16rpx; border-radius: 12rpx; }
.date { padding: 10rpx 16rpx; border: 1rpx solid $uni-border-color; border-radius: 8rpx; color: $uni-text-color; }
.tabs { display: flex; gap: 16rpx; margin-top: 14rpx; }
.tab { padding: 12rpx 18rpx; border-radius: 999rpx; background: #f4f4f4; color: #666; }
.tab.active { background: #1aad19; color: #fff; }
.tab { padding: 12rpx 18rpx; border-radius: 999rpx; background: $uni-bg-color-hover; color: $uni-text-color-grey; }
.tab.active { background: $uni-color-primary; color: #fff; }
.summary { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8rpx; margin-top: 14rpx; }
.summary .item { background: #fff; border-radius: 12rpx; padding: 16rpx; }
.summary .label { font-size: 22rpx; color: #888; }
.summary .value { display: block; margin-top: 8rpx; font-weight: 700; color: #333; }
.card { margin-top: 16rpx; background: #fff; border-radius: 12rpx; padding: 16rpx; }
.summary .item { background: $uni-bg-color-grey; border-radius: 12rpx; padding: 16rpx; }
.summary .label { font-size: 22rpx; color: $uni-text-color-grey; }
.summary .value { display: block; margin-top: 8rpx; font-weight: 700; color: $uni-text-color; }
.card { margin-top: 16rpx; background: $uni-bg-color-grey; border-radius: 12rpx; padding: 16rpx; }
.row-head { display: flex; align-items: center; gap: 12rpx; }
.thumb { width: 72rpx; height: 72rpx; border-radius: 8rpx; background: #f2f2f2; }
.title { font-size: 28rpx; font-weight: 700; }
.row-body { margin-top: 10rpx; color: #666; }
.thumb { width: 72rpx; height: 72rpx; border-radius: 8rpx; background: $uni-bg-color-hover; }
.title { font-size: 28rpx; font-weight: 700; color: $uni-text-color; }
.row-body { margin-top: 10rpx; color: $uni-text-color-grey; }
</style>

View File

@@ -37,14 +37,14 @@ export default {
}
</script>
<style>
<style lang="scss">
.page { padding-bottom: 140rpx; }
.field { display:flex; justify-content: space-between; padding: 22rpx 24rpx; background:#fff; border-bottom:1rpx solid #eee; }
.label { color:#666; }
.value { color:#333; text-align: right; flex: 1; }
.textarea { padding: 16rpx 24rpx; background:#fff; margin-top: 12rpx; }
.bottom { position: fixed; left:0; right:0; bottom:0; background:#fff; padding: 16rpx 24rpx calc(env(safe-area-inset-bottom) + 16rpx); box-shadow: 0 -4rpx 12rpx rgba(0,0,0,0.06); }
.primary { width: 100%; background: linear-gradient(135deg, #A0E4FF 0%, #17A2C4 100%); color:#fff; border-radius: 999rpx; padding: 20rpx 0; }
.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; text-align: right; flex: 1; }
.textarea { padding: 16rpx 24rpx; background:$uni-bg-color-grey; margin-top: 12rpx; }
.bottom { position: fixed; left:0; right:0; bottom:0; background:$uni-bg-color-grey; padding: 16rpx 24rpx calc(env(safe-area-inset-bottom) + 16rpx); box-shadow: 0 -4rpx 12rpx rgba(0,0,0,0.10); }
.primary { width: 100%; background: $uni-color-primary; color:#fff; border-radius: 999rpx; padding: 20rpx 0; }
</style>

Binary file not shown.

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

@@ -15,26 +15,26 @@
/* 颜色变量 */
/* 行为相关颜色 */
$uni-color-primary: #D7A72E; /* 奢华金色主色 */
$uni-color-primary: #4C8DFF; /* 藏青系主色(高亮) */
$uni-color-success: #4cd964;
$uni-color-warning: #f0ad4e;
$uni-color-error: #dd524d;
/* 文字基本颜色 */
$uni-text-color:#333;//基本色
$uni-text-color-inverse:#fff;//反色
$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息
$uni-text-color:#111;//基本色(更高对比深色文字)
$uni-text-color-inverse:#fff;//反色(浅色背景下的反向场景)
$uni-text-color-grey:#444;//辅助灰(提升对比度)
$uni-text-color-placeholder: #808080;
$uni-text-color-disable:#c0c0c0;
/* 背景颜色 */
$uni-bg-color:#ffffff;
$uni-bg-color-grey:#f8f8f8;
$uni-bg-color:#ffffff; // 浅色基础背景
$uni-bg-color-grey:#ffffff; // 面板/卡片统一白底
$uni-bg-color-hover:#f1f1f1;//点击状态颜色
$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色
$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色回调为浅色适配
/* 边框颜色 */
$uni-border-color:#c8c7cc;
$uni-border-color:#e5e7eb;
/* 尺寸变量 */
@@ -68,7 +68,7 @@ $uni-spacing-col-lg: 12px;
$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
/* 文章场景相关 */
$uni-color-title: #2C405A; // 文章标题颜色
$uni-color-title: #2C405A; // 文章标题颜色(深色)
$uni-font-size-title:20px;
$uni-color-subtitle: #555555; // 二级标题颜色
$uni-font-size-subtitle:26px;

View File

@@ -0,0 +1,11 @@
var __getOwnPropNames = Object.getOwnPropertyNames;
var __commonJS = (cb, mod) => function __require() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
var require_app_css = __commonJS({
"app.css.js"(exports) {
const _style_0 = {};
exports.styles = [_style_0];
}
});
export default require_app_css();

View File

@@ -0,0 +1,2 @@
Promise.resolve("./app.css.js").then(() => {
});

View File

@@ -1 +1 @@
{"version":3,"file":"app.js","sources":["App.vue","main.js"],"sourcesContent":["<script>\r\n\texport default {\r\n\t\tonLaunch: function() {\r\n\t\t\tconsole.log('App Launch')\r\n\t\t},\r\n\t\tonShow: function() {\r\n\t\t\tconsole.log('App Show')\r\n\t\t},\r\n\t\tonHide: function() {\r\n\t\t\tconsole.log('App Hide')\r\n\t\t}\r\n\t}\r\n</script>\r\n\r\n<style>\r\n\t/*每个页面公共css */\r\n</style>\r\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,MAAA,MAAA,OAAA,gBAAY,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/metal-bg.jpg","static/logo.png"],"sourcesContent":["export default \"/static/metal-bg.jpg\"","export default \"__VITE_ASSET__46719607__\""],"names":[],"mappings":";AAAA,MAAe,eAAA;ACAf,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;;;"}

View File

@@ -1 +1 @@
{"version":3,"file":"config.js","sources":["common/config.js"],"sourcesContent":["// 统一配置:禁止在业务代码中硬编码\n// 优先级:环境变量(Vite/HBuilderX 构建注入) > 本地存储 > 默认值\n\nconst envBaseUrl = (typeof process !== 'undefined' && process.env && (process.env.VITE_APP_API_BASE_URL || process.env.API_BASE_URL)) || '';\nconst storageBaseUrl = typeof uni !== 'undefined' ? (uni.getStorageSync('API_BASE_URL') || '') : '';\nconst fallbackBaseUrl = 'http://192.168.31.193:8080';\n\nexport const API_BASE_URL = (envBaseUrl || storageBaseUrl || fallbackBaseUrl).replace(/\\/$/, '');\n\n// 多地址候选(按优先级顺序,自动去重与去尾斜杠)\nconst candidateBases = [envBaseUrl, storageBaseUrl, fallbackBaseUrl, 'http://127.0.0.1:8080', 'http://localhost:8080'];\nexport const API_BASE_URL_CANDIDATES = Array.from(new Set(candidateBases.filter(Boolean))).map(u => String(u).replace(/\\/$/, ''));\n\nconst envShopId = (typeof process !== 'undefined' && process.env && (process.env.VITE_APP_SHOP_ID || process.env.SHOP_ID)) || '';\nconst storageShopId = typeof uni !== 'undefined' ? (uni.getStorageSync('SHOP_ID') || '') : '';\nexport const SHOP_ID = Number(envShopId || storageShopId || 1);\n\n\n// 默认用户(可移除):\n// - 用途:开发/演示环境自动将用户固定为“张老板”id=2\n// - 开关优先级:环境变量 > 本地存储 > 默认值\n// - 生产默认关闭false开发可通过本地存储或环境变量开启\nconst envEnableDefaultUser = (typeof process !== 'undefined' && process.env && (process.env.VITE_APP_ENABLE_DEFAULT_USER || process.env.ENABLE_DEFAULT_USER)) || '';\nconst storageEnableDefaultUser = typeof uni !== 'undefined' ? (uni.getStorageSync('ENABLE_DEFAULT_USER') || '') : '';\nexport const ENABLE_DEFAULT_USER = String(envEnableDefaultUser || storageEnableDefaultUser || 'true').toLowerCase() === 'true';\n\nconst envDefaultUserId = (typeof process !== 'undefined' && process.env && (process.env.VITE_APP_DEFAULT_USER_ID || process.env.DEFAULT_USER_ID)) || '';\nconst storageDefaultUserId = typeof uni !== 'undefined' ? (uni.getStorageSync('DEFAULT_USER_ID') || '') : '';\nexport const DEFAULT_USER_ID = Number(envDefaultUserId || storageDefaultUserId || 2);\n\n\n"],"names":["uni"],"mappings":";;AAGA,MAAM,aAAc,OAAO,YAAY,eAAe,QAAQ,QAAQ,QAAQ,IAAI,yBAAyB,QAAQ,IAAI,iBAAkB;AACzI,MAAM,iBAAiB,OAAOA,cAAG,UAAK,cAAeA,cAAAA,MAAI,eAAe,cAAc,KAAK,KAAM;AACjG,MAAM,kBAAkB;AAEZ,MAAC,gBAAgB,cAAc,kBAAkB,iBAAiB,QAAQ,OAAO,EAAE;AAG/F,MAAM,iBAAiB,CAAC,YAAY,gBAAgB,iBAAiB,yBAAyB,uBAAuB;AACzG,MAAC,0BAA0B,MAAM,KAAK,IAAI,IAAI,eAAe,OAAO,OAAO,CAAC,CAAC,EAAE,IAAI,OAAK,OAAO,CAAC,EAAE,QAAQ,OAAO,EAAE,CAAC;AAEhI,MAAM,YAAa,OAAO,YAAY,eAAe,QAAQ,QAAQ,QAAQ,IAAI,oBAAoB,QAAQ,IAAI,YAAa;AAC9H,MAAM,gBAAgB,OAAOA,cAAG,UAAK,cAAeA,cAAAA,MAAI,eAAe,SAAS,KAAK,KAAM;AAC/E,MAAC,UAAU,OAAO,aAAa,iBAAiB,CAAC;AAO7D,MAAM,uBAAwB,OAAO,YAAY,eAAe,QAAQ,QAAQ,QAAQ,IAAI,gCAAgC,QAAQ,IAAI,wBAAyB;AACjK,MAAM,2BAA2B,OAAOA,cAAG,UAAK,cAAeA,cAAAA,MAAI,eAAe,qBAAqB,KAAK,KAAM;AACtG,MAAC,sBAAsB,OAAO,wBAAwB,4BAA4B,MAAM,EAAE,YAAW,MAAO;AAExH,MAAM,mBAAoB,OAAO,YAAY,eAAe,QAAQ,QAAQ,QAAQ,IAAI,4BAA4B,QAAQ,IAAI,oBAAqB;AACrJ,MAAM,uBAAuB,OAAOA,cAAG,UAAK,cAAeA,cAAAA,MAAI,eAAe,iBAAiB,KAAK,KAAM;AAC9F,MAAC,kBAAkB,OAAO,oBAAoB,wBAAwB,CAAC;;;;;;"}
{"version":3,"file":"config.js","sources":["common/config.js"],"sourcesContent":["// 统一配置:禁止在业务代码中硬编码\r\n// 优先级:环境变量(Vite/HBuilderX 构建注入) > 本地存储 > 默认值\r\n\r\nconst envBaseUrl = (typeof process !== 'undefined' && process.env && (process.env.VITE_APP_API_BASE_URL || process.env.API_BASE_URL)) || '';\r\nconst storageBaseUrl = typeof uni !== 'undefined' ? (uni.getStorageSync('API_BASE_URL') || '') : '';\r\nconst fallbackBaseUrl = 'http://192.168.31.193:8080';\r\n\r\nexport const API_BASE_URL = (envBaseUrl || storageBaseUrl || fallbackBaseUrl).replace(/\\/$/, '');\r\n\r\n// 多地址候选(按优先级顺序,自动去重与去尾斜杠)\r\nconst candidateBases = [envBaseUrl, storageBaseUrl, fallbackBaseUrl, 'http://127.0.0.1:8080', 'http://localhost:8080'];\r\nexport const API_BASE_URL_CANDIDATES = Array.from(new Set(candidateBases.filter(Boolean))).map(u => String(u).replace(/\\/$/, ''));\r\n\r\nconst envShopId = (typeof process !== 'undefined' && process.env && (process.env.VITE_APP_SHOP_ID || process.env.SHOP_ID)) || '';\r\nconst storageShopId = typeof uni !== 'undefined' ? (uni.getStorageSync('SHOP_ID') || '') : '';\r\nexport const SHOP_ID = Number(envShopId || storageShopId || 1);\r\n\r\n\r\n// 默认用户(可移除):\r\n// - 用途:开发/演示环境自动将用户固定为“张老板”id=2\r\n// - 开关优先级:环境变量 > 本地存储 > 默认值\r\n// - 生产默认关闭false开发可通过本地存储或环境变量开启\r\nconst envEnableDefaultUser = (typeof process !== 'undefined' && process.env && (process.env.VITE_APP_ENABLE_DEFAULT_USER || process.env.ENABLE_DEFAULT_USER)) || '';\r\nconst storageEnableDefaultUser = typeof uni !== 'undefined' ? (uni.getStorageSync('ENABLE_DEFAULT_USER') || '') : '';\r\nexport const ENABLE_DEFAULT_USER = String(envEnableDefaultUser || storageEnableDefaultUser || 'true').toLowerCase() === 'true';\r\n\r\nconst envDefaultUserId = (typeof process !== 'undefined' && process.env && (process.env.VITE_APP_DEFAULT_USER_ID || process.env.DEFAULT_USER_ID)) || '';\r\nconst storageDefaultUserId = typeof uni !== 'undefined' ? (uni.getStorageSync('DEFAULT_USER_ID') || '') : '';\r\nexport const DEFAULT_USER_ID = Number(envDefaultUserId || storageDefaultUserId || 2);\r\n\r\n\r\n"],"names":["uni"],"mappings":";;AAGA,MAAM,aAAc,OAAO,YAAY,eAAe,QAAQ,QAAQ,QAAQ,IAAI,yBAAyB,QAAQ,IAAI,iBAAkB;AACzI,MAAM,iBAAiB,OAAOA,cAAG,UAAK,cAAeA,cAAAA,MAAI,eAAe,cAAc,KAAK,KAAM;AACjG,MAAM,kBAAkB;AAEZ,MAAC,gBAAgB,cAAc,kBAAkB,iBAAiB,QAAQ,OAAO,EAAE;AAG/F,MAAM,iBAAiB,CAAC,YAAY,gBAAgB,iBAAiB,yBAAyB,uBAAuB;AACzG,MAAC,0BAA0B,MAAM,KAAK,IAAI,IAAI,eAAe,OAAO,OAAO,CAAC,CAAC,EAAE,IAAI,OAAK,OAAO,CAAC,EAAE,QAAQ,OAAO,EAAE,CAAC;AAEhI,MAAM,YAAa,OAAO,YAAY,eAAe,QAAQ,QAAQ,QAAQ,IAAI,oBAAoB,QAAQ,IAAI,YAAa;AAC9H,MAAM,gBAAgB,OAAOA,cAAG,UAAK,cAAeA,cAAAA,MAAI,eAAe,SAAS,KAAK,KAAM;AAC/E,MAAC,UAAU,OAAO,aAAa,iBAAiB,CAAC;AAO7D,MAAM,uBAAwB,OAAO,YAAY,eAAe,QAAQ,QAAQ,QAAQ,IAAI,gCAAgC,QAAQ,IAAI,wBAAyB;AACjK,MAAM,2BAA2B,OAAOA,cAAG,UAAK,cAAeA,cAAAA,MAAI,eAAe,qBAAqB,KAAK,KAAM;AACtG,MAAC,sBAAsB,OAAO,wBAAwB,4BAA4B,MAAM,EAAE,YAAW,MAAO;AAExH,MAAM,mBAAoB,OAAO,YAAY,eAAe,QAAQ,QAAQ,QAAQ,IAAI,4BAA4B,QAAQ,IAAI,oBAAqB;AACrJ,MAAM,uBAAuB,OAAOA,cAAG,UAAK,cAAeA,cAAAA,MAAI,eAAe,iBAAiB,KAAK,KAAM;AAC9F,MAAC,kBAAkB,OAAO,oBAAoB,wBAAwB,CAAC;;;;;;"}

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

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
{"version":3,"file":"select.js","sources":["pages/account/select.vue","../../../../Downloads/HBuilderX.4.76.2025082103/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvYWNjb3VudC9zZWxlY3QudnVl"],"sourcesContent":["<template>\r\n\t<view class=\"page\">\r\n\t\t<scroll-view scroll-y class=\"list\">\r\n\t\t\t<view class=\"item\" v-for=\"a in accounts\" :key=\"a.id\" @click=\"select(a)\">\r\n\t\t\t\t<view class=\"name\">{{ a.name }}</view>\r\n\t\t\t\t<view class=\"meta\">{{ typeLabel(a.type) }} · 余额:{{ a.balance?.toFixed ? a.balance.toFixed(2) : a.balance }}</view>\r\n\t\t\t</view>\r\n\t\t</scroll-view>\r\n\t\t<view class=\"fab\" @click=\"create\"></view>\r\n\t</view>\r\n</template>\r\n\r\n<script>\r\n\timport { get } from '../../common/http.js'\r\n\tconst TYPE_MAP = { cash: '现金', bank: '银行', alipay: '支付宝', wechat: '微信', other: '其他' }\r\n\texport default {\r\n\t\tdata() { return { accounts: [], mode: 'view' } },\r\n\t\tasync onLoad(q) {\r\n\t\t\tthis.mode = (q && q.mode) || 'view'\r\n\t\t\ttry {\r\n\t\t\t\tconst res = await get('/api/accounts')\r\n\t\t\t\tthis.accounts = Array.isArray(res) ? res : (res?.list || [])\r\n\t\t\t} catch(e) { uni.showToast({ title: '加载失败', icon: 'none' }) }\r\n\t\t},\r\n\t\tmethods: {\r\n\t\t\tselect(a) {\r\n\t\t\t\tif (this.mode === 'pick') {\r\n\t\t\t\t\tconst opener = getCurrentPages()[getCurrentPages().length-2]\r\n\t\t\t\t\tif (opener && opener.$vm) {\r\n\t\t\t\t\t\topener.$vm.selectedAccountId = a.id\r\n\t\t\t\t\t\topener.$vm.selectedAccountName = a.name\r\n\t\t\t\t\t}\r\n\t\t\t\t\tuni.navigateBack()\r\n\t\t\t\t} else {\r\n\t\t\t\t\tuni.navigateTo({ url: `/pages/account/ledger?id=${a.id}` })\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tcreate() { uni.navigateTo({ url: '/pages/account/form' }) },\r\n\t\t\ttypeLabel(t) { return TYPE_MAP[t] || t }\r\n\t\t}\r\n\t}\r\n</script>\r\n\r\n<style>\r\n\t.page { display:flex; flex-direction: column; height: 100vh; }\r\n\t.list { flex:1; }\r\n\t.item { padding: 20rpx 24rpx; background:#fff; border-bottom: 1rpx solid #f1f1f1; }\r\n\t.name { color:#333; margin-bottom: 6rpx; }\r\n\t.meta { color:#888; font-size: 24rpx; }\r\n\t.fab { position: fixed; right: 32rpx; bottom: 120rpx; width: 100rpx; height: 100rpx; border-radius: 50%; background:#3c9cff; color:#fff; display:flex; align-items:center; justify-content:center; font-size: 52rpx; box-shadow: 0 10rpx 20rpx rgba(0,0,0,0.18); }\r\n</style>\r\n\r\n\r\n\r\n","import MiniProgramPage from 'C:/Users/21826/Desktop/Wj/PartsInquiry/frontend/pages/account/select.vue'\nwx.createPage(MiniProgramPage)"],"names":["get","uni"],"mappings":";;;AAcC,MAAM,WAAW,EAAE,MAAM,MAAM,MAAM,MAAM,QAAQ,OAAO,QAAQ,MAAM,OAAO,KAAK;AACpF,MAAK,YAAU;AAAA,EACd,OAAO;AAAE,WAAO,EAAE,UAAU,CAAA,GAAI,MAAM;EAAU;AAAA,EAChD,MAAM,OAAO,GAAG;AACf,SAAK,OAAQ,KAAK,EAAE,QAAS;AAC7B,QAAI;AACH,YAAM,MAAM,MAAMA,YAAG,IAAC,eAAe;AACrC,WAAK,WAAW,MAAM,QAAQ,GAAG,IAAI,OAAO,2BAAK,SAAQ;aAClD,GAAG;AAAEC,oBAAAA,MAAI,UAAU,EAAE,OAAO,QAAQ,MAAM,OAAO,CAAC;AAAA,IAAE;AAAA,EAC5D;AAAA,EACD,SAAS;AAAA,IACR,OAAO,GAAG;AACT,UAAI,KAAK,SAAS,QAAQ;AACzB,cAAM,SAAS,gBAAiB,EAAC,gBAAe,EAAG,SAAO,CAAC;AAC3D,YAAI,UAAU,OAAO,KAAK;AACzB,iBAAO,IAAI,oBAAoB,EAAE;AACjC,iBAAO,IAAI,sBAAsB,EAAE;AAAA,QACpC;AACAA,sBAAAA,MAAI,aAAa;AAAA,aACX;AACNA,4BAAI,WAAW,EAAE,KAAK,4BAA4B,EAAE,EAAE,IAAI;AAAA,MAC3D;AAAA,IACA;AAAA,IACD,SAAS;AAAEA,oBAAAA,MAAI,WAAW,EAAE,KAAK,sBAAoB,CAAG;AAAA,IAAG;AAAA,IAC3D,UAAU,GAAG;AAAE,aAAO,SAAS,CAAC,KAAK;AAAA,IAAE;AAAA,EACxC;AACD;;;;;;;;;;;;;;;;;ACvCD,GAAG,WAAW,eAAe;"}
{"version":3,"file":"select.js","sources":["pages/account/select.vue","../../../软件/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvYWNjb3VudC9zZWxlY3QudnVl"],"sourcesContent":["<template>\n\t<view class=\"page\">\n\t\t<scroll-view scroll-y class=\"list\">\n\t\t\t<view class=\"item\" v-for=\"a in accounts\" :key=\"a.id\" @click=\"select(a)\">\n\t\t\t\t<view class=\"name\">{{ a.name }}</view>\n\t\t\t\t<view class=\"meta\">{{ typeLabel(a.type) }} · 余额:{{ a.balance?.toFixed ? a.balance.toFixed(2) : a.balance }}</view>\n\t\t\t</view>\n\t\t</scroll-view>\n\t\t<view class=\"fab\" @click=\"create\"></view>\n\t</view>\n</template>\n\n<script>\n\timport { get } from '../../common/http.js'\n\tconst TYPE_MAP = { cash: '现金', bank: '银行', alipay: '支付宝', wechat: '微信', other: '其他' }\n\texport default {\n\t\tdata() { return { accounts: [], mode: 'view' } },\n\t\tasync onLoad(q) {\n\t\t\tthis.mode = (q && q.mode) || 'view'\n\t\t\ttry {\n\t\t\t\tconst res = await get('/api/accounts')\n\t\t\t\tthis.accounts = Array.isArray(res) ? res : (res?.list || [])\n\t\t\t} catch(e) { uni.showToast({ title: '加载失败', icon: 'none' }) }\n\t\t},\n\t\tmethods: {\n\t\t\tselect(a) {\n\t\t\t\tif (this.mode === 'pick') {\n\t\t\t\t\tconst opener = getCurrentPages()[getCurrentPages().length-2]\n\t\t\t\t\tif (opener && opener.$vm) {\n\t\t\t\t\t\topener.$vm.selectedAccountId = a.id\n\t\t\t\t\t\topener.$vm.selectedAccountName = a.name\n\t\t\t\t\t}\n\t\t\t\t\tuni.navigateBack()\n\t\t\t\t} else {\n\t\t\t\t\tuni.navigateTo({ url: `/pages/account/ledger?id=${a.id}` })\n\t\t\t\t}\n\t\t\t},\n\t\t\tcreate() { uni.navigateTo({ url: '/pages/account/form' }) },\n\t\t\ttypeLabel(t) { return TYPE_MAP[t] || t }\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\">\n\t.page { display:flex; flex-direction: column; height: 100vh; }\n\t.list { flex:1; }\n\t.item { padding: 20rpx 24rpx; background:$uni-bg-color-grey; border-bottom: 1rpx solid $uni-border-color; }\n\t.name { color:$uni-text-color; margin-bottom: 6rpx; }\n\t.meta { color:$uni-text-color-grey; font-size: 24rpx; }\n\t.fab { position: fixed; right: 32rpx; bottom: 120rpx; width: 100rpx; height: 100rpx; border-radius: 50%; background:$uni-color-primary; color:#fff; display:flex; align-items:center; justify-content:center; font-size: 52rpx; box-shadow: 0 10rpx 20rpx rgba(0,0,0,0.18); }\n</style>\n\n\n\n","import MiniProgramPage from 'D:/wx/PartsInquiry/frontend/pages/account/select.vue'\nwx.createPage(MiniProgramPage)"],"names":["get","uni"],"mappings":";;;AAcC,MAAM,WAAW,EAAE,MAAM,MAAM,MAAM,MAAM,QAAQ,OAAO,QAAQ,MAAM,OAAO,KAAK;AACpF,MAAK,YAAU;AAAA,EACd,OAAO;AAAE,WAAO,EAAE,UAAU,CAAA,GAAI,MAAM;EAAU;AAAA,EAChD,MAAM,OAAO,GAAG;AACf,SAAK,OAAQ,KAAK,EAAE,QAAS;AAC7B,QAAI;AACH,YAAM,MAAM,MAAMA,YAAG,IAAC,eAAe;AACrC,WAAK,WAAW,MAAM,QAAQ,GAAG,IAAI,OAAO,2BAAK,SAAQ;aAClD,GAAG;AAAEC,oBAAAA,MAAI,UAAU,EAAE,OAAO,QAAQ,MAAM,OAAO,CAAC;AAAA,IAAE;AAAA,EAC5D;AAAA,EACD,SAAS;AAAA,IACR,OAAO,GAAG;AACT,UAAI,KAAK,SAAS,QAAQ;AACzB,cAAM,SAAS,gBAAiB,EAAC,gBAAe,EAAG,SAAO,CAAC;AAC3D,YAAI,UAAU,OAAO,KAAK;AACzB,iBAAO,IAAI,oBAAoB,EAAE;AACjC,iBAAO,IAAI,sBAAsB,EAAE;AAAA,QACpC;AACAA,sBAAAA,MAAI,aAAa;AAAA,aACX;AACNA,4BAAI,WAAW,EAAE,KAAK,4BAA4B,EAAE,EAAE,IAAI;AAAA,MAC3D;AAAA,IACA;AAAA,IACD,SAAS;AAAEA,oBAAAA,MAAI,WAAW,EAAE,KAAK,sBAAoB,CAAG;AAAA,IAAG;AAAA,IAC3D,UAAU,GAAG;AAAE,aAAO,SAAS,CAAC,KAAK;AAAA,IAAE;AAAA,EACxC;AACD;;;;;;;;;;;;;;;;;ACvCD,GAAG,WAAW,eAAe;"}

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
{"version":3,"file":"form.js","sources":["pages/customer/form.vue","../../../../Downloads/HBuilderX.4.76.2025082103/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvY3VzdG9tZXIvZm9ybS52dWU"],"sourcesContent":["<template>\r\n\t<view class=\"page\">\r\n\t\t<view class=\"field\"><text class=\"label\">客户名称</text><input class=\"value\" v-model=\"form.name\" placeholder=\"必填\" /></view>\r\n\t\t<view class=\"field\"><text class=\"label\">客户等级</text><input class=\"value\" v-model=\"form.level\" placeholder=\"可选,如 VIP/A/B\" /></view>\r\n <view class=\"field\">\r\n <text class=\"label\">售价档位</text>\r\n <picker :range=\"priceLabels\" :value=\"priceIdx\" @change=\"onPriceChange\">\r\n <view class=\"value\">{{ priceLabels[priceIdx] }}</view>\r\n </picker>\r\n </view>\r\n\t\t<view class=\"field\"><text class=\"label\">联系人</text><input class=\"value\" v-model=\"form.contactName\" placeholder=\"可选\" /></view>\r\n\t\t<view class=\"field\"><text class=\"label\">手机</text><input class=\"value\" v-model=\"form.mobile\" placeholder=\"可选\" /></view>\r\n\t\t<view class=\"field\"><text class=\"label\">电话</text><input class=\"value\" v-model=\"form.phone\" placeholder=\"可选(座机)\" /></view>\r\n\t\t<view class=\"field\"><text class=\"label\">送货地址</text><input class=\"value\" v-model=\"form.address\" placeholder=\"可选\" /></view>\r\n\t\t<view class=\"field\"><text class=\"label\">初始应收</text><input class=\"value\" type=\"digit\" v-model.number=\"form.arOpening\" placeholder=\"默认 0.00\" /></view>\r\n\t\t<view class=\"textarea\"><textarea v-model=\"form.remark\" maxlength=\"200\" placeholder=\"备注最多200字\"></textarea></view>\r\n\r\n\t\t<view class=\"bottom\"><button class=\"primary\" @click=\"save\">保存</button></view>\r\n\t</view>\r\n</template>\r\n\r\n<script>\r\nimport { post, put } from '../../common/http.js'\r\nexport default {\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tid: null,\r\n\t\t\tform: { name:'', level:'', priceLevel:'retail', contactName:'', mobile:'', phone:'', address:'', arOpening:0, remark:'' },\r\n priceLevels: ['零售价','批发价','大单报价'],\r\n priceLabels: ['零售价','批发价','大单报价'],\r\n\t\t\tpriceIdx: 0\r\n\t\t}\r\n\t},\r\n\tonLoad(query) { if (query && query.id) { this.id = Number(query.id) } },\r\n\tmethods: {\r\n onPriceChange(e){ this.priceIdx = Number(e.detail.value); this.form.priceLevel = this.priceLevels[this.priceIdx] },\r\n\t\tasync save() {\r\n\t\t\tif (!this.form.name) return uni.showToast({ title:'请填写客户名称', icon:'none' })\r\n\t\t\ttry {\r\n\t\t\t\tif (this.id) await put(`/api/customers/${this.id}`, this.form)\r\n\t\t\t\telse await post('/api/customers', this.form)\r\n\t\t\t\tuni.showToast({ title:'保存成功', icon:'success' })\r\n\t\t\t\tsetTimeout(() => uni.navigateBack(), 500)\r\n\t\t\t} catch(e) { uni.showToast({ title: e?.message || '保存失败', icon:'none' }) }\r\n\t\t}\r\n\t}\r\n}\r\n</script>\r\n\r\n<style>\r\n.page { padding-bottom: 140rpx; }\r\n.field { display:flex; justify-content: space-between; padding: 22rpx 24rpx; background:#fff; border-bottom:1rpx solid #eee; }\r\n.label { color:#666; }\r\n.value { color:#333; text-align: right; flex: 1; }\r\n.textarea { padding: 16rpx 24rpx; background:#fff; margin-top: 12rpx; }\r\n.bottom { position: fixed; left:0; right:0; bottom:0; background:#fff; padding: 16rpx 24rpx calc(env(safe-area-inset-bottom) + 16rpx); box-shadow: 0 -4rpx 12rpx rgba(0,0,0,0.06); }\r\n.primary { width: 100%; background: linear-gradient(135deg, #A0E4FF 0%, #17A2C4 100%); color:#fff; border-radius: 999rpx; padding: 20rpx 0; }\r\n</style>\r\n\r\n\r\n","import MiniProgramPage from 'C:/Users/21826/Desktop/Wj/PartsInquiry/frontend/pages/customer/form.vue'\nwx.createPage(MiniProgramPage)"],"names":["uni","put","post"],"mappings":";;;AAuBA,MAAK,YAAU;AAAA,EACd,OAAO;AACN,WAAO;AAAA,MACN,IAAI;AAAA,MACJ,MAAM,EAAE,MAAK,IAAI,OAAM,IAAI,YAAW,UAAU,aAAY,IAAI,QAAO,IAAI,OAAM,IAAI,SAAQ,IAAI,WAAU,GAAG,QAAO,GAAI;AAAA,MACtH,aAAa,CAAC,OAAM,OAAM,MAAM;AAAA,MAChC,aAAa,CAAC,OAAM,OAAM,MAAM;AAAA,MACnC,UAAU;AAAA,IACX;AAAA,EACA;AAAA,EACD,OAAO,OAAO;AAAE,QAAI,SAAS,MAAM,IAAI;AAAE,WAAK,KAAK,OAAO,MAAM,EAAE;AAAA,IAAE;AAAA,EAAG;AAAA,EACvE,SAAS;AAAA,IACN,cAAc,GAAE;AAAE,WAAK,WAAW,OAAO,EAAE,OAAO,KAAK;AAAG,WAAK,KAAK,aAAa,KAAK,YAAY,KAAK,QAAQ;AAAA,IAAG;AAAA,IACpH,MAAM,OAAO;AACZ,UAAI,CAAC,KAAK,KAAK;AAAM,eAAOA,cAAG,MAAC,UAAU,EAAE,OAAM,WAAW,MAAK,QAAQ;AAC1E,UAAI;AACH,YAAI,KAAK;AAAI,gBAAMC,YAAAA,IAAI,kBAAkB,KAAK,EAAE,IAAI,KAAK,IAAI;AAAA;AACxD,gBAAMC,iBAAK,kBAAkB,KAAK,IAAI;AAC3CF,sBAAG,MAAC,UAAU,EAAE,OAAM,QAAQ,MAAK,WAAW;AAC9C,mBAAW,MAAMA,cAAAA,MAAI,aAAY,GAAI,GAAG;AAAA,MACzC,SAAQ,GAAG;AAAEA,sBAAG,MAAC,UAAU,EAAE,QAAO,uBAAG,YAAW,QAAQ,MAAK,OAAQ,CAAA;AAAA,MAAE;AAAA,IAC1E;AAAA,EACD;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7CA,GAAG,WAAW,eAAe;"}
{"version":3,"file":"form.js","sources":["pages/customer/form.vue","../../../软件/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvY3VzdG9tZXIvZm9ybS52dWU"],"sourcesContent":["<template>\n\t<view class=\"page\">\n\t\t<view class=\"field\"><text class=\"label\">客户名称</text><input class=\"value\" v-model=\"form.name\" placeholder=\"必填\" /></view>\n\t\t<view class=\"field\"><text class=\"label\">客户等级</text><input class=\"value\" v-model=\"form.level\" placeholder=\"可选,如 VIP/A/B\" /></view>\n <view class=\"field\">\n <text class=\"label\">售价档位</text>\n <picker :range=\"priceLabels\" :value=\"priceIdx\" @change=\"onPriceChange\">\n <view class=\"value\">{{ priceLabels[priceIdx] }}</view>\n </picker>\n </view>\n\t\t<view class=\"field\"><text class=\"label\">联系人</text><input class=\"value\" v-model=\"form.contactName\" placeholder=\"可选\" /></view>\n\t\t<view class=\"field\"><text class=\"label\">手机</text><input class=\"value\" v-model=\"form.mobile\" placeholder=\"可选\" /></view>\n\t\t<view class=\"field\"><text class=\"label\">电话</text><input class=\"value\" v-model=\"form.phone\" placeholder=\"可选(座机)\" /></view>\n\t\t<view class=\"field\"><text class=\"label\">送货地址</text><input class=\"value\" v-model=\"form.address\" placeholder=\"可选\" /></view>\n\t\t<view class=\"field\"><text class=\"label\">初始应收</text><input class=\"value\" type=\"digit\" v-model.number=\"form.arOpening\" placeholder=\"默认 0.00\" /></view>\n\t\t<view class=\"textarea\"><textarea v-model=\"form.remark\" maxlength=\"200\" placeholder=\"备注最多200字\"></textarea></view>\n\n\t\t<view class=\"bottom\"><button class=\"primary\" @click=\"save\">保存</button></view>\n\t</view>\n</template>\n\n<script>\nimport { post, put } from '../../common/http.js'\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tid: null,\n\t\t\tform: { name:'', level:'', priceLevel:'retail', contactName:'', mobile:'', phone:'', address:'', arOpening:0, remark:'' },\n priceLevels: ['零售价','批发价','大单报价'],\n priceLabels: ['零售价','批发价','大单报价'],\n\t\t\tpriceIdx: 0\n\t\t}\n\t},\n\tonLoad(query) { if (query && query.id) { this.id = Number(query.id) } },\n\tmethods: {\n onPriceChange(e){ this.priceIdx = Number(e.detail.value); this.form.priceLevel = this.priceLevels[this.priceIdx] },\n\t\tasync save() {\n\t\t\tif (!this.form.name) return uni.showToast({ title:'请填写客户名称', icon:'none' })\n\t\t\ttry {\n\t\t\t\tif (this.id) await put(`/api/customers/${this.id}`, this.form)\n\t\t\t\telse await post('/api/customers', this.form)\n\t\t\t\tuni.showToast({ title:'保存成功', icon:'success' })\n\t\t\t\tsetTimeout(() => uni.navigateBack(), 500)\n\t\t\t} catch(e) { uni.showToast({ title: e?.message || '保存失败', icon:'none' }) }\n\t\t}\n\t}\n}\n</script>\n\n<style lang=\"scss\">\n.page { padding-bottom: 140rpx; }\n.field { display:flex; justify-content: space-between; padding: 22rpx 24rpx; background:$uni-bg-color-grey; border-bottom:1rpx solid $uni-border-color; }\n.label { color:$uni-text-color-grey; }\n.value { color:$uni-text-color; text-align: right; flex: 1; }\n.textarea { padding: 16rpx 24rpx; background:$uni-bg-color-grey; margin-top: 12rpx; }\n.bottom { position: fixed; left:0; right:0; bottom:0; background:$uni-bg-color-grey; padding: 16rpx 24rpx calc(env(safe-area-inset-bottom) + 16rpx); box-shadow: 0 -4rpx 12rpx rgba(0,0,0,0.10); }\n.primary { width: 100%; background: $uni-color-primary; color:#fff; border-radius: 999rpx; padding: 20rpx 0; }\n</style>\n\n\n","import MiniProgramPage from 'D:/wx/PartsInquiry/frontend/pages/customer/form.vue'\nwx.createPage(MiniProgramPage)"],"names":["uni","put","post"],"mappings":";;;AAuBA,MAAK,YAAU;AAAA,EACd,OAAO;AACN,WAAO;AAAA,MACN,IAAI;AAAA,MACJ,MAAM,EAAE,MAAK,IAAI,OAAM,IAAI,YAAW,UAAU,aAAY,IAAI,QAAO,IAAI,OAAM,IAAI,SAAQ,IAAI,WAAU,GAAG,QAAO,GAAI;AAAA,MACtH,aAAa,CAAC,OAAM,OAAM,MAAM;AAAA,MAChC,aAAa,CAAC,OAAM,OAAM,MAAM;AAAA,MACnC,UAAU;AAAA,IACX;AAAA,EACA;AAAA,EACD,OAAO,OAAO;AAAE,QAAI,SAAS,MAAM,IAAI;AAAE,WAAK,KAAK,OAAO,MAAM,EAAE;AAAA,IAAE;AAAA,EAAG;AAAA,EACvE,SAAS;AAAA,IACN,cAAc,GAAE;AAAE,WAAK,WAAW,OAAO,EAAE,OAAO,KAAK;AAAG,WAAK,KAAK,aAAa,KAAK,YAAY,KAAK,QAAQ;AAAA,IAAG;AAAA,IACpH,MAAM,OAAO;AACZ,UAAI,CAAC,KAAK,KAAK;AAAM,eAAOA,cAAG,MAAC,UAAU,EAAE,OAAM,WAAW,MAAK,QAAQ;AAC1E,UAAI;AACH,YAAI,KAAK;AAAI,gBAAMC,YAAAA,IAAI,kBAAkB,KAAK,EAAE,IAAI,KAAK,IAAI;AAAA;AACxD,gBAAMC,iBAAK,kBAAkB,KAAK,IAAI;AAC3CF,sBAAG,MAAC,UAAU,EAAE,OAAM,QAAQ,MAAK,WAAW;AAC9C,mBAAW,MAAMA,cAAAA,MAAI,aAAY,GAAI,GAAG;AAAA,MACzC,SAAQ,GAAG;AAAEA,sBAAG,MAAC,UAAU,EAAE,QAAO,uBAAG,YAAW,QAAQ,MAAK,OAAQ,CAAA;AAAA,MAAE;AAAA,IAC1E;AAAA,EACD;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7CA,GAAG,WAAW,eAAe;"}

View File

@@ -1 +1 @@
{"version":3,"file":"select.js","sources":["pages/customer/select.vue","../../../../Downloads/HBuilderX.4.76.2025082103/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvY3VzdG9tZXIvc2VsZWN0LnZ1ZQ"],"sourcesContent":["<template>\n\t<view class=\"page\">\n\t\t<view class=\"search\">\n\t\t\t<input v-model=\"kw\" placeholder=\"搜索客户名称/电话\" @confirm=\"search\" />\n\t\t\t<button size=\"mini\" @click=\"search\">搜索</button>\n\t\t\t<button size=\"mini\" :type=\"debtOnly ? 'primary' : 'default'\" @click=\"toggleDebtOnly\">只看欠款</button>\n\t\t</view>\n\t\t<scroll-view scroll-y class=\"list\">\n\t\t\t<view class=\"item\" v-for=\"c in customers\" :key=\"c.id\" @click=\"openDetail(c)\">\n\t\t\t\t<view class=\"name\">{{ c.name }}</view>\n\t\t\t\t<view class=\"meta\">\n\t\t\t\t\t{{ c.mobile || '—' }}\n\t\t\t\t\t<text v-if=\"typeof c.receivable === 'number'\">|应收:¥ {{ Number(c.receivable).toFixed(2) }}</text>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</scroll-view>\n\t\t<view class=\"bottom\">\n\t\t\t<button class=\"primary\" @click=\"createCustomer\">新增客户</button>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\timport { get } from '../../common/http.js'\n\texport default {\n\t\tdata() { return { kw: '', debtOnly: false, customers: [] } },\n\t\tonLoad() { this.search() },\n\t\tonShow() { this.search() },\n\t\tmethods: {\n\t\t\ttoggleDebtOnly() { this.debtOnly = !this.debtOnly; this.search() },\n\t\t\tasync search() {\n\t\t\t\ttry {\n\t\t\t\t\tconst res = await get('/api/customers', { kw: this.kw, debtOnly: this.debtOnly, page: 1, size: 50 })\n\t\t\t\t\tthis.customers = Array.isArray(res?.list) ? res.list : (Array.isArray(res) ? res : [])\n\t\t\t\t} catch(e) { uni.showToast({ title: '加载失败', icon: 'none' }) }\n\t\t\t},\n\t\t\tcreateCustomer() { uni.navigateTo({ url: '/pages/customer/form' }) },\n\t\t\tselect(c) {\n\t\t\t\tconst pages = getCurrentPages()\n\t\t\t\tconst prev = pages.length >= 2 ? pages[pages.length - 2] : null\n\t\t\t\tconst vm = prev && prev.$vm ? prev.$vm : null\n\t\t\t\tif (vm && vm.order) {\n\t\t\t\t\tvm.order.customerId = c.id\n\t\t\t\t\tvm.customerName = c.name\n\t\t\t\t}\n\t\t\t\tuni.navigateBack()\n\t\t\t}\n\t\t\t,\n\t\t\topenDetail(c) { uni.navigateTo({ url: '/pages/customer/detail?id=' + c.id }) }\n\t\t}\n\t}\n</script>\n\n<style>\n\t.page { display:flex; flex-direction: column; height: 100vh; }\n\t.search { display:flex; gap: 12rpx; padding: 16rpx; background:#fff; align-items:center; }\n\t.search input { flex:1; background:#f6f6f6; border-radius: 12rpx; padding: 12rpx; }\n\t.list { flex:1; }\n\t.item { padding: 20rpx 24rpx; background:#fff; border-bottom: 1rpx solid #f1f1f1; }\n\t.name { color:#333; margin-bottom: 6rpx; }\n\t.meta { color:#888; font-size: 24rpx; }\n\t.bottom { position: fixed; left:0; right:0; bottom:0; background:#fff; padding: 16rpx 24rpx calc(env(safe-area-inset-bottom) + 16rpx); box-shadow: 0 -4rpx 12rpx rgba(0,0,0,0.06); }\n\t.primary { width: 100%; background: linear-gradient(135deg, #A0E4FF 0%, #17A2C4 100%); color:#fff; border-radius: 999rpx; padding: 20rpx 0; }\n</style>\n\n\n\n","import MiniProgramPage from 'C:/Users/21826/Desktop/Wj/PartsInquiry/frontend/pages/customer/select.vue'\nwx.createPage(MiniProgramPage)"],"names":["get","uni"],"mappings":";;;AAwBC,MAAK,YAAU;AAAA,EACd,OAAO;AAAE,WAAO,EAAE,IAAI,IAAI,UAAU,OAAO,WAAW,CAAA;EAAM;AAAA,EAC5D,SAAS;AAAE,SAAK;EAAU;AAAA,EAC1B,SAAS;AAAE,SAAK;EAAU;AAAA,EAC1B,SAAS;AAAA,IACR,iBAAiB;AAAE,WAAK,WAAW,CAAC,KAAK;AAAU,WAAK;IAAU;AAAA,IAClE,MAAM,SAAS;AACd,UAAI;AACH,cAAM,MAAM,MAAMA,YAAG,IAAC,kBAAkB,EAAE,IAAI,KAAK,IAAI,UAAU,KAAK,UAAU,MAAM,GAAG,MAAM,IAAI;AACnG,aAAK,YAAY,MAAM,QAAQ,2BAAK,IAAI,IAAI,IAAI,OAAQ,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAA;AAAA,eAC5E,GAAG;AAAEC,sBAAAA,MAAI,UAAU,EAAE,OAAO,QAAQ,MAAM,OAAO,CAAC;AAAA,MAAE;AAAA,IAC5D;AAAA,IACD,iBAAiB;AAAEA,oBAAAA,MAAI,WAAW,EAAE,KAAK,uBAAqB,CAAG;AAAA,IAAG;AAAA,IACpE,OAAO,GAAG;AACT,YAAM,QAAQ,gBAAgB;AAC9B,YAAM,OAAO,MAAM,UAAU,IAAI,MAAM,MAAM,SAAS,CAAC,IAAI;AAC3D,YAAM,KAAK,QAAQ,KAAK,MAAM,KAAK,MAAM;AACzC,UAAI,MAAM,GAAG,OAAO;AACnB,WAAG,MAAM,aAAa,EAAE;AACxB,WAAG,eAAe,EAAE;AAAA,MACrB;AACAA,oBAAAA,MAAI,aAAa;AAAA,IAClB;AAAA,IAEA,WAAW,GAAG;AAAEA,oBAAAA,MAAI,WAAW,EAAE,KAAK,+BAA+B,EAAE,GAAC,CAAG;AAAA,IAAE;AAAA,EAC9E;AACD;;;;;;;;;;;;;;;;;;;;;;;;;ACjDD,GAAG,WAAW,eAAe;"}
{"version":3,"file":"select.js","sources":["pages/customer/select.vue","../../../软件/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvY3VzdG9tZXIvc2VsZWN0LnZ1ZQ"],"sourcesContent":["<template>\n\t<view class=\"page\">\n\t\t<view class=\"search\">\n\t\t\t<input v-model=\"kw\" placeholder=\"搜索客户名称/电话\" @confirm=\"search\" />\n\t\t\t<button size=\"mini\" @click=\"search\">搜索</button>\n\t\t\t<button size=\"mini\" :type=\"debtOnly ? 'primary' : 'default'\" @click=\"toggleDebtOnly\">只看欠款</button>\n\t\t</view>\n\t\t<scroll-view scroll-y class=\"list\">\n\t\t\t<view class=\"item\" v-for=\"c in customers\" :key=\"c.id\" @click=\"openDetail(c)\">\n\t\t\t\t<view class=\"name\">{{ c.name }}</view>\n\t\t\t\t<view class=\"meta\">\n\t\t\t\t\t{{ c.mobile || '—' }}\n\t\t\t\t\t<text v-if=\"typeof c.receivable === 'number'\">|应收:¥ {{ Number(c.receivable).toFixed(2) }}</text>\n\t\t\t\t</view>\n\t\t\t</view>\n\t\t</scroll-view>\n\t\t<view class=\"bottom\">\n\t\t\t<button class=\"primary\" @click=\"createCustomer\">新增客户</button>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\n\timport { get } from '../../common/http.js'\n\texport default {\n\t\tdata() { return { kw: '', debtOnly: false, customers: [] } },\n\t\tonLoad() { this.search() },\n\t\tonShow() { this.search() },\n\t\tmethods: {\n\t\t\ttoggleDebtOnly() { this.debtOnly = !this.debtOnly; this.search() },\n\t\t\tasync search() {\n\t\t\t\ttry {\n\t\t\t\t\tconst res = await get('/api/customers', { kw: this.kw, debtOnly: this.debtOnly, page: 1, size: 50 })\n\t\t\t\t\tthis.customers = Array.isArray(res?.list) ? res.list : (Array.isArray(res) ? res : [])\n\t\t\t\t} catch(e) { uni.showToast({ title: '加载失败', icon: 'none' }) }\n\t\t\t},\n\t\t\tcreateCustomer() { uni.navigateTo({ url: '/pages/customer/form' }) },\n\t\t\tselect(c) {\n\t\t\t\tconst pages = getCurrentPages()\n\t\t\t\tconst prev = pages.length >= 2 ? pages[pages.length - 2] : null\n\t\t\t\tconst vm = prev && prev.$vm ? prev.$vm : null\n\t\t\t\tif (vm && vm.order) {\n\t\t\t\t\tvm.order.customerId = c.id\n\t\t\t\t\tvm.customerName = c.name\n\t\t\t\t}\n\t\t\t\tuni.navigateBack()\n\t\t\t}\n\t\t\t,\n\t\t\topenDetail(c) { uni.navigateTo({ url: '/pages/customer/detail?id=' + c.id }) }\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\">\n\t.page { display:flex; flex-direction: column; height: 100vh; }\n\t.search { display:flex; gap: 12rpx; padding: 16rpx; background:$uni-bg-color-grey; align-items:center; }\n\t.search input { flex:1; background:$uni-bg-color-hover; border-radius: 12rpx; padding: 12rpx; color: $uni-text-color; }\n\t.list { flex:1; }\n\t.item { padding: 20rpx 24rpx; background:$uni-bg-color-grey; border-bottom: 1rpx solid $uni-border-color; }\n\t.name { color:$uni-text-color; margin-bottom: 6rpx; }\n\t.meta { color:$uni-text-color-grey; font-size: 24rpx; }\n\t.bottom { position: fixed; left:0; right:0; bottom:0; background:$uni-bg-color-grey; padding: 16rpx 24rpx calc(env(safe-area-inset-bottom) + 16rpx); box-shadow: 0 -4rpx 12rpx rgba(0,0,0,0.10); }\n\t.primary { width: 100%; background: $uni-color-primary; color:#fff; border-radius: 999rpx; padding: 20rpx 0; }\n</style>\n\n\n\n","import MiniProgramPage from 'D:/wx/PartsInquiry/frontend/pages/customer/select.vue'\nwx.createPage(MiniProgramPage)"],"names":["get","uni"],"mappings":";;;AAwBC,MAAK,YAAU;AAAA,EACd,OAAO;AAAE,WAAO,EAAE,IAAI,IAAI,UAAU,OAAO,WAAW,CAAA;EAAM;AAAA,EAC5D,SAAS;AAAE,SAAK;EAAU;AAAA,EAC1B,SAAS;AAAE,SAAK;EAAU;AAAA,EAC1B,SAAS;AAAA,IACR,iBAAiB;AAAE,WAAK,WAAW,CAAC,KAAK;AAAU,WAAK;IAAU;AAAA,IAClE,MAAM,SAAS;AACd,UAAI;AACH,cAAM,MAAM,MAAMA,YAAG,IAAC,kBAAkB,EAAE,IAAI,KAAK,IAAI,UAAU,KAAK,UAAU,MAAM,GAAG,MAAM,IAAI;AACnG,aAAK,YAAY,MAAM,QAAQ,2BAAK,IAAI,IAAI,IAAI,OAAQ,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAA;AAAA,eAC5E,GAAG;AAAEC,sBAAAA,MAAI,UAAU,EAAE,OAAO,QAAQ,MAAM,OAAO,CAAC;AAAA,MAAE;AAAA,IAC5D;AAAA,IACD,iBAAiB;AAAEA,oBAAAA,MAAI,WAAW,EAAE,KAAK,uBAAqB,CAAG;AAAA,IAAG;AAAA,IACpE,OAAO,GAAG;AACT,YAAM,QAAQ,gBAAgB;AAC9B,YAAM,OAAO,MAAM,UAAU,IAAI,MAAM,MAAM,SAAS,CAAC,IAAI;AAC3D,YAAM,KAAK,QAAQ,KAAK,MAAM,KAAK,MAAM;AACzC,UAAI,MAAM,GAAG,OAAO;AACnB,WAAG,MAAM,aAAa,EAAE;AACxB,WAAG,eAAe,EAAE;AAAA,MACrB;AACAA,oBAAAA,MAAI,aAAa;AAAA,IAClB;AAAA,IAEA,WAAW,GAAG;AAAEA,oBAAAA,MAAI,WAAW,EAAE,KAAK,+BAA+B,EAAE,GAAC,CAAG;AAAA,IAAE;AAAA,EAC9E;AACD;;;;;;;;;;;;;;;;;;;;;;;;;ACjDD,GAAG,WAAW,eAAe;"}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
{"version":3,"file":"about.js","sources":["pages/my/about.vue","../../../../Downloads/HBuilderX.4.76.2025082103/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvbXkvYWJvdXQudnVl"],"sourcesContent":["<template>\r\n\t<view class=\"about\">\r\n\t\t<view class=\"hero\">\r\n\t\t\t<image class=\"logo\" src=\"/static/logo.png\" mode=\"aspectFit\" />\r\n\t\t\t<text class=\"title\">五金配件管家</text>\r\n\t\t\t<text class=\"subtitle\">专注小微门店的极简进销存</text>\r\n\t\t</view>\r\n\r\n\t\t<view class=\"card\">\r\n\t\t\t<view class=\"row\">\r\n\t\t\t\t<text class=\"label\">版本</text>\r\n\t\t\t\t<text class=\"value\">1.0.0</text>\r\n\t\t\t</view>\r\n\t\t\t<view class=\"row\">\r\n\t\t\t\t<text class=\"label\">隐私协议</text>\r\n\t\t\t\t<text class=\"link\" @click=\"openPolicy\">查看</text>\r\n\t\t\t</view>\r\n\t\t\t<view class=\"row\">\r\n\t\t\t\t<text class=\"label\">用户协议</text>\r\n\t\t\t\t<text class=\"link\" @click=\"openTerms\">查看</text>\r\n\t\t\t</view>\r\n\t\t\t<view class=\"row\">\r\n\t\t\t\t<text class=\"label\">个人信息安全投诉</text>\r\n\t\t\t\t<text class=\"link\" @click=\"openComplaint\">提交</text>\r\n\t\t\t</view>\r\n\t\t</view>\r\n\t</view>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n\tmethods: {\r\n\t\topenPolicy() {\r\n\t\t\tuni.showModal({ title: '隐私协议', content: '隐私协议(静态占位)', showCancel: false })\r\n\t\t},\r\n\t\topenTerms() {\r\n\t\t\tuni.showModal({ title: '用户协议', content: '用户协议(静态占位)', showCancel: false })\r\n\t\t},\r\n\t\topenComplaint() {\r\n\t\t\tuni.showToast({ title: '暂未开通', icon: 'none' })\r\n\t\t}\r\n\t}\r\n}\r\n</script>\r\n\r\n<style>\r\n.about { padding: 24rpx; }\r\n.hero { padding: 32rpx 24rpx; display: flex; flex-direction: column; align-items: center; gap: 10rpx; }\r\n.logo { width: 160rpx; height: 160rpx; border-radius: 32rpx; }\r\n.title { margin-top: 8rpx; font-size: 36rpx; font-weight: 800; color: #333; }\r\n.subtitle { font-size: 26rpx; color: #888; }\r\n.card { margin-top: 18rpx; background: #fff; border-radius: 16rpx; overflow: hidden; }\r\n.row { display: flex; align-items: center; padding: 24rpx; border-top: 1rpx solid #f2f2f2; }\r\n.label { color: #666; }\r\n.value { margin-left: auto; color: #333; }\r\n.link { margin-left: auto; color: #1aad19; }\r\n</style>\r\n\r\n\r\n","import MiniProgramPage from 'C:/Users/21826/Desktop/Wj/PartsInquiry/frontend/pages/my/about.vue'\nwx.createPage(MiniProgramPage)"],"names":["uni"],"mappings":";;;AA8BA,MAAK,YAAU;AAAA,EACd,SAAS;AAAA,IACR,aAAa;AACZA,0BAAI,UAAU,EAAE,OAAO,QAAQ,SAAS,cAAc,YAAY,OAAO;AAAA,IACzE;AAAA,IACD,YAAY;AACXA,0BAAI,UAAU,EAAE,OAAO,QAAQ,SAAS,cAAc,YAAY,OAAO;AAAA,IACzE;AAAA,IACD,gBAAgB;AACfA,oBAAG,MAAC,UAAU,EAAE,OAAO,QAAQ,MAAM,QAAQ;AAAA,IAC9C;AAAA,EACD;AACD;;;;;;;;;;ACzCA,GAAG,WAAW,eAAe;"}
{"version":3,"file":"about.js","sources":["pages/my/about.vue","../../../软件/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvbXkvYWJvdXQudnVl"],"sourcesContent":["<template>\n\t<view class=\"about\">\n\t\t<view class=\"hero\">\n\t\t\t<image class=\"logo\" src=\"/static/logo.png\" mode=\"aspectFit\" />\n\t\t\t<text class=\"title\">五金配件管家</text>\n\t\t\t<text class=\"subtitle\">专注小微门店的极简进销存</text>\n\t\t</view>\n\n\t\t<view class=\"card\">\n\t\t\t<view class=\"row\">\n\t\t\t\t<text class=\"label\">版本</text>\n\t\t\t\t<text class=\"value\">1.0.0</text>\n\t\t\t</view>\n\t\t\t<view class=\"row\">\n\t\t\t\t<text class=\"label\">隐私协议</text>\n\t\t\t\t<text class=\"link\" @click=\"openPolicy\">查看</text>\n\t\t\t</view>\n\t\t\t<view class=\"row\">\n\t\t\t\t<text class=\"label\">用户协议</text>\n\t\t\t\t<text class=\"link\" @click=\"openTerms\">查看</text>\n\t\t\t</view>\n\t\t\t<view class=\"row\">\n\t\t\t\t<text class=\"label\">个人信息安全投诉</text>\n\t\t\t\t<text class=\"link\" @click=\"openComplaint\">提交</text>\n\t\t\t</view>\n\t\t</view>\n\t</view>\n</template>\n\n<script>\nexport default {\n\tmethods: {\n\t\topenPolicy() {\n\t\t\tuni.showModal({ title: '隐私协议', content: '隐私协议(静态占位)', showCancel: false })\n\t\t},\n\t\topenTerms() {\n\t\t\tuni.showModal({ title: '用户协议', content: '用户协议(静态占位)', showCancel: false })\n\t\t},\n\t\topenComplaint() {\n\t\t\tuni.showToast({ title: '暂未开通', icon: 'none' })\n\t\t}\n\t}\n}\n</script>\n\n<style lang=\"scss\">\n.about { padding: 24rpx; }\n.hero { padding: 32rpx 24rpx; display: flex; flex-direction: column; align-items: center; gap: 10rpx; }\n.logo { width: 160rpx; height: 160rpx; border-radius: 32rpx; }\n.title { margin-top: 8rpx; font-size: 36rpx; font-weight: 800; color: $uni-text-color; }\n.subtitle { font-size: 26rpx; color: $uni-text-color-grey; }\n.card { margin-top: 18rpx; background: $uni-bg-color-grey; border-radius: 16rpx; overflow: hidden; }\n.row { display: flex; align-items: center; padding: 24rpx; border-top: 1rpx solid $uni-border-color; }\n.label { color: $uni-text-color-grey; }\n.value { margin-left: auto; color: $uni-text-color; }\n.link { margin-left: auto; color: $uni-color-primary; }\n</style>\n\n\n","import MiniProgramPage from 'D:/wx/PartsInquiry/frontend/pages/my/about.vue'\nwx.createPage(MiniProgramPage)"],"names":["uni"],"mappings":";;;AA8BA,MAAK,YAAU;AAAA,EACd,SAAS;AAAA,IACR,aAAa;AACZA,0BAAI,UAAU,EAAE,OAAO,QAAQ,SAAS,cAAc,YAAY,OAAO;AAAA,IACzE;AAAA,IACD,YAAY;AACXA,0BAAI,UAAU,EAAE,OAAO,QAAQ,SAAS,cAAc,YAAY,OAAO;AAAA,IACzE;AAAA,IACD,gBAAgB;AACfA,oBAAG,MAAC,UAAU,EAAE,OAAO,QAAQ,MAAM,QAAQ;AAAA,IAC9C;AAAA,EACD;AACD;;;;;;;;;;ACzCA,GAAG,WAAW,eAAe;"}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
{"version":3,"file":"categories.js","sources":["pages/product/categories.vue","../../../../Downloads/HBuilderX.4.76.2025082103/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvcHJvZHVjdC9jYXRlZ29yaWVzLnZ1ZQ"],"sourcesContent":["<template>\r\n\t<view class=\"page\">\r\n\t\t<view class=\"toolbar\">\r\n\t\t\t<input v-model.trim=\"name\" placeholder=\"新类别名称\" />\r\n\t\t\t<button size=\"mini\" @click=\"create\">新增</button>\r\n\t\t</view>\r\n\t\t<scroll-view scroll-y class=\"list\">\r\n\t\t\t<view class=\"item\" v-for=\"c in list\" :key=\"c.id\">\r\n\t\t\t\t<input v-model.trim=\"c.name\" />\r\n\t\t\t\t<view class=\"ops\">\r\n\t\t\t\t\t<button size=\"mini\" @click=\"update(c)\">保存</button>\r\n\t\t\t\t\t<button size=\"mini\" type=\"warn\" @click=\"remove(c)\">删除</button>\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\t\t</scroll-view>\r\n\t</view>\r\n</template>\r\n\r\n<script>\r\nimport { get, post, put, del } from '../../common/http.js'\r\n\r\nexport default {\r\n\tdata() {\r\n\t\treturn { name: '', list: [] }\r\n\t},\r\n\tonLoad() { this.reload() },\r\n\tmethods: {\r\n\t\tasync reload() {\r\n\t\t\ttry {\r\n\t\t\t\tconst res = await get('/api/product-categories')\r\n\t\t\t\tthis.list = Array.isArray(res?.list) ? res.list : (Array.isArray(res) ? res : [])\r\n\t\t\t} catch (_) {}\r\n\t\t},\r\n\t\tasync create() {\r\n\t\t\tif (!this.name) return\r\n\t\t\tawait post('/api/product-categories', { name: this.name })\r\n\t\t\tthis.name = ''\r\n\t\t\tthis.reload()\r\n\t\t},\r\n\t\tasync update(c) {\r\n\t\t\tawait put('/api/product-categories/' + c.id, { name: c.name })\r\n\t\t\tuni.showToast({ title: '已保存', icon: 'success' })\r\n\t\t},\r\n\t\tasync remove(c) {\r\n\t\t\tuni.showModal({ content: '确定删除该类别?', success: async (r) => {\r\n\t\t\t\tif (!r.confirm) return\r\n\t\t\t\tawait del('/api/product-categories/' + c.id)\r\n\t\t\t\tthis.reload()\r\n\t\t\t}})\r\n\t\t}\r\n\t}\r\n}\r\n</script>\r\n\r\n<style>\r\n.page { display:flex; flex-direction: column; height: 100vh; }\r\n.toolbar { display:flex; gap: 12rpx; padding: 16rpx; background:#fff; }\r\n.toolbar input { flex:1; background:#f6f6f6; border-radius: 12rpx; padding: 12rpx; }\r\n.list { flex:1; }\r\n.item { display:flex; gap: 12rpx; align-items:center; padding: 16rpx; background:#fff; border-bottom: 1rpx solid #f1f1f1; }\r\n.item input { flex:1; background:#f7f7f7; border-radius: 10rpx; padding: 12rpx; }\r\n.ops { display:flex; gap: 10rpx; }\r\n</style>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import MiniProgramPage from 'C:/Users/21826/Desktop/Wj/PartsInquiry/frontend/pages/product/categories.vue'\nwx.createPage(MiniProgramPage)"],"names":["get","post","put","uni","del"],"mappings":";;;AAqBA,MAAK,YAAU;AAAA,EACd,OAAO;AACN,WAAO,EAAE,MAAM,IAAI,MAAM,CAAA,EAAG;AAAA,EAC5B;AAAA,EACD,SAAS;AAAE,SAAK;EAAU;AAAA,EAC1B,SAAS;AAAA,IACR,MAAM,SAAS;AACd,UAAI;AACH,cAAM,MAAM,MAAMA,YAAG,IAAC,yBAAyB;AAC/C,aAAK,OAAO,MAAM,QAAQ,2BAAK,IAAI,IAAI,IAAI,OAAQ,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAA;AAAA,eACtE,GAAG;AAAA,MAAC;AAAA,IACb;AAAA,IACD,MAAM,SAAS;AACd,UAAI,CAAC,KAAK;AAAM;AAChB,YAAMC,YAAAA,KAAK,2BAA2B,EAAE,MAAM,KAAK,KAAG,CAAG;AACzD,WAAK,OAAO;AACZ,WAAK,OAAO;AAAA,IACZ;AAAA,IACD,MAAM,OAAO,GAAG;AACf,YAAMC,YAAG,IAAC,6BAA6B,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM;AAC7DC,oBAAG,MAAC,UAAU,EAAE,OAAO,OAAO,MAAM,WAAW;AAAA,IAC/C;AAAA,IACD,MAAM,OAAO,GAAG;AACfA,oBAAG,MAAC,UAAU,EAAE,SAAS,YAAY,SAAS,OAAO,MAAM;AAC1D,YAAI,CAAC,EAAE;AAAS;AAChB,cAAMC,gBAAI,6BAA6B,EAAE,EAAE;AAC3C,aAAK,OAAO;AAAA,MACb,EAAC,CAAC;AAAA,IACH;AAAA,EACD;AACD;;;;;;;;;;;;;;;;;;;;;;AClDA,GAAG,WAAW,eAAe;"}
{"version":3,"file":"categories.js","sources":["pages/product/categories.vue","../../../软件/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvcHJvZHVjdC9jYXRlZ29yaWVzLnZ1ZQ"],"sourcesContent":["<template>\r\n\t<view class=\"page\">\r\n\t\t<view class=\"toolbar\">\r\n\t\t\t<input v-model.trim=\"name\" placeholder=\"新类别名称\" />\r\n\t\t\t<button size=\"mini\" @click=\"create\">新增</button>\r\n\t\t</view>\r\n\t\t<scroll-view scroll-y class=\"list\">\r\n\t\t\t<view class=\"item\" v-for=\"c in list\" :key=\"c.id\">\r\n\t\t\t\t<input v-model.trim=\"c.name\" />\r\n\t\t\t\t<view class=\"ops\">\r\n\t\t\t\t\t<button size=\"mini\" @click=\"update(c)\">保存</button>\r\n\t\t\t\t\t<button size=\"mini\" type=\"warn\" @click=\"remove(c)\">删除</button>\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\t\t</scroll-view>\r\n\t</view>\r\n</template>\r\n\r\n<script>\r\nimport { get, post, put, del } from '../../common/http.js'\r\n\r\nexport default {\r\n\tdata() {\r\n\t\treturn { name: '', list: [] }\r\n\t},\r\n\tonLoad() { this.reload() },\r\n\tmethods: {\r\n\t\tasync reload() {\r\n\t\t\ttry {\r\n\t\t\t\tconst res = await get('/api/product-categories')\r\n\t\t\t\tthis.list = Array.isArray(res?.list) ? res.list : (Array.isArray(res) ? res : [])\r\n\t\t\t} catch (_) {}\r\n\t\t},\r\n\t\tasync create() {\r\n\t\t\tif (!this.name) return\r\n\t\t\tawait post('/api/product-categories', { name: this.name })\r\n\t\t\tthis.name = ''\r\n\t\t\tthis.reload()\r\n\t\t},\r\n\t\tasync update(c) {\r\n\t\t\tawait put('/api/product-categories/' + c.id, { name: c.name })\r\n\t\t\tuni.showToast({ title: '已保存', icon: 'success' })\r\n\t\t},\r\n\t\tasync remove(c) {\r\n\t\t\tuni.showModal({ content: '确定删除该类别?', success: async (r) => {\r\n\t\t\t\tif (!r.confirm) return\r\n\t\t\t\tawait del('/api/product-categories/' + c.id)\r\n\t\t\t\tthis.reload()\r\n\t\t\t}})\r\n\t\t}\r\n\t}\r\n}\r\n</script>\r\n\r\n<style>\r\n.page { display:flex; flex-direction: column; height: 100vh; }\r\n.toolbar { display:flex; gap: 12rpx; padding: 16rpx; background:#fff; }\r\n.toolbar input { flex:1; background:#f6f6f6; border-radius: 12rpx; padding: 12rpx; }\r\n.list { flex:1; }\r\n.item { display:flex; gap: 12rpx; align-items:center; padding: 16rpx; background:#fff; border-bottom: 1rpx solid #f1f1f1; }\r\n.item input { flex:1; background:#f7f7f7; border-radius: 10rpx; padding: 12rpx; }\r\n.ops { display:flex; gap: 10rpx; }\r\n</style>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import MiniProgramPage from 'D:/wx/PartsInquiry/frontend/pages/product/categories.vue'\nwx.createPage(MiniProgramPage)"],"names":["get","post","put","uni","del"],"mappings":";;;AAqBA,MAAK,YAAU;AAAA,EACd,OAAO;AACN,WAAO,EAAE,MAAM,IAAI,MAAM,CAAA,EAAG;AAAA,EAC5B;AAAA,EACD,SAAS;AAAE,SAAK;EAAU;AAAA,EAC1B,SAAS;AAAA,IACR,MAAM,SAAS;AACd,UAAI;AACH,cAAM,MAAM,MAAMA,YAAG,IAAC,yBAAyB;AAC/C,aAAK,OAAO,MAAM,QAAQ,2BAAK,IAAI,IAAI,IAAI,OAAQ,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAA;AAAA,eACtE,GAAG;AAAA,MAAC;AAAA,IACb;AAAA,IACD,MAAM,SAAS;AACd,UAAI,CAAC,KAAK;AAAM;AAChB,YAAMC,YAAAA,KAAK,2BAA2B,EAAE,MAAM,KAAK,KAAG,CAAG;AACzD,WAAK,OAAO;AACZ,WAAK,OAAO;AAAA,IACZ;AAAA,IACD,MAAM,OAAO,GAAG;AACf,YAAMC,YAAG,IAAC,6BAA6B,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM;AAC7DC,oBAAG,MAAC,UAAU,EAAE,OAAO,OAAO,MAAM,WAAW;AAAA,IAC/C;AAAA,IACD,MAAM,OAAO,GAAG;AACfA,oBAAG,MAAC,UAAU,EAAE,SAAS,YAAY,SAAS,OAAO,MAAM;AAC1D,YAAI,CAAC,EAAE;AAAS;AAChB,cAAMC,gBAAI,6BAA6B,EAAE,EAAE;AAC3C,aAAK,OAAO;AAAA,MACb,EAAC,CAAC;AAAA,IACH;AAAA,EACD;AACD;;;;;;;;;;;;;;;;;;;;;;AClDA,GAAG,WAAW,eAAe;"}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
{"version":3,"file":"select.js","sources":["pages/product/select.vue","../../../../Downloads/HBuilderX.4.76.2025082103/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvcHJvZHVjdC9zZWxlY3QudnVl"],"sourcesContent":["<template>\r\n\t<view class=\"page\">\r\n\t\t<view class=\"search\">\r\n\t\t\t<input v-model=\"kw\" placeholder=\"搜索商品名称/编码\" @confirm=\"search\" />\r\n\t\t\t<button size=\"mini\" @click=\"search\">搜索</button>\r\n\t\t</view>\r\n\t\t<scroll-view scroll-y class=\"list\">\r\n\t\t\t<view class=\"item\" v-for=\"p in products\" :key=\"p.id\" @click=\"select(p)\">\r\n\t\t\t\t<view class=\"name\">{{ p.name }}</view>\r\n\t\t\t\t<view class=\"meta\">{{ (p.brand||'') + ' ' + (p.model||'') + ' ' + (p.spec||'') }} · 库存:{{ p.stock ?? 0 }}</view>\r\n\t\t\t</view>\r\n\t\t</scroll-view>\r\n\t</view>\r\n</template>\r\n\r\n<script>\r\n\timport { get } from '../../common/http.js'\r\n\texport default {\r\n\t\tdata() { return { kw: '', products: [] } },\r\n\t\tonLoad() { this.search() },\r\n\t\tmethods: {\r\n\t\t\tasync search() {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tconst res = await get('/api/products', { kw: this.kw, page: 1, size: 50 })\r\n\t\t\t\t\tthis.products = Array.isArray(res?.list) ? res.list : (Array.isArray(res) ? res : [])\r\n\t\t\t\t} catch(e) { uni.showToast({ title: '加载失败', icon: 'none' }) }\r\n\t\t\t},\r\n\t\t\tselect(p) {\r\n\t\t\t\tconst opener = getCurrentPages()[getCurrentPages().length-2]\r\n\t\t\t\tif (opener && opener.$vm && opener.$vm.items) {\r\n\t\t\t\t\tconst initPrice = Number((p.retailPrice != null ? p.retailPrice : (p.price || 0)))\r\n\t\t\t\t\topener.$vm.items.push({ productId: p.id, productName: p.name, quantity: 1, unitPrice: initPrice, _autoPrice: true })\r\n\t\t\t\t}\r\n\t\t\t\tuni.navigateBack()\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n</script>\r\n\r\n<style>\r\n\t.page { display:flex; flex-direction: column; height: 100vh; }\r\n\t.search { display:flex; gap: 12rpx; padding: 16rpx; background:#fff; }\r\n\t.search input { flex:1; background:#f6f6f6; border-radius: 12rpx; padding: 12rpx; }\r\n\t.list { flex:1; }\r\n\t.item { padding: 20rpx 24rpx; background:#fff; border-bottom: 1rpx solid #f1f1f1; }\r\n\t.name { color:#333; margin-bottom: 6rpx; }\r\n\t.meta { color:#888; font-size: 24rpx; }\r\n</style>\r\n\r\n\r\n\r\n","import MiniProgramPage from 'C:/Users/21826/Desktop/Wj/PartsInquiry/frontend/pages/product/select.vue'\nwx.createPage(MiniProgramPage)"],"names":["get","uni"],"mappings":";;;AAiBC,MAAK,YAAU;AAAA,EACd,OAAO;AAAE,WAAO,EAAE,IAAI,IAAI,UAAU,CAAA;EAAM;AAAA,EAC1C,SAAS;AAAE,SAAK;EAAU;AAAA,EAC1B,SAAS;AAAA,IACR,MAAM,SAAS;AACd,UAAI;AACH,cAAM,MAAM,MAAMA,gBAAI,iBAAiB,EAAE,IAAI,KAAK,IAAI,MAAM,GAAG,MAAM,GAAC,CAAG;AACzE,aAAK,WAAW,MAAM,QAAQ,2BAAK,IAAI,IAAI,IAAI,OAAQ,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAA;AAAA,eAC3E,GAAG;AAAEC,sBAAAA,MAAI,UAAU,EAAE,OAAO,QAAQ,MAAM,OAAO,CAAC;AAAA,MAAE;AAAA,IAC5D;AAAA,IACD,OAAO,GAAG;AACT,YAAM,SAAS,gBAAiB,EAAC,gBAAe,EAAG,SAAO,CAAC;AAC3D,UAAI,UAAU,OAAO,OAAO,OAAO,IAAI,OAAO;AAC7C,cAAM,YAAY,OAAQ,EAAE,eAAe,OAAO,EAAE,cAAe,EAAE,SAAS,CAAG;AACjF,eAAO,IAAI,MAAM,KAAK,EAAE,WAAW,EAAE,IAAI,aAAa,EAAE,MAAM,UAAU,GAAG,WAAW,WAAW,YAAY,MAAM;AAAA,MACpH;AACAA,oBAAAA,MAAI,aAAa;AAAA,IAClB;AAAA,EACD;AACD;;;;;;;;;;;;;;;;;;;ACnCD,GAAG,WAAW,eAAe;"}
{"version":3,"file":"select.js","sources":["pages/product/select.vue","../../../软件/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvcHJvZHVjdC9zZWxlY3QudnVl"],"sourcesContent":["<template>\n\t<view class=\"page\">\n\t\t<view class=\"search\">\n\t\t\t<input v-model=\"kw\" placeholder=\"搜索商品名称/编码\" @confirm=\"search\" />\n\t\t\t<button size=\"mini\" @click=\"search\">搜索</button>\n\t\t</view>\n\t\t<scroll-view scroll-y class=\"list\">\n\t\t\t<view class=\"item\" v-for=\"p in products\" :key=\"p.id\" @click=\"select(p)\">\n\t\t\t\t<view class=\"name\">{{ p.name }}</view>\n\t\t\t\t<view class=\"meta\">{{ (p.brand||'') + ' ' + (p.model||'') + ' ' + (p.spec||'') }} · 库存:{{ p.stock ?? 0 }}</view>\n\t\t\t</view>\n\t\t</scroll-view>\n\t</view>\n</template>\n\n<script>\n\timport { get } from '../../common/http.js'\n\texport default {\n\t\tdata() { return { kw: '', products: [] } },\n\t\tonLoad() { this.search() },\n\t\tmethods: {\n\t\t\tasync search() {\n\t\t\t\ttry {\n\t\t\t\t\tconst res = await get('/api/products', { kw: this.kw, page: 1, size: 50 })\n\t\t\t\t\tthis.products = Array.isArray(res?.list) ? res.list : (Array.isArray(res) ? res : [])\n\t\t\t\t} catch(e) { uni.showToast({ title: '加载失败', icon: 'none' }) }\n\t\t\t},\n\t\t\tselect(p) {\n\t\t\t\tconst opener = getCurrentPages()[getCurrentPages().length-2]\n\t\t\t\tif (opener && opener.$vm && opener.$vm.items) {\n\t\t\t\t\tconst initPrice = Number((p.retailPrice != null ? p.retailPrice : (p.price || 0)))\n\t\t\t\t\topener.$vm.items.push({ productId: p.id, productName: p.name, quantity: 1, unitPrice: initPrice, _autoPrice: true })\n\t\t\t\t}\n\t\t\t\tuni.navigateBack()\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<style lang=\"scss\">\n\t.page { display:flex; flex-direction: column; height: 100vh; }\n\t.search { display:flex; gap: 12rpx; padding: 16rpx; background:$uni-bg-color-grey; }\n\t.search input { flex:1; background:$uni-bg-color-hover; border-radius: 12rpx; padding: 12rpx; color:$uni-text-color; }\n\t.list { flex:1; }\n\t.item { padding: 20rpx 24rpx; background:$uni-bg-color-grey; border-bottom: 1rpx solid $uni-border-color; }\n\t.name { color:$uni-text-color; margin-bottom: 6rpx; }\n\t.meta { color:$uni-text-color-grey; font-size: 24rpx; }\n</style>\n\n\n\n","import MiniProgramPage from 'D:/wx/PartsInquiry/frontend/pages/product/select.vue'\nwx.createPage(MiniProgramPage)"],"names":["get","uni"],"mappings":";;;AAiBC,MAAK,YAAU;AAAA,EACd,OAAO;AAAE,WAAO,EAAE,IAAI,IAAI,UAAU,CAAA;EAAM;AAAA,EAC1C,SAAS;AAAE,SAAK;EAAU;AAAA,EAC1B,SAAS;AAAA,IACR,MAAM,SAAS;AACd,UAAI;AACH,cAAM,MAAM,MAAMA,gBAAI,iBAAiB,EAAE,IAAI,KAAK,IAAI,MAAM,GAAG,MAAM,GAAC,CAAG;AACzE,aAAK,WAAW,MAAM,QAAQ,2BAAK,IAAI,IAAI,IAAI,OAAQ,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAA;AAAA,eAC3E,GAAG;AAAEC,sBAAAA,MAAI,UAAU,EAAE,OAAO,QAAQ,MAAM,OAAO,CAAC;AAAA,MAAE;AAAA,IAC5D;AAAA,IACD,OAAO,GAAG;AACT,YAAM,SAAS,gBAAiB,EAAC,gBAAe,EAAG,SAAO,CAAC;AAC3D,UAAI,UAAU,OAAO,OAAO,OAAO,IAAI,OAAO;AAC7C,cAAM,YAAY,OAAQ,EAAE,eAAe,OAAO,EAAE,cAAe,EAAE,SAAS,CAAG;AACjF,eAAO,IAAI,MAAM,KAAK,EAAE,WAAW,EAAE,IAAI,aAAa,EAAE,MAAM,UAAU,GAAG,WAAW,WAAW,YAAY,MAAM;AAAA,MACpH;AACAA,oBAAAA,MAAI,aAAa;AAAA,IAClB;AAAA,EACD;AACD;;;;;;;;;;;;;;;;;;;ACnCD,GAAG,WAAW,eAAe;"}

View File

@@ -1 +1 @@
{"version":3,"file":"settings.js","sources":["pages/product/settings.vue","../../../../Downloads/HBuilderX.4.76.2025082103/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvcHJvZHVjdC9zZXR0aW5ncy52dWU"],"sourcesContent":["<template>\r\n\t<view class=\"page\">\r\n\t\t<view class=\"item\">\r\n\t\t\t<text>隐藏零库存商品</text>\r\n\t\t\t<switch :checked=\"settings.hideZeroStock\" @change=\"(e)=>update('hideZeroStock', e.detail.value)\" />\r\n\t\t</view>\r\n\t\t<view class=\"item\">\r\n\t\t\t<text>隐藏进货价</text>\r\n\t\t\t<switch :checked=\"settings.hidePurchasePrice\" @change=\"(e)=>update('hidePurchasePrice', e.detail.value)\" />\r\n\t\t</view>\r\n\t</view>\r\n</template>\r\n\r\n<script>\r\nimport { get, put } from '../../common/http.js'\r\n\r\nexport default {\r\n\tdata() {\r\n\t\treturn { settings: { hideZeroStock: false, hidePurchasePrice: false } }\r\n\t},\r\n\tonLoad() { this.load() },\r\n\tmethods: {\r\n\t\tasync load() {\r\n\t\t\ttry {\r\n\t\t\t\tconst res = await get('/api/product-settings')\r\n\t\t\t\tthis.settings = { hideZeroStock: !!res?.hideZeroStock, hidePurchasePrice: !!res?.hidePurchasePrice }\r\n\t\t\t} catch (_) {}\r\n\t\t},\r\n\t\tasync update(key, val) {\r\n\t\t\tconst next = { ...this.settings, [key]: val }\r\n\t\t\tthis.settings = next\r\n\t\t\ttry { await put('/api/product-settings', next) } catch (_) {}\r\n\t\t}\r\n\t}\r\n}\r\n</script>\r\n\r\n<style>\r\n.page { background:#fff; }\r\n.item { display:flex; justify-content: space-between; align-items:center; padding: 20rpx; border-bottom: 1rpx solid #f1f1f1; }\r\n</style>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import MiniProgramPage from 'C:/Users/21826/Desktop/Wj/PartsInquiry/frontend/pages/product/settings.vue'\nwx.createPage(MiniProgramPage)"],"names":["get","put"],"mappings":";;;AAgBA,MAAK,YAAU;AAAA,EACd,OAAO;AACN,WAAO,EAAE,UAAU,EAAE,eAAe,OAAO,mBAAmB,QAAQ;AAAA,EACtE;AAAA,EACD,SAAS;AAAE,SAAK;EAAQ;AAAA,EACxB,SAAS;AAAA,IACR,MAAM,OAAO;AACZ,UAAI;AACH,cAAM,MAAM,MAAMA,YAAG,IAAC,uBAAuB;AAC7C,aAAK,WAAW,EAAE,eAAe,CAAC,EAAC,2BAAK,gBAAe,mBAAmB,CAAC,EAAC,2BAAK,mBAAkB;AAAA,eAC3F,GAAG;AAAA,MAAC;AAAA,IACb;AAAA,IACD,MAAM,OAAO,KAAK,KAAK;AACtB,YAAM,OAAO,EAAE,GAAG,KAAK,UAAU,CAAC,GAAG,GAAG,IAAI;AAC5C,WAAK,WAAW;AAChB,UAAI;AAAE,cAAMC,YAAAA,IAAI,yBAAyB,IAAI;AAAA,MAAI,SAAO,GAAG;AAAA,MAAC;AAAA,IAC7D;AAAA,EACD;AACD;;;;;;;;;;ACjCA,GAAG,WAAW,eAAe;"}
{"version":3,"file":"settings.js","sources":["pages/product/settings.vue","../../../软件/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvcHJvZHVjdC9zZXR0aW5ncy52dWU"],"sourcesContent":["<template>\r\n\t<view class=\"page\">\r\n\t\t<view class=\"item\">\r\n\t\t\t<text>隐藏零库存商品</text>\r\n\t\t\t<switch :checked=\"settings.hideZeroStock\" @change=\"(e)=>update('hideZeroStock', e.detail.value)\" />\r\n\t\t</view>\r\n\t\t<view class=\"item\">\r\n\t\t\t<text>隐藏进货价</text>\r\n\t\t\t<switch :checked=\"settings.hidePurchasePrice\" @change=\"(e)=>update('hidePurchasePrice', e.detail.value)\" />\r\n\t\t</view>\r\n\t</view>\r\n</template>\r\n\r\n<script>\r\nimport { get, put } from '../../common/http.js'\r\n\r\nexport default {\r\n\tdata() {\r\n\t\treturn { settings: { hideZeroStock: false, hidePurchasePrice: false } }\r\n\t},\r\n\tonLoad() { this.load() },\r\n\tmethods: {\r\n\t\tasync load() {\r\n\t\t\ttry {\r\n\t\t\t\tconst res = await get('/api/product-settings')\r\n\t\t\t\tthis.settings = { hideZeroStock: !!res?.hideZeroStock, hidePurchasePrice: !!res?.hidePurchasePrice }\r\n\t\t\t} catch (_) {}\r\n\t\t},\r\n\t\tasync update(key, val) {\r\n\t\t\tconst next = { ...this.settings, [key]: val }\r\n\t\t\tthis.settings = next\r\n\t\t\ttry { await put('/api/product-settings', next) } catch (_) {}\r\n\t\t}\r\n\t}\r\n}\r\n</script>\r\n\r\n<style>\r\n.page { background:#fff; }\r\n.item { display:flex; justify-content: space-between; align-items:center; padding: 20rpx; border-bottom: 1rpx solid #f1f1f1; }\r\n</style>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import MiniProgramPage from 'D:/wx/PartsInquiry/frontend/pages/product/settings.vue'\nwx.createPage(MiniProgramPage)"],"names":["get","put"],"mappings":";;;AAgBA,MAAK,YAAU;AAAA,EACd,OAAO;AACN,WAAO,EAAE,UAAU,EAAE,eAAe,OAAO,mBAAmB,QAAQ;AAAA,EACtE;AAAA,EACD,SAAS;AAAE,SAAK;EAAQ;AAAA,EACxB,SAAS;AAAA,IACR,MAAM,OAAO;AACZ,UAAI;AACH,cAAM,MAAM,MAAMA,YAAG,IAAC,uBAAuB;AAC7C,aAAK,WAAW,EAAE,eAAe,CAAC,EAAC,2BAAK,gBAAe,mBAAmB,CAAC,EAAC,2BAAK,mBAAkB;AAAA,eAC3F,GAAG;AAAA,MAAC;AAAA,IACb;AAAA,IACD,MAAM,OAAO,KAAK,KAAK;AACtB,YAAM,OAAO,EAAE,GAAG,KAAK,UAAU,CAAC,GAAG,GAAG,IAAI;AAC5C,WAAK,WAAW;AAChB,UAAI;AAAE,cAAMC,YAAAA,IAAI,yBAAyB,IAAI;AAAA,MAAI,SAAO,GAAG;AAAA,MAAC;AAAA,IAC7D;AAAA,EACD;AACD;;;;;;;;;;ACjCA,GAAG,WAAW,eAAe;"}

View File

@@ -1 +1 @@
{"version":3,"file":"units.js","sources":["pages/product/units.vue","../../../../Downloads/HBuilderX.4.76.2025082103/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvcHJvZHVjdC91bml0cy52dWU"],"sourcesContent":["<template>\r\n\t<view class=\"page\">\r\n\t\t<view class=\"toolbar\">\r\n\t\t\t<input v-model.trim=\"name\" placeholder=\"新单位名称\" />\r\n\t\t\t<button size=\"mini\" @click=\"create\">新增</button>\r\n\t\t</view>\r\n\t\t<scroll-view scroll-y class=\"list\">\r\n\t\t\t<view class=\"item\" v-for=\"u in list\" :key=\"u.id\">\r\n\t\t\t\t<input v-model.trim=\"u.name\" />\r\n\t\t\t\t<view class=\"ops\">\r\n\t\t\t\t\t<button size=\"mini\" @click=\"update(u)\">保存</button>\r\n\t\t\t\t\t<button size=\"mini\" type=\"warn\" @click=\"remove(u)\">删除</button>\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\t\t</scroll-view>\r\n\t</view>\r\n</template>\r\n\r\n<script>\r\nimport { get, post, put, del } from '../../common/http.js'\r\n\r\nexport default {\r\n\tdata() {\r\n\t\treturn { name: '', list: [] }\r\n\t},\r\n\tonLoad() { this.reload() },\r\n\tmethods: {\r\n\t\tasync reload() {\r\n\t\t\ttry {\r\n\t\t\t\tconst res = await get('/api/product-units')\r\n\t\t\t\tthis.list = Array.isArray(res?.list) ? res.list : (Array.isArray(res) ? res : [])\r\n\t\t\t} catch (_) {}\r\n\t\t},\r\n\t\tasync create() {\r\n\t\t\tif (!this.name) return\r\n\t\t\tawait post('/api/product-units', { name: this.name })\r\n\t\t\tthis.name = ''\r\n\t\t\tthis.reload()\r\n\t\t},\r\n\t\tasync update(u) {\r\n\t\t\tawait put('/api/product-units/' + u.id, { name: u.name })\r\n\t\t\tuni.showToast({ title: '已保存', icon: 'success' })\r\n\t\t},\r\n\t\tasync remove(u) {\r\n\t\t\tuni.showModal({ content: '确定删除该单位?', success: async (r) => {\r\n\t\t\t\tif (!r.confirm) return\r\n\t\t\t\tawait del('/api/product-units/' + u.id)\r\n\t\t\t\tthis.reload()\r\n\t\t\t}})\r\n\t\t}\r\n\t}\r\n}\r\n</script>\r\n\r\n<style>\r\n.page { display:flex; flex-direction: column; height: 100vh; }\r\n.toolbar { display:flex; gap: 12rpx; padding: 16rpx; background:#fff; }\r\n.toolbar input { flex:1; background:#f6f6f6; border-radius: 12rpx; padding: 12rpx; }\r\n.list { flex:1; }\r\n.item { display:flex; gap: 12rpx; align-items:center; padding: 16rpx; background:#fff; border-bottom: 1rpx solid #f1f1f1; }\r\n.item input { flex:1; background:#f7f7f7; border-radius: 10rpx; padding: 12rpx; }\r\n.ops { display:flex; gap: 10rpx; }\r\n</style>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import MiniProgramPage from 'C:/Users/21826/Desktop/Wj/PartsInquiry/frontend/pages/product/units.vue'\nwx.createPage(MiniProgramPage)"],"names":["get","post","put","uni","del"],"mappings":";;;AAqBA,MAAK,YAAU;AAAA,EACd,OAAO;AACN,WAAO,EAAE,MAAM,IAAI,MAAM,CAAA,EAAG;AAAA,EAC5B;AAAA,EACD,SAAS;AAAE,SAAK;EAAU;AAAA,EAC1B,SAAS;AAAA,IACR,MAAM,SAAS;AACd,UAAI;AACH,cAAM,MAAM,MAAMA,YAAG,IAAC,oBAAoB;AAC1C,aAAK,OAAO,MAAM,QAAQ,2BAAK,IAAI,IAAI,IAAI,OAAQ,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAA;AAAA,eACtE,GAAG;AAAA,MAAC;AAAA,IACb;AAAA,IACD,MAAM,SAAS;AACd,UAAI,CAAC,KAAK;AAAM;AAChB,YAAMC,YAAAA,KAAK,sBAAsB,EAAE,MAAM,KAAK,KAAG,CAAG;AACpD,WAAK,OAAO;AACZ,WAAK,OAAO;AAAA,IACZ;AAAA,IACD,MAAM,OAAO,GAAG;AACf,YAAMC,YAAG,IAAC,wBAAwB,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM;AACxDC,oBAAG,MAAC,UAAU,EAAE,OAAO,OAAO,MAAM,WAAW;AAAA,IAC/C;AAAA,IACD,MAAM,OAAO,GAAG;AACfA,oBAAG,MAAC,UAAU,EAAE,SAAS,YAAY,SAAS,OAAO,MAAM;AAC1D,YAAI,CAAC,EAAE;AAAS;AAChB,cAAMC,gBAAI,wBAAwB,EAAE,EAAE;AACtC,aAAK,OAAO;AAAA,MACb,EAAC,CAAC;AAAA,IACH;AAAA,EACD;AACD;;;;;;;;;;;;;;;;;;;;;;AClDA,GAAG,WAAW,eAAe;"}
{"version":3,"file":"units.js","sources":["pages/product/units.vue","../../../软件/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvcHJvZHVjdC91bml0cy52dWU"],"sourcesContent":["<template>\r\n\t<view class=\"page\">\r\n\t\t<view class=\"toolbar\">\r\n\t\t\t<input v-model.trim=\"name\" placeholder=\"新单位名称\" />\r\n\t\t\t<button size=\"mini\" @click=\"create\">新增</button>\r\n\t\t</view>\r\n\t\t<scroll-view scroll-y class=\"list\">\r\n\t\t\t<view class=\"item\" v-for=\"u in list\" :key=\"u.id\">\r\n\t\t\t\t<input v-model.trim=\"u.name\" />\r\n\t\t\t\t<view class=\"ops\">\r\n\t\t\t\t\t<button size=\"mini\" @click=\"update(u)\">保存</button>\r\n\t\t\t\t\t<button size=\"mini\" type=\"warn\" @click=\"remove(u)\">删除</button>\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\t\t</scroll-view>\r\n\t</view>\r\n</template>\r\n\r\n<script>\r\nimport { get, post, put, del } from '../../common/http.js'\r\n\r\nexport default {\r\n\tdata() {\r\n\t\treturn { name: '', list: [] }\r\n\t},\r\n\tonLoad() { this.reload() },\r\n\tmethods: {\r\n\t\tasync reload() {\r\n\t\t\ttry {\r\n\t\t\t\tconst res = await get('/api/product-units')\r\n\t\t\t\tthis.list = Array.isArray(res?.list) ? res.list : (Array.isArray(res) ? res : [])\r\n\t\t\t} catch (_) {}\r\n\t\t},\r\n\t\tasync create() {\r\n\t\t\tif (!this.name) return\r\n\t\t\tawait post('/api/product-units', { name: this.name })\r\n\t\t\tthis.name = ''\r\n\t\t\tthis.reload()\r\n\t\t},\r\n\t\tasync update(u) {\r\n\t\t\tawait put('/api/product-units/' + u.id, { name: u.name })\r\n\t\t\tuni.showToast({ title: '已保存', icon: 'success' })\r\n\t\t},\r\n\t\tasync remove(u) {\r\n\t\t\tuni.showModal({ content: '确定删除该单位?', success: async (r) => {\r\n\t\t\t\tif (!r.confirm) return\r\n\t\t\t\tawait del('/api/product-units/' + u.id)\r\n\t\t\t\tthis.reload()\r\n\t\t\t}})\r\n\t\t}\r\n\t}\r\n}\r\n</script>\r\n\r\n<style>\r\n.page { display:flex; flex-direction: column; height: 100vh; }\r\n.toolbar { display:flex; gap: 12rpx; padding: 16rpx; background:#fff; }\r\n.toolbar input { flex:1; background:#f6f6f6; border-radius: 12rpx; padding: 12rpx; }\r\n.list { flex:1; }\r\n.item { display:flex; gap: 12rpx; align-items:center; padding: 16rpx; background:#fff; border-bottom: 1rpx solid #f1f1f1; }\r\n.item input { flex:1; background:#f7f7f7; border-radius: 10rpx; padding: 12rpx; }\r\n.ops { display:flex; gap: 10rpx; }\r\n</style>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import MiniProgramPage from 'D:/wx/PartsInquiry/frontend/pages/product/units.vue'\nwx.createPage(MiniProgramPage)"],"names":["get","post","put","uni","del"],"mappings":";;;AAqBA,MAAK,YAAU;AAAA,EACd,OAAO;AACN,WAAO,EAAE,MAAM,IAAI,MAAM,CAAA,EAAG;AAAA,EAC5B;AAAA,EACD,SAAS;AAAE,SAAK;EAAU;AAAA,EAC1B,SAAS;AAAA,IACR,MAAM,SAAS;AACd,UAAI;AACH,cAAM,MAAM,MAAMA,YAAG,IAAC,oBAAoB;AAC1C,aAAK,OAAO,MAAM,QAAQ,2BAAK,IAAI,IAAI,IAAI,OAAQ,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAA;AAAA,eACtE,GAAG;AAAA,MAAC;AAAA,IACb;AAAA,IACD,MAAM,SAAS;AACd,UAAI,CAAC,KAAK;AAAM;AAChB,YAAMC,YAAAA,KAAK,sBAAsB,EAAE,MAAM,KAAK,KAAG,CAAG;AACpD,WAAK,OAAO;AACZ,WAAK,OAAO;AAAA,IACZ;AAAA,IACD,MAAM,OAAO,GAAG;AACf,YAAMC,YAAG,IAAC,wBAAwB,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM;AACxDC,oBAAG,MAAC,UAAU,EAAE,OAAO,OAAO,MAAM,WAAW;AAAA,IAC/C;AAAA,IACD,MAAM,OAAO,GAAG;AACfA,oBAAG,MAAC,UAAU,EAAE,SAAS,YAAY,SAAS,OAAO,MAAM;AAC1D,YAAI,CAAC,EAAE;AAAS;AAChB,cAAMC,gBAAI,wBAAwB,EAAE,EAAE;AACtC,aAAK,OAAO;AAAA,MACb,EAAC,CAAC;AAAA,IACH;AAAA,EACD;AACD;;;;;;;;;;;;;;;;;;;;;;AClDA,GAAG,WAAW,eAAe;"}

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
{"version":3,"file":"form.js","sources":["pages/supplier/form.vue","../../../../Downloads/HBuilderX.4.76.2025082103/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvc3VwcGxpZXIvZm9ybS52dWU"],"sourcesContent":["<template>\r\n\t<view class=\"page\">\r\n\t\t<view class=\"field\"><text class=\"label\">供应商名称</text><input class=\"value\" v-model=\"form.name\" placeholder=\"必填\" /></view>\r\n\t\t<view class=\"field\"><text class=\"label\">联系人</text><input class=\"value\" v-model=\"form.contactName\" placeholder=\"可选\" /></view>\r\n\t\t<view class=\"field\"><text class=\"label\">手机</text><input class=\"value\" v-model=\"form.mobile\" placeholder=\"可选\" /></view>\r\n\t\t<view class=\"field\"><text class=\"label\">电话</text><input class=\"value\" v-model=\"form.phone\" placeholder=\"可选(座机)\" /></view>\r\n\t\t<view class=\"field\"><text class=\"label\">经营地址</text><input class=\"value\" v-model=\"form.address\" placeholder=\"可选\" /></view>\r\n\t\t<view class=\"field\"><text class=\"label\">初始应付款</text><input class=\"value\" type=\"digit\" v-model.number=\"form.apOpening\" placeholder=\"默认 0.00\" /></view>\r\n\t\t<view class=\"field\"><text class=\"label\">应付款</text><input class=\"value\" type=\"digit\" v-model.number=\"form.apPayable\" placeholder=\"默认 0.00\" /></view>\r\n\t\t<view class=\"textarea\"><textarea v-model=\"form.remark\" maxlength=\"200\" placeholder=\"备注最多200字\"></textarea></view>\r\n\r\n\t\t<view class=\"bottom\"><button class=\"primary\" @click=\"save\">保存</button></view>\r\n\t</view>\r\n</template>\r\n\r\n<script>\r\nimport { post, put } from '../../common/http.js'\r\nexport default {\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tid: null,\r\n\t\t\tform: { name:'', contactName:'', mobile:'', phone:'', address:'', apOpening:0, apPayable:0, remark:'' }\r\n\t\t}\r\n\t},\r\n\tonLoad(query) { if (query && query.id) { this.id = Number(query.id) } },\r\n\tmethods: {\r\n\t\tasync save() {\r\n\t\t\tif (!this.form.name) return uni.showToast({ title:'请填写供应商名称', icon:'none' })\r\n\t\t\ttry {\r\n\t\t\t\tif (this.id) await put(`/api/suppliers/${this.id}`, this.form)\r\n\t\t\t\telse await post('/api/suppliers', this.form)\r\n\t\t\t\tuni.showToast({ title:'保存成功', icon:'success' })\r\n\t\t\t\tsetTimeout(() => uni.navigateBack(), 500)\r\n\t\t\t} catch(e) { uni.showToast({ title: e?.message || '保存失败', icon:'none' }) }\r\n\t\t}\r\n\t}\r\n}\r\n</script>\r\n\r\n<style>\r\n.page { padding-bottom: 140rpx; }\r\n.field { display:flex; justify-content: space-between; padding: 22rpx 24rpx; background:#fff; border-bottom:1rpx solid #eee; }\r\n.label { color:#666; }\r\n.value { color:#333; text-align: right; flex: 1; }\r\n.textarea { padding: 16rpx 24rpx; background:#fff; margin-top: 12rpx; }\r\n.bottom { position: fixed; left:0; right:0; bottom:0; background:#fff; padding: 16rpx 24rpx calc(env(safe-area-inset-bottom) + 16rpx); box-shadow: 0 -4rpx 12rpx rgba(0,0,0,0.06); }\r\n.primary { width: 100%; background: linear-gradient(135deg, #A0E4FF 0%, #17A2C4 100%); color:#fff; border-radius: 999rpx; padding: 20rpx 0; }\r\n</style>\r\n\r\n\r\n","import MiniProgramPage from 'C:/Users/21826/Desktop/Wj/PartsInquiry/frontend/pages/supplier/form.vue'\nwx.createPage(MiniProgramPage)"],"names":["uni","put","post"],"mappings":";;;AAiBA,MAAK,YAAU;AAAA,EACd,OAAO;AACN,WAAO;AAAA,MACN,IAAI;AAAA,MACJ,MAAM,EAAE,MAAK,IAAI,aAAY,IAAI,QAAO,IAAI,OAAM,IAAI,SAAQ,IAAI,WAAU,GAAG,WAAU,GAAG,QAAO,GAAG;AAAA,IACvG;AAAA,EACA;AAAA,EACD,OAAO,OAAO;AAAE,QAAI,SAAS,MAAM,IAAI;AAAE,WAAK,KAAK,OAAO,MAAM,EAAE;AAAA,IAAE;AAAA,EAAG;AAAA,EACvE,SAAS;AAAA,IACR,MAAM,OAAO;AACZ,UAAI,CAAC,KAAK,KAAK;AAAM,eAAOA,cAAG,MAAC,UAAU,EAAE,OAAM,YAAY,MAAK,QAAQ;AAC3E,UAAI;AACH,YAAI,KAAK;AAAI,gBAAMC,YAAAA,IAAI,kBAAkB,KAAK,EAAE,IAAI,KAAK,IAAI;AAAA;AACxD,gBAAMC,iBAAK,kBAAkB,KAAK,IAAI;AAC3CF,sBAAG,MAAC,UAAU,EAAE,OAAM,QAAQ,MAAK,WAAW;AAC9C,mBAAW,MAAMA,cAAAA,MAAI,aAAY,GAAI,GAAG;AAAA,MACzC,SAAQ,GAAG;AAAEA,sBAAG,MAAC,UAAU,EAAE,QAAO,uBAAG,YAAW,QAAQ,MAAK,OAAQ,CAAA;AAAA,MAAE;AAAA,IAC1E;AAAA,EACD;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnCA,GAAG,WAAW,eAAe;"}
{"version":3,"file":"form.js","sources":["pages/supplier/form.vue","../../../软件/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvc3VwcGxpZXIvZm9ybS52dWU"],"sourcesContent":["<template>\n\t<view class=\"page\">\n\t\t<view class=\"field\"><text class=\"label\">供应商名称</text><input class=\"value\" v-model=\"form.name\" placeholder=\"必填\" /></view>\n\t\t<view class=\"field\"><text class=\"label\">联系人</text><input class=\"value\" v-model=\"form.contactName\" placeholder=\"可选\" /></view>\n\t\t<view class=\"field\"><text class=\"label\">手机</text><input class=\"value\" v-model=\"form.mobile\" placeholder=\"可选\" /></view>\n\t\t<view class=\"field\"><text class=\"label\">电话</text><input class=\"value\" v-model=\"form.phone\" placeholder=\"可选(座机)\" /></view>\n\t\t<view class=\"field\"><text class=\"label\">经营地址</text><input class=\"value\" v-model=\"form.address\" placeholder=\"可选\" /></view>\n\t\t<view class=\"field\"><text class=\"label\">初始应付款</text><input class=\"value\" type=\"digit\" v-model.number=\"form.apOpening\" placeholder=\"默认 0.00\" /></view>\n\t\t<view class=\"field\"><text class=\"label\">应付款</text><input class=\"value\" type=\"digit\" v-model.number=\"form.apPayable\" placeholder=\"默认 0.00\" /></view>\n\t\t<view class=\"textarea\"><textarea v-model=\"form.remark\" maxlength=\"200\" placeholder=\"备注最多200字\"></textarea></view>\n\n\t\t<view class=\"bottom\"><button class=\"primary\" @click=\"save\">保存</button></view>\n\t</view>\n</template>\n\n<script>\nimport { post, put } from '../../common/http.js'\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tid: null,\n\t\t\tform: { name:'', contactName:'', mobile:'', phone:'', address:'', apOpening:0, apPayable:0, remark:'' }\n\t\t}\n\t},\n\tonLoad(query) { if (query && query.id) { this.id = Number(query.id) } },\n\tmethods: {\n\t\tasync save() {\n\t\t\tif (!this.form.name) return uni.showToast({ title:'请填写供应商名称', icon:'none' })\n\t\t\ttry {\n\t\t\t\tif (this.id) await put(`/api/suppliers/${this.id}`, this.form)\n\t\t\t\telse await post('/api/suppliers', this.form)\n\t\t\t\tuni.showToast({ title:'保存成功', icon:'success' })\n\t\t\t\tsetTimeout(() => uni.navigateBack(), 500)\n\t\t\t} catch(e) { uni.showToast({ title: e?.message || '保存失败', icon:'none' }) }\n\t\t}\n\t}\n}\n</script>\n\n<style lang=\"scss\">\n.page { padding-bottom: 140rpx; }\n.field { display:flex; justify-content: space-between; padding: 22rpx 24rpx; background:$uni-bg-color-grey; border-bottom:1rpx solid $uni-border-color; }\n.label { color:$uni-text-color-grey; }\n.value { color:$uni-text-color; text-align: right; flex: 1; }\n.textarea { padding: 16rpx 24rpx; background:$uni-bg-color-grey; margin-top: 12rpx; }\n.bottom { position: fixed; left:0; right:0; bottom:0; background:$uni-bg-color-grey; padding: 16rpx 24rpx calc(env(safe-area-inset-bottom) + 16rpx); box-shadow: 0 -4rpx 12rpx rgba(0,0,0,0.10); }\n.primary { width: 100%; background: $uni-color-primary; color:#fff; border-radius: 999rpx; padding: 20rpx 0; }\n</style>\n\n\n","import MiniProgramPage from 'D:/wx/PartsInquiry/frontend/pages/supplier/form.vue'\nwx.createPage(MiniProgramPage)"],"names":["uni","put","post"],"mappings":";;;AAiBA,MAAK,YAAU;AAAA,EACd,OAAO;AACN,WAAO;AAAA,MACN,IAAI;AAAA,MACJ,MAAM,EAAE,MAAK,IAAI,aAAY,IAAI,QAAO,IAAI,OAAM,IAAI,SAAQ,IAAI,WAAU,GAAG,WAAU,GAAG,QAAO,GAAG;AAAA,IACvG;AAAA,EACA;AAAA,EACD,OAAO,OAAO;AAAE,QAAI,SAAS,MAAM,IAAI;AAAE,WAAK,KAAK,OAAO,MAAM,EAAE;AAAA,IAAE;AAAA,EAAG;AAAA,EACvE,SAAS;AAAA,IACR,MAAM,OAAO;AACZ,UAAI,CAAC,KAAK,KAAK;AAAM,eAAOA,cAAG,MAAC,UAAU,EAAE,OAAM,YAAY,MAAK,QAAQ;AAC3E,UAAI;AACH,YAAI,KAAK;AAAI,gBAAMC,YAAAA,IAAI,kBAAkB,KAAK,EAAE,IAAI,KAAK,IAAI;AAAA;AACxD,gBAAMC,iBAAK,kBAAkB,KAAK,IAAI;AAC3CF,sBAAG,MAAC,UAAU,EAAE,OAAM,QAAQ,MAAK,WAAW;AAC9C,mBAAW,MAAMA,cAAAA,MAAI,aAAY,GAAI,GAAG;AAAA,MACzC,SAAQ,GAAG;AAAEA,sBAAG,MAAC,UAAU,EAAE,QAAO,uBAAG,YAAW,QAAQ,MAAK,OAAQ,CAAA;AAAA,MAAE;AAAA,IAC1E;AAAA,EACD;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnCA,GAAG,WAAW,eAAe;"}

View File

@@ -1 +1 @@
{"version":3,"file":"select.js","sources":["pages/supplier/select.vue","../../../../Downloads/HBuilderX.4.76.2025082103/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvc3VwcGxpZXIvc2VsZWN0LnZ1ZQ"],"sourcesContent":["<template>\r\n\t<view class=\"page\">\r\n\t\t<view class=\"search\">\r\n\t\t\t<input v-model=\"kw\" placeholder=\"搜索供应商名称/电话\" @confirm=\"search\" />\r\n\t\t\t<button size=\"mini\" @click=\"search\">搜索</button>\r\n\t\t\t<button size=\"mini\" :type=\"debtOnly ? 'primary' : 'default'\" @click=\"toggleDebtOnly\">只看欠款</button>\r\n\t\t</view>\r\n\t\t<scroll-view scroll-y class=\"list\">\r\n\t\t\t<view class=\"item\" v-for=\"s in suppliers\" :key=\"s.id\" @click=\"select(s)\">\r\n\t\t\t\t<view class=\"name\">{{ s.name }}</view>\r\n\t\t\t\t<view class=\"meta\">\r\n\t\t\t\t\t{{ s.mobile || '—' }}\r\n\t\t\t\t\t<text v-if=\"typeof s.apPayable === 'number'\">|应付:¥ {{ Number(s.apPayable).toFixed(2) }}</text>\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\t\t</scroll-view>\r\n\t\t<view class=\"bottom\">\r\n\t\t\t<button class=\"primary\" @click=\"createSupplier\">新增供应商</button>\r\n\t\t</view>\r\n\t</view>\r\n</template>\r\n\r\n<script>\r\n\timport { get } from '../../common/http.js'\r\n\texport default {\r\n data() { return { kw: '', debtOnly: false, suppliers: [] } },\r\n\t\tonLoad() { this.search() },\r\n\t\tmethods: {\r\n\t\t\ttoggleDebtOnly() { this.debtOnly = !this.debtOnly; this.search() },\r\n\t\t\tasync search() {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tconst res = await get('/api/suppliers', { kw: this.kw, debtOnly: this.debtOnly, page: 1, size: 50 })\r\n\t\t\t\t\tthis.suppliers = Array.isArray(res?.list) ? res.list : (Array.isArray(res) ? res : [])\r\n\t\t\t\t} catch(e) { uni.showToast({ title: '加载失败', icon: 'none' }) }\r\n\t\t\t},\r\n\t\t\tcreateSupplier() { uni.navigateTo({ url: '/pages/supplier/form' }) },\r\n\t\t\tselect(s) {\r\n\t\t\t\tconst opener = getCurrentPages()[getCurrentPages().length-2]\r\n\t\t\t\tif (opener && opener.$vm) {\r\n\t\t\t\t\topener.$vm.order.supplierId = s.id\r\n\t\t\t\t\topener.$vm.supplierName = s.name\r\n\t\t\t\t}\r\n\t\t\t\tuni.navigateBack()\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n</script>\r\n\r\n<style>\r\n\t.page { display:flex; flex-direction: column; height: 100vh; }\r\n\t.search { display:flex; gap: 12rpx; padding: 16rpx; background:#fff; }\r\n\t.search input { flex:1; background:#f6f6f6; border-radius: 12rpx; padding: 12rpx; }\r\n\t.list { flex:1; }\r\n\t.item { padding: 20rpx 24rpx; background:#fff; border-bottom: 1rpx solid #f1f1f1; }\r\n\t.name { color:#333; margin-bottom: 6rpx; }\r\n\t.meta { color:#888; font-size: 24rpx; }\r\n</style>\r\n\r\n\r\n\r\n","import MiniProgramPage from 'C:/Users/21826/Desktop/Wj/PartsInquiry/frontend/pages/supplier/select.vue'\nwx.createPage(MiniProgramPage)"],"names":["get","uni"],"mappings":";;;AAwBC,MAAK,YAAU;AAAA,EACZ,OAAO;AAAE,WAAO,EAAE,IAAI,IAAI,UAAU,OAAO,WAAW,CAAA;EAAM;AAAA,EAC9D,SAAS;AAAE,SAAK;EAAU;AAAA,EAC1B,SAAS;AAAA,IACR,iBAAiB;AAAE,WAAK,WAAW,CAAC,KAAK;AAAU,WAAK;IAAU;AAAA,IAClE,MAAM,SAAS;AACd,UAAI;AACH,cAAM,MAAM,MAAMA,YAAG,IAAC,kBAAkB,EAAE,IAAI,KAAK,IAAI,UAAU,KAAK,UAAU,MAAM,GAAG,MAAM,IAAI;AACnG,aAAK,YAAY,MAAM,QAAQ,2BAAK,IAAI,IAAI,IAAI,OAAQ,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAA;AAAA,eAC5E,GAAG;AAAEC,sBAAAA,MAAI,UAAU,EAAE,OAAO,QAAQ,MAAM,OAAO,CAAC;AAAA,MAAE;AAAA,IAC5D;AAAA,IACD,iBAAiB;AAAEA,oBAAAA,MAAI,WAAW,EAAE,KAAK,uBAAqB,CAAG;AAAA,IAAG;AAAA,IACpE,OAAO,GAAG;AACT,YAAM,SAAS,gBAAiB,EAAC,gBAAe,EAAG,SAAO,CAAC;AAC3D,UAAI,UAAU,OAAO,KAAK;AACzB,eAAO,IAAI,MAAM,aAAa,EAAE;AAChC,eAAO,IAAI,eAAe,EAAE;AAAA,MAC7B;AACAA,oBAAAA,MAAI,aAAa;AAAA,IAClB;AAAA,EACD;AACD;;;;;;;;;;;;;;;;;;;;;;;;;AC5CD,GAAG,WAAW,eAAe;"}
{"version":3,"file":"select.js","sources":["pages/supplier/select.vue","../../../软件/HBuilderX/plugins/uniapp-cli-vite/uniPage:/cGFnZXMvc3VwcGxpZXIvc2VsZWN0LnZ1ZQ"],"sourcesContent":["<template>\r\n\t<view class=\"page\">\r\n\t\t<view class=\"search\">\r\n\t\t\t<input v-model=\"kw\" placeholder=\"搜索供应商名称/电话\" @confirm=\"search\" />\r\n\t\t\t<button size=\"mini\" @click=\"search\">搜索</button>\r\n\t\t\t<button size=\"mini\" :type=\"debtOnly ? 'primary' : 'default'\" @click=\"toggleDebtOnly\">只看欠款</button>\r\n\t\t</view>\r\n\t\t<scroll-view scroll-y class=\"list\">\r\n\t\t\t<view class=\"item\" v-for=\"s in suppliers\" :key=\"s.id\" @click=\"select(s)\">\r\n\t\t\t\t<view class=\"name\">{{ s.name }}</view>\r\n\t\t\t\t<view class=\"meta\">\r\n\t\t\t\t\t{{ s.mobile || '—' }}\r\n\t\t\t\t\t<text v-if=\"typeof s.apPayable === 'number'\">|应付:¥ {{ Number(s.apPayable).toFixed(2) }}</text>\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\t\t</scroll-view>\r\n\t\t<view class=\"bottom\">\r\n\t\t\t<button class=\"primary\" @click=\"createSupplier\">新增供应商</button>\r\n\t\t</view>\r\n\t</view>\r\n</template>\r\n\r\n<script>\r\n\timport { get } from '../../common/http.js'\r\n\texport default {\r\n data() { return { kw: '', debtOnly: false, suppliers: [] } },\r\n\t\tonLoad() { this.search() },\r\n\t\tmethods: {\r\n\t\t\ttoggleDebtOnly() { this.debtOnly = !this.debtOnly; this.search() },\r\n\t\t\tasync search() {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tconst res = await get('/api/suppliers', { kw: this.kw, debtOnly: this.debtOnly, page: 1, size: 50 })\r\n\t\t\t\t\tthis.suppliers = Array.isArray(res?.list) ? res.list : (Array.isArray(res) ? res : [])\r\n\t\t\t\t} catch(e) { uni.showToast({ title: '加载失败', icon: 'none' }) }\r\n\t\t\t},\r\n\t\t\tcreateSupplier() { uni.navigateTo({ url: '/pages/supplier/form' }) },\r\n\t\t\tselect(s) {\r\n\t\t\t\tconst opener = getCurrentPages()[getCurrentPages().length-2]\r\n\t\t\t\tif (opener && opener.$vm) {\r\n\t\t\t\t\topener.$vm.order.supplierId = s.id\r\n\t\t\t\t\topener.$vm.supplierName = s.name\r\n\t\t\t\t}\r\n\t\t\t\tuni.navigateBack()\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n</script>\r\n\r\n<style>\r\n\t.page { display:flex; flex-direction: column; height: 100vh; }\r\n\t.search { display:flex; gap: 12rpx; padding: 16rpx; background:#fff; }\r\n\t.search input { flex:1; background:#f6f6f6; border-radius: 12rpx; padding: 12rpx; }\r\n\t.list { flex:1; }\r\n\t.item { padding: 20rpx 24rpx; background:#fff; border-bottom: 1rpx solid #f1f1f1; }\r\n\t.name { color:#333; margin-bottom: 6rpx; }\r\n\t.meta { color:#888; font-size: 24rpx; }\r\n</style>\r\n\r\n\r\n\r\n","import MiniProgramPage from 'D:/wx/PartsInquiry/frontend/pages/supplier/select.vue'\nwx.createPage(MiniProgramPage)"],"names":["get","uni"],"mappings":";;;AAwBC,MAAK,YAAU;AAAA,EACZ,OAAO;AAAE,WAAO,EAAE,IAAI,IAAI,UAAU,OAAO,WAAW,CAAA;EAAM;AAAA,EAC9D,SAAS;AAAE,SAAK;EAAU;AAAA,EAC1B,SAAS;AAAA,IACR,iBAAiB;AAAE,WAAK,WAAW,CAAC,KAAK;AAAU,WAAK;IAAU;AAAA,IAClE,MAAM,SAAS;AACd,UAAI;AACH,cAAM,MAAM,MAAMA,YAAG,IAAC,kBAAkB,EAAE,IAAI,KAAK,IAAI,UAAU,KAAK,UAAU,MAAM,GAAG,MAAM,IAAI;AACnG,aAAK,YAAY,MAAM,QAAQ,2BAAK,IAAI,IAAI,IAAI,OAAQ,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAA;AAAA,eAC5E,GAAG;AAAEC,sBAAAA,MAAI,UAAU,EAAE,OAAO,QAAQ,MAAM,OAAO,CAAC;AAAA,MAAE;AAAA,IAC5D;AAAA,IACD,iBAAiB;AAAEA,oBAAAA,MAAI,WAAW,EAAE,KAAK,uBAAqB,CAAG;AAAA,IAAG;AAAA,IACpE,OAAO,GAAG;AACT,YAAM,SAAS,gBAAiB,EAAC,gBAAe,EAAG,SAAO,CAAC;AAC3D,UAAI,UAAU,OAAO,KAAK;AACzB,eAAO,IAAI,MAAM,aAAa,EAAE;AAChC,eAAO,IAAI,eAAe,EAAE;AAAA,MAC7B;AACAA,oBAAAA,MAAI,aAAa;AAAA,IAClB;AAAA,EACD;AACD;;;;;;;;;;;;;;;;;;;;;;;;;AC5CD,GAAG,WAAW,eAAe;"}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

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

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -0,0 +1,24 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>View</title>
<link rel="icon" href="data:,">
<link rel="stylesheet" href="app.css" />
<script>var __uniConfig = {"globalStyle":{},"darkmode":false}</script>
<script>
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
CSS.supports('top: constant(a)'))
document.write(
'<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
(coverSupport ? ', viewport-fit=cover' : '') + '" />')
</script>
</head>
<body>
<div id="app"></div>
<script src="uni-app-view.umd.js"></script>
</body>
</html>

View File

@@ -0,0 +1,11 @@
;(function(){
let u=void 0,isReady=false,onReadyCallbacks=[],isServiceReady=false,onServiceReadyCallbacks=[];
const __uniConfig = {"pages":[],"globalStyle":{"backgroundColor":"#F8F8F8","navigationBar":{"backgroundColor":"#F8F8F8","titleText":"五金配件管家","type":"default","titleColor":"#000000"},"isNVue":false},"nvue":{"compiler":"uni-app","styleCompiler":"uni-app","flex-direction":"column"},"renderer":"auto","appname":"林林林","splashscreen":{"alwaysShowBeforeRender":true,"autoclose":true},"compilerVersion":"4.76","entryPagePath":"pages/index/index","entryPageQuery":"","realEntryPagePath":"","networkTimeout":{"request":60000,"connectSocket":60000,"uploadFile":60000,"downloadFile":60000},"tabBar":{"position":"bottom","color":"#8a7535","selectedColor":"#B4880F","borderStyle":"black","blurEffect":"none","fontSize":"10px","iconWidth":"24px","spacing":"3px","height":"50px","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"}],"backgroundColor":"#ffffff","selectedIndex":0,"shown":true},"locales":{},"darkmode":false,"themeConfig":{}};
const __uniRoutes = [{"path":"pages/index/index","meta":{"isQuit":true,"isEntry":true,"isTabBar":true,"tabBarIndex":0,"navigationBar":{"titleText":"五金配件管家","type":"default"},"isNVue":false}},{"path":"pages/order/create","meta":{"isQuit":true,"isTabBar":true,"tabBarIndex":2,"navigationBar":{"titleText":"开单","type":"default"},"isNVue":false}},{"path":"pages/product/select","meta":{"navigationBar":{"titleText":"选择商品","type":"default"},"isNVue":false}},{"path":"pages/product/list","meta":{"isQuit":true,"isTabBar":true,"tabBarIndex":1,"navigationBar":{"titleText":"货品列表","type":"default"},"isNVue":false}},{"path":"pages/product/form","meta":{"navigationBar":{"titleText":"编辑货品","type":"default"},"isNVue":false}},{"path":"pages/product/categories","meta":{"navigationBar":{"titleText":"类别管理","type":"default"},"isNVue":false}},{"path":"pages/product/units","meta":{"navigationBar":{"titleText":"单位管理","type":"default"},"isNVue":false}},{"path":"pages/product/settings","meta":{"navigationBar":{"titleText":"货品设置","type":"default"},"isNVue":false}},{"path":"pages/customer/select","meta":{"navigationBar":{"titleText":"选择客户","type":"default"},"isNVue":false}},{"path":"pages/customer/form","meta":{"navigationBar":{"titleText":"新增客户","type":"default"},"isNVue":false}},{"path":"pages/customer/detail","meta":{"navigationBar":{"titleText":"客户详情","type":"default"},"isNVue":false}},{"path":"pages/supplier/select","meta":{"navigationBar":{"titleText":"选择供应商","type":"default"},"isNVue":false}},{"path":"pages/supplier/form","meta":{"navigationBar":{"titleText":"新增/编辑供应商","type":"default"},"isNVue":false}},{"path":"pages/account/select","meta":{"navigationBar":{"titleText":"选择账户","type":"default"},"isNVue":false}},{"path":"pages/account/ledger","meta":{"navigationBar":{"titleText":"账户流水","type":"default"},"isNVue":false}},{"path":"pages/account/form","meta":{"navigationBar":{"titleText":"新增/编辑账户","type":"default"},"isNVue":false}},{"path":"pages/detail/index","meta":{"isQuit":true,"isTabBar":true,"tabBarIndex":3,"navigationBar":{"titleText":"明细","type":"default"},"isNVue":false}},{"path":"pages/my/index","meta":{"isQuit":true,"isTabBar":true,"tabBarIndex":4,"navigationBar":{"titleText":"我的","type":"default"},"isNVue":false}},{"path":"pages/my/about","meta":{"navigationBar":{"titleText":"关于与协议","type":"default"},"isNVue":false}},{"path":"pages/report/index","meta":{"navigationBar":{"titleText":"报表","type":"default"},"isNVue":false}}].map(uniRoute=>(uniRoute.meta.route=uniRoute.path,__uniConfig.pages.push(uniRoute.path),uniRoute.path='/'+uniRoute.path,uniRoute));
__uniConfig.styles=[];//styles
__uniConfig.onReady=function(callback){if(__uniConfig.ready){callback()}else{onReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"ready",{get:function(){return isReady},set:function(val){isReady=val;if(!isReady){return}const callbacks=onReadyCallbacks.slice(0);onReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}});
__uniConfig.onServiceReady=function(callback){if(__uniConfig.serviceReady){callback()}else{onServiceReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"serviceReady",{get:function(){return isServiceReady},set:function(val){isServiceReady=val;if(!isServiceReady){return}const callbacks=onServiceReadyCallbacks.slice(0);onServiceReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}});
service.register("uni-app-config",{create(a,b,c){if(!__uniConfig.viewport){var d=b.weex.config.env.scale,e=b.weex.config.env.deviceWidth,f=Math.ceil(e/d);Object.assign(__uniConfig,{viewport:f,defaultFontSize:16})}return{instance:{__uniConfig:__uniConfig,__uniRoutes:__uniRoutes,global:u,window:u,document:u,frames:u,self:u,location:u,navigator:u,localStorage:u,history:u,Caches:u,screen:u,alert:u,confirm:u,prompt:u,fetch:u,XMLHttpRequest:u,WebSocket:u,webkit:u,print:u}}}});
})();

View File

@@ -0,0 +1 @@
(function(){})();

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,168 @@
{
"@platforms": [
"android",
"iPhone",
"iPad"
],
"id": "",
"name": "林林林",
"version": {
"name": "1.0.0",
"code": "100"
},
"description": "",
"developer": {
"name": "",
"email": "",
"url": ""
},
"permissions": {
"UniNView": {
"description": "UniNView原生渲染"
}
},
"plus": {
"useragent": {
"value": "uni-app",
"concatenate": true
},
"splashscreen": {
"target": "id:1",
"autoclose": true,
"waiting": true,
"delay": 0
},
"popGesture": "close",
"launchwebview": {
"id": "1",
"kernel": "WKWebview"
},
"usingComponents": true,
"nvueStyleCompiler": "uni-app",
"compilerVersion": 3,
"distribute": {
"google": {
"permissions": [
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
]
},
"apple": {},
"plugins": {
"audio": {
"mp3": {
"description": "Android平台录音支持MP3格式文件"
}
}
}
},
"statusbar": {
"immersed": "supportedDevice",
"style": "dark",
"background": "#F8F8F8"
},
"uniStatistics": {
"enable": false
},
"allowsInlineMediaPlayback": true,
"safearea": {
"background": "#ffffff",
"bottom": {
"offset": "auto"
}
},
"uni-app": {
"control": "uni-v3",
"vueVersion": "3",
"compilerVersion": "4.76",
"nvueCompiler": "uni-app",
"renderer": "auto",
"nvue": {
"flex-direction": "column"
},
"nvueLaunchMode": "normal",
"webView": {
"minUserAgentVersion": "49.0"
}
},
"tabBar": {
"position": "bottom",
"color": "#8a7535",
"selectedColor": "#B4880F",
"borderStyle": "rgba(0,0,0,0.4)",
"blurEffect": "none",
"fontSize": "10px",
"iconWidth": "24px",
"spacing": "3px",
"height": "50px",
"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"
}
],
"backgroundColor": "#ffffff",
"selectedIndex": 0,
"shown": true,
"child": [
"lauchwebview"
],
"selected": 0
}
},
"app-harmony": {
"useragent": {
"value": "uni-app",
"concatenate": true
},
"uniStatistics": {
"enable": false
},
"safearea": {
"background": "#ffffff",
"bottom": {
"offset": "auto"
}
}
},
"launch_path": "__uniappview.html"
}

View File

@@ -0,0 +1,23 @@
.page { display:flex; flex-direction: column; height: 100vh;
}
.form { background:#fff;
}
.field { display:flex; align-items:center; justify-content: space-between; padding: 0.5625rem 0.625rem; border-bottom:0.03125rem solid #f3f3f3;
}
.label { color:#666;
}
.input { flex:1; text-align: right; color:#333;
}
.value { color:#333;
}
.actions { margin-top: 0.625rem; padding: 0 0.625rem;
}
.primary { width: 100%; background: #3c9cff; color:#fff; border-radius: 0.25rem; padding: 0.6875rem 0;
}
.sheet { background:#fff;
}
.sheet-item { padding: 0.8125rem; text-align:center; border-bottom:0.03125rem solid #f2f2f2;
}
.sheet-cancel { padding: 0.8125rem; text-align:center; color:#666;
}

View File

@@ -0,0 +1,35 @@
.page { display:flex; flex-direction: column; height: 100vh;
}
.filters { display:flex; gap: 0.5rem; padding: 0.5rem; background:#fff;
}
.field { display:flex; justify-content: space-between; align-items:center; padding: 0.5rem; border:0.03125rem solid #eee; border-radius: 0.375rem; min-width: 9.375rem;
}
.label { color:#666;
}
.value { color:#333;
}
.summary { display:grid; grid-template-columns: repeat(4,1fr); gap: 0.375rem; padding: 0.375rem 0.5rem; background:#fff; border-top:0.03125rem solid #f1f1f1; border-bottom:0.03125rem solid #f1f1f1;
}
.sum-item { padding: 0.375rem; text-align:center;
}
.k { display:block; color:#888; font-size: 0.75rem;
}
.v { display:block; margin-top:0.1875rem; font-weight:700; color:#333;
}
.list { flex:1;
}
.item { padding: 0.5625rem 0.5rem; border-bottom:0.03125rem solid #f4f4f4; background:#fff;
}
.row { display:flex; align-items:center; justify-content: space-between; margin-bottom: 0.1875rem;
}
.title { color:#333;
}
.amount { font-weight:700;
}
.amount.in { color:#2a9d8f;
}
.amount.out { color:#d35b5b;
}
.meta { color:#999; font-size: 0.75rem;
}

View File

@@ -0,0 +1,13 @@
.page { display:flex; flex-direction: column; height: 100vh;
}
.list { flex:1;
}
.item { padding: 0.625rem 0.75rem; background:#fff; border-bottom: 0.03125rem solid #f1f1f1;
}
.name { color:#333; margin-bottom: 0.1875rem;
}
.meta { color:#888; font-size: 0.75rem;
}
.fab { position: fixed; right: 1rem; bottom: 3.75rem; width: 3.125rem; height: 3.125rem; border-radius: 50%; background:#3c9cff; color:#fff; display:flex; align-items:center; justify-content:center; font-size: 1.625rem; box-shadow: 0 0.3125rem 0.625rem rgba(0,0,0,0.18);
}

View File

@@ -0,0 +1,23 @@
.page { padding-bottom: 4.375rem;
}
.card { background:#fff; margin: 0.5rem; padding: 0.375rem 0.5rem; border-radius: 0.5rem;
}
.row { display:flex; justify-content: space-between; padding: 0.5625rem 0.25rem; border-bottom: 0.03125rem solid #f3f3f3;
}
.row:last-child { border-bottom: 0;
}
.label { color:#666;
}
.value { color:#333; max-width: 60%; text-align: right;
}
.value-input { color:#333; text-align: right; flex: 1;
}
.emp { color:#107e9b; font-weight: 700;
}
.bottom { position: fixed; left:0; right:0; bottom:0; background:#fff; padding: 0.5rem 0.75rem calc(env(safe-area-inset-bottom) + 0.5rem); box-shadow: 0 -0.125rem 0.375rem rgba(0,0,0,0.06); display:flex; gap: 0.375rem;
}
.primary { flex:1; background: linear-gradient(135deg, #A0E4FF 0%, #17A2C4 100%); color:#fff; border-radius: 31.21875rem; padding: 0.625rem 0;
}
.ghost { flex:1; background:#fff; color:#107e9b; border: 0.0625rem solid #A0E4FF; border-radius: 31.21875rem; padding: 0.5625rem 0;
}

View File

@@ -0,0 +1,15 @@
.page { padding-bottom: 4.375rem;
}
.field { display:flex; justify-content: space-between; padding: 0.6875rem 0.75rem; background:#fff; border-bottom:0.03125rem solid #eee;
}
.label { color:#666;
}
.value { color:#333; text-align: right; flex: 1;
}
.textarea { padding: 0.5rem 0.75rem; background:#fff; margin-top: 0.375rem;
}
.bottom { position: fixed; left:0; right:0; bottom:0; background:#fff; padding: 0.5rem 0.75rem calc(env(safe-area-inset-bottom) + 0.5rem); box-shadow: 0 -0.125rem 0.375rem rgba(0,0,0,0.06);
}
.primary { width: 100%; background: linear-gradient(135deg, #A0E4FF 0%, #17A2C4 100%); color:#fff; border-radius: 31.21875rem; padding: 0.625rem 0;
}

View File

@@ -0,0 +1,19 @@
.page { display:flex; flex-direction: column; height: 100vh;
}
.search { display:flex; gap: 0.375rem; padding: 0.5rem; background:#fff; align-items:center;
}
.search uni-input { flex:1; background:#f6f6f6; border-radius: 0.375rem; padding: 0.375rem;
}
.list { flex:1;
}
.item { padding: 0.625rem 0.75rem; background:#fff; border-bottom: 0.03125rem solid #f1f1f1;
}
.name { color:#333; margin-bottom: 0.1875rem;
}
.meta { color:#888; font-size: 0.75rem;
}
.bottom { position: fixed; left:0; right:0; bottom:0; background:#fff; padding: 0.5rem 0.75rem calc(env(safe-area-inset-bottom) + 0.5rem); box-shadow: 0 -0.125rem 0.375rem rgba(0,0,0,0.06);
}
.primary { width: 100%; background: linear-gradient(135deg, #A0E4FF 0%, #17A2C4 100%); color:#fff; border-radius: 31.21875rem; padding: 0.625rem 0;
}

View File

@@ -0,0 +1,49 @@
.page { display:flex; flex-direction: column; height: 100vh;
}
.seg { display:flex; background:#fff;
}
.seg-item { flex:1; padding: 0.6875rem 0; text-align:center; color:#666;
}
.seg-item.active { color:#18b566; font-weight: 600;
}
.content { display:flex; flex:1; min-height: 0;
}
.biz-tabs { width: 3.75rem; background:#eef6ff; display:flex; flex-direction: column;
}
.biz { flex:0 0 3.75rem; display:flex; align-items:center; justify-content:center; color:#4aa3d6;
}
.biz.active { background:#3ac1c9; color:#fff; border-radius: 0 0.5rem 0.5rem 0;
}
.panel { flex:1; display:flex; flex-direction: column; background:#fff; margin: 0.5rem; border-radius: 0.5rem; padding: 0.375rem;
}
.toolbar { display:flex; align-items: center; gap: 0.375rem; padding: 0.25rem 0.1875rem;
}
.search { flex:1;
}
.search-input { width:100%; background:#f6f6f6; border-radius: 0.375rem; padding: 0.375rem;
}
.period { color:#999; font-size: 0.75rem; padding: 0 0.1875rem;
}
.total { color:#18b566; font-weight: 700; padding: 0.1875rem 0.1875rem 0.375rem;
}
.list { flex:1;
}
.item { display:flex; align-items:center; padding: 0.625rem 0.3125rem; border-bottom: 0.03125rem solid #f1f1f1;
}
.item-left { flex:1;
}
.date { color:#999; font-size: 0.75rem;
}
.name { color:#333; margin: 0.125rem 0; font-weight: 600;
}
.no { color:#bbb; font-size: 0.6875rem;
}
.amount { color:#333; font-weight: 700;
}
.arrow { color:#ccc; font-size: 1.25rem; margin-left: 0.25rem;
}
.empty { height: 50vh; display:flex; align-items:center; justify-content:center; color:#999;
}
.fab { position: fixed; right: 0.9375rem; bottom: 3.75rem; width: 3.125rem; height: 3.125rem; background:#18b566; color:#fff; border-radius: 1.5625rem; text-align:center; line-height: 3.125rem; font-size: 1.5rem; box-shadow: 0 0.25rem 0.625rem rgba(0,0,0,0.15);
}

View File

@@ -0,0 +1,185 @@
.home {
padding-bottom: 4.375rem;
position: relative;
/* 明亮奢华背景:金属拉丝纹理覆盖层 + 柔和浅色渐变 */
background:
repeating-linear-gradient(0deg, rgba(180,180,180,0.12) 0, rgba(180,180,180,0.12) 0.0625rem, rgba(255,255,255,0.0) 0.0625rem, rgba(255,255,255,0.0) 0.3125rem),
linear-gradient(180deg, rgba(255, 255, 255, 0.75) 0%, rgba(255, 255, 255, 0.55) 40%, rgba(255, 255, 255, 0.35) 100%);
min-height: 100vh;
}
.home-bg {
position: fixed;
left: 0; top: 0; right: 0; bottom: 0;
width: 100%; height: 100%;
pointer-events: none;
z-index: -1;
}
/* 公告栏 */
.notice {
margin: 0 0.75rem 0.75rem;
padding: 0.625rem 0.6875rem;
border-radius: 0.625rem;
background: rgba(255,255,255,0.78);
-webkit-backdrop-filter: blur(0.375rem);
backdrop-filter: blur(0.375rem);
border: 0.0625rem solid rgba(203, 166, 61, 0.28);
display: flex;
align-items: center;
gap: 0.5rem;
}
.notice-left {
flex: 0 0 auto;
display: inline-flex; align-items: center; justify-content: center;
min-width: 3rem; height: 1.375rem;
padding: 0 0.5rem;
border-radius: 31.21875rem;
background: linear-gradient(135deg, #FFE69A, #F4CF62);
color: #3f320f;
font-size: 0.75rem;
font-weight: 800;
}
.notice-swiper { height: 2.25rem; flex: 1;
}
.notice-item { display: flex; align-items: center; gap: 0.375rem; min-height: 2.25rem;
}
.notice-text { color: #4b3e19; font-size: 0.875rem; line-height: 1.125rem; font-weight: 600; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.notice-tag { color: #B4880F; font-size: 0.6875rem; padding: 0.125rem 0.3125rem; border-radius: 31.21875rem; background: rgba(215,167,46,0.18);
}
/* 分割标题 */
.section-title { display: flex; align-items: center; gap: 0.5rem; padding: 0.3125rem 0.875rem 0;
}
.section-title::before { content: ''; display: block; width: 0.25rem; height: 0.875rem; border-radius: 0.25rem; background: linear-gradient(180deg, #FFE69A, #D7A72E);
}
.section-text { color: #6b5a2a; font-size: 0.875rem; font-weight: 700; letter-spacing: 0.03125rem;
}
/* 顶部英雄区:浅色玻璃卡片,带金色描边与柔和阴影 */
.hero {
margin: 0.75rem;
padding: 1rem;
border-radius: 0.875rem;
background: rgba(255, 255, 255, 0.65);
-webkit-backdrop-filter: blur(0.4375rem);
backdrop-filter: blur(0.4375rem);
border: 0.0625rem solid rgba(203, 166, 61, 0.35);
box-shadow: 0 0.375rem 0.875rem rgba(0, 0, 0, 0.10), 0 0 0 0.0625rem rgba(255,255,255,0.60) inset;
color: #473c22;
}
.hero-top {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 0.625rem;
}
.brand {
font-size: 1.3125rem;
font-weight: 700;
letter-spacing: 0.0625rem;
color: #B4880F; /* 金色标题 */
}
.cta {
padding: 0.3125rem 0.6875rem;
border-radius: 31.21875rem;
background: linear-gradient(135deg, rgba(255, 220, 128, 0.65), rgba(255, 240, 190, 0.65));
border: 0.0625rem solid rgba(203, 166, 61, 0.45);
box-shadow: 0 0.1875rem 0.4375rem rgba(203, 166, 61, 0.25);
}
.cta-text { color: #5a4712; font-size: 0.8125rem;
}
.kpi { display: flex;
}
.kpi-item { flex: 1;
}
.kpi-label { opacity: 0.9; font-size: 0.75rem; color: #6b5a2a;
}
.kpi-value { display: block; margin-top: 0.375rem; font-size: 1.4375rem; font-weight: 800; color: #B4880F;
}
/* 功能容器:整体玻璃面板,增强融入感 */
.grid-wrap {
margin: 0 0.625rem 1rem;
padding: 0.875rem 0.625rem 0.375rem;
border-radius: 0.75rem;
background: rgba(255,255,255,0.55);
-webkit-backdrop-filter: blur(0.3125rem);
backdrop-filter: blur(0.3125rem);
border: 0.0625rem solid rgba(203,166,61,0.22);
box-shadow: 0 0.25rem 0.5625rem rgba(0,0,0,0.06);
}
/* 功能九宫格 */
.grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-row-gap: 2rem;
grid-column-gap: 1.125rem;
padding: 1.25rem 0.875rem 0.875rem;
}
.grid-item { display: flex; flex-direction: column; align-items: center; text-align: center;
}
.icon { display: flex; align-items: center; justify-content: center; color: #6b5a2a; position: relative;
}
.icon-squircle {
width: 4.125rem; height: 4.125rem;
border-radius: 0.875rem;
background: linear-gradient(145deg, rgba(255,255,255,0.92), rgba(255,255,255,0.70));
-webkit-backdrop-filter: blur(0.375rem);
backdrop-filter: blur(0.375rem);
border: 0.0625rem solid rgba(203,166,61,0.22);
box-shadow: 0 0.3125rem 0.75rem rgba(0,0,0,0.10), 0 0 0 0.0625rem rgba(255,255,255,0.65) inset;
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: 3rem; height: 3rem;
}
.icon-emoji { font-size: 1.875rem; line-height: 1;
}
.icon-placeholder { width: 2.625rem; height: 2.625rem; border-radius: 0.5625rem; background:
linear-gradient(135deg, rgba(212,175,55,0.18), rgba(255,255,255,0.0)),
repeating-linear-gradient(90deg, rgba(180,150,60,0.35) 0, rgba(180,150,60,0.35) 0.25rem, transparent 0.25rem, transparent 0.5rem),
repeating-linear-gradient(0deg, rgba(180,150,60,0.20) 0, rgba(180,150,60,0.20) 0.25rem, transparent 0.25rem, transparent 0.5rem);
box-shadow: inset 0 0 0 0.0625rem rgba(203,166,61,0.28);
}
.icon-text { font-size: 1.4375rem; font-weight: 700;
}
.grid-title { display: none;
}
.grid-chip { margin-top: 0.4375rem; padding: 0.1875rem 0.4375rem; border-radius: 31.21875rem; background: rgba(215,167,46,0.16); color: #5a4a1f; font-size: 0.6875rem;
}
/* 底部操作条:浅色半透明 + 金色主按钮 */
.bottom-bar {
position: fixed;
left: 0; right: 0; bottom: 0;
display: flex;
align-items: center;
justify-content: space-around;
padding: 0.4375rem 0.5625rem calc(env(safe-area-inset-bottom) + 0.4375rem);
background: rgba(255,255,255,0.85);
box-shadow: 0 -0.1875rem 0.5625rem rgba(0,0,0,0.08);
-webkit-backdrop-filter: blur(0.3125rem);
backdrop-filter: blur(0.3125rem);
z-index: 9999;
}
.tab { flex: 1; text-align: center; color: #8a7535; font-size: 0.8125rem;
}
.tab.active { color: #B4880F;
}
.tab.primary {
flex: 0 0 auto;
min-width: 5.625rem;
margin: 0 0.5625rem;
padding: 0.5625rem 1rem;
background: linear-gradient(135deg, #FFE69A 0%, #F4CF62 45%, #D7A72E 100%);
color: #493c1b;
border-radius: 31.21875rem;
font-size: 0.9375rem;
font-weight: 800;
box-shadow: 0 0.3125rem 0.6875rem rgba(215,167,46,0.25), 0 0 0 0.0625rem rgba(255,255,255,0.70) inset;
}

View File

@@ -0,0 +1,21 @@
.about { padding: 0.75rem;
}
.hero { padding: 1rem 0.75rem; display: flex; flex-direction: column; align-items: center; gap: 0.3125rem;
}
.logo { width: 5rem; height: 5rem; border-radius: 1rem;
}
.title { margin-top: 0.25rem; font-size: 1.125rem; font-weight: 800; color: #333;
}
.subtitle { font-size: 0.8125rem; color: #888;
}
.card { margin-top: 0.5625rem; background: #fff; border-radius: 0.5rem; overflow: hidden;
}
.row { display: flex; align-items: center; padding: 0.75rem; border-top: 0.03125rem solid #f2f2f2;
}
.label { color: #666;
}
.value { margin-left: auto; color: #333;
}
.link { margin-left: auto; color: #1aad19;
}

View File

@@ -0,0 +1,27 @@
.me { padding: 0.75rem;
}
.card.user { display: flex; gap: 0.5625rem; padding: 0.6875rem; background: #fff; border-radius: 0.5rem; box-shadow: 0 0.1875rem 0.5rem rgba(0,0,0,0.06); align-items: center;
}
.avatar { width: 3.75rem; height: 3.75rem; border-radius: 1.875rem; background: #f5f5f5;
}
.meta { display: flex; flex-direction: column; gap: 0.1875rem;
}
.name { font-size: 1.0625rem; font-weight: 700; color: #333;
}
.phone { font-size: 0.8125rem; color: #888;
}
.role { font-size: 0.6875rem; color: #999;
}
.group { margin-top: 0.75rem; background: #fff; border-radius: 0.5rem; overflow: hidden;
}
.group-title { padding: 0.5625rem 0.6875rem; font-size: 0.8125rem; color: #999; background: #fafafa;
}
.cell { display: flex; align-items: center; padding: 0.8125rem 0.6875rem; border-top: 0.03125rem solid #f0f0f0; color: #333;
}
.cell .desc { margin-left: auto; margin-right: 0.25rem; font-size: 0.6875rem; color: #999;
}
.cell .arrow { margin-left: auto; color: #bbb;
}
.cell.danger { color: #dd524d; justify-content: center; font-weight: 700;
}

View File

@@ -0,0 +1,59 @@
.order { padding-bottom: 4.375rem;
}
.tabs { display: flex; justify-content: space-around; padding: 0.5rem 0.75rem;
}
.tabs uni-text { color: #666;
}
.tabs uni-text.active { color: #333; font-weight: 700;
}
.subtabs { display: flex; gap: 0.5rem; padding: 0 0.75rem 0.5rem;
}
.subbtn { padding: 0.3125rem 0.625rem; border-radius: 31.21875rem; background: #f4f4f4; color: #666;
}
.subbtn.active { background: #ffe69a; color: #3f320f;
}
.field { display:flex; justify-content: space-between; padding: 0.6875rem 0.75rem; background: #fff; border-bottom: 0.03125rem solid #eee;
}
.label { color:#666;
}
.value { color:#333;
}
.summary { display:flex; justify-content: space-between; padding: 0.6875rem 0.75rem; color:#333;
}
.add { margin: 0.75rem auto; width: 3.75rem; height: 3.75rem; border-radius: 0.625rem; background: #c7eef7; color:#16a1c4; font-size: 2.25rem; display:flex; align-items:center; justify-content:center;
}
.empty { display:flex; flex-direction: column; align-items:center; padding: 1.875rem 0; color:#888;
}
.empty-img { width: 6.875rem; margin-bottom: 0.625rem;
}
.empty-text { margin-bottom: 0.25rem;
}
.list { background:#fff;
}
.row { display:grid; grid-template-columns: 1.5fr 1fr 1fr 1fr; gap: 0.375rem; padding: 0.5rem 0.375rem; align-items:center; border-bottom: 0.03125rem solid #f3f3f3;
}
.col.name { padding-left: 0.375rem;
}
.col.amount { text-align:right; padding-right: 0.375rem; color:#333;
}
.bottom { position: fixed; left:0; right:0; bottom:0; background:#fff; padding: 0.5rem 0.75rem calc(env(safe-area-inset-bottom) + 0.5rem); box-shadow: 0 -0.125rem 0.375rem rgba(0,0,0,0.06);
}
.primary { width: 100%; background: linear-gradient(135deg, #FFE69A 0%, #F4CF62 45%, #D7A72E 100%); color:#493c1b; border-radius: 31.21875rem; padding: 0.625rem 0; font-weight:800;
}
/* 收款/付款页样式 */
.pay-row .pay-input { text-align: right; color:#333;
}
.textarea { position: relative; padding: 0.5rem 0.75rem; background:#fff; border-top: 0.03125rem solid #eee;
}
.amount-badge { position: absolute; right: 0.75rem; top: -1.125rem; background: #d1f0ff; color:#107e9b; padding: 0.25rem 0.5rem; border-radius: 0.375rem; font-size: 0.75rem;
}
.date-mini { position: absolute; right: 0.75rem; bottom: 0.625rem; color:#666; font-size: 0.75rem;
}
/* 分类chips样式选中后文字变红 */
.chips { display:flex; flex-wrap: wrap; gap: 0.375rem; padding: 0.375rem 0.75rem;
}
.chip { padding: 0.3125rem 0.625rem; border-radius: 31.21875rem; background: #f4f4f4; color:#666;
}
.chip.active { color: #e54d42;
}

View File

@@ -0,0 +1,15 @@
.page { display:flex; flex-direction: column; height: 100vh;
}
.toolbar { display:flex; gap: 0.375rem; padding: 0.5rem; background:#fff;
}
.toolbar uni-input { flex:1; background:#f6f6f6; border-radius: 0.375rem; padding: 0.375rem;
}
.list { flex:1;
}
.item { display:flex; gap: 0.375rem; align-items:center; padding: 0.5rem; background:#fff; border-bottom: 0.03125rem solid #f1f1f1;
}
.item uni-input { flex:1; background:#f7f7f7; border-radius: 0.3125rem; padding: 0.375rem;
}
.ops { display:flex; gap: 0.3125rem;
}

View File

@@ -0,0 +1,33 @@
.uploader[data-v-7bd1ddd2] { padding: 0.375rem; background: #fff;
}
.grid[data-v-7bd1ddd2] { position: relative;
}
.area[data-v-7bd1ddd2] { width: 100%; position: relative;
}
.cell[data-v-7bd1ddd2] { position: absolute; border-radius: 0.375rem; overflow: hidden; box-shadow: 0 0 0.03125rem rgba(0,0,0,0.08);
}
.thumb[data-v-7bd1ddd2] { width: 100%; height: 100%;
}
.remove[data-v-7bd1ddd2] { position: absolute; right: 0.1875rem; top: 0.1875rem; background: rgba(0,0,0,0.45); color: #fff; width: 1.25rem; height: 1.25rem; text-align: center; line-height: 1.25rem; border-radius: 0.625rem; font-size: 0.875rem;
}
.adder[data-v-7bd1ddd2] { width: 6.5625rem; height: 6.5625rem; border: 0.0625rem dashed #ccc; border-radius: 0.375rem; display: flex; align-items: center; justify-content: center; color: #999; position: absolute; left: 0; top: 0;
}
.page { background:#f6f6f6; height: 100vh;
}
.card { background:#fff; margin: 0.5rem; padding: 0.5rem; border-radius: 0.375rem;
}
.row { display:flex; gap: 0.375rem; align-items: center; margin-bottom: 0.375rem;
}
.label { width: 5.625rem; color:#666;
}
.row uni-input { flex:1; background:#f7f7f7; border-radius: 0.3125rem; padding: 0.375rem;
}
.picker { padding: 0.25rem 0.375rem; background:#f0f0f0; border-radius: 0.3125rem; color:#666; margin-left: 0.25rem;
}
.prices uni-input { width: 30%;
}
.fixed { position: fixed; left: 0; right: 0; bottom: 0; background:#fff; padding: 0.375rem 0.5rem; display:flex; gap: 0.5rem;
}

View File

@@ -0,0 +1,33 @@
.page { display:flex; flex-direction: column; height: 100vh;
}
.tabs { display:flex; background:#fff;
}
.tab { flex:1; text-align:center; padding: 0.625rem 0; color:#666;
}
.tab.active { color:#18b566; font-weight: 600;
}
.search { display:flex; gap: 0.375rem; padding: 0.5rem; background:#fff; align-items: center;
}
.search uni-input { flex:1; background:#f6f6f6; border-radius: 0.375rem; padding: 0.375rem;
}
.picker { padding: 0.25rem 0.375rem; background:#f0f0f0; border-radius: 0.3125rem; color:#666;
}
.list { flex:1;
}
.item { display:flex; padding: 0.625rem; background:#fff; border-bottom: 0.03125rem solid #f1f1f1;
}
.thumb { width: 3.75rem; height: 3.75rem; border-radius: 0.375rem; margin-right: 0.5rem; background:#fafafa;
}
.content { flex:1;
}
.name { color:#333; margin-bottom: 0.1875rem; font-weight: 600;
}
.meta { color:#888; font-size: 0.75rem;
}
.price { margin-left: 0.625rem; color:#f60;
}
.empty { height: 60vh; display:flex; align-items:center; justify-content:center; color:#999;
}
.fab { position: fixed; right: 0.9375rem; bottom: 3.75rem; width: 3.125rem; height: 3.125rem; background:#18b566; color:#fff; border-radius: 1.5625rem; text-align:center; line-height: 3.125rem; font-size: 1.5rem; box-shadow: 0 0.25rem 0.625rem rgba(0,0,0,0.15);
}

View File

@@ -0,0 +1,15 @@
.page { display:flex; flex-direction: column; height: 100vh;
}
.search { display:flex; gap: 0.375rem; padding: 0.5rem; background:#fff;
}
.search uni-input { flex:1; background:#f6f6f6; border-radius: 0.375rem; padding: 0.375rem;
}
.list { flex:1;
}
.item { padding: 0.625rem 0.75rem; background:#fff; border-bottom: 0.03125rem solid #f1f1f1;
}
.name { color:#333; margin-bottom: 0.1875rem;
}
.meta { color:#888; font-size: 0.75rem;
}

View File

@@ -0,0 +1,5 @@
.page { background:#fff;
}
.item { display:flex; justify-content: space-between; align-items:center; padding: 0.625rem; border-bottom: 0.03125rem solid #f1f1f1;
}

View File

@@ -0,0 +1,15 @@
.page { display:flex; flex-direction: column; height: 100vh;
}
.toolbar { display:flex; gap: 0.375rem; padding: 0.5rem; background:#fff;
}
.toolbar uni-input { flex:1; background:#f6f6f6; border-radius: 0.375rem; padding: 0.375rem;
}
.list { flex:1;
}
.item { display:flex; gap: 0.375rem; align-items:center; padding: 0.5rem; background:#fff; border-bottom: 0.03125rem solid #f1f1f1;
}
.item uni-input { flex:1; background:#f7f7f7; border-radius: 0.3125rem; padding: 0.375rem;
}
.ops { display:flex; gap: 0.3125rem;
}

View File

@@ -0,0 +1,37 @@
.report { padding: 0.625rem;
}
.modes { display: flex; gap: 0.375rem; margin-bottom: 0.4375rem;
}
.mode-tab { flex: 1; text-align: center; padding: 0.5rem 0; border-radius: 31.21875rem; background: #f4f4f4; color: #666; border: 0.03125rem solid #e9e9e9;
}
.mode-tab.active { background: #1aad19; color: #fff; border-color: #1aad19; font-weight: 700;
}
.toolbar { display: flex; align-items: center; gap: 0.25rem; background: #fff; padding: 0.4375rem 0.5rem; border-radius: 0.375rem;
}
.date { padding: 0.3125rem 0.5rem; border: 0.03125rem solid #eee; border-radius: 0.25rem;
}
.tabs { display: flex; gap: 0.5rem; margin-top: 0.4375rem;
}
.tab { padding: 0.375rem 0.5625rem; border-radius: 31.21875rem; background: #f4f4f4; color: #666;
}
.tab.active { background: #1aad19; color: #fff;
}
.summary { display: grid; grid-template-columns: repeat(4, 1fr); gap: 0.25rem; margin-top: 0.4375rem;
}
.summary .item { background: #fff; border-radius: 0.375rem; padding: 0.5rem;
}
.summary .label { font-size: 0.6875rem; color: #888;
}
.summary .value { display: block; margin-top: 0.25rem; font-weight: 700; color: #333;
}
.card { margin-top: 0.5rem; background: #fff; border-radius: 0.375rem; padding: 0.5rem;
}
.row-head { display: flex; align-items: center; gap: 0.375rem;
}
.thumb { width: 2.25rem; height: 2.25rem; border-radius: 0.25rem; background: #f2f2f2;
}
.title { font-size: 0.875rem; font-weight: 700;
}
.row-body { margin-top: 0.3125rem; color: #666;
}

View File

@@ -0,0 +1,15 @@
.page { padding-bottom: 4.375rem;
}
.field { display:flex; justify-content: space-between; padding: 0.6875rem 0.75rem; background:#fff; border-bottom:0.03125rem solid #eee;
}
.label { color:#666;
}
.value { color:#333; text-align: right; flex: 1;
}
.textarea { padding: 0.5rem 0.75rem; background:#fff; margin-top: 0.375rem;
}
.bottom { position: fixed; left:0; right:0; bottom:0; background:#fff; padding: 0.5rem 0.75rem calc(env(safe-area-inset-bottom) + 0.5rem); box-shadow: 0 -0.125rem 0.375rem rgba(0,0,0,0.06);
}
.primary { width: 100%; background: linear-gradient(135deg, #A0E4FF 0%, #17A2C4 100%); color:#fff; border-radius: 31.21875rem; padding: 0.625rem 0;
}

View File

@@ -0,0 +1,15 @@
.page { display:flex; flex-direction: column; height: 100vh;
}
.search { display:flex; gap: 0.375rem; padding: 0.5rem; background:#fff;
}
.search uni-input { flex:1; background:#f6f6f6; border-radius: 0.375rem; padding: 0.375rem;
}
.list { flex:1;
}
.item { padding: 0.625rem 0.75rem; background:#fff; border-bottom: 0.03125rem solid #f1f1f1;
}
.name { color:#333; margin-bottom: 0.1875rem;
}
.meta { color:#888; font-size: 0.75rem;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -24,44 +24,45 @@
"window": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "五金配件管家",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
"navigationBarBackgroundColor": "#FFFFFF",
"backgroundColor": "#FFFFFF",
"backgroundTextStyle": "dark"
},
"tabBar": {
"color": "#8a7535",
"selectedColor": "#B4880F",
"backgroundColor": "#ffffff",
"color": "#444444",
"selectedColor": "#4C8DFF",
"backgroundColor": "#FFFFFF",
"borderStyle": "black",
"list": [
{
"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,3 +1,84 @@
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场https://ext.dcloud.net.cn上很多三方插件均使用了这些样式变量
* 如果你是插件开发者建议你使用scss预处理并在插件代码中直接使用这些变量无需 import 这个文件方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者插件使用者你可以通过修改这些变量来定制自己的插件主题实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 藏青系主色(高亮) */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
/*每个页面公共css */
page {
background-color: #ffffff;
color: #111;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/*每个页面公共css */
page{--status-bar-height:25px;--top-window-height:0px;--window-top:0px;--window-bottom:0px;--window-left:0px;--window-right:0px;--window-magin:0px}[data-c-h="true"]{display: none !important;}
/* 强制所有端白底(防止小程序旧样式残留覆盖) */
.uni-page-body, uni-page-body {
background-color: #ffffff !important;
}
/* 小程序节点:强制 wx-view 白底 */
wx-view {
background-color: #ffffff !important;
}
/* 例外:需要有主色底的元素,强制还原 */
.cta, .notice-left, .fab {
background-color: #4C8DFF !important;
border-color: #4C8DFF !important;
color: #ffffff !important;
}
.cta .cta-text {
color: #ffffff !important;
font-weight: 700;
}
/* 覆盖历史深色背景(统一纯白/浅灰) */
.home, .report, .order, .me, .page {
background: #ffffff !important;
}
.notice, .hero, .grid-wrap, .panel, .card, .tabs, .seg, .list, .search, .summary, .toolbar, .item {
background: #ffffff !important;
}
.text-secondary {
color: #444;
}
.card {
background-color: #ffffff;
border: 1px solid #e5e7eb;
border-radius: 8rpx;
}
.primary {
color: #4C8DFF;
}
/* 底部原生 tabBarH5/APP端可生效字体加大 */
.uni-tabbar__label, .uni-tabbar__text {
font-size: 28rpx !important;
font-weight: 700 !important;
}
/* 图表统一透明底(常见容器/画布选择器) */
canvas, .ec-canvas, .echarts, .charts, .chart, .ucharts-box {
background-color: transparent !important;
}page{--status-bar-height:25px;--top-window-height:0px;--window-top:0px;--window-bottom:0px;--window-left:0px;--window-right:0px;--window-magin:0px}[data-c-h="true"]{display: none !important;}

View File

@@ -1,5 +1,5 @@
"use strict";
const _imports_0$1 = "/static/metal-bg.jpg";
const _imports_0$1 = "/static/icons/icons8-shopping-cart-100.png";
const _imports_0 = "/static/logo.png";
exports._imports_0 = _imports_0$1;
exports._imports_0$1 = _imports_0;

View File

@@ -7072,9 +7072,9 @@ function isConsoleWritable() {
return isWritable;
}
function initRuntimeSocketService() {
const hosts = "198.18.0.1,192.168.31.192,127.0.0.1";
const hosts = "198.18.0.1,192.168.31.107,127.0.0.1";
const port = "8090";
const id = "mp-weixin_HpGDB1";
const id = "mp-weixin_nY_uy5";
const lazy = typeof swan !== "undefined";
let restoreError = lazy ? () => {
} : initOnError();

View File

@@ -89,7 +89,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
};
}),
o: common_vendor.o(($event) => $data.showType = false),
p: common_vendor.sr("popup", "4430e2e8-0"),
p: common_vendor.sr("popup", "42e126a9-0"),
q: common_vendor.o(($event) => $data.showType = $event),
r: common_vendor.p({
type: "bottom",

View File

@@ -1 +1 @@
<view class="page"><view class="form"><view class="field"><text class="label">账户名称</text><input class="input" placeholder="必填" value="{{a}}" bindinput="{{b}}"/></view><view class="field" bindtap="{{d}}"><text class="label">账户类型</text><text class="value">{{c}}</text></view><view wx:if="{{e}}" class="field"><text class="label">银行名称</text><input class="input" placeholder="选填" value="{{f}}" bindinput="{{g}}"/></view><view wx:if="{{h}}" class="field"><text class="label">银行账号</text><input class="input" placeholder="选填" value="{{i}}" bindinput="{{j}}"/></view><view class="field"><text class="label">当前余额</text><input class="input" type="number" placeholder="0.00" value="{{k}}" bindinput="{{l}}"/></view></view><view class="actions"><button class="primary" bindtap="{{m}}">保存</button></view><uni-popup wx:if="{{r}}" class="r" u-s="{{['d']}}" u-r="popup" u-i="4430e2e8-0" bind:__l="__l" bindupdateModelValue="{{q}}" u-p="{{r}}"><view class="sheet"><view wx:for="{{n}}" wx:for-item="t" wx:key="b" class="sheet-item" bindtap="{{t.c}}">{{t.a}}</view><view class="sheet-cancel" bindtap="{{o}}">取消</view></view></uni-popup></view>
<view class="page"><view class="form"><view class="field"><text class="label">账户名称</text><input class="input" placeholder="必填" value="{{a}}" bindinput="{{b}}"/></view><view class="field" bindtap="{{d}}"><text class="label">账户类型</text><text class="value">{{c}}</text></view><view wx:if="{{e}}" class="field"><text class="label">银行名称</text><input class="input" placeholder="选填" value="{{f}}" bindinput="{{g}}"/></view><view wx:if="{{h}}" class="field"><text class="label">银行账号</text><input class="input" placeholder="选填" value="{{i}}" bindinput="{{j}}"/></view><view class="field"><text class="label">当前余额</text><input class="input" type="number" placeholder="0.00" value="{{k}}" bindinput="{{l}}"/></view></view><view class="actions"><button class="primary" bindtap="{{m}}">保存</button></view><uni-popup wx:if="{{r}}" class="r" u-s="{{['d']}}" u-r="popup" u-i="42e126a9-0" bind:__l="__l" bindupdateModelValue="{{q}}" u-p="{{r}}"><view class="sheet"><view wx:for="{{n}}" wx:for-item="t" wx:key="b" class="sheet-item" bindtap="{{t.c}}">{{t.a}}</view><view class="sheet-cancel" bindtap="{{o}}">取消</view></view></uni-popup></view>

View File

@@ -1,23 +1,76 @@
.page { display:flex; flex-direction: column; height: 100vh;
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场https://ext.dcloud.net.cn上很多三方插件均使用了这些样式变量
* 如果你是插件开发者建议你使用scss预处理并在插件代码中直接使用这些变量无需 import 这个文件方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者插件使用者你可以通过修改这些变量来定制自己的插件主题实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
/* 藏青系主色(高亮) */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.page {
display: flex;
flex-direction: column;
height: 100vh;
}
.form { background:#fff;
.form {
background: #ffffff;
}
.field { display:flex; align-items:center; justify-content: space-between; padding: 18rpx 20rpx; border-bottom:1rpx solid #f3f3f3;
.field {
display: flex;
align-items: center;
justify-content: space-between;
padding: 18rpx 20rpx;
border-bottom: 1rpx solid #e5e7eb;
}
.label { color:#666;
.label {
color: #444;
}
.input { flex:1; text-align: right; color:#333;
.input {
flex: 1;
text-align: right;
color: #111;
}
.value { color:#333;
.value {
color: #111;
}
.actions { margin-top: 20rpx; padding: 0 20rpx;
.actions {
margin-top: 20rpx;
padding: 0 20rpx;
}
.primary { width: 100%; background: #3c9cff; color:#fff; border-radius: 8rpx; padding: 22rpx 0;
.primary {
width: 100%;
background: #4C8DFF;
color: #fff;
border-radius: 8rpx;
padding: 22rpx 0;
}
.sheet { background:#fff;
.sheet {
background: #ffffff;
}
.sheet-item { padding: 26rpx; text-align:center; border-bottom:1rpx solid #f2f2f2;
.sheet-item {
padding: 26rpx;
text-align: center;
border-bottom: 1rpx solid #e5e7eb;
}
.sheet-cancel { padding: 26rpx; text-align:center; color:#666;
.sheet-cancel {
padding: 26rpx;
text-align: center;
color: #444;
}

Some files were not shown because too many files have changed in this diff Show More