fix: 问题列表无法聚焦问题 #84

Manually merged
remilia merged 2 commits from fix/focus into master 2025-11-15 16:38:59 +08:00
28 changed files with 92 additions and 93 deletions

View File

@ -45,7 +45,7 @@
// 确保渲染完成后再操作 DOM // 确保渲染完成后再操作 DOM
await nextTick(); await nextTick();
const target = props.questions.find((q) => q.id === Number(focusId)); const target = props.questions.find((q) => q.id === focusId);
if (!target) return; if (!target) return;
// 展开目标项 // 展开目标项

View File

@ -1,3 +1,2 @@
export * from './directus'; export * from './directus';
export * from './useLocalizations'; export * from './useLocalizations';
export * from './useMeilisearch';

View File

@ -16,7 +16,7 @@ describe('companyProfileMapper', () => {
}; };
expect(toCompanyProfileView(rawData)).toEqual({ expect(toCompanyProfileView(rawData)).toEqual({
id: 1, id: '1',
content: 'This is raw data of company profile', content: 'This is raw data of company profile',
}); });
}); });
@ -27,7 +27,7 @@ describe('companyProfileMapper', () => {
}; };
expect(toCompanyProfileView(rawData)).toEqual({ expect(toCompanyProfileView(rawData)).toEqual({
id: 1, id: '1',
content: '', content: '',
}); });
}); });

View File

@ -11,7 +11,7 @@ export function toCompanyProfileView(raw: CompanyProfile): CompanyProfileView {
const trans = raw.translations?.[0]; const trans = raw.translations?.[0];
return { return {
id: raw.id, id: raw.id.toString(),
content: trans?.content ?? '', content: trans?.content ?? '',
}; };
} }

View File

@ -15,7 +15,7 @@ describe('contactInfoMapper', () => {
}; };
expect(toContactInfoView(rawData)).toEqual({ expect(toContactInfoView(rawData)).toEqual({
id: 1, id: '1',
content: 'This is raw data of contact info', content: 'This is raw data of contact info',
}); });
}); });
@ -27,7 +27,7 @@ describe('contactInfoMapper', () => {
}; };
expect(toContactInfoView(rawData)).toEqual({ expect(toContactInfoView(rawData)).toEqual({
id: 1, id: '1',
content: '', content: '',
}); });
}); });

View File

@ -11,7 +11,7 @@ export function toContactInfoView(raw: ContactInfo): ContactInfoView {
const trans = raw.translations?.[0]; const trans = raw.translations?.[0];
return { return {
id: raw.id, id: raw.id.toString(),
content: trans?.content ?? '', content: trans?.content ?? '',
}; };
} }

View File

@ -18,7 +18,7 @@ describe('toProductDocumentView', () => {
test('convert raw data with fileMeta to ProductDocumentView correctly', () => { test('convert raw data with fileMeta to ProductDocumentView correctly', () => {
const rawData: ProductDocument = { ...baseData }; const rawData: ProductDocument = { ...baseData };
expect(toProductDocumentView(rawData)).toEqual({ expect(toProductDocumentView(rawData)).toEqual({
id: 1, id: '1',
fileId: 'rand-om__-uuid-1234', fileId: 'rand-om__-uuid-1234',
filename: 'document.pdf', filename: 'document.pdf',
title: 'Document Title', title: 'Document Title',
@ -34,7 +34,7 @@ describe('toProductDocumentView', () => {
}; };
expect(toProductDocumentView(rawData)).toEqual({ expect(toProductDocumentView(rawData)).toEqual({
id: 1, id: '1',
fileId: '', fileId: '',
filename: '', filename: '',
title: 'Document Title', title: 'Document Title',
@ -49,7 +49,7 @@ describe('toProductDocumentView', () => {
translations: [], translations: [],
}; };
expect(toProductDocumentView(rawData)).toEqual({ expect(toProductDocumentView(rawData)).toEqual({
id: 1, id: '1',
fileId: 'rand-om__-uuid-1234', fileId: 'rand-om__-uuid-1234',
filename: 'document.pdf', filename: 'document.pdf',
title: '', title: '',
@ -88,7 +88,7 @@ describe('toDocumentListView', () => {
test('convert raw data with fileMeta to DocumentListView correctly', () => { test('convert raw data with fileMeta to DocumentListView correctly', () => {
const rawData: ProductDocument = { ...baseData }; const rawData: ProductDocument = { ...baseData };
expect(toDocumentListView(rawData)).toEqual({ expect(toDocumentListView(rawData)).toEqual({
id: 1, id: '1',
fileId: 'rand-om__-uuid-1234', fileId: 'rand-om__-uuid-1234',
filename: 'document.pdf', filename: 'document.pdf',
title: 'Document Title', title: 'Document Title',
@ -96,10 +96,10 @@ describe('toDocumentListView', () => {
size: 2048, size: 2048,
products: [ products: [
{ {
id: 1, id: '1',
name: 'Product A', name: 'Product A',
type: { type: {
id: 1, id: '1',
name: 'Type A', name: 'Type A',
}, },
}, },

View File

@ -19,7 +19,7 @@ export function toProductDocumentView(
const url = `/api/assets/${fileId}`; const url = `/api/assets/${fileId}`;
return { return {
id: raw.id, id: raw.id.toString(),
fileId: fileId, fileId: fileId,
filename: file?.filename_download ?? '', filename: file?.filename_download ?? '',
title: trans?.title ?? '', title: trans?.title ?? '',
@ -52,22 +52,22 @@ export function toDocumentListView(raw: ProductDocument): DocumentListView {
.map((item) => { .map((item) => {
const productType = isObject<ProductType>(item.product_type) const productType = isObject<ProductType>(item.product_type)
? ({ ? ({
id: item.product_type.id, id: item.product_type.id.toString(),
name: item.product_type.translations?.[0]?.name ?? '', name: item.product_type.translations?.[0]?.name ?? '',
} satisfies DocumentListProductType) } satisfies DocumentListProductType)
: ({ : ({
id: -1, id: '',
name: '', name: '',
} satisfies DocumentListProductType); } satisfies DocumentListProductType);
return { return {
id: item.id, id: item.id.toString(),
name: item.translations?.[0]?.name ?? '', name: item.translations?.[0]?.name ?? '',
type: productType, type: productType,
}; };
}); });
return { return {
id: raw.id, id: raw.id.toString(),
fileId: fileId, fileId: fileId,
filename: file?.filename_download ?? '', filename: file?.filename_download ?? '',
title: trans?.title ?? '', title: trans?.title ?? '',

View File

@ -50,17 +50,17 @@ describe('toHomepageView', () => {
}; };
expect(toHomepageView(rawData)).toEqual({ expect(toHomepageView(rawData)).toEqual({
id: 1, id: '1',
carousel: ['file-uuid-1', 'file-uuid-2'], carousel: ['file-uuid-1', 'file-uuid-2'],
recommendProducts: [ recommendProducts: [
{ {
id: 1, id: '1',
name: 'Product 1', name: 'Product 1',
summary: 'Summary 1', summary: 'Summary 1',
cover: 'cover-file-uuid-1', cover: 'cover-file-uuid-1',
}, },
{ {
id: 2, id: '2',
name: 'Product 2', name: 'Product 2',
summary: 'Summary 2', summary: 'Summary 2',
cover: 'cover-file-uuid-2', cover: 'cover-file-uuid-2',
@ -68,7 +68,7 @@ describe('toHomepageView', () => {
], ],
recommendSolutions: [ recommendSolutions: [
{ {
id: 1, id: '1',
title: 'Solution 1', title: 'Solution 1',
summary: 'Summary 1', summary: 'Summary 1',
cover: 'cover-file-uuid-1', cover: 'cover-file-uuid-1',
@ -86,10 +86,10 @@ describe('toHomepageView', () => {
}; };
expect(toHomepageView(rawData)).toEqual({ expect(toHomepageView(rawData)).toEqual({
id: 1, id: '1',
carousel: [], carousel: [],
recommendProducts: [{ id: 1, name: '', summary: '', cover: '' }], recommendProducts: [{ id: '1', name: '', summary: '', cover: '' }],
recommendSolutions: [{ id: 1, title: '', summary: '', cover: '' }], recommendSolutions: [{ id: '1', title: '', summary: '', cover: '' }],
}); });
}); });
}); });

View File

@ -24,7 +24,7 @@ export function toHomepageView(raw: Homepage): HomepageView {
const cover = isObject<DirectusFile>(item.cover) ? item.cover.id : ''; const cover = isObject<DirectusFile>(item.cover) ? item.cover.id : '';
return { return {
id: item.id, id: item.id.toString(),
name: trans?.name ?? '', name: trans?.name ?? '',
summary: trans?.summary ?? '', summary: trans?.summary ?? '',
cover: cover, cover: cover,
@ -38,7 +38,7 @@ export function toHomepageView(raw: Homepage): HomepageView {
const cover = isObject<DirectusFile>(item.cover) ? item.cover.id : ''; const cover = isObject<DirectusFile>(item.cover) ? item.cover.id : '';
return { return {
id: item.id, id: item.id.toString(),
title: trans?.title ?? '', title: trans?.title ?? '',
summary: trans?.summary ?? '', summary: trans?.summary ?? '',
cover: cover, cover: cover,
@ -46,7 +46,7 @@ export function toHomepageView(raw: Homepage): HomepageView {
}); });
return { return {
id: raw.id, id: raw.id.toString(),
carousel: carousel ?? [], carousel: carousel ?? [],
recommendProducts: products ?? [], recommendProducts: products ?? [],
recommendSolutions: solutions ?? [], recommendSolutions: solutions ?? [],

View File

@ -27,12 +27,12 @@ describe('toProductListView', () => {
}; };
expect(toProductListView(rawData)).toEqual({ expect(toProductListView(rawData)).toEqual({
id: 1, id: '1',
name: 'Product Name', name: 'Product Name',
summary: 'Product Summary', summary: 'Product Summary',
cover: 'cover-file-uuid-1234', cover: 'cover-file-uuid-1234',
product_type: { product_type: {
id: 1, id: '1',
name: 'Type Name', name: 'Type Name',
sort: 1, sort: 1,
}, },
@ -54,12 +54,12 @@ describe('toProductListView', () => {
}; };
expect(toProductListView(rawData)).toEqual({ expect(toProductListView(rawData)).toEqual({
id: 1, id: '1',
name: '', name: '',
summary: '', summary: '',
cover: 'cover-file-uuid-1234', cover: 'cover-file-uuid-1234',
product_type: { product_type: {
id: 20, id: '20',
name: '', name: '',
sort: 1, sort: 1,
}, },
@ -78,7 +78,7 @@ describe('toProductSpecView', () => {
}; };
expect(toProductSpecView(rawData)).toEqual({ expect(toProductSpecView(rawData)).toEqual({
id: 1, id: '1',
key: 'Key', key: 'Key',
value: 'Value', value: 'Value',
}); });
@ -91,7 +91,7 @@ describe('toProductSpecView', () => {
}; };
expect(toProductSpecView(rawData)).toEqual({ expect(toProductSpecView(rawData)).toEqual({
id: 1, id: '1',
key: '', key: '',
value: '', value: '',
}); });
@ -113,11 +113,11 @@ describe('toProductSpecGroupView', () => {
}; };
expect(toProductSpecGroupView(rawData)).toEqual({ expect(toProductSpecGroupView(rawData)).toEqual({
id: 1, id: '1',
name: 'Group Name', name: 'Group Name',
specs: [ specs: [
{ id: 1, key: 'Key1', value: 'Value1' }, { id: '1', key: 'Key1', value: 'Value1' },
{ id: 2, key: 'Key2', value: 'Value2' }, { id: '2', key: 'Key2', value: 'Value2' },
], ],
}); });
}); });
@ -130,7 +130,7 @@ describe('toProductSpecGroupView', () => {
}; };
expect(toProductSpecGroupView(rawData)).toEqual({ expect(toProductSpecGroupView(rawData)).toEqual({
id: 1, id: '1',
name: '', name: '',
specs: [], specs: [],
}); });
@ -155,7 +155,7 @@ describe('toProductView', () => {
}; };
expect(toProductView(rawData)).toEqual({ expect(toProductView(rawData)).toEqual({
id: 1, id: '1',
name: 'Product Name', name: 'Product Name',
summary: 'Product Summary', summary: 'Product Summary',
description: 'Product Description', description: 'Product Description',
@ -174,7 +174,7 @@ describe('toProductView', () => {
}; };
expect(toProductView(rawData)).toEqual({ expect(toProductView(rawData)).toEqual({
id: 1, id: '1',
name: '', name: '',
summary: '', summary: '',
description: '', description: '',

View File

@ -15,7 +15,7 @@ export function toProductTypeView(raw: ProductType): ProductTypeView {
const trans = raw.translations?.[0] ?? { name: '' }; const trans = raw.translations?.[0] ?? { name: '' };
return { return {
id: raw.id, id: raw.id.toString(),
name: trans.name, name: trans.name,
sort: raw?.sort ?? 999, sort: raw?.sort ?? 999,
}; };
@ -36,7 +36,7 @@ export function toProductListView(raw: Product): ProductListView {
const type = isObject<ProductType>(raw.product_type) const type = isObject<ProductType>(raw.product_type)
? toProductTypeView(raw.product_type) ? toProductTypeView(raw.product_type)
: ({ : ({
id: -1, id: '',
name: '', name: '',
sort: 999, sort: 999,
} satisfies ProductTypeView); } satisfies ProductTypeView);
@ -44,7 +44,7 @@ export function toProductListView(raw: Product): ProductListView {
const cover = isObject<DirectusFile>(raw.cover) ? raw.cover.id : ''; const cover = isObject<DirectusFile>(raw.cover) ? raw.cover.id : '';
return { return {
id: raw.id, id: raw.id.toString(),
product_type: type, product_type: type,
name: trans?.name ?? '', name: trans?.name ?? '',
summary: trans?.summary ?? '', summary: trans?.summary ?? '',
@ -69,7 +69,7 @@ export function toProductSpecGroupView(
const specs = raw.specs ?? []; const specs = raw.specs ?? [];
return { return {
id: raw.id, id: raw.id.toString(),
name: trans?.name ?? '', name: trans?.name ?? '',
specs: specs specs: specs
.filter(isObject<ProductSpec>) .filter(isObject<ProductSpec>)
@ -90,7 +90,7 @@ export function toProductSpecView(raw: ProductSpec): ProductSpecView {
const trans = raw.translations?.[0]; const trans = raw.translations?.[0];
return { return {
id: raw.id, id: raw.id.toString(),
key: trans?.key ?? '', key: trans?.key ?? '',
value: trans?.value ?? '', value: trans?.value ?? '',
}; };
@ -115,7 +115,7 @@ export function toProductView(raw: Product): ProductView {
.map((item) => { .map((item) => {
const image = isObject<DirectusFile>(item.image) ? item.image.id : ''; const image = isObject<DirectusFile>(item.image) ? item.image.id : '';
return { return {
id: item.id, id: item.id.toString(),
image: image, image: image,
caption: item.translations?.[0]?.caption || '', caption: item.translations?.[0]?.caption || '',
}; };
@ -142,7 +142,7 @@ export function toProductView(raw: Product): ProductView {
.map((item) => toProductDocumentView(item)); .map((item) => toProductDocumentView(item));
return { return {
id: raw.id, id: raw.id.toString(),
product_type: type, product_type: type,
name: trans?.name ?? '', name: trans?.name ?? '',
summary: trans?.summary ?? '', summary: trans?.summary ?? '',

View File

@ -17,7 +17,7 @@ describe('toProductQuestionView', () => {
}; };
expect(toProductQuestionView(rawData)).toEqual({ expect(toProductQuestionView(rawData)).toEqual({
id: 1, id: '1',
title: 'Question Title', title: 'Question Title',
content: 'Question Answer', content: 'Question Answer',
}); });
@ -30,7 +30,7 @@ describe('toProductQuestionView', () => {
}; };
expect(toProductQuestionView(rawData)).toEqual({ expect(toProductQuestionView(rawData)).toEqual({
id: 1, id: '1',
title: '', title: '',
content: '', content: '',
}); });
@ -67,15 +67,15 @@ describe('toQuestionListView', () => {
}; };
expect(toQuestionListView(rawData)).toEqual({ expect(toQuestionListView(rawData)).toEqual({
id: 1, id: '1',
title: 'Question Title', title: 'Question Title',
content: 'Question Answer', content: 'Question Answer',
products: [ products: [
{ {
id: 1, id: '1',
name: 'Product Name', name: 'Product Name',
type: { type: {
id: 1, id: '1',
name: 'Type Name', name: 'Type Name',
}, },
}, },
@ -103,15 +103,15 @@ describe('toQuestionListView', () => {
}; };
expect(toQuestionListView(rawData)).toEqual({ expect(toQuestionListView(rawData)).toEqual({
id: 1, id: '1',
title: '', title: '',
content: '', content: '',
products: [ products: [
{ {
id: 1, id: '1',
name: '', name: '',
type: { type: {
id: 1, id: '1',
name: '', name: '',
}, },
}, },

View File

@ -13,7 +13,7 @@ export function toProductQuestionView(raw: Question): ProductQuestionView {
const trans = raw.translations?.[0]; const trans = raw.translations?.[0];
return { return {
id: raw.id, id: raw.id.toString(),
title: trans?.title ?? '', title: trans?.title ?? '',
content: trans?.content ?? '', content: trans?.content ?? '',
}; };
@ -40,23 +40,23 @@ export function toQuestionListView(raw: Question): QuestionListView {
const product_type = isObject<ProductType>(item.product_type) const product_type = isObject<ProductType>(item.product_type)
? ({ ? ({
id: item.product_type.id, id: item.product_type.id.toString(),
name: item.product_type.translations?.[0]?.name ?? '', name: item.product_type.translations?.[0]?.name ?? '',
} satisfies QuestionListProductType) } satisfies QuestionListProductType)
: ({ : ({
id: -1, id: '',
name: '', name: '',
} satisfies QuestionListProductType); } satisfies QuestionListProductType);
return { return {
id: item.id, id: item.id.toString(),
name: translations?.name ?? '', name: translations?.name ?? '',
type: product_type, type: product_type,
}; };
}); });
return { return {
id: raw.id, id: raw.id.toString(),
title: trans?.title ?? '', title: trans?.title ?? '',
content: trans?.content ?? '', content: trans?.content ?? '',
products: related_products, products: related_products,

View File

@ -20,11 +20,11 @@ describe('toSolutionListView', () => {
const rawData: Solution = { ...baseData }; const rawData: Solution = { ...baseData };
expect(toSolutionListView(rawData)).toEqual({ expect(toSolutionListView(rawData)).toEqual({
id: 1, id: '1',
title: 'Solution Title', title: 'Solution Title',
summary: 'Solution Summary', summary: 'Solution Summary',
solution_type: { solution_type: {
id: 1, id: '1',
name: 'Type Name', name: 'Type Name',
sort: 1, sort: 1,
}, },
@ -39,11 +39,11 @@ describe('toSolutionListView', () => {
}; };
expect(toSolutionListView(rawData)).toEqual({ expect(toSolutionListView(rawData)).toEqual({
id: 1, id: '1',
title: '', title: '',
summary: '', summary: '',
solution_type: { solution_type: {
id: 1, id: '1',
name: 'Type Name', name: 'Type Name',
sort: 1, sort: 1,
}, },
@ -75,7 +75,7 @@ describe('toSolutionView', () => {
}; };
expect(toSolutionView(rawData)).toEqual({ expect(toSolutionView(rawData)).toEqual({
id: 1, id: '1',
title: 'Solution Title', title: 'Solution Title',
summary: 'Solution Summary', summary: 'Solution Summary',
content: 'Solution Content', content: 'Solution Content',
@ -90,7 +90,7 @@ describe('toSolutionView', () => {
}; };
expect(toSolutionView(rawData)).toEqual({ expect(toSolutionView(rawData)).toEqual({
id: 1, id: '1',
title: '', title: '',
summary: '', summary: '',
content: '', content: '',

View File

@ -15,7 +15,7 @@ export function toSolutionTypeView(raw: SolutionType): SolutionTypeView {
const trans = raw?.translations?.[0]; const trans = raw?.translations?.[0];
return { return {
id: raw.id, id: raw.id.toString(),
name: trans?.name ?? '', name: trans?.name ?? '',
sort: raw?.sort ?? 999, sort: raw?.sort ?? 999,
}; };
@ -38,7 +38,7 @@ export function toSolutionListView(raw: Solution): SolutionListView {
const type = isObject<SolutionType>(raw.type) const type = isObject<SolutionType>(raw.type)
? toSolutionTypeView(raw.type) ? toSolutionTypeView(raw.type)
: ({ : ({
id: -1, id: '',
name: 'uncategory', name: 'uncategory',
sort: 999, sort: 999,
} satisfies SolutionTypeView); } satisfies SolutionTypeView);
@ -46,7 +46,7 @@ export function toSolutionListView(raw: Solution): SolutionListView {
const cover = isObject<DirectusFile>(raw.cover) ? (raw?.cover.id ?? '') : ''; const cover = isObject<DirectusFile>(raw.cover) ? (raw?.cover.id ?? '') : '';
return { return {
id: raw.id, id: raw.id.toString(),
title: trans?.title ?? '', title: trans?.title ?? '',
summary: trans?.summary ?? '', summary: trans?.summary ?? '',
solution_type: type, solution_type: type,
@ -69,7 +69,7 @@ export function toSolutionView(raw: Solution): SolutionView {
const trans = raw.translations?.[0]; const trans = raw.translations?.[0];
return { return {
id: raw.id, id: raw.id.toString(),
title: trans?.title ?? '', title: trans?.title ?? '',
summary: trans?.summary ?? '', summary: trans?.summary ?? '',
content: trans?.content ?? '', content: trans?.content ?? '',

View File

@ -3,7 +3,7 @@
*/ */
export interface CompanyProfileView { export interface CompanyProfileView {
/** 唯一标识符 **/ /** 唯一标识符 **/
id: number; id: string;
/** 内容 **/ /** 内容 **/
content: string; content: string;

View File

@ -3,7 +3,7 @@
*/ */
export interface ContactInfoView { export interface ContactInfoView {
/** 唯一标识符 **/ /** 唯一标识符 **/
id: number; id: string;
/** 内容 **/ /** 内容 **/
content: string; content: string;

View File

@ -3,7 +3,7 @@
* 用于在文档库中提供产品筛选功能 * 用于在文档库中提供产品筛选功能
*/ */
export interface DocumentListProductType { export interface DocumentListProductType {
id: number; id: string;
name: string; name: string;
} }
@ -12,7 +12,7 @@ export interface DocumentListProductType {
* 用于在文档库中提供产品筛选功能 * 用于在文档库中提供产品筛选功能
*/ */
export interface DocumentListProduct { export interface DocumentListProduct {
id: number; id: string;
name: string; name: string;
type: DocumentListProductType; type: DocumentListProductType;
} }
@ -23,7 +23,7 @@ export interface DocumentListProduct {
*/ */
export interface DocumentListView { export interface DocumentListView {
/** 唯一标识符 **/ /** 唯一标识符 **/
id: number; id: string;
/** 文件UUID **/ /** 文件UUID **/
fileId: string; fileId: string;

View File

@ -3,7 +3,7 @@
*/ */
export interface HomepageProductView { export interface HomepageProductView {
/** 唯一标识符 **/ /** 唯一标识符 **/
id: number; id: string;
/** 产品名称 **/ /** 产品名称 **/
name: string; name: string;
@ -20,7 +20,7 @@ export interface HomepageProductView {
*/ */
export interface HomepageSolutionView { export interface HomepageSolutionView {
/** 唯一标识符 **/ /** 唯一标识符 **/
id: number; id: string;
/** 解决方案标题 **/ /** 解决方案标题 **/
title: string; title: string;
@ -37,7 +37,7 @@ export interface HomepageSolutionView {
*/ */
export interface HomepageView { export interface HomepageView {
/** 唯一标识符 **/ /** 唯一标识符 **/
id: number; id: string;
/** 首页图片 **/ /** 首页图片 **/
carousel: string[]; carousel: string[];

View File

@ -4,7 +4,7 @@
*/ */
export interface ProductDocumentView { export interface ProductDocumentView {
/** 唯一标识符 **/ /** 唯一标识符 **/
id: number; id: string;
/** 文件UUID **/ /** 文件UUID **/
fileId: string; fileId: string;

View File

@ -4,7 +4,7 @@
*/ */
export interface ProductTypeView { export interface ProductTypeView {
/** 唯一标识符 **/ /** 唯一标识符 **/
id: number; id: string;
/** 类型名 **/ /** 类型名 **/
name: string; name: string;
@ -19,7 +19,7 @@ export interface ProductTypeView {
*/ */
export interface ProductListView { export interface ProductListView {
/** 唯一标识符 **/ /** 唯一标识符 **/
id: number; id: string;
/** 产品名称 **/ /** 产品名称 **/
name: string; name: string;

View File

@ -4,7 +4,7 @@
*/ */
export interface ProductQuestionView { export interface ProductQuestionView {
/** 唯一标识符 **/ /** 唯一标识符 **/
id: number; id: string;
/** 问题标题 **/ /** 问题标题 **/
title: string; title: string;

View File

@ -4,7 +4,7 @@
*/ */
export interface ProductSpecView { export interface ProductSpecView {
/** 唯一标识符 **/ /** 唯一标识符 **/
id: number; id: string;
/** 规格名称 **/ /** 规格名称 **/
key: string; key: string;
@ -19,7 +19,7 @@ export interface ProductSpecView {
*/ */
export interface ProductSpecGroupView { export interface ProductSpecGroupView {
/** 唯一标识符 **/ /** 唯一标识符 **/
id: number; id: string;
/** 规格组名称 **/ /** 规格组名称 **/
name: string; name: string;

View File

@ -3,7 +3,7 @@ import type { ProductQuestionView } from './product-question-view';
import type { ProductDocumentView } from './product-document-view'; import type { ProductDocumentView } from './product-document-view';
interface ImageView { interface ImageView {
id: number; id: string;
image: string; image: string;
caption: string; caption: string;
} }
@ -14,7 +14,7 @@ interface ImageView {
*/ */
export interface ProductView { export interface ProductView {
/** 唯一标识符 **/ /** 唯一标识符 **/
id: number; id: string;
/** 产品名称 **/ /** 产品名称 **/
name: string; name: string;

View File

@ -3,7 +3,7 @@
* 用于在常见问题列表中提供产品筛选功能 * 用于在常见问题列表中提供产品筛选功能
*/ */
export interface QuestionListProductType { export interface QuestionListProductType {
id: number; id: string;
name: string; name: string;
} }
@ -12,7 +12,7 @@ export interface QuestionListProductType {
* 用于在常见问题列表中提供产品筛选功能 * 用于在常见问题列表中提供产品筛选功能
*/ */
export interface QuestionListProduct { export interface QuestionListProduct {
id: number; id: string;
name: string; name: string;
type: QuestionListProductType; type: QuestionListProductType;
} }
@ -23,7 +23,7 @@ export interface QuestionListProduct {
*/ */
export interface QuestionListView { export interface QuestionListView {
/** 唯一标识符 **/ /** 唯一标识符 **/
id: number; id: string;
/** 问题标题 **/ /** 问题标题 **/
title: string; title: string;

View File

@ -4,7 +4,7 @@
*/ */
export interface SolutionTypeView { export interface SolutionTypeView {
/** 唯一标识符 **/ /** 唯一标识符 **/
id: number; id: string;
/** 类型名 **/ /** 类型名 **/
name: string; name: string;
@ -19,7 +19,7 @@ export interface SolutionTypeView {
*/ */
export interface SolutionListView { export interface SolutionListView {
/** 唯一标识符 **/ /** 唯一标识符 **/
id: number; id: string;
/** 标题 **/ /** 标题 **/
title: string; title: string;

View File

@ -4,7 +4,7 @@
*/ */
export interface SolutionView { export interface SolutionView {
/** 唯一标识符 **/ /** 唯一标识符 **/
id: number; id: string;
/** 标题 **/ /** 标题 **/
title: string; title: string;