add is login requied

This commit is contained in:
relaxed 2024-12-25 13:32:44 +05:00
parent 9cc85a2525
commit 5b75d45910
2 changed files with 185 additions and 62 deletions

View File

@ -113,9 +113,8 @@ WHERE id = ${current_item.id}`;
export let is_item_dialog_open = false; export let is_item_dialog_open = false;
export let is_dialog_item_add = false; export let is_dialog_item_add = false;
let is_logedin = true; let is_logedin = false;
export let is_login_requied = true;
export let data_access;
let access_level = ""; let access_level = "";
/** /**
@ -135,6 +134,11 @@ WHERE id = ${current_item.id}`;
onMount(async () => { onMount(async () => {
await load_db(); await load_db();
is_loaded = true; is_loaded = true;
if (!is_login_requied) {
is_logedin = true;
check_access = () => true;
check_login = async () => [true, ""];
}
}); });
$: cur_dialog_name = is_dialog_item_add $: cur_dialog_name = is_dialog_item_add
? `Добавить в ${db_scheme[current_page].tables[current_table]}` ? `Добавить в ${db_scheme[current_page].tables[current_table]}`
@ -149,12 +153,14 @@ WHERE id = ${current_item.id}`;
bind:is_view_open bind:is_view_open
check_access={(name) => check_access(access_level, name, null)} check_access={(name) => check_access(access_level, name, null)}
on_logout={() => { on_logout={() => {
if (is_login_requied) {
is_logedin = false; is_logedin = false;
// @ts-ignore // @ts-ignore
access_level = ""; access_level = "";
current_page = "Запросы"; current_page = "Запросы";
current_table = ""; current_table = "";
current_view = ""; current_view = "";
}
}} }}
></NavBar> ></NavBar>

View File

@ -27,7 +27,9 @@
async function load_db() { async function load_db() {
// dev // dev
db = await Database.load(`sqlite:${await path.resolve()}/../db/data.db`); db = await Database.load(
`sqlite:${await path.resolve()}/../db/data.db`,
);
// db = await Database.load(`sqlite:${await path.resolve()}/db/data.db`); // db = await Database.load(`sqlite:${await path.resolve()}/db/data.db`);
@ -162,6 +164,7 @@ GROUP BY id;
let is_item_dialog_open = false; let is_item_dialog_open = false;
let is_dialog_item_add = false; let is_dialog_item_add = false;
let is_login_requied = false;
/** /**
* @param {string} access_level * @param {string} access_level
@ -174,7 +177,10 @@ GROUP BY id;
if (data_access[access_level] === true) return true; if (data_access[access_level] === true) return true;
// @ts-ignore // @ts-ignore
if (Object.hasOwn(data_access[access_level], tab_name) && name === null) if (
Object.hasOwn(data_access[access_level], tab_name) &&
name === null
)
return true; return true;
// @ts-ignore // @ts-ignore
@ -210,10 +216,10 @@ insert into IdBuffer (id) values (${ar.join("), (")});`);
<ScreenWrap <ScreenWrap
{db} {db}
{db_scheme} {db_scheme}
{data_access}
{load_db} {load_db}
{check_access} {check_access}
{check_login} {check_login}
{is_login_requied}
bind:is_item_dialog_open bind:is_item_dialog_open
bind:is_dialog_item_add bind:is_dialog_item_add
bind:current_item bind:current_item
@ -240,7 +246,9 @@ insert into IdBuffer (id) values (${ar.join("), (")});`);
<h1>id {current_item.id}</h1> <h1>id {current_item.id}</h1>
{/if} {/if}
<Field name={"название"}> <Field name={"название"}>
<TextInput bind:value={current_item.name}></TextInput> <TextInput
bind:value={current_item.name}
></TextInput>
</Field> </Field>
<Field name={"Ингридиенты"} is_vertical={true}> <Field name={"Ингридиенты"} is_vertical={true}>
@ -250,35 +258,48 @@ insert into IdBuffer (id) values (${ar.join("), (")});`);
"select id, name from Ingredients where is_allowed = 1", "select id, name from Ingredients where is_allowed = 1",
)} )}
on_change={async () => { on_change={async () => {
await id_buffer(current_item.ingredients_ids); await id_buffer(
current_item.ingredients_ids,
);
const query = ` const query = `
select sum(price) as value select sum(price) as value
from Ingredients from Ingredients
join IdBuffer on IdBuffer.id = Ingredients.id join IdBuffer on IdBuffer.id = Ingredients.id
`; `;
const price = await db.select(query); const price =
current_item.price = price[0].value; await db.select(
query,
);
current_item.price =
price[0].value;
}} }}
></ItemList> ></ItemList>
</Field> </Field>
<Field name={"цена"}> <Field name={"цена"}>
<NumberInput bind:value={current_item.price}></NumberInput> <NumberInput
bind:value={current_item.price}
></NumberInput>
</Field> </Field>
<Field name={"разрешено"}> <Field name={"разрешено"}>
<Boolean bind:value={current_item.is_allowed}></Boolean> <Boolean
bind:value={current_item.is_allowed}
></Boolean>
</Field> </Field>
<TableCudButtons <TableCudButtons
{form} {form}
bind:is_dialog_item_add bind:is_dialog_item_add
on_add={async () => { on_add={async () => {
const las_id = await sql_insert_short( const las_id =
await sql_insert_short(
current_table, current_table,
cur_cols, cur_cols,
"returning id", "returning id",
); );
console.log(las_id.lastInsertId); console.log(
las_id.lastInsertId,
);
const query = `insert into PizzasIngredientsJoin (pizza_id, ingredient_id) values const query = `insert into PizzasIngredientsJoin (pizza_id, ingredient_id) values
${current_item.ingredients_ids.map((el) => "(" + las_id.lastInsertId + "," + el + ")").join(",")} ${current_item.ingredients_ids.map((el) => "(" + las_id.lastInsertId + "," + el + ")").join(",")}
@ -293,7 +314,10 @@ insert into PizzasIngredientsJoin (pizza_id, ingredient_id) values
${current_item.ingredients_ids.map((el) => "(" + current_item.id + "," + el + ")").join(",")} ${current_item.ingredients_ids.map((el) => "(" + current_item.id + "," + el + ")").join(",")}
`; `;
await db.execute(query); await db.execute(query);
await sql_update_short(current_table, cur_cols); await sql_update_short(
current_table,
cur_cols,
);
}} }}
on_delete={sql_delete_short} on_delete={sql_delete_short}
></TableCudButtons> ></TableCudButtons>
@ -316,30 +340,50 @@ ${current_item.ingredients_ids.map((el) => "(" + current_item.id + "," + el + ")
> >
<Table <Table
{is_searching} {is_searching}
search_query={db.select(search_query_result)} search_query={db.select(
search_query_result,
)}
columns={["id", ...cur_cols]} columns={["id", ...cur_cols]}
query={db.select(`select * from ${current_table}`)} query={db.select(
`select * from ${current_table}`,
)}
let:item let:item
let:index let:index
> >
<Tr <Tr
{index} {index}
on_click={async () => { on_click={async () => {
const ingredients_ids = await db.select( const ingredients_ids =
await db.select(
`select ingredient_id from PizzasIngredientsJoin where pizza_id = ${item.id}`, `select ingredient_id from PizzasIngredientsJoin where pizza_id = ${item.id}`,
); );
open_item_edit(item); open_item_edit(item);
current_item.ingredients_ids = ingredients_ids.map( current_item.ingredients_ids =
(/** @type {any} */ el) => el.ingredient_id, ingredients_ids.map(
(
/** @type {any} */ el,
) =>
el.ingredient_id,
); );
}} }}
> >
<Atd {item} names={["id", ...cur_cols]}></Atd> <Atd
{item}
names={[
"id",
...cur_cols,
]}
></Atd>
</Tr> </Tr>
</Table> </Table>
</TableButtonsWrap> </TableButtonsWrap>
{:else if current_table === "Ingredients"} {:else if current_table === "Ingredients"}
{@const cur_cols = ["name", "price", "is_allowed", "weight"]} {@const cur_cols = [
"name",
"price",
"is_allowed",
"weight",
]}
<Dialog <Dialog
bind:is_open={is_item_dialog_open} bind:is_open={is_item_dialog_open}
name={cur_dialog_name} name={cur_dialog_name}
@ -350,18 +394,26 @@ ${current_item.ingredients_ids.map((el) => "(" + current_item.id + "," + el + ")
{/if} {/if}
<Field name={"название"}> <Field name={"название"}>
<TextInput bind:value={current_item.name}></TextInput> <TextInput
bind:value={current_item.name}
></TextInput>
</Field> </Field>
<Field name={"цена"}> <Field name={"цена"}>
<NumberInput bind:value={current_item.price}></NumberInput> <NumberInput
bind:value={current_item.price}
></NumberInput>
</Field> </Field>
<Field name={"разрешено"}> <Field name={"разрешено"}>
<Boolean bind:value={current_item.is_allowed}></Boolean> <Boolean
bind:value={current_item.is_allowed}
></Boolean>
</Field> </Field>
<Field name={"Вес"}> <Field name={"Вес"}>
<NumberInput is_float={true} bind:value={current_item.weight} <NumberInput
is_float={true}
bind:value={current_item.weight}
></NumberInput> ></NumberInput>
</Field> </Field>
@ -369,10 +421,16 @@ ${current_item.ingredients_ids.map((el) => "(" + current_item.id + "," + el + ")
{form} {form}
bind:is_dialog_item_add bind:is_dialog_item_add
on_add={async () => { on_add={async () => {
await sql_insert_short(current_table, cur_cols); await sql_insert_short(
current_table,
cur_cols,
);
}} }}
on_save={async () => { on_save={async () => {
await sql_update_short(current_table, cur_cols); await sql_update_short(
current_table,
cur_cols,
);
}} }}
on_delete={sql_delete_short} on_delete={sql_delete_short}
></TableCudButtons> ></TableCudButtons>
@ -396,14 +454,28 @@ ${current_item.ingredients_ids.map((el) => "(" + current_item.id + "," + el + ")
> >
<Table <Table
{is_searching} {is_searching}
search_query={db.select(search_query_result)} search_query={db.select(
search_query_result,
)}
columns={["id", ...cur_cols]} columns={["id", ...cur_cols]}
query={db.select(`select * from ${current_table}`)} query={db.select(
`select * from ${current_table}`,
)}
let:item let:item
let:index let:index
> >
<Tr {index} on_click={() => open_item_edit(item)}> <Tr
<Atd {item} names={["id", ...cur_cols]}></Atd> {index}
on_click={() =>
open_item_edit(item)}
>
<Atd
{item}
names={[
"id",
...cur_cols,
]}
></Atd>
</Tr> </Tr>
</Table> </Table>
</TableButtonsWrap> </TableButtonsWrap>
@ -419,7 +491,9 @@ ${current_item.ingredients_ids.map((el) => "(" + current_item.id + "," + el + ")
{/if} {/if}
<Field name={"дата"}> <Field name={"дата"}>
<DateInput bind:value={current_item.date}></DateInput> <DateInput
bind:value={current_item.date}
></DateInput>
</Field> </Field>
<Field name={"пицца"}> <Field name={"пицца"}>
@ -439,10 +513,16 @@ ${current_item.ingredients_ids.map((el) => "(" + current_item.id + "," + el + ")
{form} {form}
bind:is_dialog_item_add bind:is_dialog_item_add
on_add={async () => { on_add={async () => {
await sql_insert_short(current_table, ["pizza_id"]); await sql_insert_short(
current_table,
["pizza_id"],
);
}} }}
on_save={async () => { on_save={async () => {
await sql_update_short(current_table, cur_cols); await sql_update_short(
current_table,
cur_cols,
);
}} }}
on_delete={sql_delete_short} on_delete={sql_delete_short}
></TableCudButtons> ></TableCudButtons>
@ -464,14 +544,25 @@ ${current_item.ingredients_ids.map((el) => "(" + current_item.id + "," + el + ")
> >
<Table <Table
{is_searching} {is_searching}
search_query={db.select(search_query_result)} search_query={db.select(
search_query_result,
)}
columns={["id", ...cur_cols]} columns={["id", ...cur_cols]}
query={db.select(`select * from ${current_table}`)} query={db.select(
`select * from ${current_table}`,
)}
let:item let:item
let:index let:index
> >
<Tr {index} on_click={() => open_item_edit(item)}> <Tr
<Atd {item} names={["id", "date"]}></Atd> {index}
on_click={() =>
open_item_edit(item)}
>
<Atd
{item}
names={["id", "date"]}
></Atd>
<Td> <Td>
{#await db.select(`select name from Pizzas where id = ${item.pizza_id}`) then data} {#await db.select(`select name from Pizzas where id = ${item.pizza_id}`) then data}
{data[0].name} {data[0].name}
@ -492,13 +583,17 @@ ${current_item.ingredients_ids.map((el) => "(" + current_item.id + "," + el + ")
{/if} {/if}
<Field name={"дата"}> <Field name={"дата"}>
<DateInput bind:value={current_item.date}></DateInput> <DateInput
bind:value={current_item.date}
></DateInput>
</Field> </Field>
<Field name={"ингидиент"}> <Field name={"ингидиент"}>
<Select <Select
bind:value={current_item.ingredient_id} bind:value={current_item.ingredient_id}
query={db.select("select id, name from Ingredients")} query={db.select(
"select id, name from Ingredients",
)}
let:vtype let:vtype
> >
{vtype.name} {vtype.name}
@ -507,7 +602,9 @@ ${current_item.ingredients_ids.map((el) => "(" + current_item.id + "," + el + ")
</Field> </Field>
<Field name={"Количество"}> <Field name={"Количество"}>
<NumberInput min={-999999999} bind:value={current_item.count} <NumberInput
min={-999999999}
bind:value={current_item.count}
></NumberInput> ></NumberInput>
</Field> </Field>
@ -515,10 +612,16 @@ ${current_item.ingredients_ids.map((el) => "(" + current_item.id + "," + el + ")
{form} {form}
bind:is_dialog_item_add bind:is_dialog_item_add
on_add={async () => { on_add={async () => {
await sql_insert_short(current_table, cur_cols); await sql_insert_short(
current_table,
cur_cols,
);
}} }}
on_save={async () => { on_save={async () => {
await sql_update_short(current_table, cur_cols); await sql_update_short(
current_table,
cur_cols,
);
}} }}
on_delete={sql_delete_short} on_delete={sql_delete_short}
></TableCudButtons> ></TableCudButtons>
@ -541,20 +644,32 @@ ${current_item.ingredients_ids.map((el) => "(" + current_item.id + "," + el + ")
> >
<Table <Table
{is_searching} {is_searching}
search_query={db.select(search_query_result)} search_query={db.select(
search_query_result,
)}
columns={["id", ...cur_cols]} columns={["id", ...cur_cols]}
query={db.select(`select * from ${current_table}`)} query={db.select(
`select * from ${current_table}`,
)}
let:item let:item
let:index let:index
> >
<Tr {index} on_click={() => open_item_edit(item)}> <Tr
<Atd {item} names={["id", "date"]}></Atd> {index}
on_click={() =>
open_item_edit(item)}
>
<Atd
{item}
names={["id", "date"]}
></Atd>
<Td> <Td>
{#await db.select(`select name from Ingredients where id = ${item.ingredient_id}`) then data} {#await db.select(`select name from Ingredients where id = ${item.ingredient_id}`) then data}
{data[0].name} {data[0].name}
{/await} {/await}
</Td> </Td>
<Atd {item} names={["count"]}></Atd> <Atd {item} names={["count"]}
></Atd>
</Tr> </Tr>
</Table> </Table>
</TableButtonsWrap> </TableButtonsWrap>
@ -562,7 +677,9 @@ ${current_item.ingredients_ids.map((el) => "(" + current_item.id + "," + el + ")
{:else if is_view_open} {:else if is_view_open}
{#if current_view === "IngredientsLeft"} {#if current_view === "IngredientsLeft"}
<ViewTable <ViewTable
query={db.select(`select * from IngredientsLeft`)} query={db.select(
`select * from IngredientsLeft`,
)}
columns={["id", "ингридиент", "остатки"]} columns={["id", "ингридиент", "остатки"]}
names={["id", "name", "count"]} names={["id", "name", "count"]}
></ViewTable> ></ViewTable>