优化
This commit is contained in:
parent
98632e6463
commit
dc30a21d8f
@ -60,3 +60,11 @@ export function saveCanCreaeReqList(query: any) {
|
|||||||
data: query
|
data: query
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
//获取病人明细信息
|
||||||
|
export function queryPatDetail(query: any) {
|
||||||
|
return request({
|
||||||
|
url: '/reqInput/queryPatDetail',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
@ -58,10 +58,10 @@
|
|||||||
<div class="box-shadow">
|
<div class="box-shadow">
|
||||||
<el-form :model="queryParams" inline size="small" label-width="5.5rem">
|
<el-form :model="queryParams" inline size="small" label-width="5.5rem">
|
||||||
<el-form-item label="姓名:" prop="brxm">
|
<el-form-item label="姓名:" prop="brxm">
|
||||||
<el-input v-model="queryParams.brxm" style="width: 9rem;" />
|
<el-input v-model="queryParams.brxm" style="width: 9rem;" clearable />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="条码号:" prop="sqh">
|
<el-form-item label="条码号:" prop="sqh">
|
||||||
<el-input v-model="queryParams.sqh" style="width: 9rem;" />
|
<el-input v-model="queryParams.sqh" style="width: 9rem;" clearable />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="状态:" prop="zt">
|
<el-form-item label="状态:" prop="zt">
|
||||||
<el-select v-model="queryParams.zt" placeholder="请选择" style="width: 9rem;" clearable>
|
<el-select v-model="queryParams.zt" placeholder="请选择" style="width: 9rem;" clearable>
|
||||||
@ -101,7 +101,9 @@
|
|||||||
<template #brly="{ row }">
|
<template #brly="{ row }">
|
||||||
{{ formatDict(row.brly, 'PT') }}
|
{{ formatDict(row.brly, 'PT') }}
|
||||||
</template>
|
</template>
|
||||||
|
<template #zt="{ row }">
|
||||||
|
{{ formatDictzt(row.zt) }}
|
||||||
|
</template>
|
||||||
</CustomVxeTable>
|
</CustomVxeTable>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -117,12 +119,14 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import Info from './components/info.vue'
|
import Info from './components/info.vue'
|
||||||
import { getDictData, formatDict, dictData } from '@/hooks'
|
import { getDictData, formatDict, dictData } from '@/hooks'
|
||||||
import { queryXmInfoList, saveReqInfo, queryPatList } from '@/api/liswork/order'
|
import { queryXmInfoList, saveReqInfo, queryPatList, queryPatDetail } from '@/api/liswork/order'
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
import { ElMessage } from 'element-plus'
|
import { ElMessage } from 'element-plus'
|
||||||
import { getFirstLetter } from '@/utils/pinyin';
|
import { getFirstLetter } from '@/utils/pinyin';
|
||||||
import SetBilling from './components/setBilling.vue'
|
import SetBilling from './components/setBilling.vue'
|
||||||
|
|
||||||
|
const { proxy } = getCurrentInstance();
|
||||||
|
const { lis_req_type } = proxy.useDict("lis_req_type");
|
||||||
const labpat = ref({
|
const labpat = ref({
|
||||||
zt: '1'
|
zt: '1'
|
||||||
})
|
})
|
||||||
@ -139,7 +143,7 @@ const tableColumns = ref([
|
|||||||
{ field: 'brxm', title: '姓名', width: 40, align: 'center', resizable: true, },
|
{ field: 'brxm', title: '姓名', width: 40, align: 'center', resizable: true, },
|
||||||
{ field: 'brxb', title: '性别', width: 30, align: 'center', slotName: 'brxb', resizable: true },
|
{ field: 'brxb', title: '性别', width: 30, align: 'center', slotName: 'brxb', resizable: true },
|
||||||
{ field: 'sqh', title: '条码号', width: 100, align: 'center', resizable: true, },
|
{ field: 'sqh', title: '条码号', width: 100, align: 'center', resizable: true, },
|
||||||
{ field: 'zt', title: '状态', width: 40, align: 'center', resizable: true, },
|
{ field: 'zt', title: '状态', width: 40, align: 'center', slotName: 'zt', resizable: true, },
|
||||||
{ field: 'nl', title: '年', width: 30, align: 'center', resizable: true },
|
{ field: 'nl', title: '年', width: 30, align: 'center', resizable: true },
|
||||||
{ field: 'nldw', title: '龄', width: 20, align: 'center', slotName: 'nldw', resizable: true },
|
{ field: 'nldw', title: '龄', width: 20, align: 'center', slotName: 'nldw', resizable: true },
|
||||||
{ field: 'yblx', title: '标本', width: 50, align: 'center', resizable: true, slotName: 'yblx' },
|
{ field: 'yblx', title: '标本', width: 50, align: 'center', resizable: true, slotName: 'yblx' },
|
||||||
@ -157,9 +161,13 @@ const cellStyle = ({ row, column }) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const handleRowClick = (row) => {
|
const handleRowClick = (row) => {
|
||||||
row.brxb = row.brxb.trim()
|
queryPatDetail({ sqh: row.sqh }).then(res => {
|
||||||
row.zt = row.zt.trim()
|
labpat.value = res.data.labReqmain
|
||||||
labpat.value = row
|
labpat.value.brxb = labpat.value.brxb.trim()
|
||||||
|
labpat.value.zt = labpat.value.zt.trim()
|
||||||
|
sqXmList.value = res.data.reqInputLisWorkVOList
|
||||||
|
checkboxs.value = res.data.reqInputLisWorkVOList.map(item => item.sfxmdh)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleQuery = () => {
|
const handleQuery = () => {
|
||||||
@ -255,6 +263,7 @@ const sqXmColumns = ref([
|
|||||||
])
|
])
|
||||||
|
|
||||||
const handleChecksChange = (val) => {
|
const handleChecksChange = (val) => {
|
||||||
|
console.log('val==>', val);
|
||||||
sqXmList.value = []
|
sqXmList.value = []
|
||||||
val.forEach(item => {
|
val.forEach(item => {
|
||||||
const existingItem = processedTableData.value.find((row) => row.sfxmdh == item)
|
const existingItem = processedTableData.value.find((row) => row.sfxmdh == item)
|
||||||
@ -298,6 +307,11 @@ const resultList = (arr) => {
|
|||||||
return categoryList
|
return categoryList
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const formatDictzt = (value) => {
|
||||||
|
const item = lis_req_type.value.find(i => i.value === value.trim());
|
||||||
|
return item ? item.label : value;
|
||||||
|
}
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
queryParams.value.begdate = dayjs().format('YYYY-MM-DD')
|
queryParams.value.begdate = dayjs().format('YYYY-MM-DD')
|
||||||
queryParams.value.enddate = dayjs().format('YYYY-MM-DD')
|
queryParams.value.enddate = dayjs().format('YYYY-MM-DD')
|
||||||
|
|||||||
@ -1,287 +1,234 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
|
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
|
||||||
<el-form-item label="任务名称" prop="jobName">
|
<el-form-item label="任务名称" prop="jobName">
|
||||||
<el-input
|
<el-input v-model="queryParams.jobName" placeholder="请输入任务名称" clearable style="width: 200px"
|
||||||
v-model="queryParams.jobName"
|
@keyup.enter="handleQuery" />
|
||||||
placeholder="请输入任务名称"
|
</el-form-item>
|
||||||
clearable
|
<el-form-item label="任务组名" prop="jobGroup">
|
||||||
style="width: 200px"
|
<el-select v-model="queryParams.jobGroup" placeholder="请选择任务组名" clearable style="width: 200px">
|
||||||
@keyup.enter="handleQuery"
|
<el-option v-for="dict in sys_job_group" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||||
/>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="任务组名" prop="jobGroup">
|
<el-form-item label="任务状态" prop="status">
|
||||||
<el-select v-model="queryParams.jobGroup" placeholder="请选择任务组名" clearable style="width: 200px">
|
<el-select v-model="queryParams.status" placeholder="请选择任务状态" clearable style="width: 200px">
|
||||||
<el-option
|
<el-option v-for="dict in sys_job_status" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||||
v-for="dict in sys_job_group"
|
</el-select>
|
||||||
:key="dict.value"
|
</el-form-item>
|
||||||
:label="dict.label"
|
<el-form-item>
|
||||||
:value="dict.value"
|
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||||
/>
|
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||||
</el-select>
|
</el-form-item>
|
||||||
</el-form-item>
|
</el-form>
|
||||||
<el-form-item label="任务状态" prop="status">
|
|
||||||
<el-select v-model="queryParams.status" placeholder="请选择任务状态" clearable style="width: 200px">
|
<el-row :gutter="10" class="mb8">
|
||||||
<el-option
|
<el-col :span="1.5">
|
||||||
v-for="dict in sys_job_status"
|
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['monitor:job:add']">新增</el-button>
|
||||||
:key="dict.value"
|
</el-col>
|
||||||
:label="dict.label"
|
<el-col :span="1.5">
|
||||||
:value="dict.value"
|
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
|
||||||
/>
|
v-hasPermi="['monitor:job:edit']">修改</el-button>
|
||||||
</el-select>
|
</el-col>
|
||||||
</el-form-item>
|
<el-col :span="1.5">
|
||||||
<el-form-item>
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
|
||||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
v-hasPermi="['monitor:job:remove']">删除</el-button>
|
||||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
</el-col>
|
||||||
</el-form-item>
|
<el-col :span="1.5">
|
||||||
|
<el-button type="warning" plain icon="Download" @click="handleExport"
|
||||||
|
v-hasPermi="['monitor:job:export']">导出</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="info" plain icon="Operation" @click="handleJobLog"
|
||||||
|
v-hasPermi="['monitor:job:query']">日志</el-button>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-table v-loading="loading" :data="jobList" @selection-change="handleSelectionChange"
|
||||||
|
height="calc(100vh - 280px)">
|
||||||
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
|
<el-table-column label="任务编号" width="100" align="center" prop="jobId" />
|
||||||
|
<el-table-column label="任务名称" align="center" prop="jobName" :show-overflow-tooltip="true" />
|
||||||
|
<el-table-column label="任务组名" align="center" prop="jobGroup">
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag :options="sys_job_group" :value="scope.row.jobGroup" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="调用目标字符串" align="center" prop="invokeTarget" :show-overflow-tooltip="true" />
|
||||||
|
<el-table-column label="cron执行表达式" align="center" prop="cronExpression" :show-overflow-tooltip="true" />
|
||||||
|
<el-table-column label="状态" align="center">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-switch v-model="scope.row.status" active-value="0" inactive-value="1"
|
||||||
|
@change="handleStatusChange(scope.row)"></el-switch>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" align="center" width="200" class-name="small-padding fixed-width">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-tooltip content="修改" placement="top">
|
||||||
|
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
|
||||||
|
v-hasPermi="['monitor:job:edit']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="删除" placement="top">
|
||||||
|
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
|
||||||
|
v-hasPermi="['monitor:job:remove']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="执行一次" placement="top">
|
||||||
|
<el-button link type="primary" icon="CaretRight" @click="handleRun(scope.row)"
|
||||||
|
v-hasPermi="['monitor:job:changeStatus']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="任务详细" placement="top">
|
||||||
|
<el-button link type="primary" icon="View" @click="handleView(scope.row)"
|
||||||
|
v-hasPermi="['monitor:job:query']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="调度日志" placement="top">
|
||||||
|
<el-button link type="primary" icon="Operation" @click="handleJobLog(scope.row)"
|
||||||
|
v-hasPermi="['monitor:job:query']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
|
||||||
|
v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||||
|
|
||||||
|
<!-- 添加或修改定时任务对话框 -->
|
||||||
|
<el-dialog :title="title" v-model="open" width="820px" append-to-body>
|
||||||
|
<el-form ref="jobRef" :model="form" :rules="rules" label-width="120px">
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="任务名称" prop="jobName">
|
||||||
|
<el-input v-model="form.jobName" placeholder="请输入任务名称" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="任务分组" prop="jobGroup">
|
||||||
|
<el-select v-model="form.jobGroup" placeholder="请选择">
|
||||||
|
<el-option v-for="dict in sys_job_group" :key="dict.value" :label="dict.label"
|
||||||
|
:value="dict.value"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item prop="invokeTarget">
|
||||||
|
<template #label>
|
||||||
|
<span>
|
||||||
|
调用方法
|
||||||
|
<el-tooltip placement="top">
|
||||||
|
<template #content>
|
||||||
|
<div>
|
||||||
|
Bean调用示例:ryTask.ryParams('ry')
|
||||||
|
<br />Class类调用示例:com.ruoyi.quartz.task.RyTask.ryParams('ry')
|
||||||
|
<br />参数说明:支持字符串,布尔类型,长整型,浮点型,整型
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<el-icon><question-filled /></el-icon>
|
||||||
|
</el-tooltip>
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
<el-input v-model="form.invokeTarget" placeholder="请输入调用目标字符串" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="cron表达式" prop="cronExpression">
|
||||||
|
<el-input v-model="form.cronExpression" placeholder="请输入cron执行表达式">
|
||||||
|
<template #append>
|
||||||
|
<el-button type="primary" @click="handleShowCron">
|
||||||
|
生成表达式
|
||||||
|
<i class="el-icon-time el-icon--right"></i>
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24" v-if="form.jobId !== undefined">
|
||||||
|
<el-form-item label="状态">
|
||||||
|
<el-radio-group v-model="form.status">
|
||||||
|
<el-radio v-for="dict in sys_job_status" :key="dict.value" :label="dict.value">{{ dict.label
|
||||||
|
}}</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="执行策略" prop="misfirePolicy">
|
||||||
|
<el-radio-group v-model="form.misfirePolicy">
|
||||||
|
<el-radio-button label="1">立即执行</el-radio-button>
|
||||||
|
<el-radio-button label="2">执行一次</el-radio-button>
|
||||||
|
<el-radio-button label="3">放弃执行</el-radio-button>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="是否并发" prop="concurrent">
|
||||||
|
<el-radio-group v-model="form.concurrent">
|
||||||
|
<el-radio-button label="0">允许</el-radio-button>
|
||||||
|
<el-radio-button label="1">禁止</el-radio-button>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
<template #footer>
|
||||||
|
<div class="dialog-footer">
|
||||||
|
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||||
|
<el-button @click="cancel">取 消</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
|
||||||
<el-row :gutter="10" class="mb8">
|
<el-dialog title="Cron表达式生成器" v-model="openCron" append-to-body destroy-on-close>
|
||||||
<el-col :span="1.5">
|
<crontab ref="crontabRef" @hide="openCron = false" @fill="crontabFill" :expression="expression"></crontab>
|
||||||
<el-button
|
</el-dialog>
|
||||||
type="primary"
|
|
||||||
plain
|
|
||||||
icon="Plus"
|
|
||||||
@click="handleAdd"
|
|
||||||
v-hasPermi="['monitor:job:add']"
|
|
||||||
>新增</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
type="success"
|
|
||||||
plain
|
|
||||||
icon="Edit"
|
|
||||||
:disabled="single"
|
|
||||||
@click="handleUpdate"
|
|
||||||
v-hasPermi="['monitor:job:edit']"
|
|
||||||
>修改</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
type="danger"
|
|
||||||
plain
|
|
||||||
icon="Delete"
|
|
||||||
:disabled="multiple"
|
|
||||||
@click="handleDelete"
|
|
||||||
v-hasPermi="['monitor:job:remove']"
|
|
||||||
>删除</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
type="warning"
|
|
||||||
plain
|
|
||||||
icon="Download"
|
|
||||||
@click="handleExport"
|
|
||||||
v-hasPermi="['monitor:job:export']"
|
|
||||||
>导出</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
type="info"
|
|
||||||
plain
|
|
||||||
icon="Operation"
|
|
||||||
@click="handleJobLog"
|
|
||||||
v-hasPermi="['monitor:job:query']"
|
|
||||||
>日志</el-button>
|
|
||||||
</el-col>
|
|
||||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-table v-loading="loading" :data="jobList" @selection-change="handleSelectionChange">
|
<!-- 任务日志详细 -->
|
||||||
<el-table-column type="selection" width="55" align="center" />
|
<el-dialog title="任务详细" v-model="openView" width="700px" append-to-body>
|
||||||
<el-table-column label="任务编号" width="100" align="center" prop="jobId" />
|
<el-form :model="form" label-width="120px">
|
||||||
<el-table-column label="任务名称" align="center" prop="jobName" :show-overflow-tooltip="true" />
|
<el-row>
|
||||||
<el-table-column label="任务组名" align="center" prop="jobGroup">
|
<el-col :span="12">
|
||||||
<template #default="scope">
|
<el-form-item label="任务编号:">{{ form.jobId }}</el-form-item>
|
||||||
<dict-tag :options="sys_job_group" :value="scope.row.jobGroup" />
|
<el-form-item label="任务名称:">{{ form.jobName }}</el-form-item>
|
||||||
</template>
|
</el-col>
|
||||||
</el-table-column>
|
<el-col :span="12">
|
||||||
<el-table-column label="调用目标字符串" align="center" prop="invokeTarget" :show-overflow-tooltip="true" />
|
<el-form-item label="任务分组:">{{ jobGroupFormat(form) }}</el-form-item>
|
||||||
<el-table-column label="cron执行表达式" align="center" prop="cronExpression" :show-overflow-tooltip="true" />
|
<el-form-item label="创建时间:">{{ form.createTime }}</el-form-item>
|
||||||
<el-table-column label="状态" align="center">
|
</el-col>
|
||||||
<template #default="scope">
|
<el-col :span="12">
|
||||||
<el-switch
|
<el-form-item label="cron表达式:">{{ form.cronExpression }}</el-form-item>
|
||||||
v-model="scope.row.status"
|
</el-col>
|
||||||
active-value="0"
|
<el-col :span="12">
|
||||||
inactive-value="1"
|
<el-form-item label="下次执行时间:">{{ parseTime(form.nextValidTime) }}</el-form-item>
|
||||||
@change="handleStatusChange(scope.row)"
|
</el-col>
|
||||||
></el-switch>
|
<el-col :span="24">
|
||||||
</template>
|
<el-form-item label="调用目标方法:">{{ form.invokeTarget }}</el-form-item>
|
||||||
</el-table-column>
|
</el-col>
|
||||||
<el-table-column label="操作" align="center" width="200" class-name="small-padding fixed-width">
|
<el-col :span="12">
|
||||||
<template #default="scope">
|
<el-form-item label="任务状态:">
|
||||||
<el-tooltip content="修改" placement="top">
|
<div v-if="form.status == 0">正常</div>
|
||||||
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['monitor:job:edit']"></el-button>
|
<div v-else-if="form.status == 1">暂停</div>
|
||||||
</el-tooltip>
|
</el-form-item>
|
||||||
<el-tooltip content="删除" placement="top">
|
</el-col>
|
||||||
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['monitor:job:remove']"></el-button>
|
<el-col :span="12">
|
||||||
</el-tooltip>
|
<el-form-item label="是否并发:">
|
||||||
<el-tooltip content="执行一次" placement="top">
|
<div v-if="form.concurrent == 0">允许</div>
|
||||||
<el-button link type="primary" icon="CaretRight" @click="handleRun(scope.row)" v-hasPermi="['monitor:job:changeStatus']"></el-button>
|
<div v-else-if="form.concurrent == 1">禁止</div>
|
||||||
</el-tooltip>
|
</el-form-item>
|
||||||
<el-tooltip content="任务详细" placement="top">
|
</el-col>
|
||||||
<el-button link type="primary" icon="View" @click="handleView(scope.row)" v-hasPermi="['monitor:job:query']"></el-button>
|
<el-col :span="12">
|
||||||
</el-tooltip>
|
<el-form-item label="执行策略:">
|
||||||
<el-tooltip content="调度日志" placement="top">
|
<div v-if="form.misfirePolicy == 0">默认策略</div>
|
||||||
<el-button link type="primary" icon="Operation" @click="handleJobLog(scope.row)" v-hasPermi="['monitor:job:query']"></el-button>
|
<div v-else-if="form.misfirePolicy == 1">立即执行</div>
|
||||||
</el-tooltip>
|
<div v-else-if="form.misfirePolicy == 2">执行一次</div>
|
||||||
</template>
|
<div v-else-if="form.misfirePolicy == 3">放弃执行</div>
|
||||||
</el-table-column>
|
</el-form-item>
|
||||||
</el-table>
|
</el-col>
|
||||||
|
</el-row>
|
||||||
<pagination
|
</el-form>
|
||||||
v-show="total > 0"
|
<template #footer>
|
||||||
:total="total"
|
<div class="dialog-footer">
|
||||||
v-model:page="queryParams.pageNum"
|
<el-button @click="openView = false">关 闭</el-button>
|
||||||
v-model:limit="queryParams.pageSize"
|
</div>
|
||||||
@pagination="getList"
|
</template>
|
||||||
/>
|
</el-dialog>
|
||||||
|
</div>
|
||||||
<!-- 添加或修改定时任务对话框 -->
|
|
||||||
<el-dialog :title="title" v-model="open" width="820px" append-to-body>
|
|
||||||
<el-form ref="jobRef" :model="form" :rules="rules" label-width="120px">
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="任务名称" prop="jobName">
|
|
||||||
<el-input v-model="form.jobName" placeholder="请输入任务名称" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="任务分组" prop="jobGroup">
|
|
||||||
<el-select v-model="form.jobGroup" placeholder="请选择">
|
|
||||||
<el-option
|
|
||||||
v-for="dict in sys_job_group"
|
|
||||||
:key="dict.value"
|
|
||||||
:label="dict.label"
|
|
||||||
:value="dict.value"
|
|
||||||
></el-option>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item prop="invokeTarget">
|
|
||||||
<template #label>
|
|
||||||
<span>
|
|
||||||
调用方法
|
|
||||||
<el-tooltip placement="top">
|
|
||||||
<template #content>
|
|
||||||
<div>
|
|
||||||
Bean调用示例:ryTask.ryParams('ry')
|
|
||||||
<br />Class类调用示例:com.ruoyi.quartz.task.RyTask.ryParams('ry')
|
|
||||||
<br />参数说明:支持字符串,布尔类型,长整型,浮点型,整型
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<el-icon><question-filled /></el-icon>
|
|
||||||
</el-tooltip>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
<el-input v-model="form.invokeTarget" placeholder="请输入调用目标字符串" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item label="cron表达式" prop="cronExpression">
|
|
||||||
<el-input v-model="form.cronExpression" placeholder="请输入cron执行表达式">
|
|
||||||
<template #append>
|
|
||||||
<el-button type="primary" @click="handleShowCron">
|
|
||||||
生成表达式
|
|
||||||
<i class="el-icon-time el-icon--right"></i>
|
|
||||||
</el-button>
|
|
||||||
</template>
|
|
||||||
</el-input>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="24" v-if="form.jobId !== undefined">
|
|
||||||
<el-form-item label="状态">
|
|
||||||
<el-radio-group v-model="form.status">
|
|
||||||
<el-radio
|
|
||||||
v-for="dict in sys_job_status"
|
|
||||||
:key="dict.value"
|
|
||||||
:label="dict.value"
|
|
||||||
>{{ dict.label }}</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="执行策略" prop="misfirePolicy">
|
|
||||||
<el-radio-group v-model="form.misfirePolicy">
|
|
||||||
<el-radio-button label="1">立即执行</el-radio-button>
|
|
||||||
<el-radio-button label="2">执行一次</el-radio-button>
|
|
||||||
<el-radio-button label="3">放弃执行</el-radio-button>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="是否并发" prop="concurrent">
|
|
||||||
<el-radio-group v-model="form.concurrent">
|
|
||||||
<el-radio-button label="0">允许</el-radio-button>
|
|
||||||
<el-radio-button label="1">禁止</el-radio-button>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</el-form>
|
|
||||||
<template #footer>
|
|
||||||
<div class="dialog-footer">
|
|
||||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
|
||||||
<el-button @click="cancel">取 消</el-button>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-dialog>
|
|
||||||
|
|
||||||
<el-dialog title="Cron表达式生成器" v-model="openCron" append-to-body destroy-on-close>
|
|
||||||
<crontab ref="crontabRef" @hide="openCron=false" @fill="crontabFill" :expression="expression"></crontab>
|
|
||||||
</el-dialog>
|
|
||||||
|
|
||||||
<!-- 任务日志详细 -->
|
|
||||||
<el-dialog title="任务详细" v-model="openView" width="700px" append-to-body>
|
|
||||||
<el-form :model="form" label-width="120px">
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="任务编号:">{{ form.jobId }}</el-form-item>
|
|
||||||
<el-form-item label="任务名称:">{{ form.jobName }}</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="任务分组:">{{ jobGroupFormat(form) }}</el-form-item>
|
|
||||||
<el-form-item label="创建时间:">{{ form.createTime }}</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="cron表达式:">{{ form.cronExpression }}</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="下次执行时间:">{{ parseTime(form.nextValidTime) }}</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item label="调用目标方法:">{{ form.invokeTarget }}</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="任务状态:">
|
|
||||||
<div v-if="form.status == 0">正常</div>
|
|
||||||
<div v-else-if="form.status == 1">暂停</div>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="是否并发:">
|
|
||||||
<div v-if="form.concurrent == 0">允许</div>
|
|
||||||
<div v-else-if="form.concurrent == 1">禁止</div>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="执行策略:">
|
|
||||||
<div v-if="form.misfirePolicy == 0">默认策略</div>
|
|
||||||
<div v-else-if="form.misfirePolicy == 1">立即执行</div>
|
|
||||||
<div v-else-if="form.misfirePolicy == 2">执行一次</div>
|
|
||||||
<div v-else-if="form.misfirePolicy == 3">放弃执行</div>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</el-form>
|
|
||||||
<template #footer>
|
|
||||||
<div class="dialog-footer">
|
|
||||||
<el-button @click="openView = false">关 闭</el-button>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-dialog>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup name="Job">
|
<script setup name="Job">
|
||||||
@ -402,8 +349,9 @@ function handleRun(row) {
|
|||||||
proxy.$modal.confirm('确认要立即执行一次"' + row.jobName + '"任务吗?').then(function () {
|
proxy.$modal.confirm('确认要立即执行一次"' + row.jobName + '"任务吗?').then(function () {
|
||||||
return runJob(row.jobId, row.jobGroup);
|
return runJob(row.jobId, row.jobGroup);
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
proxy.$modal.msgSuccess("执行成功");})
|
proxy.$modal.msgSuccess("执行成功");
|
||||||
.catch(() => {});
|
})
|
||||||
|
.catch(() => { });
|
||||||
}
|
}
|
||||||
/** 任务详细信息 */
|
/** 任务详细信息 */
|
||||||
function handleView(row) {
|
function handleView(row) {
|
||||||
@ -470,7 +418,7 @@ function handleDelete(row) {
|
|||||||
}).then(() => {
|
}).then(() => {
|
||||||
getList();
|
getList();
|
||||||
proxy.$modal.msgSuccess("删除成功");
|
proxy.$modal.msgSuccess("删除成功");
|
||||||
}).catch(() => {});
|
}).catch(() => { });
|
||||||
}
|
}
|
||||||
/** 导出按钮操作 */
|
/** 导出按钮操作 */
|
||||||
function handleExport() {
|
function handleExport() {
|
||||||
|
|||||||
@ -1,173 +1,118 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
|
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
|
||||||
<el-form-item label="任务名称" prop="jobName">
|
<el-form-item label="任务名称" prop="jobName">
|
||||||
<el-input
|
<el-input v-model="queryParams.jobName" placeholder="请输入任务名称" clearable style="width: 240px"
|
||||||
v-model="queryParams.jobName"
|
@keyup.enter="handleQuery" />
|
||||||
placeholder="请输入任务名称"
|
</el-form-item>
|
||||||
clearable
|
<el-form-item label="任务组名" prop="jobGroup">
|
||||||
style="width: 240px"
|
<el-select v-model="queryParams.jobGroup" placeholder="请选择任务组名" clearable style="width: 240px">
|
||||||
@keyup.enter="handleQuery"
|
<el-option v-for="dict in sys_job_group" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||||
/>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="任务组名" prop="jobGroup">
|
<el-form-item label="执行状态" prop="status">
|
||||||
<el-select
|
<el-select v-model="queryParams.status" placeholder="请选择执行状态" clearable style="width: 240px">
|
||||||
v-model="queryParams.jobGroup"
|
<el-option v-for="dict in sys_common_status" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||||
placeholder="请选择任务组名"
|
</el-select>
|
||||||
clearable
|
</el-form-item>
|
||||||
style="width: 240px"
|
<el-form-item label="执行时间" style="width: 308px">
|
||||||
>
|
<el-date-picker v-model="dateRange" value-format="YYYY-MM-DD" type="daterange" range-separator="-"
|
||||||
<el-option
|
start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
|
||||||
v-for="dict in sys_job_group"
|
</el-form-item>
|
||||||
:key="dict.value"
|
<el-form-item>
|
||||||
:label="dict.label"
|
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||||
:value="dict.value"
|
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||||
/>
|
</el-form-item>
|
||||||
</el-select>
|
</el-form>
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="执行状态" prop="status">
|
<el-row :gutter="10" class="mb8">
|
||||||
<el-select
|
<el-col :span="1.5">
|
||||||
v-model="queryParams.status"
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
|
||||||
placeholder="请选择执行状态"
|
v-hasPermi="['monitor:job:remove']">删除</el-button>
|
||||||
clearable
|
</el-col>
|
||||||
style="width: 240px"
|
<el-col :span="1.5">
|
||||||
>
|
<el-button type="danger" plain icon="Delete" @click="handleClean"
|
||||||
<el-option
|
v-hasPermi="['monitor:job:remove']">清空</el-button>
|
||||||
v-for="dict in sys_common_status"
|
</el-col>
|
||||||
:key="dict.value"
|
<el-col :span="1.5">
|
||||||
:label="dict.label"
|
<el-button type="warning" plain icon="Download" @click="handleExport"
|
||||||
:value="dict.value"
|
v-hasPermi="['monitor:job:export']">导出</el-button>
|
||||||
/>
|
</el-col>
|
||||||
</el-select>
|
<el-col :span="1.5">
|
||||||
</el-form-item>
|
<el-button type="warning" plain icon="Close" @click="handleClose">关闭</el-button>
|
||||||
<el-form-item label="执行时间" style="width: 308px">
|
</el-col>
|
||||||
<el-date-picker
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
v-model="dateRange"
|
</el-row>
|
||||||
value-format="YYYY-MM-DD"
|
|
||||||
type="daterange"
|
<el-table v-loading="loading" :data="jobLogList" @selection-change="handleSelectionChange"
|
||||||
range-separator="-"
|
height="calc(100vh - 280px)">
|
||||||
start-placeholder="开始日期"
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
end-placeholder="结束日期"
|
<el-table-column label="日志编号" width="80" align="center" prop="jobLogId" />
|
||||||
></el-date-picker>
|
<el-table-column label="任务名称" align="center" prop="jobName" :show-overflow-tooltip="true" />
|
||||||
</el-form-item>
|
<el-table-column label="任务组名" align="center" prop="jobGroup" :show-overflow-tooltip="true">
|
||||||
<el-form-item>
|
<template #default="scope">
|
||||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
<dict-tag :options="sys_job_group" :value="scope.row.jobGroup" />
|
||||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
</template>
|
||||||
</el-form-item>
|
</el-table-column>
|
||||||
|
<el-table-column label="调用目标字符串" align="center" prop="invokeTarget" :show-overflow-tooltip="true" />
|
||||||
|
<el-table-column label="日志信息" align="center" prop="jobMessage" :show-overflow-tooltip="true" />
|
||||||
|
<el-table-column label="执行状态" align="center" prop="status">
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag :options="sys_common_status" :value="scope.row.status" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="执行时间" align="center" prop="createTime" width="180">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ parseTime(scope.row.createTime) }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button link type="primary" icon="View" @click="handleView(scope.row)"
|
||||||
|
v-hasPermi="['monitor:job:query']">详细</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
|
||||||
|
v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||||
|
|
||||||
|
<!-- 调度日志详细 -->
|
||||||
|
<el-dialog title="调度日志详细" v-model="open" width="700px" append-to-body>
|
||||||
|
<el-form :model="form" label-width="100px">
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="日志序号:">{{ form.jobLogId }}</el-form-item>
|
||||||
|
<el-form-item label="任务名称:">{{ form.jobName }}</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="任务分组:">{{ form.jobGroup }}</el-form-item>
|
||||||
|
<el-form-item label="执行时间:">{{ form.createTime }}</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="调用方法:">{{ form.invokeTarget }}</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="日志信息:">{{ form.jobMessage }}</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="执行状态:">
|
||||||
|
<div v-if="form.status == 0">正常</div>
|
||||||
|
<div v-else-if="form.status == 1">失败</div>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="异常信息:" v-if="form.status == 1">{{ form.exceptionInfo }}</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
<template #footer>
|
||||||
<el-row :gutter="10" class="mb8">
|
<div class="dialog-footer">
|
||||||
<el-col :span="1.5">
|
<el-button @click="open = false">关 闭</el-button>
|
||||||
<el-button
|
</div>
|
||||||
type="danger"
|
</template>
|
||||||
plain
|
</el-dialog>
|
||||||
icon="Delete"
|
</div>
|
||||||
:disabled="multiple"
|
|
||||||
@click="handleDelete"
|
|
||||||
v-hasPermi="['monitor:job:remove']"
|
|
||||||
>删除</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
type="danger"
|
|
||||||
plain
|
|
||||||
icon="Delete"
|
|
||||||
@click="handleClean"
|
|
||||||
v-hasPermi="['monitor:job:remove']"
|
|
||||||
>清空</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
type="warning"
|
|
||||||
plain
|
|
||||||
icon="Download"
|
|
||||||
@click="handleExport"
|
|
||||||
v-hasPermi="['monitor:job:export']"
|
|
||||||
>导出</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
type="warning"
|
|
||||||
plain
|
|
||||||
icon="Close"
|
|
||||||
@click="handleClose"
|
|
||||||
>关闭</el-button>
|
|
||||||
</el-col>
|
|
||||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-table v-loading="loading" :data="jobLogList" @selection-change="handleSelectionChange">
|
|
||||||
<el-table-column type="selection" width="55" align="center" />
|
|
||||||
<el-table-column label="日志编号" width="80" align="center" prop="jobLogId" />
|
|
||||||
<el-table-column label="任务名称" align="center" prop="jobName" :show-overflow-tooltip="true" />
|
|
||||||
<el-table-column label="任务组名" align="center" prop="jobGroup" :show-overflow-tooltip="true">
|
|
||||||
<template #default="scope">
|
|
||||||
<dict-tag :options="sys_job_group" :value="scope.row.jobGroup" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="调用目标字符串" align="center" prop="invokeTarget" :show-overflow-tooltip="true" />
|
|
||||||
<el-table-column label="日志信息" align="center" prop="jobMessage" :show-overflow-tooltip="true" />
|
|
||||||
<el-table-column label="执行状态" align="center" prop="status">
|
|
||||||
<template #default="scope">
|
|
||||||
<dict-tag :options="sys_common_status" :value="scope.row.status" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="执行时间" align="center" prop="createTime" width="180">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{ parseTime(scope.row.createTime) }}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
|
||||||
<template #default="scope">
|
|
||||||
<el-button link type="primary" icon="View" @click="handleView(scope.row)" v-hasPermi="['monitor:job:query']">详细</el-button>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
|
|
||||||
<pagination
|
|
||||||
v-show="total > 0"
|
|
||||||
:total="total"
|
|
||||||
v-model:page="queryParams.pageNum"
|
|
||||||
v-model:limit="queryParams.pageSize"
|
|
||||||
@pagination="getList"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- 调度日志详细 -->
|
|
||||||
<el-dialog title="调度日志详细" v-model="open" width="700px" append-to-body>
|
|
||||||
<el-form :model="form" label-width="100px">
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="日志序号:">{{ form.jobLogId }}</el-form-item>
|
|
||||||
<el-form-item label="任务名称:">{{ form.jobName }}</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="任务分组:">{{ form.jobGroup }}</el-form-item>
|
|
||||||
<el-form-item label="执行时间:">{{ form.createTime }}</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item label="调用方法:">{{ form.invokeTarget }}</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item label="日志信息:">{{ form.jobMessage }}</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item label="执行状态:">
|
|
||||||
<div v-if="form.status == 0">正常</div>
|
|
||||||
<div v-else-if="form.status == 1">失败</div>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item label="异常信息:" v-if="form.status == 1">{{ form.exceptionInfo }}</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</el-form>
|
|
||||||
<template #footer>
|
|
||||||
<div class="dialog-footer">
|
|
||||||
<el-button @click="open = false">关 闭</el-button>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-dialog>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup name="JobLog">
|
<script setup name="JobLog">
|
||||||
@ -242,7 +187,7 @@ function handleDelete(row) {
|
|||||||
}).then(() => {
|
}).then(() => {
|
||||||
getList();
|
getList();
|
||||||
proxy.$modal.msgSuccess("删除成功");
|
proxy.$modal.msgSuccess("删除成功");
|
||||||
}).catch(() => {});
|
}).catch(() => { });
|
||||||
}
|
}
|
||||||
/** 清空按钮操作 */
|
/** 清空按钮操作 */
|
||||||
function handleClean() {
|
function handleClean() {
|
||||||
@ -251,7 +196,7 @@ function handleClean() {
|
|||||||
}).then(() => {
|
}).then(() => {
|
||||||
getList();
|
getList();
|
||||||
proxy.$modal.msgSuccess("清空成功");
|
proxy.$modal.msgSuccess("清空成功");
|
||||||
}).catch(() => {});
|
}).catch(() => { });
|
||||||
}
|
}
|
||||||
/** 导出按钮操作 */
|
/** 导出按钮操作 */
|
||||||
function handleExport() {
|
function handleExport() {
|
||||||
|
|||||||
@ -1,127 +1,77 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
|
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
|
||||||
<el-form-item label="登录地址" prop="ipaddr">
|
<el-form-item label="登录地址" prop="ipaddr">
|
||||||
<el-input
|
<el-input v-model="queryParams.ipaddr" placeholder="请输入登录地址" clearable style="width: 240px;"
|
||||||
v-model="queryParams.ipaddr"
|
@keyup.enter="handleQuery" />
|
||||||
placeholder="请输入登录地址"
|
</el-form-item>
|
||||||
clearable
|
<el-form-item label="用户名称" prop="userName">
|
||||||
style="width: 240px;"
|
<el-input v-model="queryParams.userName" placeholder="请输入用户名称" clearable style="width: 240px;"
|
||||||
@keyup.enter="handleQuery"
|
@keyup.enter="handleQuery" />
|
||||||
/>
|
</el-form-item>
|
||||||
</el-form-item>
|
<el-form-item label="状态" prop="status">
|
||||||
<el-form-item label="用户名称" prop="userName">
|
<el-select v-model="queryParams.status" placeholder="登录状态" clearable style="width: 240px">
|
||||||
<el-input
|
<el-option v-for="dict in sys_common_status" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||||
v-model="queryParams.userName"
|
</el-select>
|
||||||
placeholder="请输入用户名称"
|
</el-form-item>
|
||||||
clearable
|
<el-form-item label="登录时间" style="width: 308px">
|
||||||
style="width: 240px;"
|
<el-date-picker v-model="dateRange" value-format="YYYY-MM-DD HH:mm:ss" type="daterange" range-separator="-"
|
||||||
@keyup.enter="handleQuery"
|
start-placeholder="开始日期" end-placeholder="结束日期"
|
||||||
/>
|
:default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]"></el-date-picker>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="状态" prop="status">
|
<el-form-item>
|
||||||
<el-select
|
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||||
v-model="queryParams.status"
|
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||||
placeholder="登录状态"
|
</el-form-item>
|
||||||
clearable
|
</el-form>
|
||||||
style="width: 240px"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="dict in sys_common_status"
|
|
||||||
:key="dict.value"
|
|
||||||
:label="dict.label"
|
|
||||||
:value="dict.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="登录时间" style="width: 308px">
|
|
||||||
<el-date-picker
|
|
||||||
v-model="dateRange"
|
|
||||||
value-format="YYYY-MM-DD HH:mm:ss"
|
|
||||||
type="daterange"
|
|
||||||
range-separator="-"
|
|
||||||
start-placeholder="开始日期"
|
|
||||||
end-placeholder="结束日期"
|
|
||||||
:default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]"
|
|
||||||
></el-date-picker>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item>
|
|
||||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
|
||||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
|
|
||||||
<el-row :gutter="10" class="mb8">
|
<el-row :gutter="10" class="mb8">
|
||||||
<el-col :span="1.5">
|
<el-col :span="1.5">
|
||||||
<el-button
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
|
||||||
type="danger"
|
v-hasPermi="['monitor:logininfor:remove']">删除</el-button>
|
||||||
plain
|
</el-col>
|
||||||
icon="Delete"
|
<el-col :span="1.5">
|
||||||
:disabled="multiple"
|
<el-button type="danger" plain icon="Delete" @click="handleClean"
|
||||||
@click="handleDelete"
|
v-hasPermi="['monitor:logininfor:remove']">清空</el-button>
|
||||||
v-hasPermi="['monitor:logininfor:remove']"
|
</el-col>
|
||||||
>删除</el-button>
|
<el-col :span="1.5">
|
||||||
</el-col>
|
<el-button type="primary" plain icon="Unlock" :disabled="single" @click="handleUnlock"
|
||||||
<el-col :span="1.5">
|
v-hasPermi="['monitor:logininfor:unlock']">解锁</el-button>
|
||||||
<el-button
|
</el-col>
|
||||||
type="danger"
|
<el-col :span="1.5">
|
||||||
plain
|
<el-button type="warning" plain icon="Download" @click="handleExport"
|
||||||
icon="Delete"
|
v-hasPermi="['monitor:logininfor:export']">导出</el-button>
|
||||||
@click="handleClean"
|
</el-col>
|
||||||
v-hasPermi="['monitor:logininfor:remove']"
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
>清空</el-button>
|
</el-row>
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
type="primary"
|
|
||||||
plain
|
|
||||||
icon="Unlock"
|
|
||||||
:disabled="single"
|
|
||||||
@click="handleUnlock"
|
|
||||||
v-hasPermi="['monitor:logininfor:unlock']"
|
|
||||||
>解锁</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
type="warning"
|
|
||||||
plain
|
|
||||||
icon="Download"
|
|
||||||
@click="handleExport"
|
|
||||||
v-hasPermi="['monitor:logininfor:export']"
|
|
||||||
>导出</el-button>
|
|
||||||
</el-col>
|
|
||||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-table ref="logininforRef" v-loading="loading" :data="logininforList" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="handleSortChange">
|
<el-table ref="logininforRef" v-loading="loading" :data="logininforList" height="calc(100vh - 280px)"
|
||||||
<el-table-column type="selection" width="55" align="center" />
|
@selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="handleSortChange">
|
||||||
<el-table-column label="访问编号" align="center" prop="infoId" />
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
<el-table-column label="用户名称" align="center" prop="userName" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']" />
|
<el-table-column label="访问编号" align="center" prop="infoId" />
|
||||||
<el-table-column label="地址" align="center" prop="ipaddr" :show-overflow-tooltip="true" />
|
<el-table-column label="用户名称" align="center" prop="userName" :show-overflow-tooltip="true" sortable="custom"
|
||||||
<el-table-column label="登录地点" align="center" prop="loginLocation" :show-overflow-tooltip="true" />
|
:sort-orders="['descending', 'ascending']" />
|
||||||
<el-table-column label="操作系统" align="center" prop="os" :show-overflow-tooltip="true" />
|
<el-table-column label="地址" align="center" prop="ipaddr" :show-overflow-tooltip="true" />
|
||||||
<el-table-column label="浏览器" align="center" prop="browser" :show-overflow-tooltip="true" />
|
<el-table-column label="登录地点" align="center" prop="loginLocation" :show-overflow-tooltip="true" />
|
||||||
<el-table-column label="登录状态" align="center" prop="status">
|
<el-table-column label="操作系统" align="center" prop="os" :show-overflow-tooltip="true" />
|
||||||
<template #default="scope">
|
<el-table-column label="浏览器" align="center" prop="browser" :show-overflow-tooltip="true" />
|
||||||
<dict-tag :options="sys_common_status" :value="scope.row.status" />
|
<el-table-column label="登录状态" align="center" prop="status">
|
||||||
</template>
|
<template #default="scope">
|
||||||
</el-table-column>
|
<dict-tag :options="sys_common_status" :value="scope.row.status" />
|
||||||
<el-table-column label="描述" align="center" prop="msg" :show-overflow-tooltip="true" />
|
</template>
|
||||||
<el-table-column label="访问时间" align="center" prop="loginTime" sortable="custom" :sort-orders="['descending', 'ascending']" width="180">
|
</el-table-column>
|
||||||
<template #default="scope">
|
<el-table-column label="描述" align="center" prop="msg" :show-overflow-tooltip="true" />
|
||||||
<span>{{ parseTime(scope.row.loginTime) }}</span>
|
<el-table-column label="访问时间" align="center" prop="loginTime" sortable="custom"
|
||||||
</template>
|
:sort-orders="['descending', 'ascending']" width="180">
|
||||||
</el-table-column>
|
<template #default="scope">
|
||||||
</el-table>
|
<span>{{ parseTime(scope.row.loginTime) }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
<pagination
|
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
|
||||||
v-show="total > 0"
|
v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||||
:total="total"
|
</div>
|
||||||
v-model:page="queryParams.pageNum"
|
|
||||||
v-model:limit="queryParams.pageSize"
|
|
||||||
@pagination="getList"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup name="Logininfor">
|
<script setup name="Logininfor">
|
||||||
@ -194,7 +144,7 @@ function handleDelete(row) {
|
|||||||
}).then(() => {
|
}).then(() => {
|
||||||
getList();
|
getList();
|
||||||
proxy.$modal.msgSuccess("删除成功");
|
proxy.$modal.msgSuccess("删除成功");
|
||||||
}).catch(() => {});
|
}).catch(() => { });
|
||||||
}
|
}
|
||||||
/** 清空按钮操作 */
|
/** 清空按钮操作 */
|
||||||
function handleClean() {
|
function handleClean() {
|
||||||
@ -203,7 +153,7 @@ function handleClean() {
|
|||||||
}).then(() => {
|
}).then(() => {
|
||||||
getList();
|
getList();
|
||||||
proxy.$modal.msgSuccess("清空成功");
|
proxy.$modal.msgSuccess("清空成功");
|
||||||
}).catch(() => {});
|
}).catch(() => { });
|
||||||
}
|
}
|
||||||
/** 解锁按钮操作 */
|
/** 解锁按钮操作 */
|
||||||
function handleUnlock() {
|
function handleUnlock() {
|
||||||
@ -212,7 +162,7 @@ function handleUnlock() {
|
|||||||
return unlockLogininfor(username);
|
return unlockLogininfor(username);
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
proxy.$modal.msgSuccess("用户" + username + "解锁成功");
|
proxy.$modal.msgSuccess("用户" + username + "解锁成功");
|
||||||
}).catch(() => {});
|
}).catch(() => { });
|
||||||
}
|
}
|
||||||
/** 导出按钮操作 */
|
/** 导出按钮操作 */
|
||||||
function handleExport() {
|
function handleExport() {
|
||||||
|
|||||||
@ -1,60 +1,48 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<el-form :model="queryParams" ref="queryRef" :inline="true">
|
<el-form :model="queryParams" ref="queryRef" :inline="true">
|
||||||
<el-form-item label="登录地址" prop="ipaddr">
|
<el-form-item label="登录地址" prop="ipaddr">
|
||||||
<el-input
|
<el-input v-model="queryParams.ipaddr" placeholder="请输入登录地址" clearable style="width: 200px"
|
||||||
v-model="queryParams.ipaddr"
|
@keyup.enter="handleQuery" />
|
||||||
placeholder="请输入登录地址"
|
</el-form-item>
|
||||||
clearable
|
<el-form-item label="用户名称" prop="userName">
|
||||||
style="width: 200px"
|
<el-input v-model="queryParams.userName" placeholder="请输入用户名称" clearable style="width: 200px"
|
||||||
@keyup.enter="handleQuery"
|
@keyup.enter="handleQuery" />
|
||||||
/>
|
</el-form-item>
|
||||||
</el-form-item>
|
<el-form-item>
|
||||||
<el-form-item label="用户名称" prop="userName">
|
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||||
<el-input
|
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||||
v-model="queryParams.userName"
|
</el-form-item>
|
||||||
placeholder="请输入用户名称"
|
</el-form>
|
||||||
clearable
|
<el-table v-loading="loading" :data="onlineList.slice((pageNum - 1) * pageSize, pageNum * pageSize)"
|
||||||
style="width: 200px"
|
style="width: 100%;" height="calc(100vh - 250px)">
|
||||||
@keyup.enter="handleQuery"
|
<el-table-column label="序号" width="50" type="index" align="center">
|
||||||
/>
|
<template #default="scope">
|
||||||
</el-form-item>
|
<span>{{ (pageNum - 1) * pageSize + scope.$index + 1 }}</span>
|
||||||
<el-form-item>
|
</template>
|
||||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
</el-table-column>
|
||||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
<el-table-column label="会话编号" align="center" prop="tokenId" :show-overflow-tooltip="true" />
|
||||||
</el-form-item>
|
<el-table-column label="登录名称" align="center" prop="userName" :show-overflow-tooltip="true" />
|
||||||
</el-form>
|
<el-table-column label="所属部门" align="center" prop="deptName" :show-overflow-tooltip="true" />
|
||||||
<el-table
|
<el-table-column label="主机" align="center" prop="ipaddr" :show-overflow-tooltip="true" />
|
||||||
v-loading="loading"
|
<el-table-column label="登录地点" align="center" prop="loginLocation" :show-overflow-tooltip="true" />
|
||||||
:data="onlineList.slice((pageNum - 1) * pageSize, pageNum * pageSize)"
|
<el-table-column label="操作系统" align="center" prop="os" :show-overflow-tooltip="true" />
|
||||||
style="width: 100%;"
|
<el-table-column label="浏览器" align="center" prop="browser" :show-overflow-tooltip="true" />
|
||||||
>
|
<el-table-column label="登录时间" align="center" prop="loginTime" width="180">
|
||||||
<el-table-column label="序号" width="50" type="index" align="center">
|
<template #default="scope">
|
||||||
<template #default="scope">
|
<span>{{ parseTime(scope.row.loginTime) }}</span>
|
||||||
<span>{{ (pageNum - 1) * pageSize + scope.$index + 1 }}</span>
|
</template>
|
||||||
</template>
|
</el-table-column>
|
||||||
</el-table-column>
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||||
<el-table-column label="会话编号" align="center" prop="tokenId" :show-overflow-tooltip="true" />
|
<template #default="scope">
|
||||||
<el-table-column label="登录名称" align="center" prop="userName" :show-overflow-tooltip="true" />
|
<el-button link type="primary" icon="Delete" @click="handleForceLogout(scope.row)"
|
||||||
<el-table-column label="所属部门" align="center" prop="deptName" :show-overflow-tooltip="true" />
|
v-hasPermi="['monitor:online:forceLogout']">强退</el-button>
|
||||||
<el-table-column label="主机" align="center" prop="ipaddr" :show-overflow-tooltip="true" />
|
</template>
|
||||||
<el-table-column label="登录地点" align="center" prop="loginLocation" :show-overflow-tooltip="true" />
|
</el-table-column>
|
||||||
<el-table-column label="操作系统" align="center" prop="os" :show-overflow-tooltip="true" />
|
</el-table>
|
||||||
<el-table-column label="浏览器" align="center" prop="browser" :show-overflow-tooltip="true" />
|
|
||||||
<el-table-column label="登录时间" align="center" prop="loginTime" width="180">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{ parseTime(scope.row.loginTime) }}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
|
||||||
<template #default="scope">
|
|
||||||
<el-button link type="primary" icon="Delete" @click="handleForceLogout(scope.row)" v-hasPermi="['monitor:online:forceLogout']">强退</el-button>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
|
|
||||||
<pagination v-show="total > 0" :total="total" v-model:page="pageNum" v-model:limit="pageSize" />
|
<pagination v-show="total > 0" :total="total" v-model:page="pageNum" v-model:limit="pageSize" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup name="Online">
|
<script setup name="Online">
|
||||||
@ -94,12 +82,12 @@ function resetQuery() {
|
|||||||
}
|
}
|
||||||
/** 强退按钮操作 */
|
/** 强退按钮操作 */
|
||||||
function handleForceLogout(row) {
|
function handleForceLogout(row) {
|
||||||
proxy.$modal.confirm('是否确认强退名称为"' + row.userName + '"的用户?').then(function () {
|
proxy.$modal.confirm('是否确认强退名称为"' + row.userName + '"的用户?').then(function () {
|
||||||
return forceLogout(row.tokenId);
|
return forceLogout(row.tokenId);
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
getList();
|
getList();
|
||||||
proxy.$modal.msgSuccess("删除成功");
|
proxy.$modal.msgSuccess("删除成功");
|
||||||
}).catch(() => {});
|
}).catch(() => { });
|
||||||
}
|
}
|
||||||
|
|
||||||
getList();
|
getList();
|
||||||
|
|||||||
@ -1,207 +1,148 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
|
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
|
||||||
<el-form-item label="操作地址" prop="operIp">
|
<el-form-item label="操作地址" prop="operIp">
|
||||||
<el-input
|
<el-input v-model="queryParams.operIp" placeholder="请输入操作地址" clearable style="width: 240px;"
|
||||||
v-model="queryParams.operIp"
|
@keyup.enter="handleQuery" />
|
||||||
placeholder="请输入操作地址"
|
</el-form-item>
|
||||||
clearable
|
<el-form-item label="系统模块" prop="title">
|
||||||
style="width: 240px;"
|
<el-input v-model="queryParams.title" placeholder="请输入系统模块" clearable style="width: 240px;"
|
||||||
@keyup.enter="handleQuery"
|
@keyup.enter="handleQuery" />
|
||||||
/>
|
</el-form-item>
|
||||||
</el-form-item>
|
<el-form-item label="操作人员" prop="operName">
|
||||||
<el-form-item label="系统模块" prop="title">
|
<el-input v-model="queryParams.operName" placeholder="请输入操作人员" clearable style="width: 240px;"
|
||||||
<el-input
|
@keyup.enter="handleQuery" />
|
||||||
v-model="queryParams.title"
|
</el-form-item>
|
||||||
placeholder="请输入系统模块"
|
<el-form-item label="类型" prop="businessType">
|
||||||
clearable
|
<el-select v-model="queryParams.businessType" placeholder="操作类型" clearable style="width: 240px">
|
||||||
style="width: 240px;"
|
<el-option v-for="dict in sys_oper_type" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||||
@keyup.enter="handleQuery"
|
</el-select>
|
||||||
/>
|
</el-form-item>
|
||||||
</el-form-item>
|
<el-form-item label="状态" prop="status">
|
||||||
<el-form-item label="操作人员" prop="operName">
|
<el-select v-model="queryParams.status" placeholder="操作状态" clearable style="width: 240px">
|
||||||
<el-input
|
<el-option v-for="dict in sys_common_status" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||||
v-model="queryParams.operName"
|
</el-select>
|
||||||
placeholder="请输入操作人员"
|
</el-form-item>
|
||||||
clearable
|
<el-form-item label="操作时间" style="width: 308px">
|
||||||
style="width: 240px;"
|
<el-date-picker v-model="dateRange" value-format="YYYY-MM-DD HH:mm:ss" type="daterange" range-separator="-"
|
||||||
@keyup.enter="handleQuery"
|
start-placeholder="开始日期" end-placeholder="结束日期"
|
||||||
/>
|
:default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]"></el-date-picker>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="类型" prop="businessType">
|
<el-form-item>
|
||||||
<el-select
|
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||||
v-model="queryParams.businessType"
|
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||||
placeholder="操作类型"
|
</el-form-item>
|
||||||
clearable
|
</el-form>
|
||||||
style="width: 240px"
|
|
||||||
>
|
<el-row :gutter="10" class="mb8">
|
||||||
<el-option
|
<el-col :span="1.5">
|
||||||
v-for="dict in sys_oper_type"
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
|
||||||
:key="dict.value"
|
v-hasPermi="['monitor:operlog:remove']">删除</el-button>
|
||||||
:label="dict.label"
|
</el-col>
|
||||||
:value="dict.value"
|
<el-col :span="1.5">
|
||||||
/>
|
<el-button type="danger" plain icon="Delete" @click="handleClean"
|
||||||
</el-select>
|
v-hasPermi="['monitor:operlog:remove']">清空</el-button>
|
||||||
</el-form-item>
|
</el-col>
|
||||||
<el-form-item label="状态" prop="status">
|
<el-col :span="1.5">
|
||||||
<el-select
|
<el-button type="warning" plain icon="Download" @click="handleExport"
|
||||||
v-model="queryParams.status"
|
v-hasPermi="['monitor:operlog:export']">导出</el-button>
|
||||||
placeholder="操作状态"
|
</el-col>
|
||||||
clearable
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
style="width: 240px"
|
</el-row>
|
||||||
>
|
|
||||||
<el-option
|
<el-table ref="operlogRef" v-loading="loading" :data="operlogList" height="calc(100vh - 320px)"
|
||||||
v-for="dict in sys_common_status"
|
@selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="handleSortChange">
|
||||||
:key="dict.value"
|
<el-table-column type="selection" width="50" align="center" />
|
||||||
:label="dict.label"
|
<el-table-column label="日志编号" align="center" prop="operId" />
|
||||||
:value="dict.value"
|
<el-table-column label="系统模块" align="center" prop="title" :show-overflow-tooltip="true" />
|
||||||
/>
|
<el-table-column label="操作类型" align="center" prop="businessType">
|
||||||
</el-select>
|
<template #default="scope">
|
||||||
</el-form-item>
|
<dict-tag :options="sys_oper_type" :value="scope.row.businessType" />
|
||||||
<el-form-item label="操作时间" style="width: 308px">
|
</template>
|
||||||
<el-date-picker
|
</el-table-column>
|
||||||
v-model="dateRange"
|
<el-table-column label="操作人员" align="center" width="110" prop="operName" :show-overflow-tooltip="true"
|
||||||
value-format="YYYY-MM-DD HH:mm:ss"
|
sortable="custom" :sort-orders="['descending', 'ascending']" />
|
||||||
type="daterange"
|
<el-table-column label="操作地址" align="center" prop="operIp" width="130" :show-overflow-tooltip="true" />
|
||||||
range-separator="-"
|
<el-table-column label="操作状态" align="center" prop="status">
|
||||||
start-placeholder="开始日期"
|
<template #default="scope">
|
||||||
end-placeholder="结束日期"
|
<dict-tag :options="sys_common_status" :value="scope.row.status" />
|
||||||
:default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]"
|
</template>
|
||||||
></el-date-picker>
|
</el-table-column>
|
||||||
</el-form-item>
|
<el-table-column label="操作日期" align="center" prop="operTime" width="180" sortable="custom"
|
||||||
<el-form-item>
|
:sort-orders="['descending', 'ascending']">
|
||||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
<template #default="scope">
|
||||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
<span>{{ parseTime(scope.row.operTime) }}</span>
|
||||||
</el-form-item>
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="消耗时间" align="center" prop="costTime" width="110" :show-overflow-tooltip="true"
|
||||||
|
sortable="custom" :sort-orders="['descending', 'ascending']">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ scope.row.costTime }}毫秒</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button link type="primary" icon="View" @click="handleView(scope.row, scope.index)"
|
||||||
|
v-hasPermi="['monitor:operlog:query']">详细</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
|
||||||
|
v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||||
|
|
||||||
|
<!-- 操作日志详细 -->
|
||||||
|
<el-dialog title="操作日志详细" v-model="open" width="800px" append-to-body>
|
||||||
|
<el-form :model="form" label-width="100px">
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="操作模块:">{{ form.title }} / {{ typeFormat(form) }}</el-form-item>
|
||||||
|
<el-form-item label="登录信息:">{{ form.operName }} / {{ form.operIp }} / {{ form.operLocation }}</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="请求地址:">{{ form.operUrl }}</el-form-item>
|
||||||
|
<el-form-item label="请求方式:">{{ form.requestMethod }}</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="操作方法:">{{ form.method }}</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="请求参数:">{{ form.operParam }}</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="返回参数:">{{ form.jsonResult }}</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="操作状态:">
|
||||||
|
<div v-if="form.status === 0">正常</div>
|
||||||
|
<div v-else-if="form.status === 1">失败</div>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="消耗时间:">{{ form.costTime }}毫秒</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="操作时间:">{{ parseTime(form.operTime) }}</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="异常信息:" v-if="form.status === 1">{{ form.errorMsg }}</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
<template #footer>
|
||||||
<el-row :gutter="10" class="mb8">
|
<div class="dialog-footer">
|
||||||
<el-col :span="1.5">
|
<el-button @click="open = false">关 闭</el-button>
|
||||||
<el-button
|
</div>
|
||||||
type="danger"
|
</template>
|
||||||
plain
|
</el-dialog>
|
||||||
icon="Delete"
|
</div>
|
||||||
:disabled="multiple"
|
|
||||||
@click="handleDelete"
|
|
||||||
v-hasPermi="['monitor:operlog:remove']"
|
|
||||||
>删除</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
type="danger"
|
|
||||||
plain
|
|
||||||
icon="Delete"
|
|
||||||
@click="handleClean"
|
|
||||||
v-hasPermi="['monitor:operlog:remove']"
|
|
||||||
>清空</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
type="warning"
|
|
||||||
plain
|
|
||||||
icon="Download"
|
|
||||||
@click="handleExport"
|
|
||||||
v-hasPermi="['monitor:operlog:export']"
|
|
||||||
>导出</el-button>
|
|
||||||
</el-col>
|
|
||||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-table ref="operlogRef" v-loading="loading" :data="operlogList" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="handleSortChange">
|
|
||||||
<el-table-column type="selection" width="50" align="center" />
|
|
||||||
<el-table-column label="日志编号" align="center" prop="operId" />
|
|
||||||
<el-table-column label="系统模块" align="center" prop="title" :show-overflow-tooltip="true" />
|
|
||||||
<el-table-column label="操作类型" align="center" prop="businessType">
|
|
||||||
<template #default="scope">
|
|
||||||
<dict-tag :options="sys_oper_type" :value="scope.row.businessType" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="操作人员" align="center" width="110" prop="operName" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']" />
|
|
||||||
<el-table-column label="操作地址" align="center" prop="operIp" width="130" :show-overflow-tooltip="true" />
|
|
||||||
<el-table-column label="操作状态" align="center" prop="status">
|
|
||||||
<template #default="scope">
|
|
||||||
<dict-tag :options="sys_common_status" :value="scope.row.status" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="操作日期" align="center" prop="operTime" width="180" sortable="custom" :sort-orders="['descending', 'ascending']">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{ parseTime(scope.row.operTime) }}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="消耗时间" align="center" prop="costTime" width="110" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{ scope.row.costTime }}毫秒</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
|
||||||
<template #default="scope">
|
|
||||||
<el-button link type="primary" icon="View" @click="handleView(scope.row, scope.index)" v-hasPermi="['monitor:operlog:query']">详细</el-button>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
|
|
||||||
<pagination
|
|
||||||
v-show="total > 0"
|
|
||||||
:total="total"
|
|
||||||
v-model:page="queryParams.pageNum"
|
|
||||||
v-model:limit="queryParams.pageSize"
|
|
||||||
@pagination="getList"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- 操作日志详细 -->
|
|
||||||
<el-dialog title="操作日志详细" v-model="open" width="800px" append-to-body>
|
|
||||||
<el-form :model="form" label-width="100px">
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="操作模块:">{{ form.title }} / {{ typeFormat(form) }}</el-form-item>
|
|
||||||
<el-form-item
|
|
||||||
label="登录信息:"
|
|
||||||
>{{ form.operName }} / {{ form.operIp }} / {{ form.operLocation }}</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="请求地址:">{{ form.operUrl }}</el-form-item>
|
|
||||||
<el-form-item label="请求方式:">{{ form.requestMethod }}</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item label="操作方法:">{{ form.method }}</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item label="请求参数:">{{ form.operParam }}</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item label="返回参数:">{{ form.jsonResult }}</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="8">
|
|
||||||
<el-form-item label="操作状态:">
|
|
||||||
<div v-if="form.status === 0">正常</div>
|
|
||||||
<div v-else-if="form.status === 1">失败</div>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="8">
|
|
||||||
<el-form-item label="消耗时间:">{{ form.costTime }}毫秒</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="8">
|
|
||||||
<el-form-item label="操作时间:">{{ parseTime(form.operTime) }}</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item label="异常信息:" v-if="form.status === 1">{{ form.errorMsg }}</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</el-form>
|
|
||||||
<template #footer>
|
|
||||||
<div class="dialog-footer">
|
|
||||||
<el-button @click="open = false">关 闭</el-button>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-dialog>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup name="Operlog">
|
<script setup name="Operlog">
|
||||||
import { list, delOperlog, cleanOperlog } from "@/api/monitor/operlog";
|
import { list, delOperlog, cleanOperlog } from "@/api/monitor/operlog";
|
||||||
|
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const { sys_oper_type, sys_common_status } = proxy.useDict("sys_oper_type","sys_common_status");
|
const { sys_oper_type, sys_common_status } = proxy.useDict("sys_oper_type", "sys_common_status");
|
||||||
|
|
||||||
const operlogList = ref([]);
|
const operlogList = ref([]);
|
||||||
const open = ref(false);
|
const open = ref(false);
|
||||||
@ -279,7 +220,7 @@ function handleDelete(row) {
|
|||||||
}).then(() => {
|
}).then(() => {
|
||||||
getList();
|
getList();
|
||||||
proxy.$modal.msgSuccess("删除成功");
|
proxy.$modal.msgSuccess("删除成功");
|
||||||
}).catch(() => {});
|
}).catch(() => { });
|
||||||
}
|
}
|
||||||
/** 清空按钮操作 */
|
/** 清空按钮操作 */
|
||||||
function handleClean() {
|
function handleClean() {
|
||||||
@ -288,11 +229,11 @@ function handleClean() {
|
|||||||
}).then(() => {
|
}).then(() => {
|
||||||
getList();
|
getList();
|
||||||
proxy.$modal.msgSuccess("清空成功");
|
proxy.$modal.msgSuccess("清空成功");
|
||||||
}).catch(() => {});
|
}).catch(() => { });
|
||||||
}
|
}
|
||||||
/** 导出按钮操作 */
|
/** 导出按钮操作 */
|
||||||
function handleExport() {
|
function handleExport() {
|
||||||
proxy.download("monitor/operlog/export",{
|
proxy.download("monitor/operlog/export", {
|
||||||
...queryParams.value,
|
...queryParams.value,
|
||||||
}, `config_${new Date().getTime()}.xlsx`);
|
}, `config_${new Date().getTime()}.xlsx`);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,134 +1,112 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
|
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
|
||||||
<el-form-item label="参数名称" prop="configName">
|
<el-form-item label="参数名称" prop="configName">
|
||||||
<el-input v-model="queryParams.configName"
|
<el-input v-model="queryParams.configName" placeholder="请输入参数名称" clearable style="width: 240px"
|
||||||
placeholder="请输入参数名称"
|
@keyup.enter="handleQuery" />
|
||||||
clearable
|
</el-form-item>
|
||||||
style="width: 240px"
|
<el-form-item label="参数键名" prop="configKey">
|
||||||
@keyup.enter="handleQuery"
|
<el-input v-model="queryParams.configKey" placeholder="请输入参数键名" clearable style="width: 240px"
|
||||||
/>
|
@keyup.enter="handleQuery" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="参数键名" prop="configKey">
|
<el-form-item label="系统内置" prop="configType">
|
||||||
<el-input
|
<el-select v-model="queryParams.configType" placeholder="系统内置" clearable>
|
||||||
v-model="queryParams.configKey"
|
<el-option v-for="dict in sys_yes_no" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||||
placeholder="请输入参数键名"
|
</el-select>
|
||||||
clearable
|
</el-form-item>
|
||||||
style="width: 240px"
|
<el-form-item label="创建时间" style="width: 308px;">
|
||||||
@keyup.enter="handleQuery"
|
<el-date-picker v-model="dateRange" value-format="YYYY-MM-DD" type="daterange" range-separator="-"
|
||||||
/>
|
start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="系统内置" prop="configType">
|
<el-form-item>
|
||||||
<el-select v-model="queryParams.configType" placeholder="系统内置" clearable>
|
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||||
<el-option
|
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||||
v-for="dict in sys_yes_no"
|
</el-form-item>
|
||||||
:key="dict.value"
|
</el-form>
|
||||||
:label="dict.label"
|
|
||||||
:value="dict.value"
|
<el-row :gutter="10" class="mb8">
|
||||||
/>
|
<el-col :span="1.5">
|
||||||
</el-select>
|
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['system:config:add']">新增</el-button>
|
||||||
</el-form-item>
|
</el-col>
|
||||||
<el-form-item label="创建时间" style="width: 308px;">
|
<el-col :span="1.5">
|
||||||
<el-date-picker
|
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
|
||||||
v-model="dateRange"
|
v-hasPermi="['system:config:edit']">修改</el-button>
|
||||||
value-format="YYYY-MM-DD"
|
</el-col>
|
||||||
type="daterange"
|
<el-col :span="1.5">
|
||||||
range-separator="-"
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
|
||||||
start-placeholder="开始日期"
|
v-hasPermi="['system:config:remove']">删除</el-button>
|
||||||
end-placeholder="结束日期"
|
</el-col>
|
||||||
></el-date-picker>
|
<el-col :span="1.5">
|
||||||
</el-form-item>
|
<el-button type="warning" plain icon="Download" @click="handleExport"
|
||||||
<el-form-item>
|
v-hasPermi="['system:config:export']">导出</el-button>
|
||||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
</el-col>
|
||||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
<el-col :span="1.5">
|
||||||
</el-form-item>
|
<el-button type="danger" plain icon="Refresh" @click="handleRefreshCache"
|
||||||
|
v-hasPermi="['system:config:remove']">刷新缓存</el-button>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-table v-loading="loading" :data="configList" @selection-change="handleSelectionChange"
|
||||||
|
height="calc(100vh - 280px)">
|
||||||
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
|
<el-table-column label="参数主键" align="center" prop="configId" />
|
||||||
|
<el-table-column label="参数名称" align="center" prop="configName" :show-overflow-tooltip="true" />
|
||||||
|
<el-table-column label="参数键名" align="center" prop="configKey" :show-overflow-tooltip="true" />
|
||||||
|
<el-table-column label="参数键值" align="center" prop="configValue" :show-overflow-tooltip="true" />
|
||||||
|
<el-table-column label="系统内置" align="center" prop="configType">
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag :options="sys_yes_no" :value="scope.row.configType" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="备注" align="center" prop="remark" :show-overflow-tooltip="true" />
|
||||||
|
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ parseTime(scope.row.createTime) }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
|
||||||
|
v-hasPermi="['system:config:edit']">修改</el-button>
|
||||||
|
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
|
||||||
|
v-hasPermi="['system:config:remove']">删除</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
|
||||||
|
v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||||
|
|
||||||
|
<!-- 添加或修改参数配置对话框 -->
|
||||||
|
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
|
||||||
|
<el-form ref="configRef" :model="form" :rules="rules" label-width="80px">
|
||||||
|
<el-form-item label="参数名称" prop="configName">
|
||||||
|
<el-input v-model="form.configName" placeholder="请输入参数名称" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="参数键名" prop="configKey">
|
||||||
|
<el-input v-model="form.configKey" placeholder="请输入参数键名" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="参数键值" prop="configValue">
|
||||||
|
<el-input v-model="form.configValue" placeholder="请输入参数键值" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="系统内置" prop="configType">
|
||||||
|
<el-radio-group v-model="form.configType">
|
||||||
|
<el-radio v-for="dict in sys_yes_no" :key="dict.value" :label="dict.value">{{ dict.label }}</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="备注" prop="remark">
|
||||||
|
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
|
||||||
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
<template #footer>
|
||||||
<el-row :gutter="10" class="mb8">
|
<div class="dialog-footer">
|
||||||
<el-col :span="1.5">
|
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||||
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['system:config:add']">新增</el-button>
|
<el-button @click="cancel">取 消</el-button>
|
||||||
</el-col>
|
</div>
|
||||||
<el-col :span="1.5">
|
</template>
|
||||||
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate" v-hasPermi="['system:config:edit']">修改</el-button>
|
</el-dialog>
|
||||||
</el-col>
|
</div>
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete" v-hasPermi="['system:config:remove']">删除</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['system:config:export']">导出</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button type="danger" plain icon="Refresh" @click="handleRefreshCache" v-hasPermi="['system:config:remove']">刷新缓存</el-button>
|
|
||||||
</el-col>
|
|
||||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-table v-loading="loading" :data="configList" @selection-change="handleSelectionChange">
|
|
||||||
<el-table-column type="selection" width="55" align="center" />
|
|
||||||
<el-table-column label="参数主键" align="center" prop="configId" />
|
|
||||||
<el-table-column label="参数名称" align="center" prop="configName" :show-overflow-tooltip="true" />
|
|
||||||
<el-table-column label="参数键名" align="center" prop="configKey" :show-overflow-tooltip="true" />
|
|
||||||
<el-table-column label="参数键值" align="center" prop="configValue" :show-overflow-tooltip="true" />
|
|
||||||
<el-table-column label="系统内置" align="center" prop="configType">
|
|
||||||
<template #default="scope">
|
|
||||||
<dict-tag :options="sys_yes_no" :value="scope.row.configType" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="备注" align="center" prop="remark" :show-overflow-tooltip="true" />
|
|
||||||
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{ parseTime(scope.row.createTime) }}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width">
|
|
||||||
<template #default="scope">
|
|
||||||
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:config:edit']" >修改</el-button>
|
|
||||||
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:config:remove']">删除</el-button>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
|
|
||||||
<pagination
|
|
||||||
v-show="total > 0"
|
|
||||||
:total="total"
|
|
||||||
v-model:page="queryParams.pageNum"
|
|
||||||
v-model:limit="queryParams.pageSize"
|
|
||||||
@pagination="getList"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- 添加或修改参数配置对话框 -->
|
|
||||||
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
|
|
||||||
<el-form ref="configRef" :model="form" :rules="rules" label-width="80px">
|
|
||||||
<el-form-item label="参数名称" prop="configName">
|
|
||||||
<el-input v-model="form.configName" placeholder="请输入参数名称" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="参数键名" prop="configKey">
|
|
||||||
<el-input v-model="form.configKey" placeholder="请输入参数键名" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="参数键值" prop="configValue">
|
|
||||||
<el-input v-model="form.configValue" placeholder="请输入参数键值" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="系统内置" prop="configType">
|
|
||||||
<el-radio-group v-model="form.configType">
|
|
||||||
<el-radio
|
|
||||||
v-for="dict in sys_yes_no"
|
|
||||||
:key="dict.value"
|
|
||||||
:label="dict.value"
|
|
||||||
>{{ dict.label }}</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="备注" prop="remark">
|
|
||||||
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
<template #footer>
|
|
||||||
<div class="dialog-footer">
|
|
||||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
|
||||||
<el-button @click="cancel">取 消</el-button>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-dialog>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup name="Config">
|
<script setup name="Config">
|
||||||
@ -253,7 +231,7 @@ function handleDelete(row) {
|
|||||||
}).then(() => {
|
}).then(() => {
|
||||||
getList();
|
getList();
|
||||||
proxy.$modal.msgSuccess("删除成功");
|
proxy.$modal.msgSuccess("删除成功");
|
||||||
}).catch(() => {});
|
}).catch(() => { });
|
||||||
}
|
}
|
||||||
/** 导出按钮操作 */
|
/** 导出按钮操作 */
|
||||||
function handleExport() {
|
function handleExport() {
|
||||||
|
|||||||
@ -1,143 +1,112 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
|
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
|
||||||
<el-form-item label="部门名称" prop="deptName">
|
<el-form-item label="部门名称" prop="deptName">
|
||||||
<el-input
|
<el-input v-model="queryParams.deptName" placeholder="请输入部门名称" clearable style="width: 200px"
|
||||||
v-model="queryParams.deptName"
|
@keyup.enter="handleQuery" />
|
||||||
placeholder="请输入部门名称"
|
</el-form-item>
|
||||||
clearable
|
<el-form-item label="状态" prop="status">
|
||||||
style="width: 200px"
|
<el-select v-model="queryParams.status" placeholder="部门状态" clearable style="width: 200px">
|
||||||
@keyup.enter="handleQuery"
|
<el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||||
/>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="状态" prop="status">
|
<el-form-item>
|
||||||
<el-select v-model="queryParams.status" placeholder="部门状态" clearable style="width: 200px">
|
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||||
<el-option
|
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||||
v-for="dict in sys_normal_disable"
|
</el-form-item>
|
||||||
:key="dict.value"
|
</el-form>
|
||||||
:label="dict.label"
|
|
||||||
:value="dict.value"
|
<el-row :gutter="10" class="mb8">
|
||||||
/>
|
<el-col :span="1.5">
|
||||||
</el-select>
|
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['system:dept:add']">新增</el-button>
|
||||||
</el-form-item>
|
</el-col>
|
||||||
<el-form-item>
|
<el-col :span="1.5">
|
||||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
<el-button type="info" plain icon="Sort" @click="toggleExpandAll">展开/折叠</el-button>
|
||||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
</el-col>
|
||||||
</el-form-item>
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-table v-if="refreshTable" v-loading="loading" :data="deptList" row-key="deptId"
|
||||||
|
:default-expand-all="isExpandAll" :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
|
||||||
|
height="calc(100vh - 280px)">
|
||||||
|
<el-table-column prop="deptName" label="部门名称" width="260"></el-table-column>
|
||||||
|
<el-table-column prop="orderNum" label="排序" width="200"></el-table-column>
|
||||||
|
<el-table-column prop="status" label="状态" width="100">
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag :options="sys_normal_disable" :value="scope.row.status" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="创建时间" align="center" prop="createTime" width="200">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ parseTime(scope.row.createTime) }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
|
||||||
|
v-hasPermi="['system:dept:edit']">修改</el-button>
|
||||||
|
<el-button link type="primary" icon="Plus" @click="handleAdd(scope.row)"
|
||||||
|
v-hasPermi="['system:dept:add']">新增</el-button>
|
||||||
|
<el-button v-if="scope.row.parentId != 0" link type="primary" icon="Delete" @click="handleDelete(scope.row)"
|
||||||
|
v-hasPermi="['system:dept:remove']">删除</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<!-- 添加或修改部门对话框 -->
|
||||||
|
<el-dialog :title="title" v-model="open" width="600px" append-to-body>
|
||||||
|
<el-form ref="deptRef" :model="form" :rules="rules" label-width="80px">
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="24" v-if="form.parentId !== 0">
|
||||||
|
<el-form-item label="上级部门" prop="parentId">
|
||||||
|
<el-tree-select v-model="form.parentId" :data="deptOptions"
|
||||||
|
:props="{ value: 'deptId', label: 'deptName', children: 'children' }" value-key="deptId"
|
||||||
|
placeholder="选择上级部门" check-strictly />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="部门名称" prop="deptName">
|
||||||
|
<el-input v-model="form.deptName" placeholder="请输入部门名称" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="显示排序" prop="orderNum">
|
||||||
|
<el-input-number v-model="form.orderNum" controls-position="right" :min="0" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="负责人" prop="leader">
|
||||||
|
<el-input v-model="form.leader" placeholder="请输入负责人" maxlength="20" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="联系电话" prop="phone">
|
||||||
|
<el-input v-model="form.phone" placeholder="请输入联系电话" maxlength="11" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="邮箱" prop="email">
|
||||||
|
<el-input v-model="form.email" placeholder="请输入邮箱" maxlength="50" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="部门状态">
|
||||||
|
<el-radio-group v-model="form.status">
|
||||||
|
<el-radio v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.value">{{ dict.label
|
||||||
|
}}</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
<template #footer>
|
||||||
<el-row :gutter="10" class="mb8">
|
<div class="dialog-footer">
|
||||||
<el-col :span="1.5">
|
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||||
<el-button
|
<el-button @click="cancel">取 消</el-button>
|
||||||
type="primary"
|
</div>
|
||||||
plain
|
</template>
|
||||||
icon="Plus"
|
</el-dialog>
|
||||||
@click="handleAdd"
|
</div>
|
||||||
v-hasPermi="['system:dept:add']"
|
|
||||||
>新增</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
type="info"
|
|
||||||
plain
|
|
||||||
icon="Sort"
|
|
||||||
@click="toggleExpandAll"
|
|
||||||
>展开/折叠</el-button>
|
|
||||||
</el-col>
|
|
||||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-table
|
|
||||||
v-if="refreshTable"
|
|
||||||
v-loading="loading"
|
|
||||||
:data="deptList"
|
|
||||||
row-key="deptId"
|
|
||||||
:default-expand-all="isExpandAll"
|
|
||||||
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
|
|
||||||
>
|
|
||||||
<el-table-column prop="deptName" label="部门名称" width="260"></el-table-column>
|
|
||||||
<el-table-column prop="orderNum" label="排序" width="200"></el-table-column>
|
|
||||||
<el-table-column prop="status" label="状态" width="100">
|
|
||||||
<template #default="scope">
|
|
||||||
<dict-tag :options="sys_normal_disable" :value="scope.row.status" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="创建时间" align="center" prop="createTime" width="200">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{ parseTime(scope.row.createTime) }}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
|
||||||
<template #default="scope">
|
|
||||||
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:dept:edit']">修改</el-button>
|
|
||||||
<el-button link type="primary" icon="Plus" @click="handleAdd(scope.row)" v-hasPermi="['system:dept:add']">新增</el-button>
|
|
||||||
<el-button v-if="scope.row.parentId != 0" link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:dept:remove']">删除</el-button>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
|
|
||||||
<!-- 添加或修改部门对话框 -->
|
|
||||||
<el-dialog :title="title" v-model="open" width="600px" append-to-body>
|
|
||||||
<el-form ref="deptRef" :model="form" :rules="rules" label-width="80px">
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="24" v-if="form.parentId !== 0">
|
|
||||||
<el-form-item label="上级部门" prop="parentId">
|
|
||||||
<el-tree-select
|
|
||||||
v-model="form.parentId"
|
|
||||||
:data="deptOptions"
|
|
||||||
:props="{ value: 'deptId', label: 'deptName', children: 'children' }"
|
|
||||||
value-key="deptId"
|
|
||||||
placeholder="选择上级部门"
|
|
||||||
check-strictly
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="部门名称" prop="deptName">
|
|
||||||
<el-input v-model="form.deptName" placeholder="请输入部门名称" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="显示排序" prop="orderNum">
|
|
||||||
<el-input-number v-model="form.orderNum" controls-position="right" :min="0" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="负责人" prop="leader">
|
|
||||||
<el-input v-model="form.leader" placeholder="请输入负责人" maxlength="20" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="联系电话" prop="phone">
|
|
||||||
<el-input v-model="form.phone" placeholder="请输入联系电话" maxlength="11" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="邮箱" prop="email">
|
|
||||||
<el-input v-model="form.email" placeholder="请输入邮箱" maxlength="50" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="部门状态">
|
|
||||||
<el-radio-group v-model="form.status">
|
|
||||||
<el-radio
|
|
||||||
v-for="dict in sys_normal_disable"
|
|
||||||
:key="dict.value"
|
|
||||||
:label="dict.value"
|
|
||||||
>{{ dict.label }}</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</el-form>
|
|
||||||
<template #footer>
|
|
||||||
<div class="dialog-footer">
|
|
||||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
|
||||||
<el-button @click="cancel">取 消</el-button>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-dialog>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup name="Dept">
|
<script setup name="Dept">
|
||||||
@ -262,12 +231,12 @@ function submitForm() {
|
|||||||
}
|
}
|
||||||
/** 删除按钮操作 */
|
/** 删除按钮操作 */
|
||||||
function handleDelete(row) {
|
function handleDelete(row) {
|
||||||
proxy.$modal.confirm('是否确认删除名称为"' + row.deptName + '"的数据项?').then(function() {
|
proxy.$modal.confirm('是否确认删除名称为"' + row.deptName + '"的数据项?').then(function () {
|
||||||
return delDept(row.deptId);
|
return delDept(row.deptId);
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
getList();
|
getList();
|
||||||
proxy.$modal.msgSuccess("删除成功");
|
proxy.$modal.msgSuccess("删除成功");
|
||||||
}).catch(() => {});
|
}).catch(() => { });
|
||||||
}
|
}
|
||||||
|
|
||||||
getList();
|
getList();
|
||||||
|
|||||||
@ -1,174 +1,115 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
|
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
|
||||||
<el-form-item class="cus-el-form-item" label="字典名称" prop="dictName">
|
<el-form-item class="cus-el-form-item" label="字典名称" prop="dictName">
|
||||||
<el-input
|
<el-input v-model="queryParams.dictName" placeholder="请输入字典名称" clearable style="width: 240px"
|
||||||
v-model="queryParams.dictName"
|
@keyup.enter="handleQuery" />
|
||||||
placeholder="请输入字典名称"
|
</el-form-item>
|
||||||
clearable
|
<el-form-item class="cus-el-form-item" label="字典类型" prop="dictType">
|
||||||
style="width: 240px"
|
<el-input v-model="queryParams.dictType" placeholder="请输入字典类型" clearable style="width: 240px"
|
||||||
@keyup.enter="handleQuery"
|
@keyup.enter="handleQuery" />
|
||||||
/>
|
</el-form-item>
|
||||||
</el-form-item>
|
<el-form-item class="cus-el-form-item" label="状态" prop="status">
|
||||||
<el-form-item class="cus-el-form-item" label="字典类型" prop="dictType">
|
<el-select v-model="queryParams.status" placeholder="字典状态" clearable style="width: 240px">
|
||||||
<el-input
|
<el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||||
v-model="queryParams.dictType"
|
</el-select>
|
||||||
placeholder="请输入字典类型"
|
</el-form-item>
|
||||||
clearable
|
<el-form-item class="cus-el-form-item" label="创建时间" style="width: 308px">
|
||||||
style="width: 240px"
|
<el-date-picker v-model="dateRange" value-format="YYYY-MM-DD" type="daterange" range-separator="-"
|
||||||
@keyup.enter="handleQuery"
|
start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
|
||||||
/>
|
</el-form-item>
|
||||||
</el-form-item>
|
<el-form-item>
|
||||||
<el-form-item class="cus-el-form-item" label="状态" prop="status">
|
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||||
<el-select
|
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||||
v-model="queryParams.status"
|
</el-form-item>
|
||||||
placeholder="字典状态"
|
</el-form>
|
||||||
clearable
|
|
||||||
style="width: 240px"
|
<el-row :gutter="10" class="mb8">
|
||||||
>
|
<el-col :span="1.5">
|
||||||
<el-option
|
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['system:dict:add']">新增</el-button>
|
||||||
v-for="dict in sys_normal_disable"
|
</el-col>
|
||||||
:key="dict.value"
|
<el-col :span="1.5">
|
||||||
:label="dict.label"
|
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
|
||||||
:value="dict.value"
|
v-hasPermi="['system:dict:edit']">修改</el-button>
|
||||||
/>
|
</el-col>
|
||||||
</el-select>
|
<el-col :span="1.5">
|
||||||
</el-form-item>
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
|
||||||
<el-form-item class="cus-el-form-item" label="创建时间" style="width: 308px">
|
v-hasPermi="['system:dict:remove']">删除</el-button>
|
||||||
<el-date-picker
|
</el-col>
|
||||||
v-model="dateRange"
|
<el-col :span="1.5">
|
||||||
value-format="YYYY-MM-DD"
|
<el-button type="warning" plain icon="Download" @click="handleExport"
|
||||||
type="daterange"
|
v-hasPermi="['system:dict:export']">导出</el-button>
|
||||||
range-separator="-"
|
</el-col>
|
||||||
start-placeholder="开始日期"
|
<el-col :span="1.5">
|
||||||
end-placeholder="结束日期"
|
<el-button type="danger" plain icon="Refresh" @click="handleRefreshCache"
|
||||||
></el-date-picker>
|
v-hasPermi="['system:dict:remove']">刷新缓存</el-button>
|
||||||
</el-form-item>
|
</el-col>
|
||||||
<el-form-item>
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
</el-row>
|
||||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
|
||||||
</el-form-item>
|
<el-table v-loading="loading" :data="typeList" @selection-change="handleSelectionChange"
|
||||||
|
height="calc(100vh - 280px)">
|
||||||
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
|
<el-table-column label="字典编号" align="center" prop="dictId" />
|
||||||
|
<el-table-column label="字典名称" align="center" prop="dictName" :show-overflow-tooltip="true" />
|
||||||
|
<el-table-column label="字典类型" align="center" :show-overflow-tooltip="true">
|
||||||
|
<template #default="scope">
|
||||||
|
<router-link :to="'/system/dict-data/index/' + scope.row.dictId" class="link-type">
|
||||||
|
<span>{{ scope.row.dictType }}</span>
|
||||||
|
</router-link>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="状态" align="center" prop="status">
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag :options="sys_normal_disable" :value="scope.row.status" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="备注" align="center" prop="remark" :show-overflow-tooltip="true" />
|
||||||
|
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ parseTime(scope.row.createTime) }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" align="center" width="160" class-name="small-padding fixed-width">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
|
||||||
|
v-hasPermi="['system:dict:edit']">修改</el-button>
|
||||||
|
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
|
||||||
|
v-hasPermi="['system:dict:remove']">删除</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
|
||||||
|
v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||||
|
|
||||||
|
<!-- 添加或修改参数配置对话框 -->
|
||||||
|
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
|
||||||
|
<el-form ref="dictRef" :model="form" :rules="rules" label-width="80px">
|
||||||
|
<el-form-item label="字典名称" prop="dictName">
|
||||||
|
<el-input v-model="form.dictName" placeholder="请输入字典名称" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="字典类型" prop="dictType">
|
||||||
|
<el-input v-model="form.dictType" placeholder="请输入字典类型" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="状态" prop="status">
|
||||||
|
<el-radio-group v-model="form.status">
|
||||||
|
<el-radio v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.value">{{ dict.label
|
||||||
|
}}</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="备注" prop="remark">
|
||||||
|
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
|
||||||
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
<template #footer>
|
||||||
<el-row :gutter="10" class="mb8">
|
<div class="dialog-footer">
|
||||||
<el-col :span="1.5">
|
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||||
<el-button
|
<el-button @click="cancel">取 消</el-button>
|
||||||
type="primary"
|
</div>
|
||||||
plain
|
</template>
|
||||||
icon="Plus"
|
</el-dialog>
|
||||||
@click="handleAdd"
|
</div>
|
||||||
v-hasPermi="['system:dict:add']"
|
|
||||||
>新增</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
type="success"
|
|
||||||
plain
|
|
||||||
icon="Edit"
|
|
||||||
:disabled="single"
|
|
||||||
@click="handleUpdate"
|
|
||||||
v-hasPermi="['system:dict:edit']"
|
|
||||||
>修改</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
type="danger"
|
|
||||||
plain
|
|
||||||
icon="Delete"
|
|
||||||
:disabled="multiple"
|
|
||||||
@click="handleDelete"
|
|
||||||
v-hasPermi="['system:dict:remove']"
|
|
||||||
>删除</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
type="warning"
|
|
||||||
plain
|
|
||||||
icon="Download"
|
|
||||||
@click="handleExport"
|
|
||||||
v-hasPermi="['system:dict:export']"
|
|
||||||
>导出</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
type="danger"
|
|
||||||
plain
|
|
||||||
icon="Refresh"
|
|
||||||
@click="handleRefreshCache"
|
|
||||||
v-hasPermi="['system:dict:remove']"
|
|
||||||
>刷新缓存</el-button>
|
|
||||||
</el-col>
|
|
||||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-table v-loading="loading" :data="typeList" @selection-change="handleSelectionChange">
|
|
||||||
<el-table-column type="selection" width="55" align="center" />
|
|
||||||
<el-table-column label="字典编号" align="center" prop="dictId" />
|
|
||||||
<el-table-column label="字典名称" align="center" prop="dictName" :show-overflow-tooltip="true"/>
|
|
||||||
<el-table-column label="字典类型" align="center" :show-overflow-tooltip="true">
|
|
||||||
<template #default="scope">
|
|
||||||
<router-link :to="'/system/dict-data/index/' + scope.row.dictId" class="link-type">
|
|
||||||
<span>{{ scope.row.dictType }}</span>
|
|
||||||
</router-link>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="状态" align="center" prop="status">
|
|
||||||
<template #default="scope">
|
|
||||||
<dict-tag :options="sys_normal_disable" :value="scope.row.status" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="备注" align="center" prop="remark" :show-overflow-tooltip="true" />
|
|
||||||
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{ parseTime(scope.row.createTime) }}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="操作" align="center" width="160" class-name="small-padding fixed-width">
|
|
||||||
<template #default="scope">
|
|
||||||
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:dict:edit']">修改</el-button>
|
|
||||||
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:dict:remove']">删除</el-button>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
|
|
||||||
<pagination
|
|
||||||
v-show="total > 0"
|
|
||||||
:total="total"
|
|
||||||
v-model:page="queryParams.pageNum"
|
|
||||||
v-model:limit="queryParams.pageSize"
|
|
||||||
@pagination="getList"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- 添加或修改参数配置对话框 -->
|
|
||||||
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
|
|
||||||
<el-form ref="dictRef" :model="form" :rules="rules" label-width="80px">
|
|
||||||
<el-form-item label="字典名称" prop="dictName">
|
|
||||||
<el-input v-model="form.dictName" placeholder="请输入字典名称" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="字典类型" prop="dictType">
|
|
||||||
<el-input v-model="form.dictType" placeholder="请输入字典类型" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="状态" prop="status">
|
|
||||||
<el-radio-group v-model="form.status">
|
|
||||||
<el-radio
|
|
||||||
v-for="dict in sys_normal_disable"
|
|
||||||
:key="dict.value"
|
|
||||||
:label="dict.value"
|
|
||||||
>{{ dict.label }}</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="备注" prop="remark">
|
|
||||||
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
<template #footer>
|
|
||||||
<div class="dialog-footer">
|
|
||||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
|
||||||
<el-button @click="cancel">取 消</el-button>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-dialog>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup name="Dict">
|
<script setup name="Dict">
|
||||||
@ -287,12 +228,12 @@ function submitForm() {
|
|||||||
/** 删除按钮操作 */
|
/** 删除按钮操作 */
|
||||||
function handleDelete(row) {
|
function handleDelete(row) {
|
||||||
const dictIds = row.dictId || ids.value;
|
const dictIds = row.dictId || ids.value;
|
||||||
proxy.$modal.confirm('是否确认删除字典编号为"' + dictIds + '"的数据项?').then(function() {
|
proxy.$modal.confirm('是否确认删除字典编号为"' + dictIds + '"的数据项?').then(function () {
|
||||||
return delType(dictIds);
|
return delType(dictIds);
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
getList();
|
getList();
|
||||||
proxy.$modal.msgSuccess("删除成功");
|
proxy.$modal.msgSuccess("删除成功");
|
||||||
}).catch(() => {});
|
}).catch(() => { });
|
||||||
}
|
}
|
||||||
/** 导出按钮操作 */
|
/** 导出按钮操作 */
|
||||||
function handleExport() {
|
function handleExport() {
|
||||||
@ -313,7 +254,7 @@ getList();
|
|||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.cus-el-form-item {
|
.cus-el-form-item {
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
@ -1,161 +1,114 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
|
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
|
||||||
<el-form-item label="公告标题" prop="noticeTitle">
|
<el-form-item label="公告标题" prop="noticeTitle">
|
||||||
<el-input
|
<el-input v-model="queryParams.noticeTitle" placeholder="请输入公告标题" clearable style="width: 200px"
|
||||||
v-model="queryParams.noticeTitle"
|
@keyup.enter="handleQuery" />
|
||||||
placeholder="请输入公告标题"
|
</el-form-item>
|
||||||
clearable
|
<el-form-item label="操作人员" prop="createBy">
|
||||||
style="width: 200px"
|
<el-input v-model="queryParams.createBy" placeholder="请输入操作人员" clearable style="width: 200px"
|
||||||
@keyup.enter="handleQuery"
|
@keyup.enter="handleQuery" />
|
||||||
/>
|
</el-form-item>
|
||||||
</el-form-item>
|
<el-form-item label="类型" prop="noticeType">
|
||||||
<el-form-item label="操作人员" prop="createBy">
|
<el-select v-model="queryParams.noticeType" placeholder="公告类型" clearable style="width: 200px">
|
||||||
<el-input
|
<el-option v-for="dict in sys_notice_type" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||||
v-model="queryParams.createBy"
|
</el-select>
|
||||||
placeholder="请输入操作人员"
|
</el-form-item>
|
||||||
clearable
|
<el-form-item>
|
||||||
style="width: 200px"
|
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||||
@keyup.enter="handleQuery"
|
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||||
/>
|
</el-form-item>
|
||||||
</el-form-item>
|
</el-form>
|
||||||
<el-form-item label="类型" prop="noticeType">
|
|
||||||
<el-select v-model="queryParams.noticeType" placeholder="公告类型" clearable style="width: 200px">
|
<el-row :gutter="10" class="mb8">
|
||||||
<el-option
|
<el-col :span="1.5">
|
||||||
v-for="dict in sys_notice_type"
|
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['system:notice:add']">新增</el-button>
|
||||||
:key="dict.value"
|
</el-col>
|
||||||
:label="dict.label"
|
<el-col :span="1.5">
|
||||||
:value="dict.value"
|
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
|
||||||
/>
|
v-hasPermi="['system:notice:edit']">修改</el-button>
|
||||||
</el-select>
|
</el-col>
|
||||||
</el-form-item>
|
<el-col :span="1.5">
|
||||||
<el-form-item>
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
|
||||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
v-hasPermi="['system:notice:remove']">删除</el-button>
|
||||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
</el-col>
|
||||||
</el-form-item>
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-table v-loading="loading" :data="noticeList" @selection-change="handleSelectionChange"
|
||||||
|
height="calc(100vh - 280px)">
|
||||||
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
|
<el-table-column label="序号" align="center" prop="noticeId" width="100" />
|
||||||
|
<el-table-column label="公告标题" align="center" prop="noticeTitle" :show-overflow-tooltip="true" />
|
||||||
|
<el-table-column label="公告类型" align="center" prop="noticeType" width="100">
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag :options="sys_notice_type" :value="scope.row.noticeType" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="状态" align="center" prop="status" width="100">
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag :options="sys_notice_status" :value="scope.row.status" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="创建者" align="center" prop="createBy" width="100" />
|
||||||
|
<el-table-column label="创建时间" align="center" prop="createTime" width="100">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
|
||||||
|
v-hasPermi="['system:notice:edit']">修改</el-button>
|
||||||
|
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
|
||||||
|
v-hasPermi="['system:notice:remove']">删除</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
|
||||||
|
v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||||
|
|
||||||
|
<!-- 添加或修改公告对话框 -->
|
||||||
|
<el-dialog :title="title" v-model="open" width="780px" append-to-body>
|
||||||
|
<el-form ref="noticeRef" :model="form" :rules="rules" label-width="80px">
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="公告标题" prop="noticeTitle">
|
||||||
|
<el-input v-model="form.noticeTitle" placeholder="请输入公告标题" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="公告类型" prop="noticeType">
|
||||||
|
<el-select v-model="form.noticeType" placeholder="请选择">
|
||||||
|
<el-option v-for="dict in sys_notice_type" :key="dict.value" :label="dict.label"
|
||||||
|
:value="dict.value"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="状态">
|
||||||
|
<el-radio-group v-model="form.status">
|
||||||
|
<el-radio v-for="dict in sys_notice_status" :key="dict.value" :label="dict.value">{{ dict.label
|
||||||
|
}}</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="内容">
|
||||||
|
<editor v-model="form.noticeContent" :min-height="192" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
<template #footer>
|
||||||
<el-row :gutter="10" class="mb8">
|
<div class="dialog-footer">
|
||||||
<el-col :span="1.5">
|
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||||
<el-button
|
<el-button @click="cancel">取 消</el-button>
|
||||||
type="primary"
|
</div>
|
||||||
plain
|
</template>
|
||||||
icon="Plus"
|
</el-dialog>
|
||||||
@click="handleAdd"
|
</div>
|
||||||
v-hasPermi="['system:notice:add']"
|
|
||||||
>新增</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
type="success"
|
|
||||||
plain
|
|
||||||
icon="Edit"
|
|
||||||
:disabled="single"
|
|
||||||
@click="handleUpdate"
|
|
||||||
v-hasPermi="['system:notice:edit']"
|
|
||||||
>修改</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
type="danger"
|
|
||||||
plain
|
|
||||||
icon="Delete"
|
|
||||||
:disabled="multiple"
|
|
||||||
@click="handleDelete"
|
|
||||||
v-hasPermi="['system:notice:remove']"
|
|
||||||
>删除</el-button>
|
|
||||||
</el-col>
|
|
||||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-table v-loading="loading" :data="noticeList" @selection-change="handleSelectionChange">
|
|
||||||
<el-table-column type="selection" width="55" align="center" />
|
|
||||||
<el-table-column label="序号" align="center" prop="noticeId" width="100" />
|
|
||||||
<el-table-column
|
|
||||||
label="公告标题"
|
|
||||||
align="center"
|
|
||||||
prop="noticeTitle"
|
|
||||||
:show-overflow-tooltip="true"
|
|
||||||
/>
|
|
||||||
<el-table-column label="公告类型" align="center" prop="noticeType" width="100">
|
|
||||||
<template #default="scope">
|
|
||||||
<dict-tag :options="sys_notice_type" :value="scope.row.noticeType" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="状态" align="center" prop="status" width="100">
|
|
||||||
<template #default="scope">
|
|
||||||
<dict-tag :options="sys_notice_status" :value="scope.row.status" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="创建者" align="center" prop="createBy" width="100" />
|
|
||||||
<el-table-column label="创建时间" align="center" prop="createTime" width="100">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
|
||||||
<template #default="scope">
|
|
||||||
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:notice:edit']">修改</el-button>
|
|
||||||
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:notice:remove']" >删除</el-button>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
|
|
||||||
<pagination
|
|
||||||
v-show="total > 0"
|
|
||||||
:total="total"
|
|
||||||
v-model:page="queryParams.pageNum"
|
|
||||||
v-model:limit="queryParams.pageSize"
|
|
||||||
@pagination="getList"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- 添加或修改公告对话框 -->
|
|
||||||
<el-dialog :title="title" v-model="open" width="780px" append-to-body>
|
|
||||||
<el-form ref="noticeRef" :model="form" :rules="rules" label-width="80px">
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="公告标题" prop="noticeTitle">
|
|
||||||
<el-input v-model="form.noticeTitle" placeholder="请输入公告标题" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="公告类型" prop="noticeType">
|
|
||||||
<el-select v-model="form.noticeType" placeholder="请选择">
|
|
||||||
<el-option
|
|
||||||
v-for="dict in sys_notice_type"
|
|
||||||
:key="dict.value"
|
|
||||||
:label="dict.label"
|
|
||||||
:value="dict.value"
|
|
||||||
></el-option>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item label="状态">
|
|
||||||
<el-radio-group v-model="form.status">
|
|
||||||
<el-radio
|
|
||||||
v-for="dict in sys_notice_status"
|
|
||||||
:key="dict.value"
|
|
||||||
:label="dict.value"
|
|
||||||
>{{ dict.label }}</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item label="内容">
|
|
||||||
<editor v-model="form.noticeContent" :min-height="192"/>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</el-form>
|
|
||||||
<template #footer>
|
|
||||||
<div class="dialog-footer">
|
|
||||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
|
||||||
<el-button @click="cancel">取 消</el-button>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-dialog>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup name="Notice">
|
<script setup name="Notice">
|
||||||
@ -271,12 +224,12 @@ function submitForm() {
|
|||||||
/** 删除按钮操作 */
|
/** 删除按钮操作 */
|
||||||
function handleDelete(row) {
|
function handleDelete(row) {
|
||||||
const noticeIds = row.noticeId || ids.value
|
const noticeIds = row.noticeId || ids.value
|
||||||
proxy.$modal.confirm('是否确认删除公告编号为"' + noticeIds + '"的数据项?').then(function() {
|
proxy.$modal.confirm('是否确认删除公告编号为"' + noticeIds + '"的数据项?').then(function () {
|
||||||
return delNotice(noticeIds);
|
return delNotice(noticeIds);
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
getList();
|
getList();
|
||||||
proxy.$modal.msgSuccess("删除成功");
|
proxy.$modal.msgSuccess("删除成功");
|
||||||
}).catch(() => {});
|
}).catch(() => { });
|
||||||
}
|
}
|
||||||
|
|
||||||
getList();
|
getList();
|
||||||
|
|||||||
@ -1,147 +1,104 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
|
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
|
||||||
<el-form-item label="岗位编码" prop="postCode">
|
<el-form-item label="岗位编码" prop="postCode">
|
||||||
<el-input
|
<el-input v-model="queryParams.postCode" placeholder="请输入岗位编码" clearable style="width: 200px"
|
||||||
v-model="queryParams.postCode"
|
@keyup.enter="handleQuery" />
|
||||||
placeholder="请输入岗位编码"
|
</el-form-item>
|
||||||
clearable
|
<el-form-item label="岗位名称" prop="postName">
|
||||||
style="width: 200px"
|
<el-input v-model="queryParams.postName" placeholder="请输入岗位名称" clearable style="width: 200px"
|
||||||
@keyup.enter="handleQuery"
|
@keyup.enter="handleQuery" />
|
||||||
/>
|
</el-form-item>
|
||||||
</el-form-item>
|
<el-form-item label="状态" prop="status">
|
||||||
<el-form-item label="岗位名称" prop="postName">
|
<el-select v-model="queryParams.status" placeholder="岗位状态" clearable style="width: 200px">
|
||||||
<el-input
|
<el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||||
v-model="queryParams.postName"
|
</el-select>
|
||||||
placeholder="请输入岗位名称"
|
</el-form-item>
|
||||||
clearable
|
<el-form-item>
|
||||||
style="width: 200px"
|
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||||
@keyup.enter="handleQuery"
|
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||||
/>
|
</el-form-item>
|
||||||
</el-form-item>
|
</el-form>
|
||||||
<el-form-item label="状态" prop="status">
|
|
||||||
<el-select v-model="queryParams.status" placeholder="岗位状态" clearable style="width: 200px">
|
<el-row :gutter="10" class="mb8">
|
||||||
<el-option
|
<el-col :span="1.5">
|
||||||
v-for="dict in sys_normal_disable"
|
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['system:post:add']">新增</el-button>
|
||||||
:key="dict.value"
|
</el-col>
|
||||||
:label="dict.label"
|
<el-col :span="1.5">
|
||||||
:value="dict.value"
|
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
|
||||||
/>
|
v-hasPermi="['system:post:edit']">修改</el-button>
|
||||||
</el-select>
|
</el-col>
|
||||||
</el-form-item>
|
<el-col :span="1.5">
|
||||||
<el-form-item>
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
|
||||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
v-hasPermi="['system:post:remove']">删除</el-button>
|
||||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
</el-col>
|
||||||
</el-form-item>
|
<el-col :span="1.5">
|
||||||
|
<el-button type="warning" plain icon="Download" @click="handleExport"
|
||||||
|
v-hasPermi="['system:post:export']">导出</el-button>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange"
|
||||||
|
height="calc(100vh - 280px)">
|
||||||
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
|
<el-table-column label="岗位编号" align="center" prop="postId" />
|
||||||
|
<el-table-column label="岗位编码" align="center" prop="postCode" />
|
||||||
|
<el-table-column label="岗位名称" align="center" prop="postName" />
|
||||||
|
<el-table-column label="岗位排序" align="center" prop="postSort" />
|
||||||
|
<el-table-column label="状态" align="center" prop="status">
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag :options="sys_normal_disable" :value="scope.row.status" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ parseTime(scope.row.createTime) }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" width="180" align="center" class-name="small-padding fixed-width">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
|
||||||
|
v-hasPermi="['system:post:edit']">修改</el-button>
|
||||||
|
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
|
||||||
|
v-hasPermi="['system:post:remove']">删除</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
|
||||||
|
v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||||
|
|
||||||
|
<!-- 添加或修改岗位对话框 -->
|
||||||
|
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
|
||||||
|
<el-form ref="postRef" :model="form" :rules="rules" label-width="80px">
|
||||||
|
<el-form-item label="岗位名称" prop="postName">
|
||||||
|
<el-input v-model="form.postName" placeholder="请输入岗位名称" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="岗位编码" prop="postCode">
|
||||||
|
<el-input v-model="form.postCode" placeholder="请输入编码名称" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="岗位顺序" prop="postSort">
|
||||||
|
<el-input-number v-model="form.postSort" controls-position="right" :min="0" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="岗位状态" prop="status">
|
||||||
|
<el-radio-group v-model="form.status">
|
||||||
|
<el-radio v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.value">{{ dict.label
|
||||||
|
}}</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="备注" prop="remark">
|
||||||
|
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
|
||||||
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
<template #footer>
|
||||||
<el-row :gutter="10" class="mb8">
|
<div class="dialog-footer">
|
||||||
<el-col :span="1.5">
|
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||||
<el-button
|
<el-button @click="cancel">取 消</el-button>
|
||||||
type="primary"
|
</div>
|
||||||
plain
|
</template>
|
||||||
icon="Plus"
|
</el-dialog>
|
||||||
@click="handleAdd"
|
</div>
|
||||||
v-hasPermi="['system:post:add']"
|
|
||||||
>新增</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
type="success"
|
|
||||||
plain
|
|
||||||
icon="Edit"
|
|
||||||
:disabled="single"
|
|
||||||
@click="handleUpdate"
|
|
||||||
v-hasPermi="['system:post:edit']"
|
|
||||||
>修改</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
type="danger"
|
|
||||||
plain
|
|
||||||
icon="Delete"
|
|
||||||
:disabled="multiple"
|
|
||||||
@click="handleDelete"
|
|
||||||
v-hasPermi="['system:post:remove']"
|
|
||||||
>删除</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
type="warning"
|
|
||||||
plain
|
|
||||||
icon="Download"
|
|
||||||
@click="handleExport"
|
|
||||||
v-hasPermi="['system:post:export']"
|
|
||||||
>导出</el-button>
|
|
||||||
</el-col>
|
|
||||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-table v-loading="loading" :data="postList" @selection-change="handleSelectionChange">
|
|
||||||
<el-table-column type="selection" width="55" align="center" />
|
|
||||||
<el-table-column label="岗位编号" align="center" prop="postId" />
|
|
||||||
<el-table-column label="岗位编码" align="center" prop="postCode" />
|
|
||||||
<el-table-column label="岗位名称" align="center" prop="postName" />
|
|
||||||
<el-table-column label="岗位排序" align="center" prop="postSort" />
|
|
||||||
<el-table-column label="状态" align="center" prop="status">
|
|
||||||
<template #default="scope">
|
|
||||||
<dict-tag :options="sys_normal_disable" :value="scope.row.status" />
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{ parseTime(scope.row.createTime) }}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="操作" width="180" align="center" class-name="small-padding fixed-width">
|
|
||||||
<template #default="scope">
|
|
||||||
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:post:edit']">修改</el-button>
|
|
||||||
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:post:remove']">删除</el-button>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
|
|
||||||
<pagination
|
|
||||||
v-show="total > 0"
|
|
||||||
:total="total"
|
|
||||||
v-model:page="queryParams.pageNum"
|
|
||||||
v-model:limit="queryParams.pageSize"
|
|
||||||
@pagination="getList"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- 添加或修改岗位对话框 -->
|
|
||||||
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
|
|
||||||
<el-form ref="postRef" :model="form" :rules="rules" label-width="80px">
|
|
||||||
<el-form-item label="岗位名称" prop="postName">
|
|
||||||
<el-input v-model="form.postName" placeholder="请输入岗位名称" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="岗位编码" prop="postCode">
|
|
||||||
<el-input v-model="form.postCode" placeholder="请输入编码名称" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="岗位顺序" prop="postSort">
|
|
||||||
<el-input-number v-model="form.postSort" controls-position="right" :min="0" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="岗位状态" prop="status">
|
|
||||||
<el-radio-group v-model="form.status">
|
|
||||||
<el-radio
|
|
||||||
v-for="dict in sys_normal_disable"
|
|
||||||
:key="dict.value"
|
|
||||||
:label="dict.value"
|
|
||||||
>{{ dict.label }}</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="备注" prop="remark">
|
|
||||||
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
<template #footer>
|
|
||||||
<div class="dialog-footer">
|
|
||||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
|
||||||
<el-button @click="cancel">取 消</el-button>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-dialog>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup name="Post">
|
<script setup name="Post">
|
||||||
@ -259,12 +216,12 @@ function submitForm() {
|
|||||||
/** 删除按钮操作 */
|
/** 删除按钮操作 */
|
||||||
function handleDelete(row) {
|
function handleDelete(row) {
|
||||||
const postIds = row.postId || ids.value;
|
const postIds = row.postId || ids.value;
|
||||||
proxy.$modal.confirm('是否确认删除岗位编号为"' + postIds + '"的数据项?').then(function() {
|
proxy.$modal.confirm('是否确认删除岗位编号为"' + postIds + '"的数据项?').then(function () {
|
||||||
return delPost(postIds);
|
return delPost(postIds);
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
getList();
|
getList();
|
||||||
proxy.$modal.msgSuccess("删除成功");
|
proxy.$modal.msgSuccess("删除成功");
|
||||||
}).catch(() => {});
|
}).catch(() => { });
|
||||||
}
|
}
|
||||||
/** 导出按钮操作 */
|
/** 导出按钮操作 */
|
||||||
function handleExport() {
|
function handleExport() {
|
||||||
|
|||||||
@ -1,244 +1,171 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<el-form :model="queryParams" ref="queryRef" v-show="showSearch" :inline="true" label-width="68px">
|
<el-form :model="queryParams" ref="queryRef" v-show="showSearch" :inline="true" label-width="68px">
|
||||||
<el-form-item label="角色名称" prop="roleName">
|
<el-form-item label="角色名称" prop="roleName">
|
||||||
<el-input
|
<el-input v-model="queryParams.roleName" placeholder="请输入角色名称" clearable style="width: 240px"
|
||||||
v-model="queryParams.roleName"
|
@keyup.enter="handleQuery" />
|
||||||
placeholder="请输入角色名称"
|
</el-form-item>
|
||||||
clearable
|
<el-form-item label="权限字符" prop="roleKey">
|
||||||
style="width: 240px"
|
<el-input v-model="queryParams.roleKey" placeholder="请输入权限字符" clearable style="width: 240px"
|
||||||
@keyup.enter="handleQuery"
|
@keyup.enter="handleQuery" />
|
||||||
/>
|
</el-form-item>
|
||||||
</el-form-item>
|
<el-form-item label="状态" prop="status">
|
||||||
<el-form-item label="权限字符" prop="roleKey">
|
<el-select v-model="queryParams.status" placeholder="角色状态" clearable style="width: 240px">
|
||||||
<el-input
|
<el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||||
v-model="queryParams.roleKey"
|
</el-select>
|
||||||
placeholder="请输入权限字符"
|
</el-form-item>
|
||||||
clearable
|
<el-form-item label="创建时间" style="width: 308px">
|
||||||
style="width: 240px"
|
<el-date-picker v-model="dateRange" value-format="YYYY-MM-DD" type="daterange" range-separator="-"
|
||||||
@keyup.enter="handleQuery"
|
start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
|
||||||
/>
|
</el-form-item>
|
||||||
</el-form-item>
|
<el-form-item>
|
||||||
<el-form-item label="状态" prop="status">
|
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||||
<el-select
|
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||||
v-model="queryParams.status"
|
</el-form-item>
|
||||||
placeholder="角色状态"
|
</el-form>
|
||||||
clearable
|
<el-row :gutter="10" class="mb8">
|
||||||
style="width: 240px"
|
<el-col :span="1.5">
|
||||||
>
|
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['system:role:add']">新增</el-button>
|
||||||
<el-option
|
</el-col>
|
||||||
v-for="dict in sys_normal_disable"
|
<el-col :span="1.5">
|
||||||
:key="dict.value"
|
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
|
||||||
:label="dict.label"
|
v-hasPermi="['system:role:edit']">修改</el-button>
|
||||||
:value="dict.value"
|
</el-col>
|
||||||
/>
|
<el-col :span="1.5">
|
||||||
</el-select>
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
|
||||||
</el-form-item>
|
v-hasPermi="['system:role:remove']">删除</el-button>
|
||||||
<el-form-item label="创建时间" style="width: 308px">
|
</el-col>
|
||||||
<el-date-picker
|
<el-col :span="1.5">
|
||||||
v-model="dateRange"
|
<el-button type="warning" plain icon="Download" @click="handleExport"
|
||||||
value-format="YYYY-MM-DD"
|
v-hasPermi="['system:role:export']">导出</el-button>
|
||||||
type="daterange"
|
</el-col>
|
||||||
range-separator="-"
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
start-placeholder="开始日期"
|
</el-row>
|
||||||
end-placeholder="结束日期"
|
|
||||||
></el-date-picker>
|
<!-- 表格数据 -->
|
||||||
</el-form-item>
|
<el-table v-loading="loading" :data="roleList" @selection-change="handleSelectionChange"
|
||||||
<el-form-item>
|
height="calc(100vh - 280px)">
|
||||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
<el-table-column label="角色编号" prop="roleId" width="120" />
|
||||||
</el-form-item>
|
<el-table-column label="角色名称" prop="roleName" :show-overflow-tooltip="true" width="150" />
|
||||||
|
<el-table-column label="权限字符" prop="roleKey" :show-overflow-tooltip="true" width="150" />
|
||||||
|
<el-table-column label="显示顺序" prop="roleSort" width="100" />
|
||||||
|
<el-table-column label="状态" align="center" width="100">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-switch v-model="scope.row.status" active-value="0" inactive-value="1"
|
||||||
|
@change="handleStatusChange(scope.row)"></el-switch>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="创建时间" align="center" prop="createTime">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ parseTime(scope.row.createTime) }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-tooltip content="修改" placement="top" v-if="scope.row.roleId !== 1">
|
||||||
|
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
|
||||||
|
v-hasPermi="['system:role:edit']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="删除" placement="top" v-if="scope.row.roleId !== 1">
|
||||||
|
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
|
||||||
|
v-hasPermi="['system:role:remove']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="数据权限" placement="top" v-if="scope.row.roleId !== 1">
|
||||||
|
<el-button link type="primary" icon="CircleCheck" @click="handleDataScope(scope.row)"
|
||||||
|
v-hasPermi="['system:role:edit']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="分配用户" placement="top" v-if="scope.row.roleId !== 1">
|
||||||
|
<el-button link type="primary" icon="User" @click="handleAuthUser(scope.row)"
|
||||||
|
v-hasPermi="['system:role:edit']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
|
||||||
|
v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||||
|
|
||||||
|
<!-- 添加或修改角色配置对话框 -->
|
||||||
|
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
|
||||||
|
<el-form ref="roleRef" :model="form" :rules="rules" label-width="100px">
|
||||||
|
<el-form-item label="角色名称" prop="roleName">
|
||||||
|
<el-input v-model="form.roleName" placeholder="请输入角色名称" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item prop="roleKey">
|
||||||
|
<template #label>
|
||||||
|
<span>
|
||||||
|
<el-tooltip content="控制器中定义的权限字符,如:@PreAuthorize(`@ss.hasRole('admin')`)" placement="top">
|
||||||
|
<el-icon><question-filled /></el-icon>
|
||||||
|
</el-tooltip>
|
||||||
|
权限字符
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
<el-input v-model="form.roleKey" placeholder="请输入权限字符" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="角色顺序" prop="roleSort">
|
||||||
|
<el-input-number v-model="form.roleSort" controls-position="right" :min="0" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="状态">
|
||||||
|
<el-radio-group v-model="form.status">
|
||||||
|
<el-radio v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.value">{{ dict.label
|
||||||
|
}}</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="菜单权限">
|
||||||
|
<el-checkbox v-model="menuExpand" @change="handleCheckedTreeExpand($event, 'menu')">展开/折叠</el-checkbox>
|
||||||
|
<el-checkbox v-model="menuNodeAll" @change="handleCheckedTreeNodeAll($event, 'menu')">全选/全不选</el-checkbox>
|
||||||
|
<el-checkbox v-model="form.menuCheckStrictly"
|
||||||
|
@change="handleCheckedTreeConnect($event, 'menu')">父子联动</el-checkbox>
|
||||||
|
<el-tree class="tree-border" :data="menuOptions" show-checkbox ref="menuRef" node-key="id"
|
||||||
|
:check-strictly="!form.menuCheckStrictly" empty-text="加载中,请稍候"
|
||||||
|
:props="{ label: 'label', children: 'children' }"></el-tree>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="备注">
|
||||||
|
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
|
||||||
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
<el-row :gutter="10" class="mb8">
|
<template #footer>
|
||||||
<el-col :span="1.5">
|
<div class="dialog-footer">
|
||||||
<el-button
|
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||||
type="primary"
|
<el-button @click="cancel">取 消</el-button>
|
||||||
plain
|
</div>
|
||||||
icon="Plus"
|
</template>
|
||||||
@click="handleAdd"
|
</el-dialog>
|
||||||
v-hasPermi="['system:role:add']"
|
|
||||||
>新增</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
type="success"
|
|
||||||
plain
|
|
||||||
icon="Edit"
|
|
||||||
:disabled="single"
|
|
||||||
@click="handleUpdate"
|
|
||||||
v-hasPermi="['system:role:edit']"
|
|
||||||
>修改</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
type="danger"
|
|
||||||
plain
|
|
||||||
icon="Delete"
|
|
||||||
:disabled="multiple"
|
|
||||||
@click="handleDelete"
|
|
||||||
v-hasPermi="['system:role:remove']"
|
|
||||||
>删除</el-button>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="1.5">
|
|
||||||
<el-button
|
|
||||||
type="warning"
|
|
||||||
plain
|
|
||||||
icon="Download"
|
|
||||||
@click="handleExport"
|
|
||||||
v-hasPermi="['system:role:export']"
|
|
||||||
>导出</el-button>
|
|
||||||
</el-col>
|
|
||||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<!-- 表格数据 -->
|
<!-- 分配角色数据权限对话框 -->
|
||||||
<el-table v-loading="loading" :data="roleList" @selection-change="handleSelectionChange">
|
<el-dialog :title="title" v-model="openDataScope" width="500px" append-to-body>
|
||||||
<el-table-column type="selection" width="55" align="center" />
|
<el-form :model="form" label-width="80px">
|
||||||
<el-table-column label="角色编号" prop="roleId" width="120" />
|
<el-form-item label="角色名称">
|
||||||
<el-table-column label="角色名称" prop="roleName" :show-overflow-tooltip="true" width="150" />
|
<el-input v-model="form.roleName" :disabled="true" />
|
||||||
<el-table-column label="权限字符" prop="roleKey" :show-overflow-tooltip="true" width="150" />
|
</el-form-item>
|
||||||
<el-table-column label="显示顺序" prop="roleSort" width="100" />
|
<el-form-item label="权限字符">
|
||||||
<el-table-column label="状态" align="center" width="100">
|
<el-input v-model="form.roleKey" :disabled="true" />
|
||||||
<template #default="scope">
|
</el-form-item>
|
||||||
<el-switch
|
<el-form-item label="权限范围">
|
||||||
v-model="scope.row.status"
|
<el-select v-model="form.dataScope" @change="dataScopeSelectChange">
|
||||||
active-value="0"
|
<el-option v-for="item in dataScopeOptions" :key="item.value" :label="item.label"
|
||||||
inactive-value="1"
|
:value="item.value"></el-option>
|
||||||
@change="handleStatusChange(scope.row)"
|
</el-select>
|
||||||
></el-switch>
|
</el-form-item>
|
||||||
</template>
|
<el-form-item label="数据权限" v-show="form.dataScope == 2">
|
||||||
</el-table-column>
|
<el-checkbox v-model="deptExpand" @change="handleCheckedTreeExpand($event, 'dept')">展开/折叠</el-checkbox>
|
||||||
<el-table-column label="创建时间" align="center" prop="createTime">
|
<el-checkbox v-model="deptNodeAll" @change="handleCheckedTreeNodeAll($event, 'dept')">全选/全不选</el-checkbox>
|
||||||
<template #default="scope">
|
<el-checkbox v-model="form.deptCheckStrictly"
|
||||||
<span>{{ parseTime(scope.row.createTime) }}</span>
|
@change="handleCheckedTreeConnect($event, 'dept')">父子联动</el-checkbox>
|
||||||
</template>
|
<el-tree class="tree-border" :data="deptOptions" show-checkbox default-expand-all ref="deptRef" node-key="id"
|
||||||
</el-table-column>
|
:check-strictly="!form.deptCheckStrictly" empty-text="加载中,请稍候"
|
||||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
:props="{ label: 'label', children: 'children' }"></el-tree>
|
||||||
<template #default="scope">
|
</el-form-item>
|
||||||
<el-tooltip content="修改" placement="top" v-if="scope.row.roleId !== 1">
|
</el-form>
|
||||||
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:role:edit']"></el-button>
|
<template #footer>
|
||||||
</el-tooltip>
|
<div class="dialog-footer">
|
||||||
<el-tooltip content="删除" placement="top" v-if="scope.row.roleId !== 1">
|
<el-button type="primary" @click="submitDataScope">确 定</el-button>
|
||||||
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:role:remove']"></el-button>
|
<el-button @click="cancelDataScope">取 消</el-button>
|
||||||
</el-tooltip>
|
</div>
|
||||||
<el-tooltip content="数据权限" placement="top" v-if="scope.row.roleId !== 1">
|
</template>
|
||||||
<el-button link type="primary" icon="CircleCheck" @click="handleDataScope(scope.row)" v-hasPermi="['system:role:edit']"></el-button>
|
</el-dialog>
|
||||||
</el-tooltip>
|
</div>
|
||||||
<el-tooltip content="分配用户" placement="top" v-if="scope.row.roleId !== 1">
|
|
||||||
<el-button link type="primary" icon="User" @click="handleAuthUser(scope.row)" v-hasPermi="['system:role:edit']"></el-button>
|
|
||||||
</el-tooltip>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
|
|
||||||
<pagination
|
|
||||||
v-show="total > 0"
|
|
||||||
:total="total"
|
|
||||||
v-model:page="queryParams.pageNum"
|
|
||||||
v-model:limit="queryParams.pageSize"
|
|
||||||
@pagination="getList"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!-- 添加或修改角色配置对话框 -->
|
|
||||||
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
|
|
||||||
<el-form ref="roleRef" :model="form" :rules="rules" label-width="100px">
|
|
||||||
<el-form-item label="角色名称" prop="roleName">
|
|
||||||
<el-input v-model="form.roleName" placeholder="请输入角色名称" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item prop="roleKey">
|
|
||||||
<template #label>
|
|
||||||
<span>
|
|
||||||
<el-tooltip content="控制器中定义的权限字符,如:@PreAuthorize(`@ss.hasRole('admin')`)" placement="top">
|
|
||||||
<el-icon><question-filled /></el-icon>
|
|
||||||
</el-tooltip>
|
|
||||||
权限字符
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
<el-input v-model="form.roleKey" placeholder="请输入权限字符" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="角色顺序" prop="roleSort">
|
|
||||||
<el-input-number v-model="form.roleSort" controls-position="right" :min="0" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="状态">
|
|
||||||
<el-radio-group v-model="form.status">
|
|
||||||
<el-radio
|
|
||||||
v-for="dict in sys_normal_disable"
|
|
||||||
:key="dict.value"
|
|
||||||
:label="dict.value"
|
|
||||||
>{{ dict.label }}</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="菜单权限">
|
|
||||||
<el-checkbox v-model="menuExpand" @change="handleCheckedTreeExpand($event, 'menu')">展开/折叠</el-checkbox>
|
|
||||||
<el-checkbox v-model="menuNodeAll" @change="handleCheckedTreeNodeAll($event, 'menu')">全选/全不选</el-checkbox>
|
|
||||||
<el-checkbox v-model="form.menuCheckStrictly" @change="handleCheckedTreeConnect($event, 'menu')">父子联动</el-checkbox>
|
|
||||||
<el-tree
|
|
||||||
class="tree-border"
|
|
||||||
:data="menuOptions"
|
|
||||||
show-checkbox
|
|
||||||
ref="menuRef"
|
|
||||||
node-key="id"
|
|
||||||
:check-strictly="!form.menuCheckStrictly"
|
|
||||||
empty-text="加载中,请稍候"
|
|
||||||
:props="{ label: 'label', children: 'children' }"
|
|
||||||
></el-tree>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="备注">
|
|
||||||
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
<template #footer>
|
|
||||||
<div class="dialog-footer">
|
|
||||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
|
||||||
<el-button @click="cancel">取 消</el-button>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-dialog>
|
|
||||||
|
|
||||||
<!-- 分配角色数据权限对话框 -->
|
|
||||||
<el-dialog :title="title" v-model="openDataScope" width="500px" append-to-body>
|
|
||||||
<el-form :model="form" label-width="80px">
|
|
||||||
<el-form-item label="角色名称">
|
|
||||||
<el-input v-model="form.roleName" :disabled="true" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="权限字符">
|
|
||||||
<el-input v-model="form.roleKey" :disabled="true" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="权限范围">
|
|
||||||
<el-select v-model="form.dataScope" @change="dataScopeSelectChange">
|
|
||||||
<el-option
|
|
||||||
v-for="item in dataScopeOptions"
|
|
||||||
:key="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.value"
|
|
||||||
></el-option>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="数据权限" v-show="form.dataScope == 2">
|
|
||||||
<el-checkbox v-model="deptExpand" @change="handleCheckedTreeExpand($event, 'dept')">展开/折叠</el-checkbox>
|
|
||||||
<el-checkbox v-model="deptNodeAll" @change="handleCheckedTreeNodeAll($event, 'dept')">全选/全不选</el-checkbox>
|
|
||||||
<el-checkbox v-model="form.deptCheckStrictly" @change="handleCheckedTreeConnect($event, 'dept')">父子联动</el-checkbox>
|
|
||||||
<el-tree
|
|
||||||
class="tree-border"
|
|
||||||
:data="deptOptions"
|
|
||||||
show-checkbox
|
|
||||||
default-expand-all
|
|
||||||
ref="deptRef"
|
|
||||||
node-key="id"
|
|
||||||
:check-strictly="!form.deptCheckStrictly"
|
|
||||||
empty-text="加载中,请稍候"
|
|
||||||
:props="{ label: 'label', children: 'children' }"
|
|
||||||
></el-tree>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
<template #footer>
|
|
||||||
<div class="dialog-footer">
|
|
||||||
<el-button type="primary" @click="submitDataScope">确 定</el-button>
|
|
||||||
<el-button @click="cancelDataScope">取 消</el-button>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-dialog>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup name="Role">
|
<script setup name="Role">
|
||||||
@ -324,7 +251,7 @@ function handleDelete(row) {
|
|||||||
}).then(() => {
|
}).then(() => {
|
||||||
getList();
|
getList();
|
||||||
proxy.$modal.msgSuccess("删除成功");
|
proxy.$modal.msgSuccess("删除成功");
|
||||||
}).catch(() => {});
|
}).catch(() => { });
|
||||||
}
|
}
|
||||||
/** 导出按钮操作 */
|
/** 导出按钮操作 */
|
||||||
function handleExport() {
|
function handleExport() {
|
||||||
|
|||||||
@ -1,241 +1,240 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<!--部门数据-->
|
<!--部门数据-->
|
||||||
<el-col :span="4" :xs="24">
|
<el-col :span="4" :xs="24">
|
||||||
<div class="head-container">
|
<div class="head-container">
|
||||||
<el-input v-model="deptName" placeholder="请输入部门名称" clearable prefix-icon="Search"
|
<el-input v-model="deptName" placeholder="请输入部门名称" clearable prefix-icon="Search"
|
||||||
style="margin-bottom: 20px" />
|
style="margin-bottom: 20px" />
|
||||||
</div>
|
</div>
|
||||||
<div class="head-container">
|
<div class="head-container">
|
||||||
<el-tree :data="deptOptions" :props="{ label: 'label', children: 'children' }"
|
<el-tree :data="deptOptions" :props="{ label: 'label', children: 'children' }" :expand-on-click-node="false"
|
||||||
:expand-on-click-node="false" :filter-node-method="filterNode" ref="deptTreeRef" node-key="id"
|
:filter-node-method="filterNode" ref="deptTreeRef" node-key="id" highlight-current default-expand-all
|
||||||
highlight-current default-expand-all @node-click="handleNodeClick" />
|
@node-click="handleNodeClick" />
|
||||||
</div>
|
</div>
|
||||||
</el-col>
|
</el-col>
|
||||||
<!--用户数据-->
|
<!--用户数据-->
|
||||||
<el-col :span="20" :xs="24">
|
<el-col :span="20" :xs="24">
|
||||||
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
|
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch">
|
||||||
<el-form-item label="用户名称" prop="userName">
|
<el-form-item label="用户名称" prop="userName">
|
||||||
<el-input v-model="queryParams.userName" placeholder="请输入用户名称" clearable style="width: 240px"
|
<el-input v-model="queryParams.userName" placeholder="请输入用户名称" clearable style="width: 240px"
|
||||||
@keyup.enter="handleQuery" />
|
@keyup.enter="handleQuery" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="手机号码" prop="phonenumber">
|
<el-form-item label="手机号码" prop="phonenumber">
|
||||||
<el-input v-model="queryParams.phonenumber" placeholder="请输入手机号码" clearable style="width: 240px"
|
<el-input v-model="queryParams.phonenumber" placeholder="请输入手机号码" clearable style="width: 240px"
|
||||||
@keyup.enter="handleQuery" />
|
@keyup.enter="handleQuery" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="状态" prop="status">
|
<el-form-item label="状态" prop="status">
|
||||||
<el-select v-model="queryParams.status" placeholder="用户状态" clearable style="width: 240px">
|
<el-select v-model="queryParams.status" placeholder="用户状态" clearable style="width: 240px">
|
||||||
<el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label"
|
<el-option v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||||
:value="dict.value" />
|
</el-select>
|
||||||
</el-select>
|
</el-form-item>
|
||||||
</el-form-item>
|
<el-form-item label="创建时间" style="width: 308px;">
|
||||||
<el-form-item label="创建时间" style="width: 308px;">
|
<el-date-picker v-model="dateRange" value-format="YYYY-MM-DD" type="daterange" range-separator="-"
|
||||||
<el-date-picker v-model="dateRange" value-format="YYYY-MM-DD" type="daterange" range-separator="-"
|
start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
|
||||||
start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
|
</el-form-item>
|
||||||
</el-form-item>
|
<el-form-item>
|
||||||
<el-form-item>
|
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
||||||
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
|
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
||||||
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
|
</el-form-item>
|
||||||
</el-form-item>
|
</el-form>
|
||||||
</el-form>
|
|
||||||
|
|
||||||
<el-row :gutter="10" class="mb8">
|
<el-row :gutter="10" class="mb8">
|
||||||
<el-col :span="1.5">
|
<el-col :span="1.5">
|
||||||
<el-button type="primary" plain icon="Plus" @click="handleAdd"
|
<el-button type="primary" plain icon="Plus" @click="handleAdd"
|
||||||
v-hasPermi="['system:user:add']">新增</el-button>
|
v-hasPermi="['system:user:add']">新增</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="1.5">
|
<el-col :span="1.5">
|
||||||
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
|
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"
|
||||||
v-hasPermi="['system:user:edit']">修改</el-button>
|
v-hasPermi="['system:user:edit']">修改</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="1.5">
|
<el-col :span="1.5">
|
||||||
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
|
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"
|
||||||
v-hasPermi="['system:user:remove']">删除</el-button>
|
v-hasPermi="['system:user:remove']">删除</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="1.5">
|
<el-col :span="1.5">
|
||||||
<el-button type="info" plain icon="Upload" @click="handleImport"
|
<el-button type="info" plain icon="Upload" @click="handleImport"
|
||||||
v-hasPermi="['system:user:import']">excel导入</el-button>
|
v-hasPermi="['system:user:import']">excel导入</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="1.5">
|
<el-col :span="1.5">
|
||||||
<el-button type="info" plain icon="Upload" @click="handleImportFromLis"
|
<el-button type="info" plain icon="Upload" @click="handleImportFromLis"
|
||||||
v-hasPermi="['system:user:import']">老lis导入</el-button>
|
v-hasPermi="['system:user:import']">老lis导入</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="1.5">
|
<el-col :span="1.5">
|
||||||
<el-button type="warning" plain icon="Download" @click="handleExport"
|
<el-button type="warning" plain icon="Download" @click="handleExport"
|
||||||
v-hasPermi="['system:user:export']">导出</el-button>
|
v-hasPermi="['system:user:export']">导出</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
|
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
|
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange"
|
||||||
<el-table-column type="selection" width="50" align="center" />
|
height="calc(100vh - 300px)">
|
||||||
<el-table-column label="用户编号" align="center" key="userId" prop="userId" v-if="columns[0].visible" />
|
<el-table-column type="selection" width="50" align="center" />
|
||||||
<el-table-column label="用户名称" align="center" key="userName" prop="userName" v-if="columns[1].visible"
|
<el-table-column label="用户编号" align="center" key="userId" prop="userId" v-if="columns[0].visible" />
|
||||||
:show-overflow-tooltip="true" />
|
<el-table-column label="用户名称" align="center" key="userName" prop="userName" v-if="columns[1].visible"
|
||||||
<el-table-column label="用户昵称" align="center" key="nickName" prop="nickName" v-if="columns[2].visible"
|
:show-overflow-tooltip="true" />
|
||||||
:show-overflow-tooltip="true" />
|
<el-table-column label="用户昵称" align="center" key="nickName" prop="nickName" v-if="columns[2].visible"
|
||||||
<el-table-column label="部门" align="center" key="deptName" prop="dept.deptName" v-if="columns[3].visible"
|
:show-overflow-tooltip="true" />
|
||||||
:show-overflow-tooltip="true" />
|
<el-table-column label="部门" align="center" key="deptName" prop="dept.deptName" v-if="columns[3].visible"
|
||||||
<el-table-column label="手机号码" align="center" key="phonenumber" prop="phonenumber"
|
:show-overflow-tooltip="true" />
|
||||||
v-if="columns[4].visible" width="120" />
|
<el-table-column label="手机号码" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible"
|
||||||
<el-table-column label="状态" align="center" key="status" v-if="columns[5].visible">
|
width="120" />
|
||||||
<template #default="scope">
|
<el-table-column label="状态" align="center" key="status" v-if="columns[5].visible">
|
||||||
<el-switch v-model="scope.row.status" active-value="0" inactive-value="1"
|
<template #default="scope">
|
||||||
@change="handleStatusChange(scope.row)"></el-switch>
|
<el-switch v-model="scope.row.status" active-value="0" inactive-value="1"
|
||||||
</template>
|
@change="handleStatusChange(scope.row)"></el-switch>
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[6].visible" width="160">
|
|
||||||
<template #default="scope">
|
|
||||||
<span>{{ parseTime(scope.row.createTime) }}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width">
|
|
||||||
<template #default="scope">
|
|
||||||
<el-tooltip content="修改" placement="top" v-if="scope.row.userId !== 1">
|
|
||||||
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
|
|
||||||
v-hasPermi="['system:user:edit']"></el-button>
|
|
||||||
</el-tooltip>
|
|
||||||
<el-tooltip content="删除" placement="top" v-if="scope.row.userId !== 1">
|
|
||||||
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
|
|
||||||
v-hasPermi="['system:user:remove']"></el-button>
|
|
||||||
</el-tooltip>
|
|
||||||
<el-tooltip content="重置密码" placement="top" v-if="scope.row.userId !== 1">
|
|
||||||
<el-button link type="primary" icon="Key" @click="handleResetPwd(scope.row)"
|
|
||||||
v-hasPermi="['system:user:resetPwd']"></el-button>
|
|
||||||
</el-tooltip>
|
|
||||||
<el-tooltip content="分配角色" placement="top" v-if="scope.row.userId !== 1">
|
|
||||||
<el-button link type="primary" icon="CircleCheck" @click="handleAuthRole(scope.row)"
|
|
||||||
v-hasPermi="['system:user:edit']"></el-button>
|
|
||||||
</el-tooltip>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
|
|
||||||
v-model:limit="queryParams.pageSize" @pagination="getList" />
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<!-- 添加或修改用户配置对话框 -->
|
|
||||||
<el-dialog :title="title" v-model="open" width="600px" append-to-body>
|
|
||||||
<el-form :model="form" :rules="rules" ref="userRef" label-width="80px">
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="用户昵称" prop="nickName">
|
|
||||||
<el-input v-model="form.nickName" placeholder="请输入用户昵称" maxlength="30" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="归属部门" prop="deptId">
|
|
||||||
<el-tree-select v-model="form.deptId" :data="deptOptions"
|
|
||||||
:props="{ value: 'id', label: 'label', children: 'children' }" value-key="id"
|
|
||||||
placeholder="请选择归属部门" check-strictly />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="手机号码" prop="phonenumber">
|
|
||||||
<el-input v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="邮箱" prop="email">
|
|
||||||
<el-input v-model="form.email" placeholder="请输入邮箱" maxlength="50" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item v-if="form.userId == undefined" label="用户名称" prop="userName">
|
|
||||||
<el-input v-model="form.userName" placeholder="请输入用户名称" maxlength="30" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item v-if="form.userId == undefined" label="用户密码" prop="password">
|
|
||||||
<el-input v-model="form.password" placeholder="请输入用户密码" type="password" maxlength="20"
|
|
||||||
show-password />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="用户性别">
|
|
||||||
<el-select v-model="form.sex" placeholder="请选择">
|
|
||||||
<el-option v-for="dict in sys_user_sex" :key="dict.value" :label="dict.label"
|
|
||||||
:value="dict.value"></el-option>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="状态">
|
|
||||||
<el-radio-group v-model="form.status">
|
|
||||||
<el-radio v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.value">{{ dict.label
|
|
||||||
}}</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="岗位">
|
|
||||||
<el-select v-model="form.postIds" multiple placeholder="请选择">
|
|
||||||
<el-option v-for="item in postOptions" :key="item.postId" :label="item.postName"
|
|
||||||
:value="item.postId" :disabled="item.status == 1"></el-option>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="角色">
|
|
||||||
<el-select v-model="form.roleIds" multiple placeholder="请选择">
|
|
||||||
<el-option v-for="item in roleOptions" :key="item.roleId" :label="item.roleName"
|
|
||||||
:value="item.roleId" :disabled="item.status == 1"></el-option>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item label="备注">
|
|
||||||
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</el-form>
|
|
||||||
<template #footer>
|
|
||||||
<div class="dialog-footer">
|
|
||||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
|
||||||
<el-button @click="cancel">取 消</el-button>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-dialog>
|
|
||||||
|
|
||||||
<!-- 用户导入对话框 -->
|
|
||||||
<el-dialog :title="upload.title" v-model="upload.open" width="400px" append-to-body>
|
|
||||||
<el-upload ref="uploadRef" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
|
|
||||||
:action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
|
|
||||||
:on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
|
|
||||||
<el-icon class="el-icon--upload"><upload-filled /></el-icon>
|
|
||||||
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
|
||||||
<template #tip>
|
|
||||||
<div class="el-upload__tip text-center">
|
|
||||||
<div class="el-upload__tip">
|
|
||||||
<el-checkbox v-model="upload.updateSupport" />是否更新已经存在的用户数据
|
|
||||||
</div>
|
|
||||||
<span>仅允许导入xls、xlsx格式文件。</span>
|
|
||||||
<el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;"
|
|
||||||
@click="importTemplate">下载模板</el-link>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
</el-upload>
|
</el-table-column>
|
||||||
<template #footer>
|
<el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[6].visible" width="160">
|
||||||
<div class="dialog-footer">
|
<template #default="scope">
|
||||||
<el-button type="primary" @click="submitFileForm">确 定</el-button>
|
<span>{{ parseTime(scope.row.createTime) }}</span>
|
||||||
<el-button @click="upload.open = false">取 消</el-button>
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-tooltip content="修改" placement="top" v-if="scope.row.userId !== 1">
|
||||||
|
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
|
||||||
|
v-hasPermi="['system:user:edit']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="删除" placement="top" v-if="scope.row.userId !== 1">
|
||||||
|
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
|
||||||
|
v-hasPermi="['system:user:remove']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="重置密码" placement="top" v-if="scope.row.userId !== 1">
|
||||||
|
<el-button link type="primary" icon="Key" @click="handleResetPwd(scope.row)"
|
||||||
|
v-hasPermi="['system:user:resetPwd']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-tooltip content="分配角色" placement="top" v-if="scope.row.userId !== 1">
|
||||||
|
<el-button link type="primary" icon="CircleCheck" @click="handleAuthRole(scope.row)"
|
||||||
|
v-hasPermi="['system:user:edit']"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
|
||||||
|
v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<!-- 添加或修改用户配置对话框 -->
|
||||||
|
<el-dialog :title="title" v-model="open" width="600px" append-to-body>
|
||||||
|
<el-form :model="form" :rules="rules" ref="userRef" label-width="80px">
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="用户昵称" prop="nickName">
|
||||||
|
<el-input v-model="form.nickName" placeholder="请输入用户昵称" maxlength="30" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="归属部门" prop="deptId">
|
||||||
|
<el-tree-select v-model="form.deptId" :data="deptOptions"
|
||||||
|
:props="{ value: 'id', label: 'label', children: 'children' }" value-key="id" placeholder="请选择归属部门"
|
||||||
|
check-strictly />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="手机号码" prop="phonenumber">
|
||||||
|
<el-input v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="邮箱" prop="email">
|
||||||
|
<el-input v-model="form.email" placeholder="请输入邮箱" maxlength="50" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item v-if="form.userId == undefined" label="用户名称" prop="userName">
|
||||||
|
<el-input v-model="form.userName" placeholder="请输入用户名称" maxlength="30" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item v-if="form.userId == undefined" label="用户密码" prop="password">
|
||||||
|
<el-input v-model="form.password" placeholder="请输入用户密码" type="password" maxlength="20" show-password />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="用户性别">
|
||||||
|
<el-select v-model="form.sex" placeholder="请选择">
|
||||||
|
<el-option v-for="dict in sys_user_sex" :key="dict.value" :label="dict.label"
|
||||||
|
:value="dict.value"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="状态">
|
||||||
|
<el-radio-group v-model="form.status">
|
||||||
|
<el-radio v-for="dict in sys_normal_disable" :key="dict.value" :label="dict.value">{{ dict.label
|
||||||
|
}}</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="岗位">
|
||||||
|
<el-select v-model="form.postIds" multiple placeholder="请选择">
|
||||||
|
<el-option v-for="item in postOptions" :key="item.postId" :label="item.postName" :value="item.postId"
|
||||||
|
:disabled="item.status == 1"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="角色">
|
||||||
|
<el-select v-model="form.roleIds" multiple placeholder="请选择">
|
||||||
|
<el-option v-for="item in roleOptions" :key="item.roleId" :label="item.roleName" :value="item.roleId"
|
||||||
|
:disabled="item.status == 1"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="备注">
|
||||||
|
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-form>
|
||||||
|
<template #footer>
|
||||||
|
<div class="dialog-footer">
|
||||||
|
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||||
|
<el-button @click="cancel">取 消</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
|
||||||
|
<!-- 用户导入对话框 -->
|
||||||
|
<el-dialog :title="upload.title" v-model="upload.open" width="400px" append-to-body>
|
||||||
|
<el-upload ref="uploadRef" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
|
||||||
|
:action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
|
||||||
|
:on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
|
||||||
|
<el-icon class="el-icon--upload"><upload-filled /></el-icon>
|
||||||
|
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
||||||
|
<template #tip>
|
||||||
|
<div class="el-upload__tip text-center">
|
||||||
|
<div class="el-upload__tip">
|
||||||
|
<el-checkbox v-model="upload.updateSupport" />是否更新已经存在的用户数据
|
||||||
</div>
|
</div>
|
||||||
</template>
|
<span>仅允许导入xls、xlsx格式文件。</span>
|
||||||
</el-dialog>
|
<el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;"
|
||||||
</div>
|
@click="importTemplate">下载模板</el-link>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-upload>
|
||||||
|
<template #footer>
|
||||||
|
<div class="dialog-footer">
|
||||||
|
<el-button type="primary" @click="submitFileForm">确 定</el-button>
|
||||||
|
<el-button @click="upload.open = false">取 消</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup name="User">
|
<script setup name="User">
|
||||||
@ -264,266 +263,266 @@ const postOptions = ref([]);
|
|||||||
const roleOptions = ref([]);
|
const roleOptions = ref([]);
|
||||||
/*** 用户导入参数 */
|
/*** 用户导入参数 */
|
||||||
const upload = reactive({
|
const upload = reactive({
|
||||||
// 是否显示弹出层(用户导入)
|
// 是否显示弹出层(用户导入)
|
||||||
open: false,
|
open: false,
|
||||||
// 弹出层标题(用户导入)
|
// 弹出层标题(用户导入)
|
||||||
title: "",
|
title: "",
|
||||||
// 是否禁用上传
|
// 是否禁用上传
|
||||||
isUploading: false,
|
isUploading: false,
|
||||||
// 是否更新已经存在的用户数据
|
// 是否更新已经存在的用户数据
|
||||||
updateSupport: 0,
|
updateSupport: 0,
|
||||||
// 设置上传的请求头部
|
// 设置上传的请求头部
|
||||||
headers: { Authorization: "Bearer " + getToken() },
|
headers: { Authorization: "Bearer " + getToken() },
|
||||||
// 上传的地址
|
// 上传的地址
|
||||||
url: import.meta.env.VITE_APP_BASE_API + "/system/user/importData"
|
url: import.meta.env.VITE_APP_BASE_API + "/system/user/importData"
|
||||||
});
|
});
|
||||||
// 列显隐信息
|
// 列显隐信息
|
||||||
const columns = ref([
|
const columns = ref([
|
||||||
{ key: 0, label: `用户编号`, visible: true },
|
{ key: 0, label: `用户编号`, visible: true },
|
||||||
{ key: 1, label: `用户名称`, visible: true },
|
{ key: 1, label: `用户名称`, visible: true },
|
||||||
{ key: 2, label: `用户昵称`, visible: true },
|
{ key: 2, label: `用户昵称`, visible: true },
|
||||||
{ key: 3, label: `部门`, visible: true },
|
{ key: 3, label: `部门`, visible: true },
|
||||||
{ key: 4, label: `手机号码`, visible: true },
|
{ key: 4, label: `手机号码`, visible: true },
|
||||||
{ key: 5, label: `状态`, visible: true },
|
{ key: 5, label: `状态`, visible: true },
|
||||||
{ key: 6, label: `创建时间`, visible: true }
|
{ key: 6, label: `创建时间`, visible: true }
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const data = reactive({
|
const data = reactive({
|
||||||
form: {},
|
form: {},
|
||||||
queryParams: {
|
queryParams: {
|
||||||
pageNum: 1,
|
pageNum: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
userName: undefined,
|
userName: undefined,
|
||||||
phonenumber: undefined,
|
phonenumber: undefined,
|
||||||
status: undefined,
|
status: undefined,
|
||||||
deptId: undefined
|
deptId: undefined
|
||||||
},
|
},
|
||||||
rules: {
|
rules: {
|
||||||
userName: [{ required: true, message: "用户名称不能为空", trigger: "blur" }, { min: 2, max: 20, message: "用户名称长度必须介于 2 和 20 之间", trigger: "blur" }],
|
userName: [{ required: true, message: "用户名称不能为空", trigger: "blur" }, { min: 2, max: 20, message: "用户名称长度必须介于 2 和 20 之间", trigger: "blur" }],
|
||||||
nickName: [{ required: true, message: "用户昵称不能为空", trigger: "blur" }],
|
nickName: [{ required: true, message: "用户昵称不能为空", trigger: "blur" }],
|
||||||
password: [{ required: true, message: "用户密码不能为空", trigger: "blur" }, { min: 5, max: 20, message: "用户密码长度必须介于 5 和 20 之间", trigger: "blur" }],
|
password: [{ required: true, message: "用户密码不能为空", trigger: "blur" }, { min: 5, max: 20, message: "用户密码长度必须介于 5 和 20 之间", trigger: "blur" }],
|
||||||
email: [{ type: "email", message: "请输入正确的邮箱地址", trigger: ["blur", "change"] }],
|
email: [{ type: "email", message: "请输入正确的邮箱地址", trigger: ["blur", "change"] }],
|
||||||
phonenumber: [{ pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "请输入正确的手机号码", trigger: "blur" }]
|
phonenumber: [{ pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "请输入正确的手机号码", trigger: "blur" }]
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const { queryParams, form, rules } = toRefs(data);
|
const { queryParams, form, rules } = toRefs(data);
|
||||||
|
|
||||||
/** 通过条件过滤节点 */
|
/** 通过条件过滤节点 */
|
||||||
const filterNode = (value, data) => {
|
const filterNode = (value, data) => {
|
||||||
if (!value) return true;
|
if (!value) return true;
|
||||||
return data.label.indexOf(value) !== -1;
|
return data.label.indexOf(value) !== -1;
|
||||||
};
|
};
|
||||||
/** 根据名称筛选部门树 */
|
/** 根据名称筛选部门树 */
|
||||||
watch(deptName, val => {
|
watch(deptName, val => {
|
||||||
proxy.$refs["deptTreeRef"].filter(val);
|
proxy.$refs["deptTreeRef"].filter(val);
|
||||||
});
|
});
|
||||||
/** 查询部门下拉树结构 */
|
/** 查询部门下拉树结构 */
|
||||||
function getDeptTree() {
|
function getDeptTree() {
|
||||||
deptTreeSelect().then(response => {
|
deptTreeSelect().then(response => {
|
||||||
deptOptions.value = response.data;
|
deptOptions.value = response.data;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
/** 查询用户列表 */
|
/** 查询用户列表 */
|
||||||
function getList() {
|
function getList() {
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
listUser(proxy.addDateRange(queryParams.value, dateRange.value)).then(res => {
|
listUser(proxy.addDateRange(queryParams.value, dateRange.value)).then(res => {
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
userList.value = res.rows;
|
userList.value = res.rows;
|
||||||
total.value = res.total;
|
total.value = res.total;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
/** 节点单击事件 */
|
/** 节点单击事件 */
|
||||||
function handleNodeClick(data) {
|
function handleNodeClick(data) {
|
||||||
queryParams.value.deptId = data.id;
|
queryParams.value.deptId = data.id;
|
||||||
handleQuery();
|
handleQuery();
|
||||||
};
|
};
|
||||||
/** 搜索按钮操作 */
|
/** 搜索按钮操作 */
|
||||||
function handleQuery() {
|
function handleQuery() {
|
||||||
queryParams.value.pageNum = 1;
|
queryParams.value.pageNum = 1;
|
||||||
getList();
|
getList();
|
||||||
};
|
};
|
||||||
/** 重置按钮操作 */
|
/** 重置按钮操作 */
|
||||||
function resetQuery() {
|
function resetQuery() {
|
||||||
dateRange.value = [];
|
dateRange.value = [];
|
||||||
proxy.resetForm("queryRef");
|
proxy.resetForm("queryRef");
|
||||||
queryParams.value.deptId = undefined;
|
queryParams.value.deptId = undefined;
|
||||||
proxy.$refs.deptTreeRef.setCurrentKey(null);
|
proxy.$refs.deptTreeRef.setCurrentKey(null);
|
||||||
handleQuery();
|
handleQuery();
|
||||||
};
|
};
|
||||||
/** 删除按钮操作 */
|
/** 删除按钮操作 */
|
||||||
function handleDelete(row) {
|
function handleDelete(row) {
|
||||||
const userIds = row.userId || ids.value;
|
const userIds = row.userId || ids.value;
|
||||||
proxy.$modal.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?').then(function () {
|
proxy.$modal.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?').then(function () {
|
||||||
return delUser(userIds);
|
return delUser(userIds);
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
getList();
|
getList();
|
||||||
proxy.$modal.msgSuccess("删除成功");
|
proxy.$modal.msgSuccess("删除成功");
|
||||||
}).catch(() => { });
|
}).catch(() => { });
|
||||||
};
|
};
|
||||||
/** 导出按钮操作 */
|
/** 导出按钮操作 */
|
||||||
function handleExport() {
|
function handleExport() {
|
||||||
proxy.download("system/user/export", {
|
proxy.download("system/user/export", {
|
||||||
...queryParams.value,
|
...queryParams.value,
|
||||||
}, `user_${new Date().getTime()}.xlsx`);
|
}, `user_${new Date().getTime()}.xlsx`);
|
||||||
};
|
};
|
||||||
/** 用户状态修改 */
|
/** 用户状态修改 */
|
||||||
function handleStatusChange(row) {
|
function handleStatusChange(row) {
|
||||||
let text = row.status === "0" ? "启用" : "停用";
|
let text = row.status === "0" ? "启用" : "停用";
|
||||||
proxy.$modal.confirm('确认要"' + text + '""' + row.userName + '"用户吗?').then(function () {
|
proxy.$modal.confirm('确认要"' + text + '""' + row.userName + '"用户吗?').then(function () {
|
||||||
return changeUserStatus(row.userId, row.status);
|
return changeUserStatus(row.userId, row.status);
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
proxy.$modal.msgSuccess(text + "成功");
|
proxy.$modal.msgSuccess(text + "成功");
|
||||||
}).catch(function () {
|
}).catch(function () {
|
||||||
row.status = row.status === "0" ? "1" : "0";
|
row.status = row.status === "0" ? "1" : "0";
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
/** 更多操作 */
|
/** 更多操作 */
|
||||||
function handleCommand(command, row) {
|
function handleCommand(command, row) {
|
||||||
switch (command) {
|
switch (command) {
|
||||||
case "handleResetPwd":
|
case "handleResetPwd":
|
||||||
handleResetPwd(row);
|
handleResetPwd(row);
|
||||||
break;
|
break;
|
||||||
case "handleAuthRole":
|
case "handleAuthRole":
|
||||||
handleAuthRole(row);
|
handleAuthRole(row);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
/** 跳转角色分配 */
|
/** 跳转角色分配 */
|
||||||
function handleAuthRole(row) {
|
function handleAuthRole(row) {
|
||||||
const userId = row.userId;
|
const userId = row.userId;
|
||||||
router.push("/system/user-auth/role/" + userId);
|
router.push("/system/user-auth/role/" + userId);
|
||||||
};
|
};
|
||||||
/** 重置密码按钮操作 */
|
/** 重置密码按钮操作 */
|
||||||
function handleResetPwd(row) {
|
function handleResetPwd(row) {
|
||||||
proxy.$prompt('请输入"' + row.userName + '"的新密码', "提示", {
|
proxy.$prompt('请输入"' + row.userName + '"的新密码', "提示", {
|
||||||
confirmButtonText: "确定",
|
confirmButtonText: "确定",
|
||||||
cancelButtonText: "取消",
|
cancelButtonText: "取消",
|
||||||
closeOnClickModal: false,
|
closeOnClickModal: false,
|
||||||
inputPattern: /^.{5,20}$/,
|
inputPattern: /^.{5,20}$/,
|
||||||
inputErrorMessage: "用户密码长度必须介于 5 和 20 之间",
|
inputErrorMessage: "用户密码长度必须介于 5 和 20 之间",
|
||||||
}).then(({ value }) => {
|
}).then(({ value }) => {
|
||||||
resetUserPwd(row.userId, value).then(response => {
|
resetUserPwd(row.userId, value).then(response => {
|
||||||
proxy.$modal.msgSuccess("修改成功,新密码是:" + value);
|
proxy.$modal.msgSuccess("修改成功,新密码是:" + value);
|
||||||
});
|
});
|
||||||
}).catch(() => { });
|
}).catch(() => { });
|
||||||
};
|
};
|
||||||
/** 选择条数 */
|
/** 选择条数 */
|
||||||
function handleSelectionChange(selection) {
|
function handleSelectionChange(selection) {
|
||||||
ids.value = selection.map(item => item.userId);
|
ids.value = selection.map(item => item.userId);
|
||||||
single.value = selection.length != 1;
|
single.value = selection.length != 1;
|
||||||
multiple.value = !selection.length;
|
multiple.value = !selection.length;
|
||||||
};
|
};
|
||||||
/** 导入按钮操作 */
|
/** 导入按钮操作 */
|
||||||
function handleImport() {
|
function handleImport() {
|
||||||
upload.title = "用户导入";
|
upload.title = "用户导入";
|
||||||
upload.open = true;
|
upload.open = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
//从老的lis系统导入用户
|
//从老的lis系统导入用户
|
||||||
async function handleImportFromLis() {
|
async function handleImportFromLis() {
|
||||||
const isConfirmed = await deleteConfirm('是否导入老lis数据?', { title: '导入数据', type: 'warning', confirmButtonText: '确认导入' })
|
const isConfirmed = await deleteConfirm('是否导入老lis数据?', { title: '导入数据', type: 'warning', confirmButtonText: '确认导入' })
|
||||||
if (isConfirmed) {
|
if (isConfirmed) {
|
||||||
loading.value = true
|
loading.value = true
|
||||||
await importFromLis().then(response => {
|
await importFromLis().then(response => {
|
||||||
proxy.$modal.msgSuccess("导入成功");
|
proxy.$modal.msgSuccess("导入成功");
|
||||||
getList();
|
getList();
|
||||||
});
|
});
|
||||||
loading.value = false
|
loading.value = false
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
/** 下载模板操作 */
|
/** 下载模板操作 */
|
||||||
function importTemplate() {
|
function importTemplate() {
|
||||||
proxy.download("system/user/importTemplate", {
|
proxy.download("system/user/importTemplate", {
|
||||||
}, `user_template_${new Date().getTime()}.xlsx`);
|
}, `user_template_${new Date().getTime()}.xlsx`);
|
||||||
};
|
};
|
||||||
/**文件上传中处理 */
|
/**文件上传中处理 */
|
||||||
const handleFileUploadProgress = (event, file, fileList) => {
|
const handleFileUploadProgress = (event, file, fileList) => {
|
||||||
upload.isUploading = true;
|
upload.isUploading = true;
|
||||||
};
|
};
|
||||||
/** 文件上传成功处理 */
|
/** 文件上传成功处理 */
|
||||||
const handleFileSuccess = (response, file, fileList) => {
|
const handleFileSuccess = (response, file, fileList) => {
|
||||||
upload.open = false;
|
upload.open = false;
|
||||||
upload.isUploading = false;
|
upload.isUploading = false;
|
||||||
proxy.$refs["uploadRef"].handleRemove(file);
|
proxy.$refs["uploadRef"].handleRemove(file);
|
||||||
proxy.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
|
proxy.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
|
||||||
getList();
|
getList();
|
||||||
};
|
};
|
||||||
/** 提交上传文件 */
|
/** 提交上传文件 */
|
||||||
function submitFileForm() {
|
function submitFileForm() {
|
||||||
proxy.$refs["uploadRef"].submit();
|
proxy.$refs["uploadRef"].submit();
|
||||||
};
|
};
|
||||||
/** 重置操作表单 */
|
/** 重置操作表单 */
|
||||||
function reset() {
|
function reset() {
|
||||||
form.value = {
|
form.value = {
|
||||||
userId: undefined,
|
userId: undefined,
|
||||||
deptId: undefined,
|
deptId: undefined,
|
||||||
userName: undefined,
|
userName: undefined,
|
||||||
nickName: undefined,
|
nickName: undefined,
|
||||||
password: undefined,
|
password: undefined,
|
||||||
phonenumber: undefined,
|
phonenumber: undefined,
|
||||||
email: undefined,
|
email: undefined,
|
||||||
sex: undefined,
|
sex: undefined,
|
||||||
status: "0",
|
status: "0",
|
||||||
remark: undefined,
|
remark: undefined,
|
||||||
postIds: [],
|
postIds: [],
|
||||||
roleIds: []
|
roleIds: []
|
||||||
};
|
};
|
||||||
proxy.resetForm("userRef");
|
proxy.resetForm("userRef");
|
||||||
};
|
};
|
||||||
/** 取消按钮 */
|
/** 取消按钮 */
|
||||||
function cancel() {
|
function cancel() {
|
||||||
open.value = false;
|
open.value = false;
|
||||||
reset();
|
reset();
|
||||||
};
|
};
|
||||||
/** 新增按钮操作 */
|
/** 新增按钮操作 */
|
||||||
function handleAdd() {
|
function handleAdd() {
|
||||||
reset();
|
reset();
|
||||||
getUser().then(response => {
|
getUser().then(response => {
|
||||||
postOptions.value = response.posts;
|
postOptions.value = response.posts;
|
||||||
roleOptions.value = response.roles;
|
roleOptions.value = response.roles;
|
||||||
open.value = true;
|
open.value = true;
|
||||||
title.value = "添加用户";
|
title.value = "添加用户";
|
||||||
form.value.password = initPassword.value;
|
form.value.password = initPassword.value;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
/** 修改按钮操作 */
|
/** 修改按钮操作 */
|
||||||
function handleUpdate(row) {
|
function handleUpdate(row) {
|
||||||
reset();
|
reset();
|
||||||
const userId = row.userId || ids.value;
|
const userId = row.userId || ids.value;
|
||||||
getUser(userId).then(response => {
|
getUser(userId).then(response => {
|
||||||
form.value = response.data;
|
form.value = response.data;
|
||||||
postOptions.value = response.posts;
|
postOptions.value = response.posts;
|
||||||
roleOptions.value = response.roles;
|
roleOptions.value = response.roles;
|
||||||
form.value.postIds = response.postIds;
|
form.value.postIds = response.postIds;
|
||||||
form.value.roleIds = response.roleIds;
|
form.value.roleIds = response.roleIds;
|
||||||
open.value = true;
|
open.value = true;
|
||||||
title.value = "修改用户";
|
title.value = "修改用户";
|
||||||
form.password = "";
|
form.password = "";
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
/** 提交按钮 */
|
/** 提交按钮 */
|
||||||
function submitForm() {
|
function submitForm() {
|
||||||
proxy.$refs["userRef"].validate(valid => {
|
proxy.$refs["userRef"].validate(valid => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
if (form.value.userId != undefined) {
|
if (form.value.userId != undefined) {
|
||||||
updateUser(form.value).then(response => {
|
updateUser(form.value).then(response => {
|
||||||
proxy.$modal.msgSuccess("修改成功");
|
proxy.$modal.msgSuccess("修改成功");
|
||||||
open.value = false;
|
open.value = false;
|
||||||
getList();
|
getList();
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
addUser(form.value).then(response => {
|
addUser(form.value).then(response => {
|
||||||
proxy.$modal.msgSuccess("新增成功");
|
proxy.$modal.msgSuccess("新增成功");
|
||||||
open.value = false;
|
open.value = false;
|
||||||
getList();
|
getList();
|
||||||
});
|
});
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
getDeptTree();
|
getDeptTree();
|
||||||
@ -533,10 +532,10 @@ getList();
|
|||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.el-form--inline .el-form-item {
|
.el-form--inline .el-form-item {
|
||||||
margin-right: 12px;
|
margin-right: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.el-form-item--default {
|
.el-form-item--default {
|
||||||
margin-bottom: 8px;
|
margin-bottom: 8px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
@ -4,10 +4,7 @@ import {
|
|||||||
} from 'vite'
|
} from 'vite'
|
||||||
import path from 'path'
|
import path from 'path'
|
||||||
import createVitePlugins from './vite/plugins'
|
import createVitePlugins from './vite/plugins'
|
||||||
import viteImagemin from 'vite-plugin-imagemin'
|
import.meta
|
||||||
import {
|
|
||||||
visualizer
|
|
||||||
} from 'rollup-plugin-visualizer'
|
|
||||||
|
|
||||||
// https://vitejs.dev/config/
|
// https://vitejs.dev/config/
|
||||||
export default defineConfig(({
|
export default defineConfig(({
|
||||||
@ -23,28 +20,7 @@ export default defineConfig(({
|
|||||||
// 默认情况下,vite 会假设你的应用是被部署在一个域名的根路径上
|
// 默认情况下,vite 会假设你的应用是被部署在一个域名的根路径上
|
||||||
// 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。
|
// 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。
|
||||||
base: VITE_APP_ENV === 'production' ? '/' : '/',
|
base: VITE_APP_ENV === 'production' ? '/' : '/',
|
||||||
plugins: [
|
plugins: createVitePlugins(env, command === 'build'),
|
||||||
createVitePlugins(env, command === 'build'),
|
|
||||||
// 图片压缩
|
|
||||||
VITE_APP_ENV === 'production' && viteImagemin({
|
|
||||||
gifsicle: {
|
|
||||||
optimizationLevel: 3
|
|
||||||
},
|
|
||||||
optipng: {
|
|
||||||
optimizationLevel: 7
|
|
||||||
},
|
|
||||||
mozjpeg: {
|
|
||||||
quality: 85
|
|
||||||
},
|
|
||||||
svgo: {
|
|
||||||
plugins: [{
|
|
||||||
removeViewBox: false
|
|
||||||
}, {
|
|
||||||
cleanupIDs: false
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
})
|
|
||||||
].filter(Boolean),
|
|
||||||
resolve: {
|
resolve: {
|
||||||
// https://cn.vitejs.dev/config/#resolve-alias
|
// https://cn.vitejs.dev/config/#resolve-alias
|
||||||
alias: {
|
alias: {
|
||||||
@ -92,54 +68,21 @@ export default defineConfig(({
|
|||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
// 新增build配置,用于生产环境移除console
|
||||||
build: {
|
build: {
|
||||||
minify: VITE_APP_ENV === 'production' ? 'terser' : 'esbuild',
|
// 只有生产环境才移除console
|
||||||
terserOptions: VITE_APP_ENV === 'production' ? {
|
minify: VITE_APP_ENV === 'production' ? 'esbuild' : 'terser',
|
||||||
compress: {
|
|
||||||
drop_console: true,
|
|
||||||
drop_debugger: true,
|
|
||||||
pure_funcs: ['console.log', 'console.warn'],
|
|
||||||
collapse_vars: true,
|
|
||||||
reduce_vars: true
|
|
||||||
},
|
|
||||||
format: {
|
|
||||||
comments: false
|
|
||||||
}
|
|
||||||
} : {},
|
|
||||||
esbuild: {
|
esbuild: {
|
||||||
|
// 生产环境下移除console和debugger
|
||||||
drop: VITE_APP_ENV === 'production' ? ['console', 'debugger'] : []
|
drop: VITE_APP_ENV === 'production' ? ['console', 'debugger'] : []
|
||||||
},
|
},
|
||||||
target: 'es2015',
|
target: 'es2015',
|
||||||
cssTarget: ['chrome64', 'firefox67', 'safari11.1', 'edge79'],
|
cssTarget: ['chrome64', 'firefox67', 'safari11.1', 'edge79'] // CSS兼容目标: ['chrome64', 'firefox67', 'safari11.1', 'edge79'] // CSS兼容目标
|
||||||
assetsInlineLimit: 4096,
|
|
||||||
chunkSizeWarningLimit: 500,
|
|
||||||
rollupOptions: {
|
|
||||||
output: {
|
|
||||||
manualChunks(id) {
|
|
||||||
if (id.includes('node_modules')) return 'vendor';
|
|
||||||
if (id.includes('src/components/common')) return 'common-components';
|
|
||||||
if (id.includes('src/utils')) return 'utils';
|
|
||||||
},
|
|
||||||
preload: false,
|
|
||||||
prefetch: false,
|
|
||||||
chunkFileNames: 'js/[name]-[hash].js',
|
|
||||||
entryFileNames: 'js/[name]-[hash].js',
|
|
||||||
assetFileNames: '[ext]/[name]-[hash].[ext]'
|
|
||||||
},
|
|
||||||
plugins: [
|
|
||||||
VITE_APP_ENV === 'production' && visualizer({
|
|
||||||
filename: './node_modules/.cache/visualizer/stats.html',
|
|
||||||
open: false,
|
|
||||||
gzipSize: true,
|
|
||||||
brotliSize: true
|
|
||||||
})
|
|
||||||
].filter(Boolean)
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
optimizeDeps: {
|
optimizeDeps: {
|
||||||
include: ['vue', 'axios'], // 仅预构建核心依赖
|
// include: ['jquery', 'select2', 'vue3-select2-component'],
|
||||||
exclude: ['sortablejs', 'jquery']
|
// exclude: ['sortablejs'] // 跳过 Vite 对 SortableJS 的预构建
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
})
|
})
|
||||||
Loading…
x
Reference in New Issue
Block a user