diff --git a/miniprogram/api/pl.js b/miniprogram/api/pl.js new file mode 100644 index 000000000..75342fc97 --- /dev/null +++ b/miniprogram/api/pl.js @@ -0,0 +1,91 @@ +/** + * 运输加油登记 API(复用门户 /transport/vehicle-fuel-register) + */ +import db from '@/utils/dbRequest' +import { fetchVehicleOptions } from '@/api/dbOptions' + +function unwrapList(data) { + if (!data || typeof data !== 'object') { + return { items: [], total: 0 } + } + // 兼容门户信封 { code, data: { items, total } } + const payload = + data.data && typeof data.data === 'object' && data.items == null + ? data.data + : data + const items = payload.items || payload.rows || payload.list || [] + const total = Number(payload.total || 0) + return { items: Array.isArray(items) ? items : [], total } +} + +function unwrapEntity(data) { + if (!data || typeof data !== 'object') return data + if (data.data && typeof data.data === 'object' && data.id == null && data.registerNo == null) { + return data.data + } + return data +} + +export const fuelRegisterApi = { + list: async (params = {}) => { + const data = await db.get('/transport/vehicle-fuel-register/', { + mineOnly: true, + ...params + }) + return unwrapList(data) + }, + get: async (id) => unwrapEntity(await db.get(`/transport/vehicle-fuel-register/${id}`)), + create: (payload) => + db.post('/transport/vehicle-fuel-register/', payload, { + params: { mineOnly: true } + }), + update: (id, payload) => + db.put(`/transport/vehicle-fuel-register/${id}`, payload, { + params: { mineOnly: true } + }), + cancel: (id) => + db.post( + `/transport/vehicle-fuel-register/${id}/cancel`, + {}, + { params: { mineOnly: true } } + ) +} + +function unwrapData(data) { + if (!data || typeof data !== 'object') return data + if (data.code != null && data.data !== undefined) return data.data + return data +} + +export const sitePlanApi = { + history: async (params = {}) => { + const data = unwrapData(await db.get('/transport/site-plan/history', params)) + return { + date: data?.date || params.date, + keyword: data?.keyword || '', + records: Array.isArray(data?.records) ? data.records : [] + } + }, + get: async (planId) => unwrapData(await db.get(`/transport/site-plan/${planId}`)), + saveFeedback: (planId, payload) => + db.post(`/transport/site-plan/${planId}/feedback`, payload) +} + +export const driverPlanApi = { + history: async (params = {}) => { + const data = unwrapData(await db.get('/transport/driver-plan/history', params)) + return { + date: data?.date || params.date, + records: Array.isArray(data?.records) ? data.records : [] + } + }, + get: async (planId) => unwrapData(await db.get(`/transport/driver-plan/${planId}`)), + saveFeedback: (planId, payload) => + db.post(`/transport/driver-plan/${planId}/feedback`, payload), + saveDriverFeedback: (planId, payload) => + db.post(`/transport/driver-plan/${planId}/driver-feedback`, payload) +} + +export { fetchVehicleOptions } + +export default fuelRegisterApi diff --git a/miniprogram/config/api.js b/miniprogram/config/api.js index 7093f0acf..cbf430ce5 100644 --- a/miniprogram/config/api.js +++ b/miniprogram/config/api.js @@ -63,7 +63,13 @@ export const PAGE_PATHS = { bxInvoiceAdmin: '/pages/bx/invoice/admin', bxExpenseItem: '/pages/bx/admin/expense-item', bxWfAdvance: '/pages/bx/admin/wf-advance', - bxWfReimburse: '/pages/bx/admin/wf-reimburse' + bxWfReimburse: '/pages/bx/admin/wf-reimburse', + plFuelRegister: '/pages/pl/fuel-register/list', + plFuelRegisterForm: '/pages/pl/fuel-register/form', + plTransportPlan: '/pages/pl/transport-plan/list', + plTransportPlanDetail: '/pages/pl/transport-plan/detail', + plDriverPlan: '/pages/pl/driver-plan/list', + plDriverPlanDetail: '/pages/pl/driver-plan/detail' } /** 工作台菜单 code → 页面路径 */ @@ -80,7 +86,10 @@ export const WORKBENCH_ROUTE_MAP = { 'bx-invoice-admin': PAGE_PATHS.bxInvoiceAdmin, 'bx-expense-item': PAGE_PATHS.bxExpenseItem, 'bx-wf-advance': PAGE_PATHS.bxWfAdvance, - 'bx-wf-reimburse': PAGE_PATHS.bxWfReimburse + 'bx-wf-reimburse': PAGE_PATHS.bxWfReimburse, + 'pl-fuel-register': PAGE_PATHS.plFuelRegister, + 'pl-transport-plan': PAGE_PATHS.plTransportPlan, + 'pl-driver-plan': PAGE_PATHS.plDriverPlan } export const TOKEN_KEY = 'sx_token' diff --git a/miniprogram/config/workbench-menus.js b/miniprogram/config/workbench-menus.js index 5fc6641fb..99d0a539f 100644 --- a/miniprogram/config/workbench-menus.js +++ b/miniprogram/config/workbench-menus.js @@ -56,19 +56,31 @@ export const WORKBENCH_MODULES = [ { key: 'pl', title: '运输管理', - desc: '计划 · 运费 · 车辆事务', + desc: '加油登记 · 运输计划单 · 司机运输计划单', iconText: '运输', - visible: false, + visible: true, menus: [ - { name: '运输计划', enabled: false, code: 'pl-plan', icon: '🚚' }, - { name: '计划归档', enabled: false, code: 'pl-plan-archive', icon: '🗂️' }, - { name: '购买证上传', enabled: false, code: 'pl-plan-cert', icon: '📜' }, - { name: '运费结算', enabled: false, code: 'pl-freight', icon: '💵' }, - { name: '运费审批', enabled: false, code: 'pl-freight-approval', icon: '🔏' }, - { name: '财务发放', enabled: false, icon: '💰' }, - { name: '车辆充值', enabled: false, icon: '⛽' }, - { name: '车辆维修', enabled: false, icon: '🔧' }, - { name: '运输地址库', enabled: false, icon: '📍' } + { + name: '加油登记', + enabled: true, + code: 'pl-fuel-register', + icon: '⛽', + perms: 'mini:pl:fuelRegister:list' + }, + { + name: '运输计划单', + enabled: true, + code: 'pl-transport-plan', + icon: '📋', + perms: 'mini:pl:transportPlan:list' + }, + { + name: '司机运输计划单', + enabled: true, + code: 'pl-driver-plan', + icon: '🚛', + perms: 'mini:pl:driverPlan:list' + } ] } ] diff --git a/miniprogram/pages.json b/miniprogram/pages.json index a3b7553c1..f539d26f5 100644 --- a/miniprogram/pages.json +++ b/miniprogram/pages.json @@ -172,12 +172,42 @@ "style": { "navigationStyle": "custom", "navigationBarTitleText": "工作流(报销)" } } ] + }, + { + "root": "pages/pl", + "name": "pl", + "pages": [ + { + "path": "fuel-register/list", + "style": { "navigationStyle": "custom", "navigationBarTitleText": "加油登记" } + }, + { + "path": "fuel-register/form", + "style": { "navigationStyle": "custom", "navigationBarTitleText": "加油登记" } + }, + { + "path": "transport-plan/list", + "style": { "navigationStyle": "custom", "navigationBarTitleText": "运输计划单" } + }, + { + "path": "transport-plan/detail", + "style": { "navigationStyle": "custom", "navigationBarTitleText": "现场回传" } + }, + { + "path": "driver-plan/list", + "style": { "navigationStyle": "custom", "navigationBarTitleText": "司机运输计划单" } + }, + { + "path": "driver-plan/detail", + "style": { "navigationStyle": "custom", "navigationBarTitleText": "司机回执" } + } + ] } ], "preloadRule": { "pages/workbench/workbench": { "network": "all", - "packages": ["db", "bx"] + "packages": ["db", "bx", "pl"] } }, "globalStyle": { diff --git a/miniprogram/pages/pl/driver-plan/detail.vue b/miniprogram/pages/pl/driver-plan/detail.vue new file mode 100644 index 000000000..313ecec27 --- /dev/null +++ b/miniprogram/pages/pl/driver-plan/detail.vue @@ -0,0 +1,324 @@ +