diff --git a/src/common/apis/approval/index.ts b/src/common/apis/approval/index.ts index 8429a74..e648c43 100644 --- a/src/common/apis/approval/index.ts +++ b/src/common/apis/approval/index.ts @@ -1,5 +1,5 @@ import { request } from '@/http/axios' -import { SubmitApprovalRequestData, SubmitApprovalResponseData, SearchApiReturnApprovalQuery, ApiResponsePageData, ReturnApprovalEntity, HandleApprovalRequestData } from './type' +import { SubmitApprovalRequestData, SubmitApprovalResponseData, SearchApiReturnApprovalQuery, ApiResponsePageData, ReturnApprovalEntity, HandleApprovalRequestData, SearchReturnApprovalAssetQuery, ReturnApprovalAssetDTO } from './type' import { ShopOrderGoodsEntity } from '../shop/type' export const getApprovalListApi = (params: SearchApiReturnApprovalQuery) => { @@ -10,6 +10,27 @@ export const getApprovalListApi = (params: SearchApiReturnApprovalQuery) => { }) } +export const getApprovalAssetListApi = (params: SearchReturnApprovalAssetQuery) => { + return request>({ + url: 'approval/list/asset', + method: 'get', + params + }) +} + +export const checkApprovalCodeApi = (params: { + corpid: string, + approvalType: number, + code: string +}) => { + return request>( + { + url: 'approval/checkCode', + method: 'post', + params + } + ) +} export const submitApprovalApi = (data: SubmitApprovalRequestData) => { diff --git a/src/common/apis/approval/type.ts b/src/common/apis/approval/type.ts index f5a17a6..e02898f 100644 --- a/src/common/apis/approval/type.ts +++ b/src/common/apis/approval/type.ts @@ -55,9 +55,17 @@ export interface ReturnApprovalEntity { externalGoodsId?: number /** 外部归属类型的审批ID */ externalApprovalId?: number + /** 审批码 */ + code?: string + /** 审批码校验状态(0未核销 1已核销) */ + codeCheck?: number /** 企业微信id */ corpid?: string + /** 申请人企业UserID */ applyUserid?: string + /** 申请人姓名 */ + applyUserName?: string + /** 审批人企业UserID */ auditUserid?: string /** 申请数量 */ applyQuantity?: number @@ -79,6 +87,8 @@ export interface ReturnApprovalEntity { returnRemark: string /** 审核说明 */ auditRemark: string + /** 审批人姓名 */ + auditName: string /** 审批状态(1待审核 2已通过 3已驳回) */ status: number /** 审批时间 */ @@ -89,20 +99,50 @@ export interface ReturnApprovalEntity { goodsName: string /** 封面图URL */ coverImg: string - /** 手机号 */ + /** 手机号码 */ mobile: string - /** 用户id */ + /** 企业微信用户ID或汇邦云用户ID */ userid: string /** 用户姓名 */ name: string /** 是否内部用户(0否 1汇邦云用户 2企业微信用户) */ isInternal: number - /** 审核人姓名 */ - auditName: string /** 支付方式 */ paymentMethod?: string } +export interface ApprovalGoodsEntity { + approvalGoodsId: number; + approvalId: number; + goodsName: string; + goodsId: number; + externalGoodsId?: number; + corpid?: string; + belongType: number; + price: number; + applyQuantity: number; + coverImg?: string; +} + +export interface ReturnApprovalAssetDTO extends ReturnApprovalEntity { + goodsList?: ApprovalGoodsEntity[]; +} + +export interface SearchReturnApprovalAssetQuery { + pageNum: number; + pageSize: number; + approvalId?: number; + orderId?: number; + goodsId?: number; + status?: number; + startTime?: string; + endTime?: string; + approvalType?: number; + corpid?: string; + code?: string; + codeCheck?: number; +} + export type SubmitApprovalResponseData = ApiResponseMsgData<{ approvalId: number status: number diff --git a/src/layout/components/Tabbar.vue b/src/layout/components/Tabbar.vue index ed0e674..1569d44 100644 --- a/src/layout/components/Tabbar.vue +++ b/src/layout/components/Tabbar.vue @@ -6,6 +6,7 @@ const tabbarItemList = computed(() => { return routes.filter(route => route.meta.layout?.tabbar?.showTabbar && route.path !== '/cabinet' && route.path!== '/approval/list' + && route.path!== '/approvalAsset/list' ) .map(route => ({ title: route.meta.title, diff --git a/src/pages/approval/handleApply.vue b/src/pages/approval/handleApply.vue index c2b995b..225b6d8 100644 --- a/src/pages/approval/handleApply.vue +++ b/src/pages/approval/handleApply.vue @@ -2,9 +2,9 @@ import { ref } from 'vue' import { showConfirmDialog, showSuccessToast, showFailToast, showToast, UploaderFileListItem, Popup, Picker } from 'vant' import axios from "axios" -import { getApprovalOrderGoodsApi, handleApprovalApi } from '@/common/apis/approval' +import { handleApprovalApi } from '@/common/apis/approval' import { openCabinetApi } from '@/common/apis/shop' -import type { HandleApprovalRequestData } from '@/common/apis/approval/type' +import type { ApprovalGoodsEntity, HandleApprovalRequestData } from '@/common/apis/approval/type' import { useRoute, useRouter } from 'vue-router' import { useApprovalStore } from '@/pinia/stores/approval' import { useWxStore } from '@/pinia/stores/wx'; @@ -32,7 +32,7 @@ const formData = ref({ auditUserid: wxStore.userid }) -const orderGoods = ref([]); +const orderGoods = ref([]); const submitting = ref(false) const fileList = ref([]) const uploading = ref(false) @@ -155,10 +155,8 @@ onMounted(() => { router.push('/approval/list'); return; } - - getApprovalOrderGoodsApi(approvalStore.currentApproval.approvalId).then(({ data }) => { - orderGoods.value = data; - }) + + orderGoods.value = approvalStore.currentApproval.goodsList || []; if (approvalStore.currentApproval.status !== 1) { // 填充历史审批数据 @@ -194,12 +192,12 @@ const handleOpenCabinet = async () => { const result = await openCabinetApi( approvalStore.currentApproval.orderId, approvalStore.currentApproval.orderGoodsId, { - userid: isInternal === 2 ? qyUserid.value : ab98Userid.value, - isInternal: isInternal, - name: isInternal === 2 ? qyName.value : name.value, - mobile: tel.value, - operationType: 2 - } + userid: isInternal === 2 ? qyUserid.value : ab98Userid.value, + isInternal: isInternal, + name: isInternal === 2 ? qyName.value : name.value, + mobile: tel.value, + operationType: 2 + } ) if (result.code !== 0) { showFailToast(result.msg || '开启失败') @@ -267,9 +265,8 @@ const handleReject = () => {
- - - + + @@ -290,7 +287,7 @@ const handleReject = () => { ¥{{ item.price.toFixed(2) }} - ×{{ item.quantity }} + ×{{ item.applyQuantity }}
@@ -300,10 +297,10 @@ const handleReject = () => { - + @@ -315,11 +312,13 @@ const handleReject = () => { -
- +
+ 拒绝 - + 同意
@@ -333,46 +332,46 @@ const handleReject = () => { } .content-wrapper { - padding-top: 46px; - padding-bottom: 100px; - } + padding-top: 46px; + padding-bottom: 100px; +} - .product-list { - margin-bottom: 20px; - } +.product-list { + margin-bottom: 20px; +} - .product-item { - align-items: flex-start; - } +.product-item { + align-items: flex-start; +} - .product-image { - margin-right: 12px; - border-radius: 4px; - } +.product-image { + margin-right: 12px; + border-radius: 4px; +} - .product-info { - display: flex; - flex-direction: column; - justify-content: space-between; - height: 60px; - } +.product-info { + display: flex; + flex-direction: column; + justify-content: space-between; + height: 60px; +} - .price-row { - display: flex; - justify-content: space-between; - align-items: center; - } +.price-row { + display: flex; + justify-content: space-between; + align-items: center; +} - .product-price { - color: #e95d5d; - font-weight: bold; - font-size: 14px; - } +.product-price { + color: #e95d5d; + font-weight: bold; + font-size: 14px; +} - .quantity { - color: #666; - font-size: 13px; - } +.quantity { + color: #666; + font-size: 13px; +} .upload-section { margin: 20px 0; @@ -401,15 +400,13 @@ const handleReject = () => { } } -.submit-bar { - position: sticky; - bottom: 20px; +.btn-group { + display: flex; + width: 100%; + gap: 12px; + margin: 8px 0; + background-color: #ffffff; padding: 16px; - background: #fff; - box-shadow: 0 -2px 12px rgba(0, 0, 0, 0.1); - border-radius: 8px; - margin: 0 16px; - z-index: 1; } .content-wrapper { diff --git a/src/pages/approvalAsset/list.vue b/src/pages/approvalAsset/list.vue index e70ca17..cb9e103 100644 --- a/src/pages/approvalAsset/list.vue +++ b/src/pages/approvalAsset/list.vue @@ -2,12 +2,6 @@
- - - - - - @@ -31,18 +25,26 @@ /> --> -
- 搜索 - 重置 +
+ 搜索 + 输入核销码
+ + + + +