Browse Source

点位上报

ops-management-platform-frontend-dev
wbc 3 weeks ago
parent
commit
fd1e4e7d7f
  1. 236
      src/views/IO/patrol/patroling/addModal.vue
  2. 58
      src/views/IO/patrol/patroling/api.ts
  3. 46
      src/views/IO/patrol/patroling/data.ts
  4. 41
      src/views/IO/patrol/patroling/detailDrawer.vue
  5. 59
      src/views/IO/patrol/patroling/index.vue
  6. 53
      src/views/IO/patrolReport/api.ts
  7. 130
      src/views/IO/patrolReport/detailDrawer.vue
  8. 44
      src/views/IO/patrolReport/index.vue
  9. 8
      src/views/document/addModal.vue
  10. 8
      src/views/project/contractManage/addModal.vue
  11. 10
      src/views/project/contractManage/api.ts
  12. 103
      src/views/project/contractManage/index.vue
  13. 8
      src/views/project/projectManage/addModal.vue
  14. 2
      src/views/project/projectManage/index.vue
  15. 4
      src/views/project/serviceManage/index.vue
  16. 11
      src/views/property/point/api.ts
  17. 17
      src/views/property/point/detailDrawer.vue
  18. 19
      src/views/property/point/index.vue
  19. 96
      src/views/property/point/pointModal.vue

236
src/views/IO/patrol/patroling/addModal.vue

@ -0,0 +1,236 @@
<template>
<a-modal v-model:open="visible" :title="title" @ok="handleOk" width="80%">
<a-form :model="form" layout="vertical">
<a-row :gutter="[16, 16]">
<a-col :span="12">
<a-row :gutter="[16, 16]">
<a-col :span="24">
<a-form-item label="合同名称" name="contractName">
<a-input v-model:value="form.contractName" placeholder="请输入" disabled />
</a-form-item>
</a-col>
</a-row>
<a-row :gutter="[16, 16]">
<a-col :span="24">
<a-form-item label="项目名称" name="projectName">
<a-input v-model:value="form.projectName" placeholder="请输入" disabled />
</a-form-item>
</a-col>
</a-row>
<a-row :gutter="[16, 16]">
<a-col :span="24">
<a-form-item label="运维单位" name="ioCompany">
<a-input v-model:value="form.ioCompany" placeholder="请输入" disabled />
</a-form-item>
</a-col>
</a-row>
<a-row :gutter="[16, 16]">
<a-col :span="24">
<a-form-item label="频率" name="frequnency">
<a-input v-model:value="form.frequnency" placeholder="请输入" disabled />
</a-form-item>
</a-col>
</a-row>
<a-row :gutter="[16, 16]">
<a-col :span="24">
<a-form-item label="日期范围" name="dateRange">
<a-range-picker v-model:value="form.dateRange" /><a-button
style="margin-left: 10px"
type="primary"
@click="createPlan"
>生成</a-button
>
</a-form-item>
</a-col>
</a-row>
<a-row :gutter="[16, 16]">
<a-col :span="24">
<a-form-item label="排除周末" name="isWeekend">
<a-switch v-model:checked="form.isWeekend" />
</a-form-item>
</a-col>
</a-row>
<a-row :gutter="[16, 16]">
<a-col :span="24">
<a-form-item label="计划描述" name="description">
<a-textarea v-model:value="form.description" :rows="4" placeholder="请输入" />
</a-form-item>
</a-col>
</a-row>
<a-row :gutter="[16, 16]">
<a-col :span="24">
<a-form-item label="巡检点位" name="pointName">
<a-select
v-model:value="form.pointName"
:options="projectNameOptions"
placeholder="请选择"
/>
</a-form-item>
</a-col>
</a-row>
</a-col>
<a-col :span="12">
<a-table
:dataSource="form.finishStatus"
:columns="finishColumns"
bordered
style="margin-top: 2%"
>
<template #bodyCell="{ column, record, index }">
<template v-if="column && record && column.key === 'action'">
<a-button type="link" @click="deletePlan(index)">删除</a-button>
</template>
</template>
</a-table>
</a-col>
</a-row>
</a-form>
</a-modal>
</template>
<script>
import { reactive, ref } from 'vue';
import { getInfo } from './api';
import dayjs from 'dayjs';
export default {
setup() {
const title = ref('生成计划');
const visible = ref(false);
const form = reactive({
contractName: '',
projectName: '',
ioCompany: '',
dateRange: [],
frequnency: '',
isWeekend: false,
description: '',
pointName: '',
finishStatus: [],
});
//
const projectNameOptions = [
{
value: '1',
label: 'a',
},
{
value: '2',
label: 'b',
},
{
value: '3',
label: 'c',
},
];
const showModal = async (id) => {
visible.value = true;
const data = await getInfo(id);
for (let i in form) {
form[i] = data[i];
}
};
const handleOk = () => {
console.log('Form Data:', form);
//
visible.value = false;
};
//
const finishColumns = [
{
title: '开始日期',
dataIndex: 'scheduleStartDate',
key: 'scheduleStartDate',
},
{
title: '结束日期',
dataIndex: 'scheduleEndDate',
key: 'scheduleEndDate',
},
{
title: '状态',
dataIndex: 'status',
key: 'status',
customRender: ({ text }) => {
if (text == 1) {
return '已完成';
} else {
return '未完成';
}
},
},
{
title: '完成日期',
dataIndex: 'finishDate',
key: 'finishDate',
},
{
title: '操作',
dataIndex: 'action',
key: 'action',
},
];
//
const createPlan = () => {
form.finishStatus = [];
const startDate = new Date(form.dateRange[0]);
const endDate = new Date(form.dateRange[1]);
const dates = [];
let currentDate = startDate;
if (form.isWeekend) {
while (currentDate <= endDate) {
const whichDay = dayjs(currentDate).format('dddd');
if (whichDay != 'Saturday' && whichDay != 'Sunday') {
const singerPlan = {
scheduleStartDate: dayjs(currentDate).format('YYYY-MM-DD'),
scheduleEndDate: dayjs(currentDate).format('YYYY-MM-DD'),
status: 0,
};
form.finishStatus.push(singerPlan);
}
//
currentDate.setDate(currentDate.getDate() + 1);
}
console.log(dates);
} else {
while (currentDate <= endDate) {
const singerPlan = {
scheduleStartDate: dayjs(currentDate).format('YYYY-MM-DD'),
scheduleEndDate: dayjs(currentDate).format('YYYY-MM-DD'),
status: 0,
};
form.finishStatus.push(singerPlan);
//
currentDate.setDate(currentDate.getDate() + 1);
}
console.log(dates);
}
};
//
const deletePlan = (index) => {
form.finishStatus.splice(index, 1);
};
return {
visible,
title,
form,
showModal,
handleOk,
projectNameOptions,
finishColumns,
createPlan,
deletePlan,
};
},
};
</script>
<style scoped>
/* 可选样式调整 */
.ant-modal-body {
max-width: 600px;
margin: 0 auto;
}
</style>

58
src/views/IO/patrol/patroling/api.ts

@ -1,58 +1,34 @@
import { ID, IDS, PageQuery, commonExport } from '@/api/base';
import { defHttp } from '@/utils/http/axios';
import { Dayjs } from 'dayjs';
enum Api {
root = '/workflow/leave',
list = '/workflow/leave/list',
export = '/workflow/leave/export',
root = '/platform/inspectPlanInfo',
list = '/platform/inspectPlanInfo/list',
// export = '/workflow/leave/export',
getProjectInfo = '/platform/projectInfo/getNames',
}
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 exportExcel(data: any) {
return commonExport(Api.export, data);
export function getProjectInfo() {
return defHttp.get({ url: Api.getProjectInfo });
}
// export function exportExcel(data: any) {
// return commonExport(Api.export, data);
// }
export function getInfo(id: ID) {
return defHttp.get<Leave>({ url: `${Api.root}/${id}` });
export function getInfo(id: any) {
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(',')}` });
export function removeByIds(ids: any) {
return defHttp.deleteWithMsg({ url: `${Api.root}/${ids.join(',')}` });
}

46
src/views/IO/patrol/patroling/data.ts

@ -6,43 +6,13 @@ export const formSchemas: FormSchema[] = [
field: 'projectName',
label: '项目名称',
component: 'Select',
componentProps: {
options: [
{
value: '1',
label: '2323',
},
{
value: '2',
label: '2323',
},
{
value: '3',
label: '2323',
},
],
},
componentProps: {},
},
{
field: 'ioCompany',
label: '运维单位',
component: 'Select',
componentProps: {
options: [
{
value: '1',
label: '2323',
},
{
value: '2',
label: '2323',
},
{
value: '3',
label: '2323',
},
],
},
componentProps: {},
},
{
field: 'plaDate',
@ -79,9 +49,21 @@ export const columns: BasicColumn[] = [
{
title: '状态',
dataIndex: 'status',
customRender: ({ value }) => {
return value == 0 ? '启用' : '禁用';
},
},
{
title: '完成情况',
dataIndex: 'progress',
customRender: ({ value }) => {
if (value == 0) {
return '未开始';
} else if (value == 1) {
return '进行中';
} else if (value == 2) {
return '已完成';
}
},
},
];

41
src/views/IO/patrol/patroling/detailDrawer.vue

@ -49,7 +49,7 @@
</a-row>
</a-tab-pane>
<a-tab-pane key="2" tab="完成情况">
<a-table :dataSource="finishStatus" :columns="finishColumns" bordered />
<a-table :dataSource="detail.finishStatus" :columns="finishColumns" bordered />
</a-tab-pane>
</a-tabs>
</a-drawer>
@ -58,7 +58,8 @@
<script>
import { reactive, ref } from 'vue';
// import { getInfo } from './api';
import { getInfo } from './api';
export default {
setup() {
//
@ -71,43 +72,40 @@
frequency: null,
progress: '',
description: '',
finishStatus: [],
});
const finishStatus = ref([]);
const finishColumns = [
{
title: '开始日期',
dataIndex: 'startDate',
key: 'startDate',
dataIndex: 'scheduleStartDate',
key: 'scheduleStartDate',
},
{
title: '结束日期',
dataIndex: 'endDate',
key: 'endDate',
dataIndex: 'scheduleEndDate',
key: 'scheduleEndDate',
},
{
title: '完成日期',
dataIndex: 'finishDate',
key: 'finishDate',
},
{
title: '状态',
dataIndex: 'status',
key: 'status',
},
{
title: '完成日期',
dataIndex: 'finishDate',
key: 'finishDate ',
},
];
//
const visible = ref(false);
// const showDrawer = async(id) => {
// const data = await getInfo(id)
// for(let i in detail){
// detail[i] = data[i]
// }
// visible.value = true;
// console.log(detail)
// };
const showDrawer = () => {
const showDrawer = async (id) => {
const data = await getInfo(id);
for (let i in detail) {
detail[i] = data[i];
}
visible.value = true;
console.log(detail);
};
//
const onClose = () => {
@ -120,7 +118,6 @@
showDrawer,
onClose,
activeKey,
finishStatus,
finishColumns,
detail,
};

59
src/views/IO/patrol/patroling/index.vue

@ -1,33 +1,39 @@
<template>
<PageWrapper dense>
<BasicTable @register="registerTable">
<template #toolbar>
<a-button type="primary" @click="handleAdd">生成计划</a-button>
<a-button type="primary" @click="handleDetail">重置计划</a-button>
</template>
<template #toolbar> </template>
<template #bodyCell="{ column, record }">
<template v-if="column && record && column.key === 'action'">
<a-button type="link" @click="handleDetail">详情</a-button>
<a-button type="link" @click="handleDetail(record.id)">详情</a-button>
<a-button type="link" @click="handleAdd(record.id)" v-show="record.progress == 0"
>生成计划</a-button
>
<a-button type="link" @click="handleAdd(record.id)" v-show="record.progress == 1"
>重置计划</a-button
>
</template>
</template>
</BasicTable>
<detailDrawer ref="detailDrawerRef" />
<addModal ref="addModalRef" />
</PageWrapper>
</template>
<script setup lang="ts">
import { PageWrapper } from '@/components/Page';
import { BasicTable, useTable } from '@/components/Table';
import { list } from './api';
import { list, getProjectInfo } from './api';
import { formSchemas, columns } from './data';
import { useGo } from '@/hooks/web/usePage';
import { PageEnum } from '@/enums/pageEnum';
import detailDrawer from './detailDrawer.vue';
import { ref } from 'vue';
import { ref, computed } from 'vue';
import addModal from './addModal.vue';
defineOptions({ name: 'Patroling' });
const [registerTable, { reload }] = useTable({
const newFormSchemas: any = computed(() => {
formSchemas[0].componentProps.options = projectOptions.value;
return formSchemas;
});
const [registerTable] = useTable({
rowSelection: {
type: 'checkbox',
},
@ -37,7 +43,7 @@
rowKey: 'id',
useSearchForm: true,
formConfig: {
schemas: formSchemas,
schemas: newFormSchemas,
name: 'patroling',
baseColProps: {
xs: 24,
@ -54,18 +60,29 @@
fixed: 'right',
},
});
function handleAdd() {
go({ path: '/workflow/leaveEdit/index' as PageEnum, query: { type: 'add' } });
reload();
}
//
const addModalRef = ref();
const handleAdd = (id: any) => {
addModalRef.value.showModal(id);
};
//
const detailDrawerRef = ref();
const handleDetail = () => {
detailDrawerRef.value.showDrawer();
const handleDetail = (id: any) => {
detailDrawerRef.value.showDrawer(id);
};
const projectOptions = ref([]);
const getProjectOptions = async () => {
const res = await getProjectInfo();
res.forEach((i: any) => {
i.value = i.id;
i.label = i.projectName;
});
projectOptions.value = res;
};
const getOptions = () => {
getProjectOptions();
};
//
const go = useGo();
getOptions();
</script>
<style scoped></style>

53
src/views/IO/patrolReport/api.ts

@ -1,58 +1,31 @@
import { ID, IDS, PageQuery, commonExport } from '@/api/base';
import { defHttp } from '@/utils/http/axios';
import { Dayjs } from 'dayjs';
enum Api {
root = '/workflow/leave',
list = '/workflow/leave/list',
root = '/platform/inspectionDailyReport',
list = '/platform/inspectionDailyReport/list',
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 exportExcel(data: any) {
return commonExport(Api.export, data);
}
// export function exportExcel(data: any) {
// return commonExport(Api.export, data);
// }
export function getInfo(id: ID) {
return defHttp.get<Leave>({ url: `${Api.root}/${id}` });
export function getInfo(id: any) {
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(',')}` });
export function removeByIds(ids: any) {
return defHttp.deleteWithMsg({ url: `${Api.root}/${ids.join(',')}` });
}

130
src/views/IO/patrolReport/detailDrawer.vue

@ -0,0 +1,130 @@
<template>
<div>
<!-- 抽屉组件 -->
<a-drawer
title="巡检日报详情"
placement="right"
:closable="true"
:open="visible"
@close="onClose"
width="600px"
>
<a-tabs v-model:activeKey="activeKey">
<a-tab-pane key="1" tab="详细信息">
<a-row :gutter="[16, 16]">
<a-col :span="24">
<div><span class="titleLabel">项目名称</span>{{ detail.projectName }}</div>
</a-col>
</a-row>
<a-row :gutter="[16, 16]">
<a-col :span="24">
<div><span class="titleLabel">运维单位</span>{{ detail.ioCompany }}</div>
</a-col>
</a-row>
<a-row :gutter="[16, 16]">
<a-col :span="24">
<div><span class="titleLabel">巡检时间</span>{{ detail.inspectionTime }}</div>
</a-col>
</a-row>
<a-row :gutter="[16, 16]">
<a-col :span="12">
<div><span class="titleLabel">巡检部位</span>{{ detail.inspectionPart }}</div>
</a-col>
<a-col :span="12">
<div><span class="titleLabel">巡检人员</span>{{ detail.inspectionPeople }}</div>
</a-col>
</a-row>
<a-row :gutter="[16, 16]">
<a-col :span="24">
<div><span class="titleLabel">巡检情况</span>{{ detail.inspectionStatus }}</div>
</a-col>
</a-row>
<a-row :gutter="[16, 16]">
<a-col :span="24">
<div><span class="titleLabel">问题处理</span>{{ detail.problemHandleDesc }}</div>
</a-col>
</a-row>
<a-row :gutter="[16, 16]">
<a-col :span="24">
<div><span class="titleLabel">附件</span>{{ detail.attachment }}</div>
</a-col>
</a-row>
<a-row :gutter="[16, 16]">
<a-col :span="24">
<div><span class="titleLabel">巡检照片</span>{{ detail.inspectionPhoto }}</div>
</a-col>
</a-row>
</a-tab-pane>
</a-tabs>
</a-drawer>
</div>
</template>
<script>
import { reactive, ref } from 'vue';
import { getInfo } from './api';
export default {
setup() {
//
let detail = reactive({
projectName: '',
ioCompany: '',
inspectionTime: '',
inspectionPart: '',
inspectionPeople: '',
inspectionStatus: '',
problemHandleDesc: '',
attachment: null,
inspectionPhoto: null,
});
//
const visible = ref(false);
const showDrawer = async (id) => {
const data = await getInfo(id);
for (let i in detail) {
detail[i] = data[i];
}
visible.value = true;
console.log(detail);
};
//
const onClose = () => {
visible.value = false;
};
const activeKey = ref('1');
return {
visible,
showDrawer,
onClose,
activeKey,
detail,
};
},
};
</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>

44
src/views/IO/patrolReport/index.vue

@ -2,31 +2,42 @@
<PageWrapper dense>
<BasicTable @register="registerTable">
<template #toolbar>
<a-button type="primary" @click="handleAdd(1)">新增前端日报</a-button>
<a-button type="primary" @click="handleAdd(2)">新增后端日报</a-button>
<a-button type="primary" @click="handleAdd">编辑</a-button>
<a-button type="primary" @click="handleAdd">删除</a-button>
<a-button type="primary" @click="handleAdd">同步日常巡检</a-button>
<a-button type="primary" @click="handleAdd">日报资料导出</a-button>
<a-button type="primary" @click="handleAdd()">新增前端日报</a-button>
<a-button type="primary" @click="handleAdd()">新增后端日报</a-button>
<!-- <a-button type="primary" @click="handleAdd">同步日常巡检</a-button>
<a-button type="primary" @click="handleAdd">日报资料导出</a-button> -->
</template>
<template #bodyCell="{ column, record }">
<template v-if="column && record && column.key === 'action'"> </template>
<template v-if="column && record && column.key === 'action'">
<a-button type="link" @click="handleEdit(record.id)">编辑</a-button>
<a-popconfirm
title="确定要删除吗?"
ok-text="是"
cancel-text="否"
@confirm="handleDelete(record.id)"
>
<a-button type="link">删除</a-button>
</a-popconfirm>
<a-button type="link" @click="handleDetail(record.id)">详情</a-button>
</template>
</template>
</BasicTable>
<reportModal ref="reportModalRef" />
<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 { list, removeByIds } from './api';
import { formSchemas, columns } from './patrolReportdata';
import reportModal from './reportModal.vue';
import { ref } from 'vue';
import detailDrawer from './detailDrawer.vue';
defineOptions({ name: 'PatrolReport' });
const [registerTable] = useTable({
const [registerTable, { reload }] = useTable({
rowSelection: {
type: 'checkbox',
},
@ -56,8 +67,19 @@
//
const reportModalRef = ref();
const handleAdd = (type: any) => {
reportModalRef.value.showModal(type);
const handleAdd = () => {
reportModalRef.value.showModal(1);
};
const handleEdit = (id: any) => {
reportModalRef.value.showModal(2, id);
};
const handleDelete = async (id: any) => {
await removeByIds([id]);
reload();
};
const detailDrawerRef = ref();
const handleDetail = (id: any) => {
detailDrawerRef.value.showDrawer(id);
};
</script>

8
src/views/document/addModal.vue

@ -38,7 +38,7 @@
<a-upload
:before-upload="beforeUpload"
@change="importChange"
:file-list="filelists"
:file-list="fileLists"
:maxCount="1"
>
<a-button type="primary"> 上传 </a-button>
@ -118,13 +118,13 @@
visible.value = false;
};
//
const filelists = ref([]);
const fileLists = ref([]);
const beforeUpload = async (file) => {
form.attachment = file;
return false;
};
const importChange = ({ fileList }) => {
filelists.value = fileList;
fileLists.value = fileList;
};
return {
visible,
@ -136,7 +136,7 @@
formRef,
closeModal,
rules,
filelists,
fileLists,
beforeUpload,
importChange,
};

8
src/views/project/contractManage/addModal.vue

@ -158,7 +158,7 @@
<a-upload
:before-upload="beforeUpload"
@change="importChange"
:file-list="filelists"
:file-list="fileLists"
:maxCount="1"
>
<a-button type="primary"> 上传 </a-button>
@ -188,7 +188,7 @@
const title = ref('新增');
const formRef = ref();
const visible = ref(false);
const filelists = ref([]);
const fileLists = ref([]);
let form = reactive({
projectName: null,
contractName: '',
@ -245,7 +245,7 @@
return false;
};
const importChange = ({ fileList }) => {
filelists.value = fileList;
fileLists.value = fileList;
console.log(fileList);
};
const rules = {
@ -307,7 +307,7 @@
closeModal,
beforeUpload,
importChange,
filelists,
fileLists,
projectNameOptions,
contractTypeOptions,
districtOptions,

10
src/views/project/contractManage/api.ts

@ -7,6 +7,8 @@ enum Api {
getDistrictInfo = '/platform/districtInfo/queryAll',
getProjectInfo = '/platform/projectInfo/getNames',
getContractType = '/platform/contractType/list',
getCategory = '/platform/catalogCategory/queryOutCategoryName',
createPlans = '/platform/inspectPlanInfo/createPlans',
}
export function list(params: any) {
@ -41,3 +43,11 @@ export function getProjectInfo() {
export function getContractType() {
return defHttp.get({ url: Api.getContractType });
}
export function getCategory() {
return defHttp.get({ url: Api.getCategory });
}
export function createPlans(params: any) {
return defHttp.get({ url: Api.createPlans, params });
}

103
src/views/project/contractManage/index.vue

@ -3,6 +3,8 @@
<BasicTable @register="registerTable">
<template #toolbar>
<a-button type="primary" @click="handleAdd">新增</a-button>
<!-- <a-button type="primary" @click="addWorker">配置人员</a-button> -->
<a-button type="primary" @click="addService">配置服务目录</a-button>
</template>
<template #bodyCell="{ column, record }">
<template v-if="column && record && column.key === 'action'">
@ -19,6 +21,48 @@
</template>
</template>
</BasicTable>
<a-modal
v-model:open="serviceVisible"
title="服务目录配置"
@ok="serviceSubmit"
@cancel="closeService"
width="30%"
>
<a-form :model="serviceForm" layout="vertical" :rules="serviceRules" ref="serviceRef">
<a-row :gutter="[16, 16]">
<a-col :span="24">
<a-form-item label="合同名称" name="contractId">
<a-select
v-model:value="serviceForm.contractId"
:options="contractOptions"
placeholder="请选择"
:fieldNames="{
value: 'id',
label: 'contractName',
options: 'options',
}"
/>
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :span="24">
<a-form-item label="目录名称" name="categoryId">
<a-select
v-model:value="serviceForm.categoryId"
:options="categoryOptions"
placeholder="请选择"
:fieldNames="{
value: 'id',
label: 'categoryName',
options: 'options',
}"
/>
</a-form-item>
</a-col>
</a-row>
</a-form>
</a-modal>
<detailDrawer ref="detailDrawerRef" />
<addModal ref="addModalRef" />
</PageWrapper>
@ -27,11 +71,12 @@
<script setup lang="ts">
import { PageWrapper } from '@/components/Page';
import { BasicTable, useTable } from '@/components/Table';
import { list, removeByIds } from './api';
import { list, removeByIds, createPlans, getCategory } from './api';
import { formSchemas, columns } from './data';
import detailDrawer from './detailDrawer.vue';
import { ref } from 'vue';
import { ref, reactive } from 'vue';
import addModal from './addModal.vue';
import { message } from 'ant-design-vue';
defineOptions({ name: 'ContractManage' });
@ -80,6 +125,60 @@
const handleEdit = (id: any) => {
addModalRef.value.showModal(2, id);
};
//
let serviceForm = reactive({
contractId: '',
categoryId: '',
});
const serviceVisible = ref(false);
const serviceRef = ref();
const serviceSubmit = () => {
serviceRef.value.validate().then((valid: any) => {
if (valid) {
let params = {
contractId: serviceForm.contractId,
categoryId: serviceForm.categoryId,
};
createPlans(params).then((_) => {
message.success('操作成功');
closeService();
});
}
});
};
const serviceRules = {
contractId: [{ required: true, message: '请选择' }],
categoryId: [{ required: true, message: '请选择' }],
};
const addService = () => {
serviceVisible.value = true;
getOptions();
};
const closeService = () => {
serviceVisible.value = false;
serviceForm = {
contractId: '',
categoryId: '',
};
};
const contractOptions = ref([]);
const getContractOptions = () => {
list({ pageNum: 1, pageSize: 100 }).then((res) => {
contractOptions.value = res.rows;
});
};
const categoryOptions = ref([]);
const getCategoryOptions = () => {
getCategory().then((res) => {
categoryOptions.value = res;
});
};
const getOptions = () => {
getCategoryOptions();
getContractOptions();
};
</script>
<style scoped></style>

8
src/views/project/projectManage/addModal.vue

@ -93,7 +93,7 @@
<a-upload
:before-upload="beforeUpload"
@change="importChange"
:file-list="filelists"
:file-list="fileLists"
:maxCount="1"
>
<a-button type="primary"> 上传 </a-button>
@ -186,13 +186,13 @@
visible.value = false;
};
//
const filelists = ref([]);
const fileLists = ref([]);
const beforeUpload = async (file) => {
form.attachment = file;
return false;
};
const importChange = ({ fileList }) => {
filelists.value = fileList;
fileLists.value = fileList;
};
const iconLists = ref([]);
const beforeUploadIcon = async (file) => {
@ -240,7 +240,7 @@
rules,
formRef,
closeModal,
filelists,
fileLists,
iconLists,
beforeUpload,
beforeUploadIcon,

2
src/views/project/projectManage/index.vue

@ -3,8 +3,6 @@
<BasicTable @register="registerTable">
<template #toolbar>
<a-button type="primary" @click="handleAdd">新增</a-button>
<a-button type="primary" @click="handleAdd">配置人员</a-button>
<a-button type="primary" @click="handleAdd">配置服务目录</a-button>
</template>
<template #bodyCell="{ column, record }">
<template v-if="column && record && column.key === 'action'">

4
src/views/project/serviceManage/index.vue

@ -215,7 +215,7 @@
};
addCategory(params).then((_) => {
message.success('新增成功');
catalogVisible.value = false;
closeCatalog();
getTree();
});
} else {
@ -225,7 +225,7 @@
};
editCategory(params).then((_) => {
message.success('编辑成功');
catalogVisible.value = false;
closeCatalog();
getTree();
});
}

11
src/views/property/point/api.ts

@ -2,10 +2,12 @@ import { ID, IDS, commonExport } from '@/api/base';
import { defHttp } from '@/utils/http/axios';
enum Api {
root = '/workflow/leave',
root = '/platform/pointInfo',
list = '/platform/pointInfo/list',
tree = '/platform/projectCategoryPoint/queryAll',
export = '/workflow/leave/export',
getSubcategoryType = '/platform/subcategoryType/list',
workOrderAdd = '/platform/workOrder/add',
}
export function list(params: any) {
@ -33,3 +35,10 @@ export function update(data: any) {
export function removeByIds(ids: IDS) {
return defHttp.deleteWithMsg({ url: `${Api.root}/${ids.join(',')}` });
}
export function getSubcategoryType() {
return defHttp.get({ url: Api.getSubcategoryType });
}
export function workOrderAdd(data: any) {
return defHttp.post({ url: Api.workOrderAdd, data });
}

17
src/views/property/point/detailDrawer.vue

@ -49,7 +49,7 @@
<script>
import { reactive, ref } from 'vue';
// import { getInfo } from './api';
import { getInfo } from './api';
export default {
setup() {
@ -65,16 +65,13 @@
//
const visible = ref(false);
// const showDrawer = async(id) => {
// const data = await getInfo(id)
// for(let i in detail){
// detail[i] = data[i]
// }
// visible.value = true;
// console.log(detail)
// };
const showDrawer = () => {
const showDrawer = async (id) => {
const data = await getInfo(id);
for (let i in detail) {
detail[i] = data[i];
}
visible.value = true;
console.log(detail);
};
//
const onClose = () => {

19
src/views/property/point/index.vue

@ -19,15 +19,16 @@
<BasicTable @register="registerTable">
<template #toolbar>
<a-button type="primary" @click="handleAdd">新增</a-button>
<a-button type="primary" @click="handleDetail">导入</a-button>
<a-button type="primary" @click="showpointModal">点位上报</a-button>
<a-button type="primary" @click="handleDetail">点位导出</a-button>
<a-button type="primary">导入</a-button>
<a-button type="primary">点位导出</a-button>
</template>
<template #bodyCell="{ column, record }">
<template v-if="column && record && column.key === 'action'">
<a-button type="link" @click="showpointModal(record.id)">点位上报</a-button>
<a-button type="link" @click="handleEdit(record.id)">编辑</a-button>
<a-button type="link" @click="handleDelete(record.id)">删除</a-button>
<a-button type="link" @click="handleDetail">详情</a-button>
<a-button type="link" @click="handleDetail(record.id)">详情</a-button>
</template>
</template>
</BasicTable>
@ -79,7 +80,7 @@
immediate: false,
columns: columns,
actionColumn: {
width: 200,
width: 300,
title: '操作',
key: 'action',
fixed: 'right',
@ -99,8 +100,8 @@
//
//
const pointModalRef = ref();
const showpointModal = () => {
pointModalRef.value.showModal();
const showpointModal = (id: any) => {
pointModalRef.value.showModal(id);
};
//tree
const checkedTree = ref([]);
@ -123,8 +124,8 @@
});
//
const detailDrawerRef = ref();
const handleDetail = () => {
detailDrawerRef.value.showDrawer();
const handleDetail = (id: any) => {
detailDrawerRef.value.showDrawer(id);
};
</script>

96
src/views/property/point/pointModal.vue

@ -4,7 +4,7 @@
<a-row :gutter="[16, 16]">
<a-col :span="24">
<a-form-item label="所属项目" name="projectName">
<a-input v-model:value="form.projectName" placeholder="所属项目" />
<a-input v-model:value="form.projectName" placeholder="所属项目" disabled />
</a-form-item>
</a-col>
</a-row>
@ -38,19 +38,30 @@
<a-row :gutter="[16, 16]">
<a-col :span="12">
<a-form-item label="故障大类" name="faultCategory">
<a-select v-model:value="form.faultCategory" :options="[{ value: '前端' }]" />
<a-select
v-model:value="form.faultCategory"
:options="[{ value: '前端' }, { value: '后端' }]"
/>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="故障小类" name="faultSubcategory">
<a-select v-model:value="form.faultSubcategory" :options="faultSubcategoryOptions" />
<a-select
v-model:value="form.faultSubcategory"
:options="faultSubcategoryOptions"
:fieldNames="{
label: 'typeName',
value: 'id',
options: 'options',
}"
/>
</a-form-item>
</a-col>
</a-row>
<a-row :gutter="[16, 16]">
<a-col :span="12">
<a-form-item label="故障机构" name="institution">
<a-select v-model:value="form.institution" :options="institutionOptions" />
<a-form-item label="所属机构" name="organizationName">
<a-input v-model:value="form.organizationName" disabled />
</a-form-item>
</a-col>
<a-col :span="12">
@ -109,6 +120,8 @@
<script>
import { reactive, ref } from 'vue';
import { getInfo, getSubcategoryType, workOrderAdd } from './api';
import { message } from 'ant-design-vue';
export default {
setup() {
@ -119,15 +132,17 @@
repairer: '',
responseTime: '',
responseLevel: '',
faultCategory: '',
faultSubcategory: '',
institution: '',
faultCategory: null,
faultSubcategory: null,
organizationName: '',
faultLocation: '',
faultDescription: '',
faultImg: [],
faultImg: null,
isDispatched: null,
maintenanceRequirement: '',
maintenanceRequirement: null,
dispatchOpinion: '',
longitude: '',
latitude: '',
});
//
const responseLevelOptions = [
@ -145,55 +160,35 @@
},
];
const maintenanceRequirementOptions = [
{
value: 0,
label: '常规',
},
{
value: 1,
label: '紧急',
},
{
value: 2,
label: '特级',
},
];
const institutionOptions = [
{
value: 0,
label: '常规',
},
{
value: 1,
label: '紧急',
},
{
value: 2,
label: '特级',
},
];
const faultSubcategoryOptions = [
{
value: 0,
label: '常规',
},
{
value: 1,
label: '紧急',
},
{
value: 2,
label: '特级',
label: '新增',
},
];
const showModal = () => {
const faultSubcategoryOptions = ref([]);
const getOptions = async () => {
const res = await getSubcategoryType();
faultSubcategoryOptions.value = res.rows;
};
getOptions();
const showModal = async (id) => {
visible.value = true;
const data = await getInfo(id);
for (let i in form) {
form[i] = data[i];
}
};
const handleOk = () => {
console.log('Form Data:', form);
let params = {};
for (let i in form) {
params[i] = form[i];
}
workOrderAdd(params).then((_) => {
message.success('操作成功');
visible.value = false;
});
//
visible.value = false;
};
return {
@ -203,7 +198,6 @@
handleOk,
responseLevelOptions,
maintenanceRequirementOptions,
institutionOptions,
faultSubcategoryOptions,
};
},

Loading…
Cancel
Save