47 changed files with 2253 additions and 288 deletions
@ -0,0 +1,32 @@ |
|||||
|
import { ID, IDS, PageQuery, commonExport } from '@/api/base'; |
||||
|
import { defHttp } from '@/utils/http/axios'; |
||||
|
|
||||
|
enum Api { |
||||
|
root = '/workflow/leave', |
||||
|
list = '/workflow/leave/list', |
||||
|
export = '/workflow/leave/export', |
||||
|
} |
||||
|
|
||||
|
export function list(params?: PageQuery) { |
||||
|
return defHttp.get({ url: Api.list, params }); |
||||
|
} |
||||
|
|
||||
|
export function exportExcel(data: any) { |
||||
|
return commonExport(Api.export, data); |
||||
|
} |
||||
|
|
||||
|
export function getInfo(id: ID) { |
||||
|
return defHttp.get({ url: `${Api.root}/${id}` }); |
||||
|
} |
||||
|
|
||||
|
export function add(data: any) { |
||||
|
return defHttp.post({ url: Api.root, data }); |
||||
|
} |
||||
|
|
||||
|
export function update(data: any) { |
||||
|
return defHttp.put({ url: Api.root, data }); |
||||
|
} |
||||
|
|
||||
|
export function removeByIds(ids: IDS) { |
||||
|
return defHttp.deleteWithMsg({ url: `${Api.root}/${ids.join(',')}` }); |
||||
|
} |
@ -0,0 +1,54 @@ |
|||||
|
import { BasicColumn } from '@/components/Table'; |
||||
|
import { FormSchema } from '@/components/Form'; |
||||
|
|
||||
|
export const formSchemas: FormSchema[] = [ |
||||
|
{ |
||||
|
field: 'projectName', |
||||
|
label: '项目名称', |
||||
|
component: 'Select', |
||||
|
componentProps: { |
||||
|
options: [ |
||||
|
{ |
||||
|
value: '1', |
||||
|
label: '2323', |
||||
|
}, |
||||
|
{ |
||||
|
value: '2', |
||||
|
label: '2323', |
||||
|
}, |
||||
|
{ |
||||
|
value: '3', |
||||
|
label: '2323', |
||||
|
}, |
||||
|
], |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
field: 'time', |
||||
|
label: '时间', |
||||
|
component: 'DatePicker', |
||||
|
}, |
||||
|
]; |
||||
|
|
||||
|
export const columns: BasicColumn[] = [ |
||||
|
{ |
||||
|
title: '分控中心', |
||||
|
dataIndex: 'unit', |
||||
|
}, |
||||
|
{ |
||||
|
title: '点位总数', |
||||
|
dataIndex: 'pointSum', |
||||
|
}, |
||||
|
{ |
||||
|
title: '正常点位数', |
||||
|
dataIndex: 'normalNum', |
||||
|
}, |
||||
|
{ |
||||
|
title: '辖区完好率', |
||||
|
dataIndex: 'areaCompleteRate', |
||||
|
}, |
||||
|
{ |
||||
|
title: '运维单位完好率', |
||||
|
dataIndex: 'ioUnitCompleteRate', |
||||
|
}, |
||||
|
]; |
@ -0,0 +1,99 @@ |
|||||
|
<template> |
||||
|
<div> |
||||
|
<!-- 抽屉组件 --> |
||||
|
<a-drawer |
||||
|
title="详情" |
||||
|
placement="right" |
||||
|
:closable="true" |
||||
|
:open="visible" |
||||
|
@close="onClose" |
||||
|
width="600px" |
||||
|
> |
||||
|
<div ref="chartRef" style="width: 500px; height: 500px"></div> |
||||
|
</a-drawer> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { ref } from 'vue'; |
||||
|
import { useECharts } from '@/hooks/web/useECharts'; |
||||
|
// import { getInfo } from './api'; |
||||
|
|
||||
|
export default { |
||||
|
setup() { |
||||
|
//抽屉详情 |
||||
|
const chartRef = ref(); |
||||
|
|
||||
|
const { setOptions } = useECharts(chartRef); |
||||
|
const visible = ref(false); |
||||
|
const showDrawer = () => { |
||||
|
visible.value = true; |
||||
|
setOptions(options); |
||||
|
}; |
||||
|
// 关闭抽屉的方法 |
||||
|
const onClose = () => { |
||||
|
visible.value = false; |
||||
|
}; |
||||
|
const options = { |
||||
|
legend: { |
||||
|
data: ['正常点位', '损坏点位'], |
||||
|
}, |
||||
|
tooltip: { |
||||
|
trigger: 'axis', |
||||
|
axisPointer: { |
||||
|
type: 'shadow', |
||||
|
}, |
||||
|
}, |
||||
|
xAxis: { |
||||
|
type: 'category', |
||||
|
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], |
||||
|
}, |
||||
|
yAxis: { |
||||
|
type: 'value', |
||||
|
}, |
||||
|
series: [ |
||||
|
{ |
||||
|
name: '正常点位', |
||||
|
data: [150, 230, 224, 218, 135, 147, 260], |
||||
|
type: 'bar', |
||||
|
}, |
||||
|
{ |
||||
|
name: '损坏点位', |
||||
|
data: [2, 3, 4, 5, 6, 7, 2], |
||||
|
type: 'bar', |
||||
|
}, |
||||
|
], |
||||
|
}; |
||||
|
|
||||
|
return { |
||||
|
visible, |
||||
|
showDrawer, |
||||
|
onClose, |
||||
|
chartRef, |
||||
|
}; |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style scoped> |
||||
|
/* 可选样式调整 */ |
||||
|
.ant-btn { |
||||
|
margin: 20px; |
||||
|
} |
||||
|
|
||||
|
/* .singerDetail{ |
||||
|
margin-bottom: 10px; |
||||
|
} */ |
||||
|
div { |
||||
|
margin-bottom: 10px; |
||||
|
} |
||||
|
|
||||
|
.timeText { |
||||
|
margin: 0 0 40px 20px; |
||||
|
color: red; |
||||
|
} |
||||
|
|
||||
|
.titleLabel { |
||||
|
color: gray; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,62 @@ |
|||||
|
<template> |
||||
|
<PageWrapper dense> |
||||
|
<BasicTable @register="registerTable"> |
||||
|
<template #toolbar> |
||||
|
<a-button type="primary" @click="handleDetail">导出</a-button> |
||||
|
<a-button type="link" @click="handleDetail">详情</a-button> |
||||
|
</template> |
||||
|
<template #bodyCell="{ column, record }"> |
||||
|
<template v-if="column && record && column.key === 'action'"> |
||||
|
<a-button type="link" @click="handleDetail">详情</a-button> |
||||
|
</template> |
||||
|
</template> |
||||
|
</BasicTable> |
||||
|
<detailDrawer ref="detailDrawerRef" /> |
||||
|
</PageWrapper> |
||||
|
</template> |
||||
|
|
||||
|
<script setup lang="ts"> |
||||
|
import { PageWrapper } from '@/components/Page'; |
||||
|
import { BasicTable, useTable } from '@/components/Table'; |
||||
|
import { list } from './api'; |
||||
|
import { formSchemas, columns } from './data'; |
||||
|
import detailDrawer from './detailDrawer.vue'; |
||||
|
import { ref } from 'vue'; |
||||
|
|
||||
|
defineOptions({ name: 'Complete' }); |
||||
|
|
||||
|
const [registerTable] = useTable({ |
||||
|
rowSelection: { |
||||
|
type: 'checkbox', |
||||
|
}, |
||||
|
title: '完好率', |
||||
|
api: list, |
||||
|
showIndexColumn: true, |
||||
|
rowKey: 'id', |
||||
|
useSearchForm: true, |
||||
|
formConfig: { |
||||
|
schemas: formSchemas, |
||||
|
name: 'complete', |
||||
|
baseColProps: { |
||||
|
xs: 24, |
||||
|
sm: 24, |
||||
|
md: 24, |
||||
|
lg: 6, |
||||
|
}, |
||||
|
}, |
||||
|
columns: columns, |
||||
|
actionColumn: { |
||||
|
width: 200, |
||||
|
title: '操作', |
||||
|
key: 'action', |
||||
|
fixed: 'right', |
||||
|
}, |
||||
|
}); |
||||
|
//抽屉 |
||||
|
const detailDrawerRef = ref(); |
||||
|
const handleDetail = () => { |
||||
|
detailDrawerRef.value.showDrawer(); |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style scoped></style> |
@ -0,0 +1,32 @@ |
|||||
|
import { ID, IDS, PageQuery, commonExport } from '@/api/base'; |
||||
|
import { defHttp } from '@/utils/http/axios'; |
||||
|
|
||||
|
enum Api { |
||||
|
root = '/workflow/leave', |
||||
|
list = '/workflow/leave/list', |
||||
|
export = '/workflow/leave/export', |
||||
|
} |
||||
|
|
||||
|
export function list(params?: PageQuery) { |
||||
|
return defHttp.get({ url: Api.list, params }); |
||||
|
} |
||||
|
|
||||
|
export function exportExcel(data: any) { |
||||
|
return commonExport(Api.export, data); |
||||
|
} |
||||
|
|
||||
|
export function getInfo(id: ID) { |
||||
|
return defHttp.get({ url: `${Api.root}/${id}` }); |
||||
|
} |
||||
|
|
||||
|
export function add(data: any) { |
||||
|
return defHttp.post({ url: Api.root, data }); |
||||
|
} |
||||
|
|
||||
|
export function update(data: any) { |
||||
|
return defHttp.put({ url: Api.root, data }); |
||||
|
} |
||||
|
|
||||
|
export function removeByIds(ids: IDS) { |
||||
|
return defHttp.deleteWithMsg({ url: `${Api.root}/${ids.join(',')}` }); |
||||
|
} |
@ -0,0 +1,62 @@ |
|||||
|
import { BasicColumn } from '@/components/Table'; |
||||
|
import { FormSchema } from '@/components/Form'; |
||||
|
|
||||
|
export const formSchemas: FormSchema[] = [ |
||||
|
{ |
||||
|
field: 'projectName', |
||||
|
label: '项目名称', |
||||
|
component: 'Select', |
||||
|
componentProps: { |
||||
|
options: [ |
||||
|
{ |
||||
|
value: '1', |
||||
|
label: '2323', |
||||
|
}, |
||||
|
{ |
||||
|
value: '2', |
||||
|
label: '2323', |
||||
|
}, |
||||
|
{ |
||||
|
value: '3', |
||||
|
label: '2323', |
||||
|
}, |
||||
|
], |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
field: 'time', |
||||
|
label: '时间', |
||||
|
component: 'DatePicker', |
||||
|
}, |
||||
|
]; |
||||
|
|
||||
|
export const columns: BasicColumn[] = [ |
||||
|
{ |
||||
|
title: '运维单位', |
||||
|
dataIndex: 'ioUnit', |
||||
|
}, |
||||
|
{ |
||||
|
title: '故障原因', |
||||
|
dataIndex: 'faultReason', |
||||
|
}, |
||||
|
{ |
||||
|
title: '故障数量', |
||||
|
dataIndex: 'faultNum', |
||||
|
}, |
||||
|
{ |
||||
|
title: '修复数量', |
||||
|
dataIndex: 'fixNum', |
||||
|
}, |
||||
|
{ |
||||
|
title: '未修复数量', |
||||
|
dataIndex: 'unfixNum', |
||||
|
}, |
||||
|
{ |
||||
|
title: '上月未修复数量', |
||||
|
dataIndex: 'lastMonthUnfixNum', |
||||
|
}, |
||||
|
{ |
||||
|
title: '累计未修复数量', |
||||
|
dataIndex: 'sumUnfixNum', |
||||
|
}, |
||||
|
]; |
@ -0,0 +1,87 @@ |
|||||
|
<template> |
||||
|
<div> |
||||
|
<!-- 抽屉组件 --> |
||||
|
<a-drawer |
||||
|
title="详情" |
||||
|
placement="right" |
||||
|
:closable="true" |
||||
|
:open="visible" |
||||
|
@close="onClose" |
||||
|
width="600px" |
||||
|
> |
||||
|
<div ref="chartRef" style="width: 500px; height: 500px"></div> |
||||
|
</a-drawer> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { ref } from 'vue'; |
||||
|
import { useECharts } from '@/hooks/web/useECharts'; |
||||
|
// import { getInfo } from './api'; |
||||
|
|
||||
|
export default { |
||||
|
setup() { |
||||
|
//抽屉详情 |
||||
|
const chartRef = ref(); |
||||
|
|
||||
|
const { setOptions } = useECharts(chartRef); |
||||
|
const visible = ref(false); |
||||
|
const showDrawer = () => { |
||||
|
visible.value = true; |
||||
|
setOptions(options); |
||||
|
}; |
||||
|
// 关闭抽屉的方法 |
||||
|
const onClose = () => { |
||||
|
visible.value = false; |
||||
|
}; |
||||
|
const options = { |
||||
|
title: { |
||||
|
text: '近十二月记录', |
||||
|
}, |
||||
|
xAxis: { |
||||
|
type: 'category', |
||||
|
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], |
||||
|
}, |
||||
|
yAxis: { |
||||
|
type: 'value', |
||||
|
}, |
||||
|
series: [ |
||||
|
{ |
||||
|
data: [150, 230, 224, 218, 135, 147, 260], |
||||
|
type: 'line', |
||||
|
}, |
||||
|
], |
||||
|
}; |
||||
|
|
||||
|
return { |
||||
|
visible, |
||||
|
showDrawer, |
||||
|
onClose, |
||||
|
chartRef, |
||||
|
}; |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style scoped> |
||||
|
/* 可选样式调整 */ |
||||
|
.ant-btn { |
||||
|
margin: 20px; |
||||
|
} |
||||
|
|
||||
|
/* .singerDetail{ |
||||
|
margin-bottom: 10px; |
||||
|
} */ |
||||
|
div { |
||||
|
margin-bottom: 10px; |
||||
|
} |
||||
|
|
||||
|
.timeText { |
||||
|
margin: 0 0 40px 20px; |
||||
|
color: red; |
||||
|
} |
||||
|
|
||||
|
.titleLabel { |
||||
|
color: gray; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,62 @@ |
|||||
|
<template> |
||||
|
<PageWrapper dense> |
||||
|
<BasicTable @register="registerTable"> |
||||
|
<template #toolbar> |
||||
|
<a-button type="primary" @click="handleDetail">导出</a-button> |
||||
|
<a-button type="link" @click="handleDetail">详情</a-button> |
||||
|
</template> |
||||
|
<template #bodyCell="{ column, record }"> |
||||
|
<template v-if="column && record && column.key === 'action'"> |
||||
|
<a-button type="link" @click="handleDetail">详情</a-button> |
||||
|
</template> |
||||
|
</template> |
||||
|
</BasicTable> |
||||
|
<detailDrawer ref="detailDrawerRef" /> |
||||
|
</PageWrapper> |
||||
|
</template> |
||||
|
|
||||
|
<script setup lang="ts"> |
||||
|
import { PageWrapper } from '@/components/Page'; |
||||
|
import { BasicTable, useTable } from '@/components/Table'; |
||||
|
import { list } from './api'; |
||||
|
import { formSchemas, columns } from './data'; |
||||
|
import detailDrawer from './detailDrawer.vue'; |
||||
|
import { ref } from 'vue'; |
||||
|
|
||||
|
defineOptions({ name: 'FaultNum' }); |
||||
|
|
||||
|
const [registerTable] = useTable({ |
||||
|
rowSelection: { |
||||
|
type: 'checkbox', |
||||
|
}, |
||||
|
title: '故障数量', |
||||
|
api: list, |
||||
|
showIndexColumn: true, |
||||
|
rowKey: 'id', |
||||
|
useSearchForm: true, |
||||
|
formConfig: { |
||||
|
schemas: formSchemas, |
||||
|
name: 'faultNum', |
||||
|
baseColProps: { |
||||
|
xs: 24, |
||||
|
sm: 24, |
||||
|
md: 24, |
||||
|
lg: 6, |
||||
|
}, |
||||
|
}, |
||||
|
columns: columns, |
||||
|
actionColumn: { |
||||
|
width: 200, |
||||
|
title: '操作', |
||||
|
key: 'action', |
||||
|
fixed: 'right', |
||||
|
}, |
||||
|
}); |
||||
|
//抽屉 |
||||
|
const detailDrawerRef = ref(); |
||||
|
const handleDetail = () => { |
||||
|
detailDrawerRef.value.showDrawer(); |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style scoped></style> |
@ -0,0 +1,32 @@ |
|||||
|
import { ID, IDS, PageQuery, commonExport } from '@/api/base'; |
||||
|
import { defHttp } from '@/utils/http/axios'; |
||||
|
|
||||
|
enum Api { |
||||
|
root = '/workflow/leave', |
||||
|
list = '/workflow/leave/list', |
||||
|
export = '/workflow/leave/export', |
||||
|
} |
||||
|
|
||||
|
export function list(params?: PageQuery) { |
||||
|
return defHttp.get({ url: Api.list, params }); |
||||
|
} |
||||
|
|
||||
|
export function exportExcel(data: any) { |
||||
|
return commonExport(Api.export, data); |
||||
|
} |
||||
|
|
||||
|
export function getInfo(id: ID) { |
||||
|
return defHttp.get({ url: `${Api.root}/${id}` }); |
||||
|
} |
||||
|
|
||||
|
export function add(data: any) { |
||||
|
return defHttp.post({ url: Api.root, data }); |
||||
|
} |
||||
|
|
||||
|
export function update(data: any) { |
||||
|
return defHttp.put({ url: Api.root, data }); |
||||
|
} |
||||
|
|
||||
|
export function removeByIds(ids: IDS) { |
||||
|
return defHttp.deleteWithMsg({ url: `${Api.root}/${ids.join(',')}` }); |
||||
|
} |
@ -0,0 +1,46 @@ |
|||||
|
import { BasicColumn } from '@/components/Table'; |
||||
|
import { FormSchema } from '@/components/Form'; |
||||
|
|
||||
|
export const formSchemas: FormSchema[] = [ |
||||
|
{ |
||||
|
field: 'projectName', |
||||
|
label: '项目名称', |
||||
|
component: 'Select', |
||||
|
componentProps: { |
||||
|
options: [ |
||||
|
{ |
||||
|
value: '1', |
||||
|
label: '2323', |
||||
|
}, |
||||
|
{ |
||||
|
value: '2', |
||||
|
label: '2323', |
||||
|
}, |
||||
|
{ |
||||
|
value: '3', |
||||
|
label: '2323', |
||||
|
}, |
||||
|
], |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
field: 'time', |
||||
|
label: '时间', |
||||
|
component: 'DatePicker', |
||||
|
}, |
||||
|
]; |
||||
|
|
||||
|
export const columns: BasicColumn[] = [ |
||||
|
{ |
||||
|
title: '日期', |
||||
|
dataIndex: 'date', |
||||
|
}, |
||||
|
{ |
||||
|
title: '日在线率', |
||||
|
dataIndex: 'dailyOnlineRate', |
||||
|
}, |
||||
|
{ |
||||
|
title: '异常情况', |
||||
|
dataIndex: 'unusual', |
||||
|
}, |
||||
|
]; |
@ -0,0 +1,84 @@ |
|||||
|
<template> |
||||
|
<div> |
||||
|
<!-- 抽屉组件 --> |
||||
|
<a-drawer |
||||
|
title="详情" |
||||
|
placement="right" |
||||
|
:closable="true" |
||||
|
:open="visible" |
||||
|
@close="onClose" |
||||
|
width="600px" |
||||
|
> |
||||
|
<div ref="chartRef" style="width: 500px; height: 500px"></div> |
||||
|
</a-drawer> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { ref } from 'vue'; |
||||
|
import { useECharts } from '@/hooks/web/useECharts'; |
||||
|
// import { getInfo } from './api'; |
||||
|
|
||||
|
export default { |
||||
|
setup() { |
||||
|
//抽屉详情 |
||||
|
const chartRef = ref(); |
||||
|
|
||||
|
const { setOptions } = useECharts(chartRef); |
||||
|
const visible = ref(false); |
||||
|
const showDrawer = () => { |
||||
|
visible.value = true; |
||||
|
setOptions(options); |
||||
|
}; |
||||
|
// 关闭抽屉的方法 |
||||
|
const onClose = () => { |
||||
|
visible.value = false; |
||||
|
}; |
||||
|
const options = { |
||||
|
xAxis: { |
||||
|
type: 'category', |
||||
|
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], |
||||
|
}, |
||||
|
yAxis: { |
||||
|
type: 'value', |
||||
|
}, |
||||
|
series: [ |
||||
|
{ |
||||
|
data: [150, 230, 224, 218, 135, 147, 260], |
||||
|
type: 'line', |
||||
|
}, |
||||
|
], |
||||
|
}; |
||||
|
|
||||
|
return { |
||||
|
visible, |
||||
|
showDrawer, |
||||
|
onClose, |
||||
|
chartRef, |
||||
|
}; |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style scoped> |
||||
|
/* 可选样式调整 */ |
||||
|
.ant-btn { |
||||
|
margin: 20px; |
||||
|
} |
||||
|
|
||||
|
/* .singerDetail{ |
||||
|
margin-bottom: 10px; |
||||
|
} */ |
||||
|
div { |
||||
|
margin-bottom: 10px; |
||||
|
} |
||||
|
|
||||
|
.timeText { |
||||
|
margin: 0 0 40px 20px; |
||||
|
color: red; |
||||
|
} |
||||
|
|
||||
|
.titleLabel { |
||||
|
color: gray; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,62 @@ |
|||||
|
<template> |
||||
|
<PageWrapper dense> |
||||
|
<BasicTable @register="registerTable" bordered> |
||||
|
<template #toolbar> |
||||
|
<a-button type="primary" @click="handleDetail">导出</a-button> |
||||
|
<a-button type="link" @click="handleDetail">详情</a-button> |
||||
|
</template> |
||||
|
<template #bodyCell="{ column, record }"> |
||||
|
<template v-if="column && record && column.key === 'action'"> |
||||
|
<a-button type="link" @click="handleDetail">详情</a-button> |
||||
|
</template> |
||||
|
</template> |
||||
|
</BasicTable> |
||||
|
<detailDrawer ref="detailDrawerRef" /> |
||||
|
</PageWrapper> |
||||
|
</template> |
||||
|
|
||||
|
<script setup lang="ts"> |
||||
|
import { PageWrapper } from '@/components/Page'; |
||||
|
import { BasicTable, useTable } from '@/components/Table'; |
||||
|
import { list } from './api'; |
||||
|
import { formSchemas, columns } from './data'; |
||||
|
import detailDrawer from './detailDrawer.vue'; |
||||
|
import { ref } from 'vue'; |
||||
|
|
||||
|
defineOptions({ name: 'Online' }); |
||||
|
|
||||
|
const [registerTable] = useTable({ |
||||
|
rowSelection: { |
||||
|
type: 'checkbox', |
||||
|
}, |
||||
|
title: '在线率', |
||||
|
api: list, |
||||
|
showIndexColumn: true, |
||||
|
rowKey: 'id', |
||||
|
useSearchForm: true, |
||||
|
formConfig: { |
||||
|
schemas: formSchemas, |
||||
|
name: 'online', |
||||
|
baseColProps: { |
||||
|
xs: 24, |
||||
|
sm: 24, |
||||
|
md: 24, |
||||
|
lg: 6, |
||||
|
}, |
||||
|
}, |
||||
|
columns: columns, |
||||
|
actionColumn: { |
||||
|
width: 200, |
||||
|
title: '操作', |
||||
|
key: 'action', |
||||
|
fixed: 'right', |
||||
|
}, |
||||
|
}); |
||||
|
//抽屉 |
||||
|
const detailDrawerRef = ref(); |
||||
|
const handleDetail = () => { |
||||
|
detailDrawerRef.value.showDrawer(); |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style scoped></style> |
@ -0,0 +1,32 @@ |
|||||
|
import { ID, IDS, PageQuery, commonExport } from '@/api/base'; |
||||
|
import { defHttp } from '@/utils/http/axios'; |
||||
|
|
||||
|
enum Api { |
||||
|
root = '/workflow/leave', |
||||
|
list = '/workflow/leave/list', |
||||
|
export = '/workflow/leave/export', |
||||
|
} |
||||
|
|
||||
|
export function list(params?: PageQuery) { |
||||
|
return defHttp.get({ url: Api.list, params }); |
||||
|
} |
||||
|
|
||||
|
export function exportExcel(data: any) { |
||||
|
return commonExport(Api.export, data); |
||||
|
} |
||||
|
|
||||
|
export function getInfo(id: ID) { |
||||
|
return defHttp.get({ url: `${Api.root}/${id}` }); |
||||
|
} |
||||
|
|
||||
|
export function add(data: any) { |
||||
|
return defHttp.post({ url: Api.root, data }); |
||||
|
} |
||||
|
|
||||
|
export function update(data: any) { |
||||
|
return defHttp.put({ url: Api.root, data }); |
||||
|
} |
||||
|
|
||||
|
export function removeByIds(ids: IDS) { |
||||
|
return defHttp.deleteWithMsg({ url: `${Api.root}/${ids.join(',')}` }); |
||||
|
} |
@ -0,0 +1,50 @@ |
|||||
|
import { BasicColumn } from '@/components/Table'; |
||||
|
import { FormSchema } from '@/components/Form'; |
||||
|
|
||||
|
export const formSchemas: FormSchema[] = [ |
||||
|
{ |
||||
|
field: 'projectName', |
||||
|
label: '项目名称', |
||||
|
component: 'Select', |
||||
|
componentProps: { |
||||
|
options: [ |
||||
|
{ |
||||
|
value: '1', |
||||
|
label: '2323', |
||||
|
}, |
||||
|
{ |
||||
|
value: '2', |
||||
|
label: '2323', |
||||
|
}, |
||||
|
{ |
||||
|
value: '3', |
||||
|
label: '2323', |
||||
|
}, |
||||
|
], |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
field: 'time', |
||||
|
label: '时间', |
||||
|
component: 'DatePicker', |
||||
|
}, |
||||
|
]; |
||||
|
|
||||
|
export const columns: BasicColumn[] = [ |
||||
|
{ |
||||
|
title: '巡检内容', |
||||
|
dataIndex: 'patrolContent', |
||||
|
}, |
||||
|
{ |
||||
|
title: '频率', |
||||
|
dataIndex: 'frequency', |
||||
|
}, |
||||
|
{ |
||||
|
title: '本月完成情况', |
||||
|
dataIndex: 'monthComplete', |
||||
|
}, |
||||
|
{ |
||||
|
title: '计划总况', |
||||
|
dataIndex: 'planComplete', |
||||
|
}, |
||||
|
]; |
@ -0,0 +1,42 @@ |
|||||
|
<template> |
||||
|
<PageWrapper dense> |
||||
|
<BasicTable @register="registerTable"> |
||||
|
<template #toolbar> |
||||
|
<a-button type="primary">导出</a-button> |
||||
|
</template> |
||||
|
</BasicTable> |
||||
|
</PageWrapper> |
||||
|
</template> |
||||
|
|
||||
|
<script setup lang="ts"> |
||||
|
import { PageWrapper } from '@/components/Page'; |
||||
|
import { BasicTable, useTable } from '@/components/Table'; |
||||
|
import { list } from './api'; |
||||
|
import { formSchemas, columns } from './data'; |
||||
|
|
||||
|
defineOptions({ name: 'PlanComplete' }); |
||||
|
|
||||
|
const [registerTable] = useTable({ |
||||
|
rowSelection: { |
||||
|
type: 'checkbox', |
||||
|
}, |
||||
|
title: '计划完整情况', |
||||
|
api: list, |
||||
|
showIndexColumn: true, |
||||
|
rowKey: 'id', |
||||
|
useSearchForm: true, |
||||
|
formConfig: { |
||||
|
schemas: formSchemas, |
||||
|
name: 'planComplete', |
||||
|
baseColProps: { |
||||
|
xs: 24, |
||||
|
sm: 24, |
||||
|
md: 24, |
||||
|
lg: 6, |
||||
|
}, |
||||
|
}, |
||||
|
columns: columns, |
||||
|
}); |
||||
|
</script> |
||||
|
|
||||
|
<style scoped></style> |
@ -0,0 +1,32 @@ |
|||||
|
import { ID, IDS, PageQuery, commonExport } from '@/api/base'; |
||||
|
import { defHttp } from '@/utils/http/axios'; |
||||
|
|
||||
|
enum Api { |
||||
|
root = '/workflow/leave', |
||||
|
list = '/workflow/leave/list', |
||||
|
export = '/workflow/leave/export', |
||||
|
} |
||||
|
|
||||
|
export function list(params?: PageQuery) { |
||||
|
return defHttp.get({ url: Api.list, params }); |
||||
|
} |
||||
|
|
||||
|
export function exportExcel(data: any) { |
||||
|
return commonExport(Api.export, data); |
||||
|
} |
||||
|
|
||||
|
export function getInfo(id: ID) { |
||||
|
return defHttp.get({ url: `${Api.root}/${id}` }); |
||||
|
} |
||||
|
|
||||
|
export function add(data: any) { |
||||
|
return defHttp.post({ url: Api.root, data }); |
||||
|
} |
||||
|
|
||||
|
export function update(data: any) { |
||||
|
return defHttp.put({ url: Api.root, data }); |
||||
|
} |
||||
|
|
||||
|
export function removeByIds(ids: IDS) { |
||||
|
return defHttp.deleteWithMsg({ url: `${Api.root}/${ids.join(',')}` }); |
||||
|
} |
@ -0,0 +1,21 @@ |
|||||
|
import { BasicColumn } from '@/components/Table'; |
||||
|
import { FormSchema } from '@/components/Form'; |
||||
|
|
||||
|
export const formSchemas: FormSchema[] = [ |
||||
|
{ |
||||
|
field: 'time', |
||||
|
label: '时间', |
||||
|
component: 'DatePicker', |
||||
|
}, |
||||
|
]; |
||||
|
|
||||
|
export const columns: BasicColumn[] = [ |
||||
|
{ |
||||
|
title: '项目名称', |
||||
|
dataIndex: 'projectName', |
||||
|
}, |
||||
|
{ |
||||
|
title: '当月提交数量', |
||||
|
dataIndex: 'monthSubmit', |
||||
|
}, |
||||
|
]; |
@ -0,0 +1,42 @@ |
|||||
|
<template> |
||||
|
<PageWrapper dense> |
||||
|
<BasicTable @register="registerTable"> |
||||
|
<template #toolbar> |
||||
|
<a-button type="primary">导出</a-button> |
||||
|
</template> |
||||
|
</BasicTable> |
||||
|
</PageWrapper> |
||||
|
</template> |
||||
|
|
||||
|
<script setup lang="ts"> |
||||
|
import { PageWrapper } from '@/components/Page'; |
||||
|
import { BasicTable, useTable } from '@/components/Table'; |
||||
|
import { list } from './api'; |
||||
|
import { formSchemas, columns } from './data'; |
||||
|
|
||||
|
defineOptions({ name: 'ReportSubmit' }); |
||||
|
|
||||
|
const [registerTable] = useTable({ |
||||
|
rowSelection: { |
||||
|
type: 'checkbox', |
||||
|
}, |
||||
|
title: '报告提交情况', |
||||
|
api: list, |
||||
|
showIndexColumn: true, |
||||
|
rowKey: 'id', |
||||
|
useSearchForm: true, |
||||
|
formConfig: { |
||||
|
schemas: formSchemas, |
||||
|
name: 'reportSubmit', |
||||
|
baseColProps: { |
||||
|
xs: 24, |
||||
|
sm: 24, |
||||
|
md: 24, |
||||
|
lg: 6, |
||||
|
}, |
||||
|
}, |
||||
|
columns: columns, |
||||
|
}); |
||||
|
</script> |
||||
|
|
||||
|
<style scoped></style> |
@ -0,0 +1,32 @@ |
|||||
|
import { ID, IDS, PageQuery, commonExport } from '@/api/base'; |
||||
|
import { defHttp } from '@/utils/http/axios'; |
||||
|
|
||||
|
enum Api { |
||||
|
root = '/workflow/leave', |
||||
|
list = '/workflow/leave/list', |
||||
|
export = '/workflow/leave/export', |
||||
|
} |
||||
|
|
||||
|
export function list(params?: PageQuery) { |
||||
|
return defHttp.get({ url: Api.list, params }); |
||||
|
} |
||||
|
|
||||
|
export function exportExcel(data: any) { |
||||
|
return commonExport(Api.export, data); |
||||
|
} |
||||
|
|
||||
|
export function getInfo(id: ID) { |
||||
|
return defHttp.get({ url: `${Api.root}/${id}` }); |
||||
|
} |
||||
|
|
||||
|
export function add(data: any) { |
||||
|
return defHttp.post({ url: Api.root, data }); |
||||
|
} |
||||
|
|
||||
|
export function update(data: any) { |
||||
|
return defHttp.put({ url: Api.root, data }); |
||||
|
} |
||||
|
|
||||
|
export function removeByIds(ids: IDS) { |
||||
|
return defHttp.deleteWithMsg({ url: `${Api.root}/${ids.join(',')}` }); |
||||
|
} |
@ -0,0 +1,62 @@ |
|||||
|
import { BasicColumn } from '@/components/Table'; |
||||
|
import { FormSchema } from '@/components/Form'; |
||||
|
|
||||
|
export const formSchemas: FormSchema[] = [ |
||||
|
{ |
||||
|
field: 'projectName', |
||||
|
label: '项目名称', |
||||
|
component: 'Select', |
||||
|
componentProps: { |
||||
|
options: [ |
||||
|
{ |
||||
|
value: '1', |
||||
|
label: '2323', |
||||
|
}, |
||||
|
{ |
||||
|
value: '2', |
||||
|
label: '2323', |
||||
|
}, |
||||
|
{ |
||||
|
value: '3', |
||||
|
label: '2323', |
||||
|
}, |
||||
|
], |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
field: 'time', |
||||
|
label: '时间', |
||||
|
component: 'DatePicker', |
||||
|
}, |
||||
|
]; |
||||
|
|
||||
|
export const columns: BasicColumn[] = [ |
||||
|
{ |
||||
|
title: '类型', |
||||
|
dataIndex: 'type', |
||||
|
}, |
||||
|
{ |
||||
|
title: '运维单位', |
||||
|
dataIndex: 'ioUnit', |
||||
|
}, |
||||
|
{ |
||||
|
title: '故障总数量', |
||||
|
dataIndex: 'faultSum', |
||||
|
}, |
||||
|
{ |
||||
|
title: '响应超时数', |
||||
|
dataIndex: 'responseOvertimeNum', |
||||
|
}, |
||||
|
{ |
||||
|
title: '响应超时总时长', |
||||
|
dataIndex: 'responseOverTimeSum', |
||||
|
}, |
||||
|
{ |
||||
|
title: '修复超时数', |
||||
|
dataIndex: 'fixOvertimeNum', |
||||
|
}, |
||||
|
{ |
||||
|
title: '修复超时总时长', |
||||
|
dataIndex: 'fixOvertimeSum', |
||||
|
}, |
||||
|
]; |
@ -0,0 +1,93 @@ |
|||||
|
<template> |
||||
|
<div> |
||||
|
<!-- 抽屉组件 --> |
||||
|
<a-drawer |
||||
|
title="详情" |
||||
|
placement="right" |
||||
|
:closable="true" |
||||
|
:open="visible" |
||||
|
@close="onClose" |
||||
|
width="1000px" |
||||
|
> |
||||
|
<a-table :dataSource="dataSource" :columns="columns" bordered /> |
||||
|
</a-drawer> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { ref } from 'vue'; |
||||
|
// import { getInfo } from './api'; |
||||
|
|
||||
|
export default { |
||||
|
setup() { |
||||
|
//抽屉详情 |
||||
|
|
||||
|
const visible = ref(false); |
||||
|
const showDrawer = () => { |
||||
|
visible.value = true; |
||||
|
}; |
||||
|
// 关闭抽屉的方法 |
||||
|
const onClose = () => { |
||||
|
visible.value = false; |
||||
|
}; |
||||
|
//table |
||||
|
const dataSource = ref([]); |
||||
|
const columns = [ |
||||
|
{ |
||||
|
title: '编号', |
||||
|
dataIndex: 'code', |
||||
|
key: 'code', |
||||
|
}, |
||||
|
{ |
||||
|
title: '报修时间', |
||||
|
dataIndex: 'repairTime', |
||||
|
key: 'repairTime', |
||||
|
}, |
||||
|
{ |
||||
|
title: '响应级别', |
||||
|
dataIndex: 'responseLevel', |
||||
|
key: 'responseLevel', |
||||
|
}, |
||||
|
{ |
||||
|
title: '故障描述', |
||||
|
dataIndex: 'faultDescription', |
||||
|
key: 'faultDescription', |
||||
|
}, |
||||
|
{ |
||||
|
title: '故障地点', |
||||
|
dataIndex: 'faultLocation', |
||||
|
key: 'faultLocation', |
||||
|
}, |
||||
|
{ |
||||
|
title: '响应超时', |
||||
|
dataIndex: 'responseOverTime', |
||||
|
key: 'responseOverTime', |
||||
|
}, |
||||
|
{ |
||||
|
title: '处理超时', |
||||
|
dataIndex: 'handleOverTime', |
||||
|
key: 'handleOverTime', |
||||
|
}, |
||||
|
]; |
||||
|
|
||||
|
return { |
||||
|
visible, |
||||
|
showDrawer, |
||||
|
onClose, |
||||
|
dataSource, |
||||
|
columns, |
||||
|
}; |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style scoped> |
||||
|
/* 可选样式调整 */ |
||||
|
.ant-btn { |
||||
|
margin: 20px; |
||||
|
} |
||||
|
|
||||
|
div { |
||||
|
margin-bottom: 10px; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,62 @@ |
|||||
|
<template> |
||||
|
<PageWrapper dense> |
||||
|
<BasicTable @register="registerTable"> |
||||
|
<template #toolbar> |
||||
|
<a-button type="primary" @click="handleDetail">导出</a-button> |
||||
|
<a-button type="link" @click="handleDetail">详情</a-button> |
||||
|
</template> |
||||
|
<template #bodyCell="{ column, record }"> |
||||
|
<template v-if="column && record && column.key === 'action'"> |
||||
|
<a-button type="link" @click="handleDetail">详情</a-button> |
||||
|
</template> |
||||
|
</template> |
||||
|
</BasicTable> |
||||
|
<detailDrawer ref="detailDrawerRef" /> |
||||
|
</PageWrapper> |
||||
|
</template> |
||||
|
|
||||
|
<script setup lang="ts"> |
||||
|
import { PageWrapper } from '@/components/Page'; |
||||
|
import { BasicTable, useTable } from '@/components/Table'; |
||||
|
import { list } from './api'; |
||||
|
import { formSchemas, columns } from './data'; |
||||
|
import detailDrawer from './detailDrawer.vue'; |
||||
|
import { ref } from 'vue'; |
||||
|
|
||||
|
defineOptions({ name: 'ResAndFix' }); |
||||
|
|
||||
|
const [registerTable] = useTable({ |
||||
|
rowSelection: { |
||||
|
type: 'checkbox', |
||||
|
}, |
||||
|
title: '响应/修复', |
||||
|
api: list, |
||||
|
showIndexColumn: true, |
||||
|
rowKey: 'id', |
||||
|
useSearchForm: true, |
||||
|
formConfig: { |
||||
|
schemas: formSchemas, |
||||
|
name: 'resAndFix', |
||||
|
baseColProps: { |
||||
|
xs: 24, |
||||
|
sm: 24, |
||||
|
md: 24, |
||||
|
lg: 6, |
||||
|
}, |
||||
|
}, |
||||
|
columns: columns, |
||||
|
actionColumn: { |
||||
|
width: 200, |
||||
|
title: '操作', |
||||
|
key: 'action', |
||||
|
fixed: 'right', |
||||
|
}, |
||||
|
}); |
||||
|
//抽屉 |
||||
|
const detailDrawerRef = ref(); |
||||
|
const handleDetail = () => { |
||||
|
detailDrawerRef.value.showDrawer(); |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style scoped></style> |
@ -0,0 +1,32 @@ |
|||||
|
import { ID, IDS, PageQuery, commonExport } from '@/api/base'; |
||||
|
import { defHttp } from '@/utils/http/axios'; |
||||
|
|
||||
|
enum Api { |
||||
|
root = '/workflow/leave', |
||||
|
list = '/workflow/leave/list', |
||||
|
export = '/workflow/leave/export', |
||||
|
} |
||||
|
|
||||
|
export function list(params?: PageQuery) { |
||||
|
return defHttp.get({ url: Api.list, params }); |
||||
|
} |
||||
|
|
||||
|
export function exportExcel(data: any) { |
||||
|
return commonExport(Api.export, data); |
||||
|
} |
||||
|
|
||||
|
export function getInfo(id: ID) { |
||||
|
return defHttp.get({ url: `${Api.root}/${id}` }); |
||||
|
} |
||||
|
|
||||
|
export function add(data: any) { |
||||
|
return defHttp.post({ url: Api.root, data }); |
||||
|
} |
||||
|
|
||||
|
export function update(data: any) { |
||||
|
return defHttp.put({ url: Api.root, data }); |
||||
|
} |
||||
|
|
||||
|
export function removeByIds(ids: IDS) { |
||||
|
return defHttp.deleteWithMsg({ url: `${Api.root}/${ids.join(',')}` }); |
||||
|
} |
@ -0,0 +1,79 @@ |
|||||
|
import { BasicColumn } from '@/components/Table'; |
||||
|
import { FormSchema } from '@/components/Form'; |
||||
|
|
||||
|
export const formSchemas: FormSchema[] = [ |
||||
|
{ |
||||
|
field: 'projectName', |
||||
|
label: '项目名称', |
||||
|
component: 'Select', |
||||
|
componentProps: { |
||||
|
options: [ |
||||
|
{ |
||||
|
value: '1', |
||||
|
label: '2323', |
||||
|
}, |
||||
|
{ |
||||
|
value: '2', |
||||
|
label: '2323', |
||||
|
}, |
||||
|
{ |
||||
|
value: '3', |
||||
|
label: '2323', |
||||
|
}, |
||||
|
], |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
field: 'repairTimeRange', |
||||
|
label: '报修范围', |
||||
|
component: 'RangePicker', |
||||
|
}, |
||||
|
{ |
||||
|
field: 'repairer', |
||||
|
label: '报修人名称', |
||||
|
component: 'Select', |
||||
|
componentProps: { |
||||
|
options: [ |
||||
|
{ |
||||
|
value: '1', |
||||
|
label: '2323', |
||||
|
}, |
||||
|
{ |
||||
|
value: '2', |
||||
|
label: '2323', |
||||
|
}, |
||||
|
{ |
||||
|
value: '3', |
||||
|
label: '2323', |
||||
|
}, |
||||
|
], |
||||
|
}, |
||||
|
}, |
||||
|
]; |
||||
|
|
||||
|
export const columns: BasicColumn[] = [ |
||||
|
{ |
||||
|
title: '编号', |
||||
|
dataIndex: 'code', |
||||
|
}, |
||||
|
{ |
||||
|
title: '报修时间', |
||||
|
dataIndex: 'repairTime', |
||||
|
}, |
||||
|
{ |
||||
|
title: '响应级别', |
||||
|
dataIndex: 'responseLevel', |
||||
|
}, |
||||
|
{ |
||||
|
title: '故障描述', |
||||
|
dataIndex: 'faultDescription', |
||||
|
}, |
||||
|
{ |
||||
|
title: '故障地点', |
||||
|
dataIndex: 'faultLocation', |
||||
|
}, |
||||
|
{ |
||||
|
title: '当前状态', |
||||
|
dataIndex: 'status', |
||||
|
}, |
||||
|
]; |
@ -0,0 +1,91 @@ |
|||||
|
<template> |
||||
|
<div> |
||||
|
<!-- 抽屉组件 --> |
||||
|
<a-drawer |
||||
|
title="详情" |
||||
|
placement="right" |
||||
|
:closable="true" |
||||
|
:open="visible" |
||||
|
@close="onClose" |
||||
|
width="600px" |
||||
|
> |
||||
|
<div ref="chartRef" style="width: 500px; height: 500px"></div> |
||||
|
</a-drawer> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { ref } from 'vue'; |
||||
|
import { useECharts } from '@/hooks/web/useECharts'; |
||||
|
// import { getInfo } from './api'; |
||||
|
|
||||
|
export default { |
||||
|
setup() { |
||||
|
//抽屉详情 |
||||
|
const chartRef = ref(); |
||||
|
|
||||
|
const { setOptions } = useECharts(chartRef); |
||||
|
const visible = ref(false); |
||||
|
const showDrawer = () => { |
||||
|
visible.value = true; |
||||
|
setOptions(options); |
||||
|
}; |
||||
|
// 关闭抽屉的方法 |
||||
|
const onClose = () => { |
||||
|
visible.value = false; |
||||
|
}; |
||||
|
const options = { |
||||
|
title: { |
||||
|
text: '故障类型分析 ', |
||||
|
left: 'center', |
||||
|
}, |
||||
|
tooltip: { |
||||
|
trigger: 'item', |
||||
|
}, |
||||
|
legend: { |
||||
|
orient: 'vertical', |
||||
|
left: 'left', |
||||
|
}, |
||||
|
series: [ |
||||
|
{ |
||||
|
type: 'pie', |
||||
|
data: [ |
||||
|
{ value: 1048, name: '监理', id: 1 }, |
||||
|
{ value: 2555, name: '相关', id: 2 }, |
||||
|
], |
||||
|
}, |
||||
|
], |
||||
|
}; |
||||
|
|
||||
|
return { |
||||
|
visible, |
||||
|
showDrawer, |
||||
|
onClose, |
||||
|
chartRef, |
||||
|
}; |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style scoped> |
||||
|
/* 可选样式调整 */ |
||||
|
.ant-btn { |
||||
|
margin: 20px; |
||||
|
} |
||||
|
|
||||
|
/* .singerDetail{ |
||||
|
margin-bottom: 10px; |
||||
|
} */ |
||||
|
div { |
||||
|
margin-bottom: 10px; |
||||
|
} |
||||
|
|
||||
|
.timeText { |
||||
|
margin: 0 0 40px 20px; |
||||
|
color: red; |
||||
|
} |
||||
|
|
||||
|
.titleLabel { |
||||
|
color: gray; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,62 @@ |
|||||
|
<template> |
||||
|
<PageWrapper dense> |
||||
|
<BasicTable @register="registerTable"> |
||||
|
<template #toolbar> |
||||
|
<a-button type="primary" @click="handleDetail">导出</a-button> |
||||
|
<a-button type="link" @click="handleDetail">详情</a-button> |
||||
|
</template> |
||||
|
<template #bodyCell="{ column, record }"> |
||||
|
<template v-if="column && record && column.key === 'action'"> |
||||
|
<a-button type="link" @click="handleDetail">详情</a-button> |
||||
|
</template> |
||||
|
</template> |
||||
|
</BasicTable> |
||||
|
<detailDrawer ref="detailDrawerRef" /> |
||||
|
</PageWrapper> |
||||
|
</template> |
||||
|
|
||||
|
<script setup lang="ts"> |
||||
|
import { PageWrapper } from '@/components/Page'; |
||||
|
import { BasicTable, useTable } from '@/components/Table'; |
||||
|
import { list } from './api'; |
||||
|
import { formSchemas, columns } from './data'; |
||||
|
import detailDrawer from './detailDrawer.vue'; |
||||
|
import { ref } from 'vue'; |
||||
|
|
||||
|
defineOptions({ name: 'Type' }); |
||||
|
|
||||
|
const [registerTable] = useTable({ |
||||
|
rowSelection: { |
||||
|
type: 'checkbox', |
||||
|
}, |
||||
|
title: '类型分析', |
||||
|
api: list, |
||||
|
showIndexColumn: true, |
||||
|
rowKey: 'id', |
||||
|
useSearchForm: true, |
||||
|
formConfig: { |
||||
|
schemas: formSchemas, |
||||
|
name: 'type', |
||||
|
baseColProps: { |
||||
|
xs: 24, |
||||
|
sm: 24, |
||||
|
md: 24, |
||||
|
lg: 6, |
||||
|
}, |
||||
|
}, |
||||
|
columns: columns, |
||||
|
actionColumn: { |
||||
|
width: 200, |
||||
|
title: '操作', |
||||
|
key: 'action', |
||||
|
fixed: 'right', |
||||
|
}, |
||||
|
}); |
||||
|
//抽屉 |
||||
|
const detailDrawerRef = ref(); |
||||
|
const handleDetail = () => { |
||||
|
detailDrawerRef.value.showDrawer(); |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style scoped></style> |
@ -0,0 +1,165 @@ |
|||||
|
<template> |
||||
|
<a-modal v-model:open="visible" :title="title" @ok="handleOk" width="50%"> |
||||
|
<a-form :model="form" layout="vertical"> |
||||
|
<a-row :gutter="[16, 16]"> |
||||
|
<a-col :span="24"> |
||||
|
<a-form-item label="辖区" name="area"> |
||||
|
<a-input v-model:value="form.area" placeholder="请选择" /> |
||||
|
</a-form-item> |
||||
|
</a-col> |
||||
|
</a-row> |
||||
|
<a-row :gutter="[16, 16]"> |
||||
|
<a-col :span="12"> |
||||
|
<a-form-item label="视频平台运营情况" name="vedioOperation"> |
||||
|
<a-select |
||||
|
v-model:value="form.vedioOperation" |
||||
|
:options="satisifyOptions" |
||||
|
placeholder="请选择" |
||||
|
/> |
||||
|
</a-form-item> |
||||
|
</a-col> |
||||
|
<a-col :span="12"> |
||||
|
<a-form-item label="视频设备故障率" name="vedioFault"> |
||||
|
<a-select |
||||
|
v-model:value="form.vedioFault" |
||||
|
:options="satisifyOptions" |
||||
|
placeholder="请选择" |
||||
|
/> |
||||
|
</a-form-item> |
||||
|
</a-col> |
||||
|
</a-row> |
||||
|
<a-row :gutter="[16, 16]"> |
||||
|
<a-col :span="12"> |
||||
|
<a-form-item label="存储可用率" name="save"> |
||||
|
<a-select v-model:value="form.save" :options="satisifyOptions" placeholder="请选择" /> |
||||
|
</a-form-item> |
||||
|
</a-col> |
||||
|
</a-row> |
||||
|
<a-row :gutter="[16, 16]"> |
||||
|
<a-col :span="12"> |
||||
|
<a-form-item label="运维修复率" name="ioFix"> |
||||
|
<a-select v-model:value="form.ioFix" :options="satisifyOptions" placeholder="请选择" /> |
||||
|
</a-form-item> |
||||
|
</a-col> |
||||
|
<a-col :span="12"> |
||||
|
<a-form-item label="系统总体运行情况" name="systemRun"> |
||||
|
<a-select |
||||
|
v-model:value="form.systemRun" |
||||
|
:options="satisifyOptions" |
||||
|
placeholder="请选择" |
||||
|
/> |
||||
|
</a-form-item> |
||||
|
</a-col> |
||||
|
</a-row> |
||||
|
<a-row :gutter="[16, 16]"> |
||||
|
<a-col :span="12"> |
||||
|
<a-form-item label="运维人月素质" name="ioPeopleQuality"> |
||||
|
<a-select |
||||
|
v-model:value="form.ioPeopleQuality" |
||||
|
:options="satisifyOptions" |
||||
|
placeholder="请选择" |
||||
|
/> |
||||
|
</a-form-item> |
||||
|
</a-col> |
||||
|
<a-col :span="12"> |
||||
|
<a-form-item label="整体服务水平" name="serviceLevel"> |
||||
|
<a-select |
||||
|
v-model:value="form.serviceLevel" |
||||
|
:options="satisifyOptions" |
||||
|
placeholder="请选择" |
||||
|
/> |
||||
|
</a-form-item> |
||||
|
</a-col> |
||||
|
</a-row> |
||||
|
<a-row :gutter="[16, 16]"> |
||||
|
<a-col :span="12"> |
||||
|
<a-form-item label="综合评价" name="assess"> |
||||
|
<a-select v-model:value="form.assess" :options="satisifyOptions" placeholder="请选择" /> |
||||
|
</a-form-item> |
||||
|
</a-col> |
||||
|
<a-col :span="12"> |
||||
|
<a-form-item label="意见反馈" name="opinion"> |
||||
|
<a-select |
||||
|
v-model:value="form.opinion" |
||||
|
:options="satisifyOptions" |
||||
|
placeholder="请选择" |
||||
|
/> |
||||
|
</a-form-item> |
||||
|
</a-col> |
||||
|
</a-row> |
||||
|
</a-form> |
||||
|
</a-modal> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { reactive, ref } from 'vue'; |
||||
|
|
||||
|
export default { |
||||
|
setup() { |
||||
|
const title = ref('新增'); |
||||
|
const visible = ref(false); |
||||
|
const form = reactive({ |
||||
|
area: '', |
||||
|
vedioOperation: '', |
||||
|
vedioFault: '', |
||||
|
save: '', |
||||
|
ioFix: '', |
||||
|
systemRun: '', |
||||
|
ioPeopleQuality: '', |
||||
|
serviceLevel: '', |
||||
|
assess: '', |
||||
|
opinion: '', |
||||
|
}); |
||||
|
//下拉框 |
||||
|
const satisifyOptions = [ |
||||
|
{ |
||||
|
value: '很满意', |
||||
|
}, |
||||
|
{ |
||||
|
value: '满意', |
||||
|
}, |
||||
|
{ |
||||
|
value: '一般', |
||||
|
}, |
||||
|
{ |
||||
|
value: '不满意', |
||||
|
}, |
||||
|
{ |
||||
|
value: '很不满意', |
||||
|
}, |
||||
|
]; |
||||
|
const showModal = (type, id) => { |
||||
|
if (type == 1) { |
||||
|
title.value = '新增'; |
||||
|
} else if (type == 2) { |
||||
|
title.value = '编辑'; |
||||
|
console.log(id); |
||||
|
} |
||||
|
visible.value = true; |
||||
|
}; |
||||
|
|
||||
|
const handleOk = () => { |
||||
|
console.log('Form Data:', form); |
||||
|
// 在此处可以添加表单验证逻辑 |
||||
|
visible.value = false; |
||||
|
}; |
||||
|
|
||||
|
return { |
||||
|
visible, |
||||
|
title, |
||||
|
form, |
||||
|
showModal, |
||||
|
handleOk, |
||||
|
satisifyOptions, |
||||
|
}; |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style scoped> |
||||
|
/* 可选样式调整 */ |
||||
|
.ant-modal-body { |
||||
|
max-width: 600px; |
||||
|
margin: 0 auto; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,32 @@ |
|||||
|
import { ID, IDS, PageQuery, commonExport } from '@/api/base'; |
||||
|
import { defHttp } from '@/utils/http/axios'; |
||||
|
|
||||
|
enum Api { |
||||
|
root = '/workflow/leave', |
||||
|
list = '/workflow/leave/list', |
||||
|
export = '/workflow/leave/export', |
||||
|
} |
||||
|
|
||||
|
export function list(params?: PageQuery) { |
||||
|
return defHttp.get({ url: Api.list, params }); |
||||
|
} |
||||
|
|
||||
|
export function exportExcel(data: any) { |
||||
|
return commonExport(Api.export, data); |
||||
|
} |
||||
|
|
||||
|
export function getInfo(id: ID) { |
||||
|
return defHttp.get({ url: `${Api.root}/${id}` }); |
||||
|
} |
||||
|
|
||||
|
export function add(data: any) { |
||||
|
return defHttp.post({ url: Api.root, data }); |
||||
|
} |
||||
|
|
||||
|
export function update(data: any) { |
||||
|
return defHttp.put({ url: Api.root, data }); |
||||
|
} |
||||
|
|
||||
|
export function removeByIds(ids: IDS) { |
||||
|
return defHttp.deleteWithMsg({ url: `${Api.root}/${ids.join(',')}` }); |
||||
|
} |
@ -0,0 +1,45 @@ |
|||||
|
import { BasicColumn } from '@/components/Table'; |
||||
|
import { FormSchema } from '@/components/Form'; |
||||
|
|
||||
|
export const formSchemas: FormSchema[] = [ |
||||
|
{ |
||||
|
field: 'projectName', |
||||
|
label: '项目名称', |
||||
|
component: 'Select', |
||||
|
componentProps: { |
||||
|
options: [ |
||||
|
{ |
||||
|
value: '1', |
||||
|
label: '2323', |
||||
|
}, |
||||
|
{ |
||||
|
value: '2', |
||||
|
label: '2323', |
||||
|
}, |
||||
|
{ |
||||
|
value: '3', |
||||
|
label: '2323', |
||||
|
}, |
||||
|
], |
||||
|
}, |
||||
|
}, |
||||
|
]; |
||||
|
|
||||
|
export const columns: BasicColumn[] = [ |
||||
|
{ |
||||
|
title: '项目名称', |
||||
|
dataIndex: 'projectName', |
||||
|
}, |
||||
|
{ |
||||
|
title: '时间', |
||||
|
dataIndex: 'time', |
||||
|
}, |
||||
|
{ |
||||
|
title: '备注', |
||||
|
dataIndex: 'remark', |
||||
|
}, |
||||
|
{ |
||||
|
title: '辖区数量', |
||||
|
dataIndex: 'areaNum', |
||||
|
}, |
||||
|
]; |
@ -0,0 +1,147 @@ |
|||||
|
<template> |
||||
|
<div> |
||||
|
<!-- 抽屉组件 --> |
||||
|
<a-drawer |
||||
|
title="详情" |
||||
|
placement="right" |
||||
|
:closable="true" |
||||
|
:open="visible" |
||||
|
@close="onClose" |
||||
|
width="1000px" |
||||
|
> |
||||
|
<div style="margin-bottom: 20px">附件:{{ attachment }}</div> |
||||
|
<a-button type="primary" @click="handleAdd">新增</a-button> |
||||
|
<a-table :dataSource="dataSource" :columns="columns" bordered> |
||||
|
<template #bodyCell="{ record, column }"> |
||||
|
<template v-if="column.key === 'action'"> |
||||
|
<a-button type="link" @click="handleEdit(record.id)">编辑</a-button> |
||||
|
</template> |
||||
|
</template> |
||||
|
</a-table> |
||||
|
</a-drawer> |
||||
|
<add-modal ref="addModalRef" /> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { ref } from 'vue'; |
||||
|
import addModal from './addModal.vue'; |
||||
|
// import { getInfo } from './api'; |
||||
|
|
||||
|
export default { |
||||
|
components: { |
||||
|
addModal, |
||||
|
}, |
||||
|
setup() { |
||||
|
const visible = ref(false); |
||||
|
const showDrawer = () => { |
||||
|
visible.value = true; |
||||
|
}; |
||||
|
// 关闭抽屉的方法 |
||||
|
const onClose = () => { |
||||
|
visible.value = false; |
||||
|
}; |
||||
|
const attachment = ref([]); |
||||
|
const dataSource = ref([]); |
||||
|
const columns = [ |
||||
|
{ |
||||
|
title: '辖区', |
||||
|
dataIndex: 'area', |
||||
|
key: 'area', |
||||
|
}, |
||||
|
{ |
||||
|
title: '视频平台运营情况', |
||||
|
dataIndex: 'videoOperation', |
||||
|
key: 'videoOperation', |
||||
|
}, |
||||
|
{ |
||||
|
title: '视频设备故障率', |
||||
|
dataIndex: 'vedioFault', |
||||
|
key: 'vedioFault', |
||||
|
}, |
||||
|
{ |
||||
|
title: '存储可用率', |
||||
|
dataIndex: 'save', |
||||
|
key: 'save', |
||||
|
}, |
||||
|
{ |
||||
|
title: '运维修复率', |
||||
|
dataIndex: 'ioFix', |
||||
|
key: 'ioFix', |
||||
|
}, |
||||
|
{ |
||||
|
title: '系统总体运行情状况', |
||||
|
dataIndex: 'systemRun', |
||||
|
key: 'systemRun', |
||||
|
}, |
||||
|
{ |
||||
|
title: '运维人月素质', |
||||
|
dataIndex: 'ioPeopleQuality', |
||||
|
key: 'ioPeopleQuality', |
||||
|
}, |
||||
|
{ |
||||
|
title: '整体服务水平', |
||||
|
dataIndex: 'serviceLevel', |
||||
|
key: 'serviceLevel', |
||||
|
}, |
||||
|
{ |
||||
|
title: '综合评价', |
||||
|
dataIndex: 'assess', |
||||
|
key: 'assess', |
||||
|
}, |
||||
|
{ |
||||
|
title: '意见反馈', |
||||
|
dataIndex: 'opinion', |
||||
|
key: 'opinion', |
||||
|
}, |
||||
|
{ |
||||
|
title: '操作', |
||||
|
dataIndex: 'action', |
||||
|
key: 'action', |
||||
|
}, |
||||
|
]; |
||||
|
//打开弹窗 |
||||
|
const addModalRef = ref(); |
||||
|
const handleAdd = () => { |
||||
|
addModalRef.value.showModal(1); |
||||
|
}; |
||||
|
const handleEdit = (id) => { |
||||
|
addModalRef.value.showModal(2, id); |
||||
|
}; |
||||
|
return { |
||||
|
visible, |
||||
|
showDrawer, |
||||
|
onClose, |
||||
|
dataSource, |
||||
|
columns, |
||||
|
attachment, |
||||
|
addModalRef, |
||||
|
handleAdd, |
||||
|
handleEdit, |
||||
|
}; |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style scoped> |
||||
|
/* 可选样式调整 */ |
||||
|
.ant-btn { |
||||
|
margin: 20px; |
||||
|
} |
||||
|
|
||||
|
/* .singerDetail{ |
||||
|
margin-bottom: 10px; |
||||
|
} */ |
||||
|
div { |
||||
|
margin-bottom: 10px; |
||||
|
} |
||||
|
|
||||
|
.timeText { |
||||
|
margin: 0 0 40px 20px; |
||||
|
color: red; |
||||
|
} |
||||
|
|
||||
|
.titleLabel { |
||||
|
color: gray; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,62 @@ |
|||||
|
<template> |
||||
|
<PageWrapper dense> |
||||
|
<BasicTable @register="registerTable" bordered> |
||||
|
<template #toolbar> |
||||
|
<a-button type="primary" @click="handleDetail">导出</a-button> |
||||
|
<a-button type="link" @click="handleDetail">详情</a-button> |
||||
|
</template> |
||||
|
<template #bodyCell="{ column, record }"> |
||||
|
<template v-if="column && record && column.key === 'action'"> |
||||
|
<a-button type="link" @click="handleDetail">详情</a-button> |
||||
|
</template> |
||||
|
</template> |
||||
|
</BasicTable> |
||||
|
<detailDrawer ref="detailDrawerRef" /> |
||||
|
</PageWrapper> |
||||
|
</template> |
||||
|
|
||||
|
<script setup lang="ts"> |
||||
|
import { PageWrapper } from '@/components/Page'; |
||||
|
import { BasicTable, useTable } from '@/components/Table'; |
||||
|
import { list } from './api'; |
||||
|
import { formSchemas, columns } from './data'; |
||||
|
import detailDrawer from './detailDrawer.vue'; |
||||
|
import { ref } from 'vue'; |
||||
|
|
||||
|
defineOptions({ name: 'Satisify' }); |
||||
|
|
||||
|
const [registerTable] = useTable({ |
||||
|
rowSelection: { |
||||
|
type: 'checkbox', |
||||
|
}, |
||||
|
title: '满意度分析', |
||||
|
api: list, |
||||
|
showIndexColumn: true, |
||||
|
rowKey: 'id', |
||||
|
useSearchForm: true, |
||||
|
formConfig: { |
||||
|
schemas: formSchemas, |
||||
|
name: 'satisify', |
||||
|
baseColProps: { |
||||
|
xs: 24, |
||||
|
sm: 24, |
||||
|
md: 24, |
||||
|
lg: 6, |
||||
|
}, |
||||
|
}, |
||||
|
columns: columns, |
||||
|
actionColumn: { |
||||
|
width: 200, |
||||
|
title: '操作', |
||||
|
key: 'action', |
||||
|
fixed: 'right', |
||||
|
}, |
||||
|
}); |
||||
|
//抽屉 |
||||
|
const detailDrawerRef = ref(); |
||||
|
const handleDetail = () => { |
||||
|
detailDrawerRef.value.showDrawer(); |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style scoped></style> |
@ -0,0 +1,32 @@ |
|||||
|
import { ID, IDS, PageQuery, commonExport } from '@/api/base'; |
||||
|
import { defHttp } from '@/utils/http/axios'; |
||||
|
|
||||
|
enum Api { |
||||
|
root = '/workflow/leave', |
||||
|
list = '/workflow/leave/list', |
||||
|
export = '/workflow/leave/export', |
||||
|
} |
||||
|
|
||||
|
export function list(params?: PageQuery) { |
||||
|
return defHttp.get({ url: Api.list, params }); |
||||
|
} |
||||
|
|
||||
|
export function exportExcel(data: any) { |
||||
|
return commonExport(Api.export, data); |
||||
|
} |
||||
|
|
||||
|
export function getInfo(id: ID) { |
||||
|
return defHttp.get({ url: `${Api.root}/${id}` }); |
||||
|
} |
||||
|
|
||||
|
export function add(data: any) { |
||||
|
return defHttp.post({ url: Api.root, data }); |
||||
|
} |
||||
|
|
||||
|
export function update(data: any) { |
||||
|
return defHttp.put({ url: Api.root, data }); |
||||
|
} |
||||
|
|
||||
|
export function removeByIds(ids: IDS) { |
||||
|
return defHttp.deleteWithMsg({ url: `${Api.root}/${ids.join(',')}` }); |
||||
|
} |
@ -0,0 +1,79 @@ |
|||||
|
import { BasicColumn } from '@/components/Table'; |
||||
|
import { FormSchema } from '@/components/Form'; |
||||
|
|
||||
|
export const formSchemas: FormSchema[] = [ |
||||
|
{ |
||||
|
field: 'projectName', |
||||
|
label: '项目名称', |
||||
|
component: 'Select', |
||||
|
componentProps: { |
||||
|
options: [ |
||||
|
{ |
||||
|
value: '1', |
||||
|
label: '2323', |
||||
|
}, |
||||
|
{ |
||||
|
value: '2', |
||||
|
label: '2323', |
||||
|
}, |
||||
|
{ |
||||
|
value: '3', |
||||
|
label: '2323', |
||||
|
}, |
||||
|
], |
||||
|
}, |
||||
|
}, |
||||
|
{ |
||||
|
field: 'repairTimeRange', |
||||
|
label: '报修范围', |
||||
|
component: 'RangePicker', |
||||
|
}, |
||||
|
{ |
||||
|
field: 'faultSubcategory', |
||||
|
label: '故障小类', |
||||
|
component: 'Select', |
||||
|
componentProps: { |
||||
|
options: [ |
||||
|
{ |
||||
|
value: '1', |
||||
|
label: '2323', |
||||
|
}, |
||||
|
{ |
||||
|
value: '2', |
||||
|
label: '2323', |
||||
|
}, |
||||
|
{ |
||||
|
value: '3', |
||||
|
label: '2323', |
||||
|
}, |
||||
|
], |
||||
|
}, |
||||
|
}, |
||||
|
]; |
||||
|
|
||||
|
export const columns: BasicColumn[] = [ |
||||
|
{ |
||||
|
title: '编号', |
||||
|
dataIndex: 'code', |
||||
|
}, |
||||
|
{ |
||||
|
title: '报修时间', |
||||
|
dataIndex: 'repairTime', |
||||
|
}, |
||||
|
{ |
||||
|
title: '响应级别', |
||||
|
dataIndex: 'responseLevel', |
||||
|
}, |
||||
|
{ |
||||
|
title: '故障描述', |
||||
|
dataIndex: 'faultDescription', |
||||
|
}, |
||||
|
{ |
||||
|
title: '故障地点', |
||||
|
dataIndex: 'faultLocation', |
||||
|
}, |
||||
|
{ |
||||
|
title: '当前状态', |
||||
|
dataIndex: 'status', |
||||
|
}, |
||||
|
]; |
@ -0,0 +1,88 @@ |
|||||
|
<template> |
||||
|
<div> |
||||
|
<!-- 抽屉组件 --> |
||||
|
<a-drawer |
||||
|
title="详情" |
||||
|
placement="right" |
||||
|
:closable="true" |
||||
|
:open="visible" |
||||
|
@close="onClose" |
||||
|
width="600px" |
||||
|
> |
||||
|
<div ref="chartRef" style="width: 500px; height: 500px"></div> |
||||
|
</a-drawer> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { ref } from 'vue'; |
||||
|
import { useECharts } from '@/hooks/web/useECharts'; |
||||
|
// import { getInfo } from './api'; |
||||
|
|
||||
|
export default { |
||||
|
setup() { |
||||
|
//抽屉详情 |
||||
|
const chartRef = ref(); |
||||
|
|
||||
|
const { setOptions } = useECharts(chartRef); |
||||
|
const visible = ref(false); |
||||
|
const showDrawer = () => { |
||||
|
visible.value = true; |
||||
|
setOptions(options); |
||||
|
}; |
||||
|
// 关闭抽屉的方法 |
||||
|
const onClose = () => { |
||||
|
visible.value = false; |
||||
|
}; |
||||
|
const options = { |
||||
|
title: { |
||||
|
text: '故障类型分析 ', |
||||
|
left: 'center', |
||||
|
}, |
||||
|
tooltip: { |
||||
|
trigger: 'item', |
||||
|
}, |
||||
|
legend: { |
||||
|
orient: 'vertical', |
||||
|
left: 'left', |
||||
|
}, |
||||
|
series: [ |
||||
|
{ |
||||
|
type: 'pie', |
||||
|
data: [{ value: 1048, name: '无图像/前端', id: 1 }], |
||||
|
}, |
||||
|
], |
||||
|
}; |
||||
|
|
||||
|
return { |
||||
|
visible, |
||||
|
showDrawer, |
||||
|
onClose, |
||||
|
chartRef, |
||||
|
}; |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style scoped> |
||||
|
/* 可选样式调整 */ |
||||
|
.ant-btn { |
||||
|
margin: 20px; |
||||
|
} |
||||
|
|
||||
|
/* .singerDetail{ |
||||
|
margin-bottom: 10px; |
||||
|
} */ |
||||
|
div { |
||||
|
margin-bottom: 10px; |
||||
|
} |
||||
|
|
||||
|
.timeText { |
||||
|
margin: 0 0 40px 20px; |
||||
|
color: red; |
||||
|
} |
||||
|
|
||||
|
.titleLabel { |
||||
|
color: gray; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,62 @@ |
|||||
|
<template> |
||||
|
<PageWrapper dense> |
||||
|
<BasicTable @register="registerTable"> |
||||
|
<template #toolbar> |
||||
|
<a-button type="primary" @click="handleDetail">导出</a-button> |
||||
|
<a-button type="link" @click="handleDetail">详情</a-button> |
||||
|
</template> |
||||
|
<template #bodyCell="{ column, record }"> |
||||
|
<template v-if="column && record && column.key === 'action'"> |
||||
|
<a-button type="link" @click="handleDetail">详情</a-button> |
||||
|
</template> |
||||
|
</template> |
||||
|
</BasicTable> |
||||
|
<detailDrawer ref="detailDrawerRef" /> |
||||
|
</PageWrapper> |
||||
|
</template> |
||||
|
|
||||
|
<script setup lang="ts"> |
||||
|
import { PageWrapper } from '@/components/Page'; |
||||
|
import { BasicTable, useTable } from '@/components/Table'; |
||||
|
import { list } from './api'; |
||||
|
import { formSchemas, columns } from './data'; |
||||
|
import detailDrawer from './detailDrawer.vue'; |
||||
|
import { ref } from 'vue'; |
||||
|
|
||||
|
defineOptions({ name: 'Type' }); |
||||
|
|
||||
|
const [registerTable] = useTable({ |
||||
|
rowSelection: { |
||||
|
type: 'checkbox', |
||||
|
}, |
||||
|
title: '类型分析', |
||||
|
api: list, |
||||
|
showIndexColumn: true, |
||||
|
rowKey: 'id', |
||||
|
useSearchForm: true, |
||||
|
formConfig: { |
||||
|
schemas: formSchemas, |
||||
|
name: 'type', |
||||
|
baseColProps: { |
||||
|
xs: 24, |
||||
|
sm: 24, |
||||
|
md: 24, |
||||
|
lg: 6, |
||||
|
}, |
||||
|
}, |
||||
|
columns: columns, |
||||
|
actionColumn: { |
||||
|
width: 200, |
||||
|
title: '操作', |
||||
|
key: 'action', |
||||
|
fixed: 'right', |
||||
|
}, |
||||
|
}); |
||||
|
//抽屉 |
||||
|
const detailDrawerRef = ref(); |
||||
|
const handleDetail = () => { |
||||
|
detailDrawerRef.value.showDrawer(); |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style scoped></style> |
@ -1,58 +1,35 @@ |
|||||
import { ID, IDS, PageQuery, commonExport } from '@/api/base'; |
import { ID, IDS, commonExport } from '@/api/base'; |
||||
import { defHttp } from '@/utils/http/axios'; |
import { defHttp } from '@/utils/http/axios'; |
||||
import { Dayjs } from 'dayjs'; |
|
||||
|
|
||||
enum Api { |
enum Api { |
||||
root = '/workflow/leave', |
root = '/workflow/leave', |
||||
list = '/workflow/leave/list', |
list = '/platform/agreementInfo/list', |
||||
|
tree = '/platform/catalogCategory/queryAll', |
||||
export = '/workflow/leave/export', |
export = '/workflow/leave/export', |
||||
} |
} |
||||
|
|
||||
export interface Leave { |
export function list(params: any) { |
||||
id: string; |
return defHttp.get({ url: Api.list, params }); |
||||
leaveType: string; |
|
||||
startDate: string; |
|
||||
endDate: string; |
|
||||
leaveDays: number; |
|
||||
remark: string; |
|
||||
processInstanceVo?: any; |
|
||||
dateTime?: [string, string] | [Dayjs, Dayjs]; |
|
||||
} |
} |
||||
|
export function tree() { |
||||
export interface Resp { |
return defHttp.get({ url: Api.tree }); |
||||
createDept: number; |
|
||||
createBy: number; |
|
||||
createTime: string; |
|
||||
updateBy: number; |
|
||||
updateTime: string; |
|
||||
id: string; |
|
||||
leaveType: string; |
|
||||
startDate: string; |
|
||||
endDate: string; |
|
||||
leaveDays: number; |
|
||||
remark?: any; |
|
||||
} |
|
||||
|
|
||||
export function list(params?: PageQuery) { |
|
||||
return defHttp.get<Leave[]>({ url: Api.list, params }); |
|
||||
} |
} |
||||
|
|
||||
export function exportExcel(data: any) { |
export function exportExcel(data: any) { |
||||
return commonExport(Api.export, data); |
return commonExport(Api.export, data); |
||||
} |
} |
||||
|
|
||||
export function getInfo(id: ID) { |
export function getInfo(id: ID) { |
||||
return defHttp.get<Leave>({ url: `${Api.root}/${id}` }); |
return defHttp.get({ url: `${Api.root}/${id}` }); |
||||
} |
} |
||||
|
|
||||
export function add(data: any) { |
export function add(data: any) { |
||||
return defHttp.post<Resp>({ url: Api.root, data }); |
return defHttp.post({ url: Api.root, data }); |
||||
} |
} |
||||
|
|
||||
export function update(data: any) { |
export function update(data: any) { |
||||
return defHttp.put<Resp>({ url: Api.root, data }); |
return defHttp.put({ url: Api.root, data }); |
||||
} |
} |
||||
|
|
||||
export function removeByIds(ids: IDS) { |
export function removeByIds(ids: IDS) { |
||||
return defHttp.deleteWithMsg<void>({ url: `${Api.root}/${ids.join(',')}` }); |
return defHttp.deleteWithMsg({ url: `${Api.root}/${ids.join(',')}` }); |
||||
} |
} |
||||
|
@ -1,58 +1,35 @@ |
|||||
import { ID, IDS, PageQuery, commonExport } from '@/api/base'; |
import { ID, IDS, commonExport } from '@/api/base'; |
||||
import { defHttp } from '@/utils/http/axios'; |
import { defHttp } from '@/utils/http/axios'; |
||||
import { Dayjs } from 'dayjs'; |
|
||||
|
|
||||
enum Api { |
enum Api { |
||||
root = '/workflow/leave', |
root = '/workflow/leave', |
||||
list = '/workflow/leave/list', |
list = '/platform/pointInfo/list', |
||||
|
tree = '/platform/projectCategoryPoint/queryAll', |
||||
export = '/workflow/leave/export', |
export = '/workflow/leave/export', |
||||
} |
} |
||||
|
|
||||
export interface Leave { |
export function list(params: any) { |
||||
id: string; |
return defHttp.get({ url: Api.list, params }); |
||||
leaveType: string; |
|
||||
startDate: string; |
|
||||
endDate: string; |
|
||||
leaveDays: number; |
|
||||
remark: string; |
|
||||
processInstanceVo?: any; |
|
||||
dateTime?: [string, string] | [Dayjs, Dayjs]; |
|
||||
} |
} |
||||
|
export function tree() { |
||||
export interface Resp { |
return defHttp.get({ url: Api.tree }); |
||||
createDept: number; |
|
||||
createBy: number; |
|
||||
createTime: string; |
|
||||
updateBy: number; |
|
||||
updateTime: string; |
|
||||
id: string; |
|
||||
leaveType: string; |
|
||||
startDate: string; |
|
||||
endDate: string; |
|
||||
leaveDays: number; |
|
||||
remark?: any; |
|
||||
} |
|
||||
|
|
||||
export function list(params?: PageQuery) { |
|
||||
return defHttp.get<Leave[]>({ url: Api.list, params }); |
|
||||
} |
} |
||||
|
|
||||
export function exportExcel(data: any) { |
export function exportExcel(data: any) { |
||||
return commonExport(Api.export, data); |
return commonExport(Api.export, data); |
||||
} |
} |
||||
|
|
||||
export function getInfo(id: ID) { |
export function getInfo(id: ID) { |
||||
return defHttp.get<Leave>({ url: `${Api.root}/${id}` }); |
return defHttp.get({ url: `${Api.root}/${id}` }); |
||||
} |
} |
||||
|
|
||||
export function add(data: any) { |
export function add(data: any) { |
||||
return defHttp.post<Resp>({ url: Api.root, data }); |
return defHttp.post({ url: Api.root, data }); |
||||
} |
} |
||||
|
|
||||
export function update(data: any) { |
export function update(data: any) { |
||||
return defHttp.put<Resp>({ url: Api.root, data }); |
return defHttp.put({ url: Api.root, data }); |
||||
} |
} |
||||
|
|
||||
export function removeByIds(ids: IDS) { |
export function removeByIds(ids: IDS) { |
||||
return defHttp.deleteWithMsg<void>({ url: `${Api.root}/${ids.join(',')}` }); |
return defHttp.deleteWithMsg({ url: `${Api.root}/${ids.join(',')}` }); |
||||
} |
} |
||||
|
Loading…
Reference in new issue