diff --git a/api/hj.js b/api/hj.js
index 81a8960..1786320 100644
--- a/api/hj.js
+++ b/api/hj.js
@@ -54,10 +54,7 @@ export const reqPackagingManage = ()=>get(`PackagingManage/GetPackagingCategorie
* 保存包装
*/
export const reqSavePackaging = (data)=> post(`PackagingManage/SavePackaging`, data)
-/**
- * 请求包装详情
- */
-export const reqPackagingInformationById = (params={})=>get(`PackagingManage/GetPackagingInformationById?projectId=${params.projectId||''}&personId=${params.personId||''}&packagingManageId=${params.packagingManageId||''}`)
+
/**
* 请求预制组件详情
*/
@@ -84,25 +81,40 @@ export const reqTrainNumberList = (data={})=> get(`TrainNumberManage/GetTrainNum
/**
* 获取车次详情
*/
-export const reqTrainNumberById = (id) => get(`TrainNumberManage/GetTrainNumberById?trainNumberId=${id}`)
+export const reqTrainNumberDetail = (id) => get(`TrainNumberManage/GetTrainNumberList?filter.id=${id}&pageindex=1&pagesize=1`)
/**
- * 保存/发货车次
- * @param {Object} data - { trainNumberId, projectId, unitId, trainNumber, driverName, driverPhone, licensePlateNumber, contactName, contactPhone, remark, state }
+ * 根据车次获取包装列表
*/
-export const reqSaveTrainNumber = (data) => post(`TrainNumberManage/SaveTrainNumber`, data)
-
+export const reqPackagingByTrain = (id) => get(`TrainNumberManage/GetPackagingByTrain?trainNumberId=${id}`)
/**
- * 签收车次
+ * 获取包装详情
+ * @param {Object} params - { projectId, personId, packagingManageId }
*/
-export const reqSignTrainNumber = (params = {}) => get(`TrainNumberManage/SignTrainNumber?trainNumberId=${params.trainNumberId}&personId=${params.personId}`)
-
+export const reqPackagingInformationById = (params={})=>get(`PackagingManage/GetPackagingInformationById?projectId=${params.projectId}&personId=${params.personId}&packagingManageId=${params.packagingManageId}`)
/**
- * 删除包装
+ * 保存包装到车次
+ * @param {Object} params - { packagingManageId, trainNumberId }
*/
-export const reqDeletePackagingFromTrain = (params = {}) => get(`TrainNumberManage/DeletePackagingFromTrain?trainNumberId=${params.trainNumberId}&packagingManageId=${params.packagingManageId}`)
-
+export const reqSavePackagingToTrain = (params={})=>get(`TrainNumberManage/SavePackagingToTrain?packagingManageId=${params.packagingManageId}&trainNumberId=${params.trainNumberId}`)
/**
- * 获取包装列表
+ * 保存车次
+ * @param {Object} data - { Id, TrainNumber, unitId, ProjectId, State, DriverName, DriverPhone, LicensePlateNumber, ContactName, ContactPhone, Remark }
*/
-export const reqPackagingListByTrain = (trainNumberId) => get(`PackagingManage/GetPackagingListByTrain?trainNumberId=${trainNumberId}`)
\ No newline at end of file
+export const reqSaveTrainNumber = (data)=> post(`TrainNumberManage/SaveTrainNumber`, data)
+/**
+ * 确认到场(签收)
+ */
+export const reqTrainInfoConfirmArrival = (params={})=>get(`TrainNumberManage/SaveTrainInfoConfirmArrival?PersonId=${params.PersonId}&Id=${params.Id}`)
+/**
+ * 从车次中删除包装
+ * @param {String} id
+ */
+export const reqDeletePackagingFromTrain = (id='')=>get(`TrainNumberManage/DeletePackagingFromTrain?packagingManageId=${id}`)
+
+// ========================= 预制组件管理 ====================================
+/**
+ * 获取预制组件管理列表
+ * @param {Object} params - { projectId, pageindex, pagesize, state }
+ */
+export const reqPipelineComponentList = (params={})=>get(`/PipelineComponent/GetPipelineComponentList?projectId=${params.projectId}&pageindex=${params.pageindex}&pagesize=${params.pagesize}&state=${params.state}`)
diff --git a/assets/css/page.scss b/assets/css/page.scss
index c79f81e..6a5451a 100644
--- a/assets/css/page.scss
+++ b/assets/css/page.scss
@@ -791,7 +791,7 @@
.page-detail {
min-height: 100vh;
background: #f5f6f8;
- padding-bottom: 180rpx;
+ padding-bottom: 160rpx;
}
// 信息分组
@@ -800,29 +800,40 @@
margin: 24rpx;
border-radius: 16rpx;
overflow: hidden;
+ box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.06);
}
+// 信息项
.info-item {
display: flex;
align-items: center;
- padding: 28rpx 32rpx;
+ padding: 24rpx 32rpx;
border-bottom: 1rpx solid #f0f0f0;
&:last-child {
border-bottom: none;
}
+ // 备注字段特殊处理 - 顶部对齐
+ &.info-textarea {
+ align-items: flex-start;
+ }
+
.info-label {
- width: 200rpx;
+ flex-shrink: 0;
+ width: 180rpx;
font-size: 28rpx;
color: #666;
- flex-shrink: 0;
- display: flex;
- align-items: center;
+ line-height: 40rpx;
+ position: relative;
.required {
- color: #ff4d4f;
- margin-right: 4rpx;
+ position: absolute;
+ top: 50%;
+ transform: translateY(-50%);
+ left: -16rpx;
+ font-size: 24rpx;
+ color: #fa3534;
}
}
@@ -830,48 +841,56 @@
flex: 1;
font-size: 28rpx;
color: #333;
- text-align: left;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
}
.card-tag {
display: inline-block;
- padding: 6rpx 16rpx;
+ padding: 8rpx 20rpx;
border-radius: 20rpx;
font-size: 24rpx;
- background: rgba(153, 153, 153, 0.1);
- color: #999;
+ font-weight: 500;
&.status-0 {
- background: rgba(153, 153, 153, 0.1);
+ background: #f5f5f5;
color: #999;
}
&.status-1 {
- background: rgba(255, 167, 38, 0.1);
- color: #ffa726;
+ background: #fff7e6;
+ color: #fa8c16;
}
&.status-2 {
- background: rgba(76, 175, 80, 0.1);
- color: #4caf50;
+ background: #f6ffed;
+ color: #52c41a;
+ }
+
+ &.status-3 {
+ background: #e6f7ff;
+ color: #1890ff;
}
}
- .u-input {
- flex: 1;
- background: transparent;
- }
-
+ // 可点击行(扫码添加)
&.info-link {
- .info-value {
- color: #999;
+ .info-label {
+ flex: 1;
}
.scan-icon {
- margin-left: auto;
+ width: 64rpx;
+ height: 64rpx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background: #f5f6f8;
+ border-radius: 50%;
+ transition: all 0.2s ease;
+
+ &:active {
+ background: #e8e9eb;
+ transform: scale(0.95);
+ }
}
&:active {
@@ -880,6 +899,16 @@
}
}
+// 输入框包装
+.info-input-wrap {
+ flex: 1;
+ min-width: 0;
+
+ :deep(.u-input) {
+ background: transparent;
+ }
+}
+
// 预制组件列表
.package-group {
margin: 24rpx;
@@ -1080,96 +1109,34 @@
}
}
-// 发货管理详情
-.page-detail {
- min-height: 100vh;
- background: #f5f6f8;
- padding-bottom: 160rpx;
-}
-
-.info-group {
+// 底部按钮
+.bottom-btns {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ display: flex;
+ padding: 20rpx 24rpx;
+ padding-bottom: calc(20rpx + env(safe-area-inset-bottom));
background: #ffffff;
- margin: 24rpx;
- border-radius: 16rpx;
- overflow: hidden;
-}
+ box-shadow: 0 -2rpx 12rpx rgba(0, 0, 0, 0.06);
+ gap: 20rpx;
-.info-item {
- display: flex;
- align-items: flex-start;
- padding: 28rpx 24rpx;
- border-bottom: 1rpx solid #f0f0f0;
-
- &:last-child {
- border-bottom: none;
- }
-}
-
-.info-label {
- flex-shrink: 0;
- width: 180rpx;
- font-size: 28rpx;
- color: #666;
- line-height: 40rpx;
-
- .required {
- color: #fa3534;
- margin-right: 4rpx;
- }
-}
-
-.info-value {
- flex: 1;
- font-size: 28rpx;
- color: #333;
- line-height: 40rpx;
-}
-
-// 扫码行
-.scan-row {
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 28rpx 24rpx;
- border-bottom: 1rpx solid #f0f0f0;
-
- .scan-text {
- font-size: 28rpx;
- color: #666;
- }
-
- .scan-btn {
- width: 80rpx;
- height: 80rpx;
- display: flex;
- align-items: center;
- justify-content: center;
- background: #f5f6f8;
- border-radius: 50%;
- }
-}
-
-// 包装列表区域
-.package-section {
- padding: 24rpx;
-
- .section-title {
- display: block;
+ :deep(.u-button) {
+ flex: 1;
+ height: 88rpx;
+ border-radius: 12rpx;
font-size: 30rpx;
- font-weight: 600;
- color: #333;
- margin-bottom: 16rpx;
}
}
-// 包装表格
+// 表格样式(保留)
.package-table {
border: 1rpx solid #e5e5e5;
border-radius: 8rpx;
overflow: hidden;
}
-// 表格行
.table-hd {
display: flex;
background: #f5f6f8;
@@ -1189,7 +1156,6 @@
}
}
-// 表格单元格
.table-td {
flex: 1;
padding: 20rpx;
@@ -1205,7 +1171,167 @@
}
}
-// 表格空状态
.table-empty {
padding: 40rpx 0;
}
+
+// 包装详情弹窗样式
+.bz-detail-modal {
+ width: 600rpx;
+ max-height: 70vh;
+ background: #ffffff;
+ border-radius: 24rpx 24rpx 0 0;
+ overflow: hidden;
+ display: flex;
+ flex-direction: column;
+
+ .modal-header {
+ padding: 32rpx 40rpx;
+ background: linear-gradient(135deg, #3577FF 0%, #2B5FE8 100%);
+ text-align: center;
+ flex-shrink: 0;
+
+ .modal-title {
+ font-size: 32rpx;
+ font-weight: 600;
+ color: #ffffff;
+ }
+ }
+
+ .modal-body {
+ padding: 24rpx;
+ flex: 1;
+ overflow-y: auto;
+ min-height: 0;
+
+ .detail-row {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 16rpx 0;
+ border-bottom: 1rpx solid #f0f0f0;
+
+ &:last-child {
+ border-bottom: none;
+ }
+
+ .detail-label {
+ font-size: 26rpx;
+ color: #999;
+ }
+
+ .detail-value {
+ font-size: 28rpx;
+ color: #333;
+ font-weight: 500;
+ }
+ }
+
+ .prepipe-section {
+ margin-top: 24rpx;
+ padding-top: 24rpx;
+ border-top: 1rpx solid #f0f0f0;
+
+ .prepipe-title {
+ font-size: 26rpx;
+ color: #666;
+ margin-bottom: 16rpx;
+ }
+
+ .prepipe-list {
+ .prepipe-card {
+ background: #f5f6f8;
+ border-radius: 12rpx;
+ margin-bottom: 12rpx;
+ overflow: hidden;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+
+ .card-header {
+ padding: 16rpx 20rpx;
+ background: #e8e9eb;
+
+ .card-code {
+ font-size: 28rpx;
+ color: #333;
+ font-weight: 600;
+ }
+ }
+
+ .card-body {
+ padding: 16rpx 20rpx;
+
+ .card-row {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 8rpx 0;
+
+ &:first-child {
+ padding-top: 0;
+ }
+
+ &:last-child {
+ padding-bottom: 0;
+ }
+
+ .card-label {
+ font-size: 24rpx;
+ color: #999;
+ }
+
+ .card-value {
+ font-size: 26rpx;
+ color: #333;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ .modal-footer {
+ display: flex;
+ justify-content: space-between;
+ padding: 24rpx 40rpx 32rpx;
+ gap: 24rpx;
+ flex-shrink: 0;
+ border-top: 1rpx solid #f0f0f0;
+
+ .cancel-btn {
+ flex: 1;
+ height: 70rpx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background: #f5f6f8;
+ border-radius: 12rpx;
+ font-size: 28rpx;
+ color: #666;
+
+ &:active {
+ background: #e8e9eb;
+ }
+ }
+
+ .confirm-btn {
+ flex: 1;
+ height: 70rpx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background: linear-gradient(135deg, #3577FF 0%, #2B5FE8 100%);
+ border-radius: 12rpx;
+ font-size: 28rpx;
+ color: #ffffff;
+ font-weight: 500;
+
+ &:active {
+ opacity: 0.9;
+ }
+ }
+ }
+}
diff --git a/pages.json b/pages.json
index c1832ef..b510a01 100644
--- a/pages.json
+++ b/pages.json
@@ -85,6 +85,18 @@
"style": {
"navigationBarTitleText": "发货管理"
}
+ },
+ {
+ "path": "precast/list",
+ "style": {
+ "navigationBarTitleText": "预制组件管理"
+ }
+ },
+ {
+ "path": "precast/detail",
+ "style": {
+ "navigationBarTitleText": "预制组件管理"
+ }
}
]
}
diff --git a/piipe/deliver/detail.vue b/piipe/deliver/detail.vue
new file mode 100644
index 0000000..03c9ca0
--- /dev/null
+++ b/piipe/deliver/detail.vue
@@ -0,0 +1,140 @@
+
+
+
+
+
+
+ *车次
+ 车次
+
+
+
+ {{ form.TrainNumber || '--' }}
+
+
+
+
+ *单位名称
+ 单位名称
+
+
+
+ {{ form.UnitName || '--' }}
+
+
+
+
+ *驾驶员姓名
+ 驾驶员姓名
+
+
+
+ {{ form.DriverName || '--' }}
+
+
+
+
+ *驾驶员电话
+ 驾驶员电话
+
+
+
+ {{ form.DriverPhone || '--' }}
+
+
+
+
+ *车牌号
+ 车牌号
+
+
+
+ {{ form.LicensePlateNumber || '--' }}
+
+
+
+
+ *联系人姓名
+ 联系人姓名
+
+
+
+ {{ form.ContactName || '--' }}
+
+
+
+
+ *联系人电话
+ 联系人电话
+
+
+
+ {{ form.ContactPhone || '--' }}
+
+
+
+
+ 备注
+
+
+
+ {{ form.Remark || '--' }}
+
+
+
+
+ 状态
+ {{ form.StateName || '--' }}
+
+
+
+
+ 扫码添加
+
+
+
+
+
+
+
+
+
+ 包装列表
+ ({{ BZList.length }})
+
+
+
+
+
+ 预制工作包
+ {{ item.StackingPosition || '--' }}
+
+
+
+
+
+
+
+
+
+
+ 保存
+ 发货
+
+
+ 签收
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pipe/deliver/detail.vue b/pipe/deliver/detail.vue
index 55725cd..3a6a4d8 100644
--- a/pipe/deliver/detail.vue
+++ b/pipe/deliver/detail.vue
@@ -1,111 +1,125 @@
-
+
- *车次
- 车次
-
+ *车次
+
+
+
{{ form.TrainNumber || '--' }}
- *单位名称
- 单位名称
-
+ *单位名称
+
+
+
{{ form.UnitName || '--' }}
- *驾驶员姓名
- 驾驶员姓名
-
+ *驾驶员姓名
+
+
+
{{ form.DriverName || '--' }}
- *驾驶员电话
- 驾驶员电话
-
+ *驾驶员电话
+
+
+
{{ form.DriverPhone || '--' }}
- *车牌号
- 车牌号
-
+ *车牌号
+
+
+
{{ form.LicensePlateNumber || '--' }}
- *联系人姓名
- 联系人姓名
-
+ *联系人姓名
+
+
+
{{ form.ContactName || '--' }}
- *联系人电话
- 联系人电话
-
+ *联系人电话
+
+
+
{{ form.ContactPhone || '--' }}
-
+
备注
-
+
+
+
{{ form.Remark || '--' }}
状态
- {{ form.StateName || '--' }}
+ {{ getStatus(form.State) }}
-
-
- 扫码添加
-
-
-
-
-
-
-
- 包装列表
-
-
- 包装编号
- 预制工作包
- 操作
-
-
- {{ item.PackagingCode }}
- {{ item.StackingPosition || '--' }}
-
-
-
-
-
-
-
+
+
+ 扫码添加
+
+
+
+
+
+ 包装列表
+ ({{ BZList.length }})
+
+
+
+
+
+ 预制工作包
+ {{ item.StackingPosition || '--' }}
+
+
+
+
+
+
+
+
-
+
保存
- 发货
+ 发货
签收
@@ -114,22 +128,105 @@
+
+
+
+
+
+
+
+ 包装编号
+ {{ currentBZInfo.PackagingCode || '--' }}
+
+
+ 最早安装时间
+ {{ currentBZInfo.EarliestInstallTime || '--' }}
+
+
+ 堆放位置
+ {{ currentBZInfo.StackingPosition || '--' }}
+
+
+ 到场状态
+ {{ getBZStatus(currentBZInfo.State) }}
+
+
+ 联系人及电话
+ {{ currentBZInfo.ContactName || '' }}/{{ currentBZInfo.ContactPhone
+ || '' }}
+
+
+ 收货人
+ {{ currentBZInfo.ReceiveMan || '--' }}
+
+
+ 收货日期
+ {{ currentBZInfo.ReceiveDate || '--' }}
+
+
+
+ 预制组件列表({{ currentBZItems.length }})
+
+
+
+
+
+ 数量/单位
+ {{ item.PreUnit || '--' }}
+
+
+ 所属主项
+ {{ item.UnitWorkName || '--' }}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pipe/deliver/list.vue b/pipe/deliver/list.vue
index f7c0168..e7475a0 100644
--- a/pipe/deliver/list.vue
+++ b/pipe/deliver/list.vue
@@ -211,7 +211,7 @@ import { reqTrainNumberList } from '@/api/hj'
const clickTap = (item) => {
uni.navigateTo({
- url: `/pipe/deliver/detail?id=${item.TrainNumberId}&from=1`
+ url: `/pipe/deliver/detail?id=${item.Id}&from=1`
})
}
diff --git a/pipe/precast/detail.vue b/pipe/precast/detail.vue
new file mode 100644
index 0000000..bca7a7c
--- /dev/null
+++ b/pipe/precast/detail.vue
@@ -0,0 +1,110 @@
+
+
+
+
+
+ 预制图纸名称
+ {{ form.DrawingName || '--' }}
+
+
+ 组件编号
+ {{ form.PipelineComponentCode || '--' }}
+
+
+ 物流箱号
+ {{ form.BoxNumber || '--' }}
+
+
+ 计划安装日期
+ {{ form.PlanStartDate || '--' }}
+
+
+ 验收人
+ {{ form.ReceiveMan || '--' }}
+
+
+ 验收日期
+ {{ form.ReceiveDate || '--' }}
+
+
+ 状态
+ {{ getStatus(form.State) }}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pipe/precast/list.vue b/pipe/precast/list.vue
new file mode 100644
index 0000000..1c7b3db
--- /dev/null
+++ b/pipe/precast/list.vue
@@ -0,0 +1,240 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 组件编号
+ {{ item.PipelineComponentCode || '--' }}
+
+
+ 物流箱号
+ {{ item.BoxNumber || '--' }}
+
+
+ 计划安装日期
+ {{ formatDate(item.PlanStartDate) || '--' }}
+
+
+ 验收人
+ {{ item.ReceiveMan || '--' }}
+
+
+ 验收日期
+ {{ formatDate(item.ReceiveDate) || '--' }}
+
+
+
+
+
+
+
+
+
+
+ 加载中...
+
+
+
+
+ — 没有更多了 —
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/utils/constant.js b/utils/constant.js
index e72489c..a854c0e 100644
--- a/utils/constant.js
+++ b/utils/constant.js
@@ -46,6 +46,7 @@ export const defaultApps = [{
name: '预制组件管理',
icon: 'yuzhijian',
menuId: "8255554C-0A92-4C7B-BF19-779AF0220A8C",
+ path: "/pipe/precast/list",
prefix: 'nbd-icon',
selected: false
}