upload future report bid product

This commit is contained in:
Admin 2025-05-22 11:07:18 +07:00
parent 4f9edf80d0
commit 5f1c7c793c
7 changed files with 56 additions and 8 deletions

View File

@ -16,7 +16,10 @@ export const createScrapConfig = async (
url: "scrap-configs",
withCredentials: true,
method: "POST",
data: newData,
data: {
...newData,
enable: newData.enable === "1",
},
});
handleSuccess(data);
@ -28,14 +31,14 @@ export const createScrapConfig = async (
};
export const updateScrapConfig = async (scrapConfig: Partial<IScrapConfig>) => {
const { search_url, keywords, id } = removeFalsyValues(scrapConfig);
const { search_url, keywords, id, enable } = removeFalsyValues(scrapConfig);
try {
const { data } = await axios({
url: "scrap-configs/" + id,
withCredentials: true,
method: "PUT",
data: { search_url, keywords },
data: { search_url, keywords, enable: enable === "1" },
});
handleSuccess(data);

View File

@ -4,6 +4,7 @@ import {
LoadingOverlay,
Modal,
ModalProps,
Select,
Textarea,
TextInput,
} from "@mantine/core";
@ -28,6 +29,7 @@ const schema = z.object({
.string({ message: "Keyword is required" })
.min(1, { message: "Keyword is required" })
.optional(),
enable: z.enum(["1", "0"], { required_error: "Enable is required" }),
});
export default function ScrapConfigModal({
@ -93,9 +95,18 @@ export default function ScrapConfigModal({
form.reset();
if (!data) return;
form.setValues(data.scrap_config);
const values = {
...data.scrap_config,
enable: (data.scrap_config?.enable === undefined
? "1"
: data.scrap_config.enable
? "1"
: "0") as "0" | "1",
};
prevData.current = data.scrap_config;
form.setValues(values);
prevData.current = values;
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [data]);
@ -121,6 +132,23 @@ export default function ScrapConfigModal({
onSubmit={form.onSubmit(handleSubmit)}
className="grid grid-cols-2 gap-2.5"
>
<Select
className="col-span-2"
label="Enable scrape"
defaultChecked={true}
defaultValue={"1"}
data={[
{
label: "Enbale",
value: "1",
},
{
label: "Disable",
value: "0",
},
]}
{...form.getInputProps("enable")}
/>
<TextInput
className="col-span-2"
size="sm"

View File

@ -35,6 +35,7 @@ export interface IScrapConfig extends ITimestamp {
id: number;
search_url: string;
keywords: string;
enable: boolean | "0" | "1";
scrap_items: IScrapItem[];
}

View File

@ -1,9 +1,19 @@
import { IsNumber, IsOptional, IsString, IsUrl } from 'class-validator';
import {
IsBoolean,
IsNumber,
IsOptional,
IsString,
IsUrl,
} from 'class-validator';
export class CreateScrapConfigDto {
@IsUrl()
search_url: string;
@IsBoolean()
@IsOptional()
enable: boolean;
@IsString()
@IsOptional()
keywords: string;

View File

@ -22,6 +22,9 @@ export class ScrapConfig extends Timestamp {
@Column({ default: 'cisco' })
keywords: string;
@Column({ default: true })
enable: boolean;
@OneToOne(() => WebBid, (web) => web.scrap_config, { onDelete: 'CASCADE' })
@JoinColumn()
web_bid: WebBid;

View File

@ -16,7 +16,11 @@ export class ScrapConfigsService {
async clientGetScrapeConfigs() {
const data = await this.scrapConfigRepo.find({
where: { search_url: Not(IsNull()), keywords: Not(IsNull()) },
where: {
search_url: Not(IsNull()),
keywords: Not(IsNull()),
enable: true,
},
relations: {
web_bid: true,
},

View File

@ -14,7 +14,6 @@ export class TasksService {
private readonly logger = new Logger(TasksService.name);
constructor(
private readonly scrapConfigsService: ScrapConfigsService,
private readonly scrapItemsService: ScrapItemsService,
private readonly mailsService: MailsService,
private readonly configsSerivce: ConfigsService,