|
@@ -1,6 +1,6 @@
|
|
<template>
|
|
<template>
|
|
<div class="h-full overflow-hidden">
|
|
<div class="h-full overflow-hidden">
|
|
- <n-card title="考勤管理" :bordered="false" class="rounded-16px shadow-sm">
|
|
|
|
|
|
+ <n-card title="课程管理" :bordered="false" class="rounded-16px shadow-sm">
|
|
<n-space class="pb-12px" justify="space-between">
|
|
<n-space class="pb-12px" justify="space-between">
|
|
<n-space>
|
|
<n-space>
|
|
<n-button type="primary" @click="handleAddTable">
|
|
<n-button type="primary" @click="handleAddTable">
|
|
@@ -12,10 +12,18 @@
|
|
删除
|
|
删除
|
|
</n-button>
|
|
</n-button>
|
|
<n-input-group>
|
|
<n-input-group>
|
|
- <n-input :style="{ width: '50%' }" placeholder="输入序号查询..." />
|
|
|
|
- <n-input :style="{ width: '50%' }" placeholder="输入姓名查询..." />
|
|
|
|
- <n-cascader v-model:value="value" placeholder="是否签到" :options="options" :filterable="true"
|
|
|
|
- :render-label="renderLabel" @update:value="handleUpdateValue" />
|
|
|
|
|
|
+ <n-input-number :style="{ width: '50%' }" :value="conditionParams.id" @input="event => conditionParams.id = event"
|
|
|
|
+ placeholder="输入id查询..." />
|
|
|
|
+ <n-input :style="{ width: '50%' }" :value="conditionParams.name"
|
|
|
|
+ @input="event => conditionParams.name = event" placeholder="输入名字查询..." />
|
|
|
|
+ <n-input-number :style="{ width: '50%' }" :value="conditionParams.manageId"
|
|
|
|
+ @input="event => conditionParams.manageId = event" placeholder="输入班级负责人查询..." />
|
|
|
|
+ <n-input-number :style="{ width: '50%' }" :value="conditionParams.assistantId"
|
|
|
|
+ @input="event => conditionParams.disabled = event" placeholder="输入助教老师查询..." />
|
|
|
|
+ <n-input :style="{ width: '50%' }" :value="conditionParams.createTime"
|
|
|
|
+ @input="event => conditionParams.createTime = event" placeholder="输入创建时间查询..." />
|
|
|
|
+ <n-input-number :style="{ width: '50%' }" :value="conditionParams.createUid"
|
|
|
|
+ @input="event => conditionParams.createUid = event" placeholder="输入创建用户id查询..." />
|
|
<n-button type="primary" ghost @click="serchCondition()">
|
|
<n-button type="primary" ghost @click="serchCondition()">
|
|
搜索
|
|
搜索
|
|
</n-button>
|
|
</n-button>
|
|
@@ -23,13 +31,16 @@
|
|
</n-space>
|
|
</n-space>
|
|
</n-space>
|
|
</n-space>
|
|
<n-scrollbar style="max-height: 100vh" trigger="none">
|
|
<n-scrollbar style="max-height: 100vh" trigger="none">
|
|
- <n-data-table :row-key="row => row.id" :columns="columns" :data="pageDate" :loading="loading"
|
|
|
|
- :pagination="pagination" />
|
|
|
|
- <!-- <n-pagination v-model:page="page" :page-count="100" simple /> -->
|
|
|
|
|
|
+ <n-data-table :row-key="row => row.id" v-model:checked-row-keys="deletedID" :columns="columns" :data="pageDate"
|
|
|
|
+ :loading="loading" />
|
|
|
|
+ <n-pagination class="n-pagination" @next="(info) => { console.log(info) }" v-model:page="pagination.page"
|
|
|
|
+ v-model:page-size="pagination.pageSize" :page-count="30" show-size-picker :page-sizes="[10, 20, 30, 40]"
|
|
|
|
+ :on-update:page="(page: number) => { pagination.page = page; serchCondition(); }"
|
|
|
|
+ :on-update-page-size="(pageSize: number) => { pagination.pageSize = pageSize; serchCondition(); }" />
|
|
|
|
+ <table-action-modal @init="init" v-model:visible="visible" @update:checked-row-keys="handleCheck"
|
|
|
|
+ :type="modalType" :pagination="pagination" :edit-data="(editData as SelectConditionParams)" />
|
|
|
|
|
|
- <!-- <table-action-modal @init="init" v-model:visible="visible" @update:checked-row-keys="handleCheck"
|
|
|
|
- :type="modalType" :pagination="pagination" :edit-data="(editData as SelectByConditionParams)" /> -->
|
|
|
|
- <div style="width: 100%; height: 300px;"></div>
|
|
|
|
|
|
+ <div style="width: 100%; height: 370px;"></div>
|
|
</n-scrollbar>
|
|
</n-scrollbar>
|
|
|
|
|
|
</n-card>
|
|
</n-card>
|
|
@@ -38,143 +49,81 @@
|
|
</template>
|
|
</template>
|
|
|
|
|
|
<script setup lang="tsx">
|
|
<script setup lang="tsx">
|
|
-import { useBoolean, useLoading } from '@/hooks';
|
|
|
|
|
|
+import { reactive, ref, provide } from 'vue';
|
|
import type { Ref } from 'vue';
|
|
import type { Ref } from 'vue';
|
|
-import { reactive, ref } from 'vue';
|
|
|
|
-import type { SelectByConditionParams } from '~/src/service/api/crouse'
|
|
|
|
-import { PaginationProps, DataTableColumns, DataTableRowKey, NButton, NPopconfirm, NSpace } from 'naive-ui';
|
|
|
|
-import { CascaderOption } from 'naive-ui'
|
|
|
|
-
|
|
|
|
-function getOptions(depth = 3, iterator = 1, prefix = '') {
|
|
|
|
- const length = 2;
|
|
|
|
- const options: CascaderOption[] = []
|
|
|
|
- for (let i = 1; i <= length; ++i) {
|
|
|
|
- if (iterator === 1) {
|
|
|
|
- options.push({
|
|
|
|
- value: `v-${i}`,
|
|
|
|
- label: '未签到',
|
|
|
|
- disabled: i % 5 === 0,
|
|
|
|
- children: getOptions(depth, iterator + 1, '' + String(i))
|
|
|
|
- });
|
|
|
|
- if (options[0].value === 'v-1') {
|
|
|
|
- options[0].label = '已签到'
|
|
|
|
- }
|
|
|
|
- console.log(options, 'd11111')
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
- else {
|
|
|
|
- // if()
|
|
|
|
- if (prefix === '1') {
|
|
|
|
- options.splice(0)
|
|
|
|
- // options[i].disabled = true;
|
|
|
|
- } else {
|
|
|
|
- options.splice(0)
|
|
|
|
|
|
+import { useBoolean, useLoading } from '@/hooks';
|
|
|
|
+import { deleteClass, selectCondition } from '~/src/service/api/class'
|
|
|
|
+import type { SelectConditionParams } from '~/src/service/api/class'
|
|
|
|
+import TableActionModal from './components/table-action-modal.vue';
|
|
|
|
+import type { ModalType } from './components/table-action-modal.vue';
|
|
|
|
+import { PaginationProps, DataTableColumns, NButton, NSpace, DataTableRowKey } from 'naive-ui';
|
|
|
|
|
|
- }
|
|
|
|
|
|
|
|
- console.log(options, 'hduasi')
|
|
|
|
- options.push({
|
|
|
|
- value: `v-${prefix}-1`,
|
|
|
|
- label: `早退`,
|
|
|
|
- disabled: i % 5 === 0
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- value: `v-${prefix}-2`,
|
|
|
|
- label: `迟到`,
|
|
|
|
- disabled: i % 5 === 0
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- value: `v-${prefix}-3`,
|
|
|
|
- label: `请假`,
|
|
|
|
- disabled: i % 5 === 0
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- value: `v-${prefix}-4`,
|
|
|
|
- label: `无效`,
|
|
|
|
- disabled: i % 5 === 0
|
|
|
|
- })
|
|
|
|
- console.log(options, '8888888')
|
|
|
|
- if (prefix === '1') {
|
|
|
|
- for (let i = 0; i < options.length; i++) {
|
|
|
|
- options[i].disabled = true;
|
|
|
|
- }
|
|
|
|
- // options[i].disabled = true;
|
|
|
|
- }
|
|
|
|
|
|
+const conditionParams: SelectConditionParams = reactive({
|
|
|
|
+ id: null,
|
|
|
|
+ name: null,
|
|
|
|
+ manageId: null,
|
|
|
|
+ assistantId: null,
|
|
|
|
+ createTime: null,
|
|
|
|
+ modifyTime: null,
|
|
|
|
+ createUid: null,
|
|
|
|
+ disabled: null
|
|
|
|
+});
|
|
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- return options
|
|
|
|
-}
|
|
|
|
-const value = ref(null);
|
|
|
|
-const options = getOptions();
|
|
|
|
-function handleUpdateValue(...args: unknown[]) {
|
|
|
|
- console.log(...args)
|
|
|
|
-};
|
|
|
|
-function renderLabel(option: { value?: string | number; label?: string }) {
|
|
|
|
- return `${option.label}`
|
|
|
|
-};
|
|
|
|
|
|
|
|
-const { loading } = useLoading(false);
|
|
|
|
-// const { bool: visible, setTrue: openModal } = useBoolean();
|
|
|
|
|
|
+const deletedID = ref([]);
|
|
|
|
|
|
|
|
+const { loading, startLoading, endLoading } = useLoading(false);
|
|
|
|
+const { bool: visible, setTrue: openModal } = useBoolean();
|
|
|
|
+const checkedRowKeysRef = ref<DataTableRowKey[]>([]);
|
|
const pagination: PaginationProps = reactive({
|
|
const pagination: PaginationProps = reactive({
|
|
page: 1,
|
|
page: 1,
|
|
pageSize: 10,
|
|
pageSize: 10,
|
|
|
|
+ pageCount: 3,
|
|
showSizePicker: true,
|
|
showSizePicker: true,
|
|
showQuickJumper: true,
|
|
showQuickJumper: true,
|
|
- pageSizes: [10, 15, 20, 25, 30],
|
|
|
|
- onUpdatePageSize: (pageSize: number) => {
|
|
|
|
- pagination.pageSize = pageSize;
|
|
|
|
- // serchCondition();
|
|
|
|
- },
|
|
|
|
- onUpdatePage: (page: number) => {
|
|
|
|
- pagination.page = page;
|
|
|
|
- // serchCondition();
|
|
|
|
- }
|
|
|
|
|
|
+ pageSizes: [10, 15, 20, 25, 30]
|
|
});
|
|
});
|
|
-const columns: Ref<DataTableColumns<SelectByConditionParams>> = ref([
|
|
|
|
|
|
+const pageDate = ref([]);
|
|
|
|
+
|
|
|
|
+const columns: Ref<DataTableColumns<SelectConditionParams>> = ref([
|
|
{
|
|
{
|
|
type: 'selection',
|
|
type: 'selection',
|
|
align: 'center'
|
|
align: 'center'
|
|
},
|
|
},
|
|
{
|
|
{
|
|
key: 'id',
|
|
key: 'id',
|
|
- title: '序号',
|
|
|
|
|
|
+ title: '班级id',
|
|
align: 'center'
|
|
align: 'center'
|
|
},
|
|
},
|
|
{
|
|
{
|
|
key: 'name',
|
|
key: 'name',
|
|
- title: '姓名',
|
|
|
|
|
|
+ title: '班级名称',
|
|
align: 'center'
|
|
align: 'center'
|
|
},
|
|
},
|
|
{
|
|
{
|
|
- key: 'description',
|
|
|
|
- title: '是否签到',
|
|
|
|
|
|
+ key: 'manageId',
|
|
|
|
+ title: '班级负责人id',
|
|
align: 'center'
|
|
align: 'center'
|
|
},
|
|
},
|
|
{
|
|
{
|
|
- key: 'categoryId',
|
|
|
|
- title: '正常',
|
|
|
|
|
|
+ key: 'assistantId',
|
|
|
|
+ title: '助教老师id',
|
|
align: 'center'
|
|
align: 'center'
|
|
},
|
|
},
|
|
{
|
|
{
|
|
key: 'createTime',
|
|
key: 'createTime',
|
|
- title: '迟到',
|
|
|
|
|
|
+ title: '创建时间',
|
|
align: 'center'
|
|
align: 'center'
|
|
},
|
|
},
|
|
{
|
|
{
|
|
key: 'modifyTime',
|
|
key: 'modifyTime',
|
|
- title: '早退',
|
|
|
|
- align: 'center'
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- key: 'createUid',
|
|
|
|
- title: '请假',
|
|
|
|
|
|
+ title: '修改时间',
|
|
align: 'center'
|
|
align: 'center'
|
|
},
|
|
},
|
|
{
|
|
{
|
|
key: 'disabled',
|
|
key: 'disabled',
|
|
- title: '无效',
|
|
|
|
|
|
+ title: '状态',
|
|
align: 'center'
|
|
align: 'center'
|
|
},
|
|
},
|
|
{
|
|
{
|
|
@@ -187,16 +136,68 @@ const columns: Ref<DataTableColumns<SelectByConditionParams>> = ref([
|
|
<NButton size={'small'} onClick={() => handleEditTable(row)}>
|
|
<NButton size={'small'} onClick={() => handleEditTable(row)}>
|
|
编辑
|
|
编辑
|
|
</NButton>
|
|
</NButton>
|
|
- <NPopconfirm onPositiveClick={() => handleDeleteTable(row.id.toString())}>
|
|
|
|
- {{
|
|
|
|
- default: () => '确认删除',
|
|
|
|
- trigger: () => <NButton size={'small'}>删除</NButton>
|
|
|
|
- }}
|
|
|
|
- </NPopconfirm>
|
|
|
|
|
|
+ <NButton size={'small'} onClick={() => handleEditTable(row)}>
|
|
|
|
+ 班级详情
|
|
|
|
+ </NButton>
|
|
</NSpace>
|
|
</NSpace>
|
|
);
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-]) as Ref<DataTableColumns<SelectByConditionParams>>;
|
|
|
|
|
|
+]) as Ref<DataTableColumns<SelectConditionParams>>;
|
|
|
|
+
|
|
|
|
+function handleCheck(rowKeys: DataTableRowKey[]) {
|
|
|
|
+ checkedRowKeysRef.value = rowKeys;
|
|
|
|
+
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+const editData = ref<SelectConditionParams | null>(null);
|
|
|
|
+function setEditData(data: SelectConditionParams | null) {
|
|
|
|
+ editData.value = data;
|
|
|
|
+}
|
|
|
|
+function handleEditTable(findItem: SelectConditionParams) {
|
|
|
|
+ if (findItem) {
|
|
|
|
+ setEditData(findItem);
|
|
|
|
+ }
|
|
|
|
+ setModalType('edit');
|
|
|
|
+ openModal();
|
|
|
|
+}
|
|
|
|
+function handleAddTable() {
|
|
|
|
+ openModal();
|
|
|
|
+ setModalType('add');
|
|
|
|
+ init();
|
|
|
|
+}
|
|
|
|
+const modalType = ref<ModalType>('add' || 'edit');
|
|
|
|
+function setModalType(type: ModalType) {
|
|
|
|
+ modalType.value = type;
|
|
|
|
+}
|
|
|
|
+const s = ref([]);
|
|
|
|
+// 删除
|
|
|
|
+function deleteSubjectsList(){
|
|
|
|
+ const difference = deletedID.value.filter(item => !s.value.includes(item));
|
|
|
|
+ s.value = deletedID.value
|
|
|
|
+
|
|
|
|
+ for (let i = 0; i < difference.length; i++) {
|
|
|
|
+ deleteClass(Number(difference[i]));
|
|
|
|
+ }
|
|
|
|
+ init();
|
|
|
|
+}
|
|
|
|
+function serchCondition() {
|
|
|
|
+ selectCondition(pagination.page, pagination.pageSize, conditionParams).then(r => {
|
|
|
|
+ pageDate.value = r.data as [];
|
|
|
|
+ }).catch(() => {
|
|
|
|
+ console.log('jdias')
|
|
|
|
+ })
|
|
|
|
+}
|
|
|
|
+function init() {
|
|
|
|
+ startLoading();
|
|
|
|
+ setTimeout(() => {
|
|
|
|
+ serchCondition();
|
|
|
|
+ }, 1000)
|
|
|
|
+ endLoading();
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// 初始化
|
|
|
|
+init();
|
|
|
|
+provide('init', init);
|
|
</script>
|
|
</script>
|
|
-<style></style>
|
|
|
|
|
|
+<style scoped></style>
|