This commit is contained in:
陈红丽 2024-07-12 10:00:29 +08:00
parent cab1f3ea79
commit 5cdce1645f
8 changed files with 107 additions and 21 deletions

View File

@ -65,3 +65,13 @@ export function levelBatchDelete(data:any) {
data
});
}
/**
* @description:
*/
export function levelExport() {
return http.request({
url: '/level/export',
method: 'GET',
responseType: 'blob'
});
}

View File

@ -36,6 +36,18 @@
clearable
/>
</el-form-item>
<el-form-item
label="参数值"
prop="code"
:rules="{ required: true, message: '请输入参数值', trigger: 'blur' }"
>
<el-input
class="ls-input"
v-model="formData.value"
placeholder="请输入参数值"
clearable
/>
</el-form-item>
<el-form-item label="参数状态" prop="status">
<el-radio-group v-model="formData.status" name="status">
<el-radio :value="1">正常</el-radio>
@ -72,7 +84,7 @@ const formData = reactive({
id: "",
name: "",
code:'',
type:'',
value:'',
status: 1,
sort: 0,
note:'',

View File

@ -19,7 +19,7 @@ export const columns = [
type: record.row.status ==1 ? 'success' : 'danger',
},
{
default: () => (record.row.status ==1 ? '正常' : '用'),
default: () => (record.row.status ==1 ? '正常' : '用'),
},
);
},

View File

@ -27,15 +27,12 @@
<el-form-item label="职级状态" prop="status">
<el-radio-group v-model="formData.status" name="status">
<el-radio :value="1">正常</el-radio>
<el-radio :value="2"></el-radio>
<el-radio :value="2"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input-number v-model="formData.sort"/>
</el-form-item>
<el-form-item label="备注" prop="note">
<el-input v-model="formData.note" type="textarea" placeholder="请输入备注" clearable />
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
@ -60,8 +57,7 @@ const formData = reactive({
id: "",
name: "",
status: 1,
sort: 0,
note:'',
sort: 0
});
const props = defineProps({

View File

@ -13,6 +13,7 @@
@selection-change="onSelectionChange"
>
<template #tableTitle>
<el-space>
<el-button type="primary" @click="handleAdd">
<template #icon>
<el-icon class="el-input__icon">
@ -29,6 +30,34 @@
</template>
删除
</el-button>
<el-upload
ref="upload"
action="/api/level/import"
:headers="uploadHeaders"
:on-error="onError"
:on-success="onSuccess"
:before-upload="beforeUpload"
:show-file-list="false"
:limit="1"
>
<el-button type="danger">
<template #icon>
<el-icon class="el-input__icon">
<Upload />
</el-icon>
</template>
导入
</el-button>
</el-upload>
<el-button type="danger" @click="handleExport" :loading="exportLoading" :disabled="exportLoading">
<template #icon>
<el-icon class="el-input__icon">
<Download />
</el-icon>
</template>
导出
</el-button>
</el-space>
</template>
<template #action>
@ -49,25 +78,32 @@
<script lang="ts" setup>
import { reactive, ref, h,nextTick,defineAsyncComponent } from 'vue';
import { ColProps } from 'element-plus';
import { ColProps,UploadInstance } from 'element-plus';
import { schemas } from './querySchemas';
import { useForm } from '@/components/Form/index';
import { TableAction } from '@/components/Table';
import { getLevelList,levelDelete,levelBatchDelete } from '@/api/system/level';
import { getLevelList,levelDelete,levelBatchDelete,levelExport } from '@/api/system/level';
import { columns } from './columns';
import { PlusOutlined } from '@vicons/antd';
import {message,confirm} from "@/utils/auth";
import {message,confirm,loading, closeLoading} from "@/utils/auth";
import { useUserStore } from '@/store/modules/user';
import {downloadByData} from '@/utils/file/download';
const editDialog = defineAsyncComponent(() =>
import('./edit.vue')
)
const levelId =ref(0)
const editVisible=ref(false)
const levelId =ref(0)
const upload = ref<UploadInstance>();
const exportLoading=ref(false)
const editVisible=ref(false)
const selectionData = ref([])
const tableRef = ref();
const formParams = reactive({
name:'',
status:''
});
const uploadHeaders = reactive({
authorization:useUserStore().getToken
});
const actionColumn = reactive({
width: 250,
label: '操作',
@ -156,6 +192,42 @@ async function handleDelete(record: Recordable) {
function onSelectionChange(value){
selectionData.value = value
}
const beforeUpload = (file: UploadFile) => {
const isLt2M = file.size / 1024 / 1024 < 200;
if (!isLt2M) {
message("大小不能超过200MB!", "error");
return false;
}
if (!/\.(xlsx|xls|XLSX|XLS)$/.test(file.name)) {
message("请上传.xlsx .xls", "error");
return false;
}
loading("上传中");
return true;
};
const onSuccess = (file: UploadFile) => {
upload.value!.clearFiles();
closeLoading();
if (file.code == 200) {
message("导入成功");
reloadTable()
} else {
message(file.msg ? file.msg : "导入失败", "error");
}
};
const onError = () => {
upload.value!.clearFiles();
closeLoading();
message("导入失败", "error");
};
//
const handleExport = async()=>{
exportLoading.value=true
const data=await levelExport()
downloadByData(data, '职级信息.xlsx');
exportLoading.value=false
message("导出成功");
}
</script>
<style lang="scss" scoped></style>

View File

@ -19,7 +19,7 @@ export const columns = [
type: record.row.status ==1 ? 'success' : 'danger',
},
{
default: () => (record.row.status ==1 ? '正常' : '用'),
default: () => (record.row.status ==1 ? '正常' : '用'),
},
);
},

View File

@ -27,15 +27,12 @@
<el-form-item label="岗位状态" prop="status">
<el-radio-group v-model="formData.status" name="status">
<el-radio :value="1">正常</el-radio>
<el-radio :value="2"></el-radio>
<el-radio :value="2"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input-number v-model="formData.sort"/>
</el-form-item>
<el-form-item label="备注" prop="note">
<el-input v-model="formData.note" type="textarea" placeholder="请输入备注" clearable />
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
@ -60,8 +57,7 @@ const formData = reactive({
id: "",
name: "",
status: 1,
sort: 0,
note:'',
sort: 0
});
const props = defineProps({

View File

@ -97,7 +97,7 @@
const exportLoading=ref(false)
const editDialog = defineAsyncComponent(() =>
import('./edit.vue'))
const uploadHeaders = reactive({
const uploadHeaders = reactive({
authorization:useUserStore().getToken
});
const formParams = reactive({