158 lines
4.4 KiB
TypeScript
158 lines
4.4 KiB
TypeScript
|
|
import { WEB_SERVICE_PREFIX } from '@/constants/service';
|
||
|
|
import { request } from '../request';
|
||
|
|
import {
|
||
|
|
type ServiceRequestResult,
|
||
|
|
mapServiceResult,
|
||
|
|
normalizeNullableStringId,
|
||
|
|
normalizeStringId,
|
||
|
|
safeJsonRequestConfig
|
||
|
|
} from './shared';
|
||
|
|
import { normalizeProductMember, normalizeProductSettings } from './product-shared';
|
||
|
|
|
||
|
|
const PRODUCT_PREFIX = `${WEB_SERVICE_PREFIX}/project/product`;
|
||
|
|
|
||
|
|
type ProductResponse = Omit<Api.Product.Product, 'id' | 'managerUserId'> & {
|
||
|
|
id: string | number;
|
||
|
|
managerUserId?: string | number | null;
|
||
|
|
};
|
||
|
|
|
||
|
|
type ProductPageResponse = Api.Product.PageResult<ProductResponse>;
|
||
|
|
|
||
|
|
function normalizeProduct(product: ProductResponse): Api.Product.Product {
|
||
|
|
return {
|
||
|
|
...product,
|
||
|
|
id: normalizeStringId(product.id),
|
||
|
|
managerUserId: normalizeNullableStringId(product.managerUserId) ?? ''
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
/** 鑾峰彇浜у搧鍒嗛〉 */
|
||
|
|
export async function fetchGetProductPage(params?: Api.Product.ProductSearchParams) {
|
||
|
|
const result = await request<ProductPageResponse>({
|
||
|
|
...safeJsonRequestConfig,
|
||
|
|
url: `${PRODUCT_PREFIX}/page`,
|
||
|
|
method: 'get',
|
||
|
|
params
|
||
|
|
});
|
||
|
|
|
||
|
|
return mapServiceResult(result as ServiceRequestResult<ProductPageResponse>, data => ({
|
||
|
|
...data,
|
||
|
|
list: data.list.map(normalizeProduct)
|
||
|
|
}));
|
||
|
|
}
|
||
|
|
|
||
|
|
/** 鑾峰彇浜у搧璇︽儏 */
|
||
|
|
export async function fetchGetProduct(id: string) {
|
||
|
|
const result = await request<ProductResponse>({
|
||
|
|
...safeJsonRequestConfig,
|
||
|
|
url: `${PRODUCT_PREFIX}/get`,
|
||
|
|
method: 'get',
|
||
|
|
params: { id }
|
||
|
|
});
|
||
|
|
|
||
|
|
return mapServiceResult(result as ServiceRequestResult<ProductResponse>, normalizeProduct);
|
||
|
|
}
|
||
|
|
|
||
|
|
/** 鍒涘缓浜у搧 */
|
||
|
|
export async function fetchCreateProduct(data: Api.Product.SaveProductParams) {
|
||
|
|
const result = await request<string | number>({
|
||
|
|
...safeJsonRequestConfig,
|
||
|
|
url: `${PRODUCT_PREFIX}/create`,
|
||
|
|
method: 'post',
|
||
|
|
data
|
||
|
|
});
|
||
|
|
|
||
|
|
return mapServiceResult(result as ServiceRequestResult<string | number>, normalizeStringId);
|
||
|
|
}
|
||
|
|
|
||
|
|
/** 鏇存柊浜у搧 */
|
||
|
|
export function fetchUpdateProduct(data: Api.Product.UpdateProductParams) {
|
||
|
|
return request<boolean>({
|
||
|
|
url: `${PRODUCT_PREFIX}/update`,
|
||
|
|
method: 'put',
|
||
|
|
data
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
/** 鍙樻洿浜у搧鐘舵€? */
|
||
|
|
export function fetchChangeProductStatus(data: Api.Product.ChangeProductStatusParams) {
|
||
|
|
return request<boolean>({
|
||
|
|
url: `${PRODUCT_PREFIX}/change-status`,
|
||
|
|
method: 'post',
|
||
|
|
data
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
/** 鍒犻櫎浜у搧 */
|
||
|
|
export function fetchDeleteProduct(data: Api.Product.DeleteProductParams) {
|
||
|
|
return request<boolean>({
|
||
|
|
url: `${PRODUCT_PREFIX}/delete`,
|
||
|
|
method: 'post',
|
||
|
|
data
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function fetchGetProductSettings(id: string) {
|
||
|
|
const result = await request<Api.Product.ProductSettings>({
|
||
|
|
...safeJsonRequestConfig,
|
||
|
|
url: `${PRODUCT_PREFIX}/${id}/settings`,
|
||
|
|
method: 'get'
|
||
|
|
});
|
||
|
|
|
||
|
|
return mapServiceResult(result as ServiceRequestResult<Api.Product.ProductSettings>, normalizeProductSettings);
|
||
|
|
}
|
||
|
|
|
||
|
|
export function fetchUpdateProductSettingBaseInfo(id: string, data: Api.Product.UpdateProductSettingBaseInfoParams) {
|
||
|
|
return request<boolean>({
|
||
|
|
...safeJsonRequestConfig,
|
||
|
|
url: `${PRODUCT_PREFIX}/${id}/settings/base-info`,
|
||
|
|
method: 'put',
|
||
|
|
data
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function fetchGetProductMembers(id: string) {
|
||
|
|
const result = await request<Api.Product.ProductMember[]>({
|
||
|
|
...safeJsonRequestConfig,
|
||
|
|
url: `${PRODUCT_PREFIX}/${id}/members`,
|
||
|
|
method: 'get'
|
||
|
|
});
|
||
|
|
|
||
|
|
return mapServiceResult(result as ServiceRequestResult<Api.Product.ProductMember[]>, data =>
|
||
|
|
data.map(normalizeProductMember)
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function fetchCreateProductMember(id: string, data: Api.Product.CreateProductMemberParams) {
|
||
|
|
const result = await request<string | number>({
|
||
|
|
...safeJsonRequestConfig,
|
||
|
|
url: `${PRODUCT_PREFIX}/${id}/members`,
|
||
|
|
method: 'post',
|
||
|
|
data
|
||
|
|
});
|
||
|
|
|
||
|
|
return mapServiceResult(result as ServiceRequestResult<string | number>, normalizeStringId);
|
||
|
|
}
|
||
|
|
|
||
|
|
export function fetchUpdateProductMember(id: string, memberId: string, data: Api.Product.UpdateProductMemberParams) {
|
||
|
|
return request<boolean>({
|
||
|
|
...safeJsonRequestConfig,
|
||
|
|
url: `${PRODUCT_PREFIX}/${id}/members/${memberId}`,
|
||
|
|
method: 'put',
|
||
|
|
data
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
export function fetchInactiveProductMember(
|
||
|
|
id: string,
|
||
|
|
memberId: string,
|
||
|
|
data: Api.Product.InactiveProductMemberParams
|
||
|
|
) {
|
||
|
|
return request<boolean>({
|
||
|
|
...safeJsonRequestConfig,
|
||
|
|
url: `${PRODUCT_PREFIX}/${id}/members/${memberId}/inactive`,
|
||
|
|
method: 'post',
|
||
|
|
data
|
||
|
|
});
|
||
|
|
}
|