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 { Dayjs } from 'dayjs'; |
|||
|
|||
enum Api { |
|||
root = '/workflow/leave', |
|||
list = '/workflow/leave/list', |
|||
list = '/platform/agreementInfo/list', |
|||
tree = '/platform/catalogCategory/queryAll', |
|||
export = '/workflow/leave/export', |
|||
} |
|||
|
|||
export interface Leave { |
|||
id: string; |
|||
leaveType: string; |
|||
startDate: string; |
|||
endDate: string; |
|||
leaveDays: number; |
|||
remark: string; |
|||
processInstanceVo?: any; |
|||
dateTime?: [string, string] | [Dayjs, Dayjs]; |
|||
export function list(params: any) { |
|||
return defHttp.get({ url: Api.list, params }); |
|||
} |
|||
|
|||
export interface Resp { |
|||
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 tree() { |
|||
return defHttp.get({ url: Api.tree }); |
|||
} |
|||
|
|||
export function exportExcel(data: any) { |
|||
return commonExport(Api.export, data); |
|||
} |
|||
|
|||
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) { |
|||
return defHttp.post<Resp>({ url: Api.root, data }); |
|||
return defHttp.post({ url: Api.root, data }); |
|||
} |
|||
|
|||
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) { |
|||
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 { Dayjs } from 'dayjs'; |
|||
|
|||
enum Api { |
|||
root = '/workflow/leave', |
|||
list = '/workflow/leave/list', |
|||
list = '/platform/pointInfo/list', |
|||
tree = '/platform/projectCategoryPoint/queryAll', |
|||
export = '/workflow/leave/export', |
|||
} |
|||
|
|||
export interface Leave { |
|||
id: string; |
|||
leaveType: string; |
|||
startDate: string; |
|||
endDate: string; |
|||
leaveDays: number; |
|||
remark: string; |
|||
processInstanceVo?: any; |
|||
dateTime?: [string, string] | [Dayjs, Dayjs]; |
|||
export function list(params: any) { |
|||
return defHttp.get({ url: Api.list, params }); |
|||
} |
|||
|
|||
export interface Resp { |
|||
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 tree() { |
|||
return defHttp.get({ url: Api.tree }); |
|||
} |
|||
|
|||
export function exportExcel(data: any) { |
|||
return commonExport(Api.export, data); |
|||
} |
|||
|
|||
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) { |
|||
return defHttp.post<Resp>({ url: Api.root, data }); |
|||
return defHttp.post({ url: Api.root, data }); |
|||
} |
|||
|
|||
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) { |
|||
return defHttp.deleteWithMsg<void>({ url: `${Api.root}/${ids.join(',')}` }); |
|||
return defHttp.deleteWithMsg({ url: `${Api.root}/${ids.join(',')}` }); |
|||
} |
|||
|
Loading…
Reference in new issue