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 @@ + + + \ 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 @@ + \ 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 @@ + + + \ 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 @@ + + + + + \ 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 }