Browse Source

用户、矿石、溶液、实验记录添加删除提示

master
zhangjiming 5 months ago
parent
commit
624f2ea765
  1. 47
      src/views/expeRecord/index.vue
  2. 42
      src/views/liquidConfig/index.vue
  3. 99
      src/views/oreManage/index.vue
  4. 48
      src/views/userManage/UserManage.vue

47
src/views/expeRecord/index.vue

@ -30,19 +30,21 @@
<p class="w-[8rem]">操作员</p> <p class="w-[8rem]">操作员</p>
<p>实验名称</p> <p>实验名称</p>
</header> </header>
<div
v-for="record in recordList"
:key="record.id"
class="h-10 flex items-center text-xs pr-3 text-[#6e6e6e] border-b border-b-[#f8f8f8]"
@click="onItemSelect(record)">
<div class="w-10 self-stretch flex justify-center items-center">
<img class="w-4 h-4" :src="selectedIds.includes(record.id) ? icon_select : icon_unselect" alt="" />
<main class="overflow-auto" style="max-height: calc(100vh - var(--headerHeight) - var(--footerHeight) - 120px)">
<div
v-for="record in recordList"
:key="record.id"
class="h-10 flex items-center text-xs pr-3 text-[#6e6e6e] border-b border-b-[#f8f8f8]"
@click="onItemSelect(record)">
<div class="w-10 self-stretch flex justify-center items-center">
<img class="w-4 h-4" :src="selectedIds.includes(record.id) ? icon_select : icon_unselect" alt="" />
</div>
<p class="w-[10rem]">{{ record.startTime }}</p>
<p class="w-[8rem]">{{ userStore.userIdMap[record.createUser].nickname }}</p>
<p class="w-[10rem]">{{ record.name }}</p>
<p class="text-primary underline leading-[3rem] text-sm px-2" @click.stop="onDetailClick(record)">详情</p>
</div> </div>
<p class="w-[10rem]">{{ record.startTime }}</p>
<p class="w-[8rem]">{{ userStore.userIdMap[record.createUser].nickname }}</p>
<p class="w-[10rem]">{{ record.name }}</p>
<p class="text-primary underline leading-[3rem] text-sm px-2" @click.stop="onDetailClick(record)">详情</p>
</div>
</main>
</section> </section>
<van-overlay v-if="showEditDialog" :show="true"> <van-overlay v-if="showEditDialog" :show="true">
@ -62,6 +64,7 @@ import { deleteExperienceRecords, getExperienceRecords, type ExperienceRecord }
import { showToast } from "vant"; import { showToast } from "vant";
import { useUserStore } from "@/stores/user"; import { useUserStore } from "@/stores/user";
import ExpeDetail from "./components/ExpeDetail.vue"; import ExpeDetail from "./components/ExpeDetail.vue";
import { ElMessageBox } from "element-plus";
const userStore = useUserStore(); const userStore = useUserStore();
const showEditDialog = ref<boolean>(false); const showEditDialog = ref<boolean>(false);
@ -102,13 +105,19 @@ function onSelectAll() {
function onDeleteRecords() { function onDeleteRecords() {
if (selectedIds.value.length === 0) return; if (selectedIds.value.length === 0) return;
deleteExperienceRecords(selectedIds.value.join(",")).then(res => {
if (res.success) {
selectedIds.value = [];
getRecords();
} else {
showToast(res.msg);
}
ElMessageBox.confirm("确定删除记录?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
center: true,
}).then(() => {
deleteExperienceRecords(selectedIds.value.join(",")).then(res => {
if (res.success) {
selectedIds.value = [];
getRecords();
} else {
showToast(res.msg);
}
});
}); });
} }
function onDetailClick(item: ExperienceRecord) { function onDetailClick(item: ExperienceRecord) {

42
src/views/liquidConfig/index.vue

@ -27,17 +27,19 @@
<p class="w-16">ID</p> <p class="w-16">ID</p>
<p>溶液名称</p> <p>溶液名称</p>
</header> </header>
<div
v-for="liquid in liquidList"
:key="liquid.id"
class="h-10 flex items-center text-xs pr-3 text-[#6e6e6e] border-b border-b-[#f8f8f8]"
@click="onItemSelect(liquid)">
<div class="w-10 self-stretch flex justify-center items-center">
<img class="w-4 h-4" :src="selectedIds.includes(liquid.id) ? icon_select : icon_unselect" alt="" />
<main class="overflow-auto" style="max-height: calc(100vh - var(--headerHeight) - var(--footerHeight) - 120px)">
<div
v-for="liquid in liquidList"
:key="liquid.id"
class="h-10 flex items-center text-xs pr-3 text-[#6e6e6e] border-b border-b-[#f8f8f8]"
@click="onItemSelect(liquid)">
<div class="w-10 self-stretch flex justify-center items-center">
<img class="w-4 h-4" :src="selectedIds.includes(liquid.id) ? icon_select : icon_unselect" alt="" />
</div>
<p class="w-16">{{ liquid.id }}</p>
<p class="flex-auto">{{ liquid.name }}</p>
</div> </div>
<p class="w-16">{{ liquid.id }}</p>
<p class="flex-auto">{{ liquid.name }}</p>
</div>
</main>
</section> </section>
<van-overlay v-if="showEditDialog" :show="true"> <van-overlay v-if="showEditDialog" :show="true">
@ -125,13 +127,19 @@ function onDeleteLiquid() {
}); });
return; return;
} }
deleteLiquid(selectedIds.value.join(",")).then(res => {
if (res.success) {
selectedIds.value = [];
getLiquid();
} else {
showToast(res.msg);
}
ElMessageBox.confirm("确定删除溶液?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
center: true,
}).then(() => {
deleteLiquid(selectedIds.value.join(",")).then(res => {
if (res.success) {
selectedIds.value = [];
getLiquid();
} else {
showToast(res.msg);
}
});
}); });
} }
</script> </script>

99
src/views/oreManage/index.vue

@ -53,29 +53,31 @@
<p class="w-[18rem]">矿石名称</p> <p class="w-[18rem]">矿石名称</p>
<p>工艺</p> <p>工艺</p>
</header> </header>
<div
v-for="ore in oreList"
:key="ore.id"
class="min-h-10 flex items-center text-xs pr-3 text-[#6e6e6e] border-b border-b-[#f8f8f8]"
@click="onItemSelect(ore)">
<div class="w-10 self-stretch flex justify-center items-center">
<img class="w-4 h-4" :src="selectedIds.includes(ore.id) ? icon_select : icon_unselect" alt="" />
<main class="overflow-auto" style="max-height: calc(100vh - var(--headerHeight) - var(--footerHeight) - 120px)">
<div
v-for="ore in oreList"
:key="ore.id"
class="min-h-10 flex items-center text-xs pr-3 text-[#6e6e6e] border-b border-b-[#f8f8f8]"
@click="onItemSelect(ore)">
<div class="w-10 self-stretch flex justify-center items-center">
<img class="w-4 h-4" :src="selectedIds.includes(ore.id) ? icon_select : icon_unselect" alt="" />
</div>
<p class="w-14">{{ ore.id }}</p>
<p class="w-[18rem]">{{ ore.oresName }}</p>
<div class="flex-auto">
<ul class="appearance-none flex items-center gap-3 text-sm flex-wrap my-2">
<li
v-for="craft in ore.craftsList"
:key="craft.id"
class="bg-[#F4F4F4] rounded-sm px-2 h-7 leading-7"
:class="`${selectedCraftIds.includes(craft.id) && 'bg-primary text-white'}`"
@click.stop="onCraftItemSelect(craft)">
{{ craft.name }}
</li>
</ul>
</div>
</div> </div>
<p class="w-14">{{ ore.id }}</p>
<p class="w-[18rem]">{{ ore.oresName }}</p>
<div class="flex-auto">
<ul class="appearance-none flex items-center gap-3 text-sm flex-wrap my-2">
<li
v-for="craft in ore.craftsList"
:key="craft.id"
class="bg-[#F4F4F4] rounded-sm px-2 h-7 leading-7"
:class="`${selectedCraftIds.includes(craft.id) && 'bg-primary text-white'}`"
@click.stop="onCraftItemSelect(craft)">
{{ craft.name }}
</li>
</ul>
</div>
</div>
</main>
</section> </section>
<van-overlay v-if="showCraftEditDialog" :show="true"> <van-overlay v-if="showCraftEditDialog" :show="true">
@ -189,13 +191,19 @@ function onEditOre() {
} }
function onDeleteOre() { function onDeleteOre() {
if (selectedIds.value.length === 0) return; if (selectedIds.value.length === 0) return;
deleteOre(selectedIds.value.join(",")).then(res => {
if (res.success) {
selectedIds.value = [];
getOres();
} else {
showToast(res.msg);
}
ElMessageBox.confirm("确定删除矿石?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
center: true,
}).then(() => {
deleteOre(selectedIds.value.join(",")).then(res => {
if (res.success) {
selectedIds.value = [];
getOres();
} else {
showToast(res.msg);
}
});
}); });
} }
function onAddCraft() { function onAddCraft() {
@ -211,27 +219,20 @@ function onEditCraft() {
function onDeleteCraft() { function onDeleteCraft() {
if (selectedCraftIds.value.length === 0) return; if (selectedCraftIds.value.length === 0) return;
ElMessageBox.confirm(
"确定删除工艺?",
{
confirmButtonText: '确定',
cancelButtonText: '取消',
center: true,
}
)
.then(() => {
ElMessageBox.confirm("确定删除工艺?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
center: true,
}).then(() => {
deleteCraft(selectedCraftIds.value.join(",")).then(res => { deleteCraft(selectedCraftIds.value.join(",")).then(res => {
if (res.success) {
selectedCraftIds.value = [];
getOres();
} else {
showToast(res.msg);
}
});
})
if (res.success) {
selectedCraftIds.value = [];
getOres();
} else {
showToast(res.msg);
}
});
});
} }
function confirmCraftEdit(craft: Craft) { function confirmCraftEdit(craft: Craft) {
let req; let req;

48
src/views/userManage/UserManage.vue

@ -28,19 +28,20 @@
<p class="w-40">昵称</p> <p class="w-40">昵称</p>
<p>类型</p> <p>类型</p>
</header> </header>
<div
v-for="user in userList"
:key="user.id"
class="h-10 flex items-center text-xs pr-3 text-[#6e6e6e] border-b border-b-[#f8f8f8]"
@click="onItemSelect(user)">
<div class="w-10 self-stretch flex justify-center items-center">
<img class="w-4 h-4" :src="selectedIds.includes(user.id) ? icon_select : icon_unselect" alt="" />
<main class="overflow-auto" style="max-height: calc(100vh - var(--headerHeight) - var(--footerHeight) - 120px)">
<div
v-for="user in userList"
:key="user.id"
class="h-10 flex items-center text-xs pr-3 text-[#6e6e6e] border-b border-b-[#f8f8f8]"
@click="onItemSelect(user)">
<div class="w-10 self-stretch flex justify-center items-center">
<img class="w-4 h-4" :src="selectedIds.includes(user.id) ? icon_select : icon_unselect" alt="" />
</div>
<p class="w-40">{{ user.username }}</p>
<p class="w-40">{{ user.nickname }}</p>
<p class="flex-auto">{{ user.role === 1 ? "管理员" : "普通用户" }}</p>
</div> </div>
<p class="w-40">{{ user.username }}</p>
<p class="w-40">{{ user.nickname }}</p>
<p class="flex-auto">{{ user.role === 1 ? "管理员" : "普通用户" }}</p>
</div>
</main>
</section> </section>
<van-overlay :show="showEditDialog"> <van-overlay :show="showEditDialog">
@ -61,8 +62,9 @@ import { onMounted, ref } from "vue";
import { createUser, deleteUser, getUserList, type User } from "@/services/user/userManager"; import { createUser, deleteUser, getUserList, type User } from "@/services/user/userManager";
import AddUser from "./components/AddUser.vue"; import AddUser from "./components/AddUser.vue";
import { useUserStore } from "@/stores/user"; import { useUserStore } from "@/stores/user";
import { ElMessageBox } from "element-plus";
const userStore = useUserStore()
const userStore = useUserStore();
const showEditDialog = ref<boolean>(false); const showEditDialog = ref<boolean>(false);
const userList = ref<User[]>([]); const userList = ref<User[]>([]);
@ -113,13 +115,19 @@ function addUser(user: { username: string; nickname: string; password: string })
} }
function onDeleteUser() { function onDeleteUser() {
if (selectedIds.value.length === 0) return; if (selectedIds.value.length === 0) return;
deleteUser(selectedIds.value.join(",")).then(res => {
if (res.success) {
selectedIds.value = [];
getUsers();
} else {
showToast(res.msg);
}
ElMessageBox.confirm("确定删除用户?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
center: true,
}).then(() => {
deleteUser(selectedIds.value.join(",")).then(res => {
if (res.success) {
selectedIds.value = [];
getUsers();
} else {
showToast(res.msg);
}
});
}); });
} }
</script> </script>
Loading…
Cancel
Save