Browse Source

工单详情

ops-management-platform-frontend-dev
wbc 2 months ago
parent
commit
20acd85f01
  1. 4
      src/views/IO/workOrder/delayAudit/api.ts
  2. 78
      src/views/IO/workOrder/delayAudit/detailDrawer.vue
  3. 11
      src/views/IO/workOrder/orderAudit/api.ts
  4. 154
      src/views/IO/workOrder/orderAudit/detailDrawer.vue
  5. 26
      src/views/IO/workOrder/orderHandle/api.ts
  6. 143
      src/views/IO/workOrder/orderHandle/detailDrawer.vue
  7. 15
      src/views/IO/workOrder/orderHandle/handleModal.vue
  8. 3
      src/views/IO/workOrder/orderHandle/index.vue
  9. 8
      src/views/IO/workOrder/orderSearch/api.ts
  10. 164
      src/views/IO/workOrder/orderSearch/detailDrawer.vue
  11. 8
      src/views/IO/workOrder/orderSend/api.ts
  12. 133
      src/views/IO/workOrder/orderSend/detailDrawer.vue
  13. 4
      src/views/document/addModal.vue
  14. 2
      src/views/document/index.vue
  15. 4
      src/views/project/IOCheck/checkRating/addModal.vue
  16. 2
      src/views/project/IOCheck/checkRating/index.vue
  17. 4
      src/views/project/contractManage/addModal.vue
  18. 2
      src/views/project/contractManage/index.vue
  19. 4
      src/views/project/projectManage/addModal.vue
  20. 2
      src/views/project/projectManage/index.vue
  21. 2
      src/views/property/meterial/addModal.vue
  22. 2
      src/views/property/meterial/index.vue
  23. 2
      src/views/property/point/addModal.vue
  24. 2
      src/views/property/point/index.vue

4
src/views/IO/workOrder/delayAudit/api.ts

@ -10,6 +10,7 @@ enum Api {
getProjectInfo = '/platform/projectInfo/getNames', getProjectInfo = '/platform/projectInfo/getNames',
getOrganizationType = '/platform/organizationType/list', getOrganizationType = '/platform/organizationType/list',
getContractNamesByProjectName = '/platform/contractInfo/getContractNamesByProjectName', getContractNamesByProjectName = '/platform/contractInfo/getContractNamesByProjectName',
queryProcess = '/platform/orderProcess/queryProcess',
} }
export function list(params?: PageQuery) { export function list(params?: PageQuery) {
@ -51,3 +52,6 @@ export function getOrganizationType() {
export function getContractNamesByProjectName(data:any) { export function getContractNamesByProjectName(data:any) {
return defHttp.post({ url: Api.getContractNamesByProjectName,data }); return defHttp.post({ url: Api.getContractNamesByProjectName,data });
} }
export function queryProcess(id: any) {
return defHttp.get({ url: `${Api.queryProcess}?workOrderId=${id}` });
}

78
src/views/IO/workOrder/delayAudit/detailDrawer.vue

@ -7,7 +7,7 @@
:closable="true" :closable="true"
:open="visible" :open="visible"
@close="onClose" @close="onClose"
width="600px" width="800px"
> >
<a-tabs v-model:activeKey="activeKey"> <a-tabs v-model:activeKey="activeKey">
<a-tab-pane key="1" tab="详细信息"> <a-tab-pane key="1" tab="详细信息">
@ -96,30 +96,18 @@
<a-tab-pane key="3" tab="流程信息"> <a-tab-pane key="3" tab="流程信息">
<div style="margin-left: 20px"> <div style="margin-left: 20px">
<a-timeline> <a-timeline>
<a-timeline-item> <a-timeline-item v-for="(item, index) in progress" :key="index" >
<template #dot>故障上报</template> <template #dot><span class="stage">{{ item.stage }}</span></template>
<div class="timeText">Create a services site 2015-09-01</div> <div class="timeText"
</a-timeline-item> ><span class="person">{{ item.operator }}</span
<a-timeline-item> >{{item.description}}</div
<template #dot>故障派遣</template> >
<div class="timeText">Create a services site 2015-09-01</div> <div class="timeText">{{ item.feedback }}</div>
</a-timeline-item> <div class="operationTime">{{ item.operationTime }}</div>
<a-timeline-item> <div class="duration" v-if="item.duration"> <Icon icon="ant-design:dashboard-outlined" />用时{{item.duration}}</div>
<template #dot>故障接单</template> <a-divider></a-divider>
<div class="timeText">Create a services site 2015-09-01</div>
</a-timeline-item>
<a-timeline-item>
<template #dot>故障处理</template>
<div class="timeText">Create a services site 2015-09-01</div>
</a-timeline-item>
<a-timeline-item>
<template #dot>预审</template>
<div class="timeText">Create a services site 2015-09-01</div>
</a-timeline-item>
<a-timeline-item>
<template #dot>初审</template>
<div class="timeText">Create a services site 2015-09-01</div>
</a-timeline-item> </a-timeline-item>
</a-timeline> </a-timeline>
</div> </div>
</a-tab-pane> </a-tab-pane>
@ -129,10 +117,12 @@
</template> </template>
<script> <script>
import { reactive, ref } from 'vue'; import { reactive, ref,defineComponent } from 'vue';
import { getInfo } from './api'; import { getInfo,queryProcess } from './api';
import AMapLoader from '@amap/amap-jsapi-loader'; import AMapLoader from '@amap/amap-jsapi-loader';
export default { import Icon from '@/components/Icon/Icon.vue';
export default defineComponent({
components:{Icon},
setup(props, { emit }) { setup(props, { emit }) {
// //
let detail = reactive({ let detail = reactive({
@ -186,6 +176,7 @@
value: 6, value: 6,
}, },
]; ];
const progress = ref([])
const statusText = (val) => { const statusText = (val) => {
return statusOptions.find((i) => { return statusOptions.find((i) => {
return i.value == val; return i.value == val;
@ -199,7 +190,12 @@
for (let i in detail) { for (let i in detail) {
detail[i] = data[i]; detail[i] = data[i];
} }
initMap(detail.longitude, detail.latitude, detail.faultLocation); const progressLine = await queryProcess(id);
progress.value = progressLine;
console.log(progress.value);
if(detail.longitude){
initMap(detail.longitude, detail.latitude, detail.faultLocation);
}
}; };
// //
@ -243,10 +239,11 @@
onClose, onClose,
activeKey, activeKey,
detail, detail,
statusText statusText,
progress
}; };
}, },
}; });
</script> </script>
<style scoped> <style scoped>
@ -261,10 +258,27 @@
div { div {
margin-bottom: 10px; margin-bottom: 10px;
} }
.stage{
font-weight: 600;
}
.timeText { .timeText {
margin: 0 0 40px 20px; margin: 0 20% 3% 3%;
}
.person {
color: red; color: red;
font-weight: 550;
}
.operationTime {
color: gray;
font-weight: 550;
margin-left:80%
}
.duration {
color: #00bbff;
position: absolute;
font-weight: 550;
margin-left:80%;
top: 0.1%;
} }
.titleLabel { .titleLabel {

11
src/views/IO/workOrder/orderAudit/api.ts

@ -3,13 +3,15 @@ import { defHttp } from '@/utils/http/axios';
enum Api { enum Api {
root = '/platform/workOrder', root = '/platform/workOrder',
list = '/platform/workOrder/list', list = '/platform/workOrder/reviewList',
export = '/workflow/leave/export', export = '/workflow/leave/export',
getSubcategoryType = '/platform/subcategoryType/list', getSubcategoryType = '/platform/subcategoryType/list',
workOrderAdd = '/platform/workOrder/add', workOrderAdd = '/platform/workOrder/add',
getProjectInfo = '/platform/projectInfo/getNames', getProjectInfo = '/platform/projectInfo/getNames',
getOrganizationType = '/platform/organizationType/list', getOrganizationType = '/platform/organizationType/list',
getContractNamesByProjectName = '/platform/contractInfo/getContractNamesByProjectName', getContractNamesByProjectName = '/platform/contractInfo/getContractNamesByProjectName',
queryProcess = '/platform/orderProcess/queryProcess',
dealInfo = '/platform/dealInfo',
} }
export function list(params?: PageQuery) { export function list(params?: PageQuery) {
@ -51,3 +53,10 @@ export function getOrganizationType() {
export function getContractNamesByProjectName(data:any) { export function getContractNamesByProjectName(data:any) {
return defHttp.post({ url: Api.getContractNamesByProjectName,data }); return defHttp.post({ url: Api.getContractNamesByProjectName,data });
} }
export function queryProcess(id: any) {
return defHttp.get({ url: `${Api.queryProcess}?workOrderId=${id}` });
}
export function dealInfo(id: any) {
return defHttp.get({ url: `${Api.dealInfo}/${id}` });
}

154
src/views/IO/workOrder/orderAudit/detailDrawer.vue

@ -7,7 +7,7 @@
:closable="true" :closable="true"
:open="visible" :open="visible"
@close="onClose" @close="onClose"
width="600px" width="800px"
> >
<a-tabs v-model:activeKey="activeKey"> <a-tabs v-model:activeKey="activeKey">
<a-tab-pane key="1" tab="详细信息"> <a-tab-pane key="1" tab="详细信息">
@ -31,7 +31,7 @@
</a-row> </a-row>
<a-row :gutter="[16, 16]"> <a-row :gutter="[16, 16]">
<a-col :span="12"> <a-col :span="12">
<div><span class="titleLabel">状态</span>{{statusText(detail.status) }}</div> <div><span class="titleLabel">状态</span>{{ statusText(detail.status) }}</div>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12">
<div><span class="titleLabel">待处理人</span>{{ detail.handler }}</div> <div><span class="titleLabel">待处理人</span>{{ detail.handler }}</div>
@ -78,85 +78,75 @@
</a-row> </a-row>
<a-row :gutter="[16, 16]"> <a-row :gutter="[16, 16]">
<a-col :span="24"> <a-col :span="24">
<div><span class="titleLabel">故障图片</span> <div
<div v-for="(item,index) in detail.attachments" :key="index"> ><span class="titleLabel">故障图片</span>
<img alt="" :src="item.url" /> <div v-for="(item, index) in detail.attachments" :key="index">
</div> <img alt="" :src="item.url" />
</div>
</div> </div>
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="[16, 16]"> <a-row :gutter="[16, 16]">
<a-col :span="24"> <a-col :span="24">
<div><span class="titleLabel">地图信息</span> <div
<div id="orderAuditDetailMap" style="width: 100%; height: 500px"></div> ><span class="titleLabel">地图信息</span>
</div> <div id="orderAuditDetailMap" style="width: 100%; height: 500px"></div>
</a-col> </div>
</a-row> </a-col>
</a-row>
</a-tab-pane> </a-tab-pane>
<a-tab-pane key="2" tab="处理信息" force-render> <a-tab-pane key="2" tab="处理信息" force-render>
<a-row :gutter="[16, 16]"> <a-row :gutter="[16, 16]">
<a-col :span="24"> <a-col :span="24">
<div><span class="titleLabel">维修人员</span>{{ detail.fixPeople }}</div> <div><span class="titleLabel">维修人员</span>{{ dealDetail.fixPeople }}</div>
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="[16, 16]"> <a-row :gutter="[16, 16]">
<a-col :span="24"> <a-col :span="24">
<div><span class="titleLabel">修复时间</span>{{ detail.fixTime }}</div> <div><span class="titleLabel">修复时间</span>{{ dealDetail.fixTime }}</div>
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="[16, 16]"> <a-row :gutter="[16, 16]">
<a-col :span="24"> <a-col :span="24">
<div><span class="titleLabel">修复结果</span>{{ detail.fixResult }}</div> <div><span class="titleLabel">修复结果</span>{{ dealDetail.fixResult }}</div>
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="[16, 16]"> <a-row :gutter="[16, 16]">
<a-col :span="24"> <a-col :span="24">
<div><span class="titleLabel">费用情况</span>{{ detail.cost }}</div> <div><span class="titleLabel">费用情况</span>{{ dealDetail.cost }}</div>
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="[16, 16]"> <a-row :gutter="[16, 16]">
<a-col :span="24"> <a-col :span="24">
<div><span class="titleLabel">处理图片</span>{{ detail.handleImg }}</div> <div
><span class="titleLabel">处理图片</span>
<div v-for="(item, index) in dealDetail.attachments" :key="index">
<img alt="" :src="item.url" />
</div>
</div>
</a-col> </a-col>
</a-row> </a-row>
</a-tab-pane> </a-tab-pane>
<a-tab-pane key="3" tab="流程信息"> <a-tab-pane key="3" tab="流程信息">
<div style="margin-left: 20px"> <div style="margin-left: 20px">
<a-timeline> <a-timeline>
<a-timeline-item> <a-timeline-item v-for="(item, index) in progress" :key="index" >
<template #dot>故障上报</template> <template #dot><span class="stage">{{ item.stage }}</span></template>
<div class="timeText">Create a services site 2015-09-01</div> <div class="timeText"
</a-timeline-item> ><span class="person">{{ item.operator }}</span
<a-timeline-item> >{{item.description}}</div
<template #dot>故障派遣</template> >
<div class="timeText">Create a services site 2015-09-01</div> <div class="timeText">{{ item.feedback }}</div>
</a-timeline-item> <div class="operationTime">{{ item.operationTime }}</div>
<a-timeline-item> <div class="duration" v-if="item.duration"> <Icon icon="ant-design:dashboard-outlined" />用时{{item.duration}}</div>
<template #dot>故障接单</template> <a-divider></a-divider>
<div class="timeText">Create a services site 2015-09-01</div>
</a-timeline-item>
<a-timeline-item>
<template #dot>故障处理</template>
<div class="timeText">Create a services site 2015-09-01</div>
</a-timeline-item>
<a-timeline-item>
<template #dot>预审</template>
<div class="timeText">Create a services site 2015-09-01</div>
</a-timeline-item>
<a-timeline-item>
<template #dot>初审</template>
<div class="timeText">Create a services site 2015-09-01</div>
</a-timeline-item> </a-timeline-item>
</a-timeline> </a-timeline>
</div> </div>
</a-tab-pane> </a-tab-pane>
<a-tab-pane key="4" tab="历史信息"> <a-tab-pane key="4" tab="历史信息">
<a-table :dataSource="historyInfo" :columns="historyColumns" bordered> <a-table :dataSource="progress" :columns="historyColumns" bordered>
<template #bodyCell="{ column }">
<template v-if="column.key === 'action'">
<a-button type="link">查看</a-button>
</template>
</template>
</a-table> </a-table>
</a-tab-pane> </a-tab-pane>
<a-tab-pane key="5" tab="延期信息"> <a-tab-pane key="5" tab="延期信息">
@ -174,10 +164,12 @@
</template> </template>
<script> <script>
import { reactive, ref } from 'vue'; import { reactive, ref,defineComponent } from 'vue';
import { getInfo } from './api'; import { getInfo,dealInfo, queryProcess } from './api';
import AMapLoader from '@amap/amap-jsapi-loader'; import AMapLoader from '@amap/amap-jsapi-loader';
export default { import Icon from '@/components/Icon/Icon.vue';
export default defineComponent({
components:{Icon},
setup(props, { emit }) { setup(props, { emit }) {
// //
let detail = reactive({ let detail = reactive({
@ -197,14 +189,17 @@
faultLocation: '', faultLocation: '',
faultDescription: '', faultDescription: '',
attachments: '', attachments: '',
longitude: '',
latitude: '',
});
const dealDetail = reactive({
fixPeople: '', fixPeople: '',
fixTime: '', fixTime: '',
fixResult: '', fixResult: '',
cost: '', cost: '',
handleImg: '', attachments: '',
longitude:'',
latitude:''
}); });
const progress = ref([]);
const statusOptions = [ const statusOptions = [
{ {
label: '待派遣', label: '待派遣',
@ -240,17 +235,16 @@
return i.value == val; return i.value == val;
})?.label; })?.label;
}; };
const historyInfo = ref([]);
const historyColumns = [ const historyColumns = [
{ {
title: '环节', title: '环节',
dataIndex: 'stage', dataIndex: 'stage',
key: 'stage', key: 'stage',
}, },
{ {
title: '操作', title: '操作',
dataIndex: 'operation', dataIndex: 'operationName',
key: 'operation', key: 'operationName',
}, },
{ {
title: '操作人', title: '操作人',
@ -258,9 +252,9 @@
key: 'operator', key: 'operator',
}, },
{ {
title: '详细信息', title: '操作时间',
dataIndex: 'action', dataIndex: 'operationTime',
key: 'action ', key: 'operationTime ',
}, },
]; ];
const delayInfo = ref([]); const delayInfo = ref([]);
@ -295,13 +289,20 @@
for (let i in detail) { for (let i in detail) {
detail[i] = data[i]; detail[i] = data[i];
} }
initMap(detail.longitude,detail.latitude,detail.faultLocation) const data1 = await dealInfo(id);
for (let i in dealDetail) {
dealDetail[i] = data1[i];
}
const progressLine = await queryProcess(id);
progress.value = progressLine;
console.log(progress.value);
initMap(detail.longitude, detail.latitude, detail.faultLocation);
}; };
// //
const onClose = () => { const onClose = () => {
visible.value = false; visible.value = false;
map.value?.destroy() map.value?.destroy();
}; };
const activeKey = ref('1'); const activeKey = ref('1');
@ -338,15 +339,16 @@
showDrawer, showDrawer,
onClose, onClose,
activeKey, activeKey,
historyInfo,
historyColumns, historyColumns,
delayInfo, delayInfo,
delayColumns, delayColumns,
detail, detail,
statusText dealDetail,
statusText,
progress,
}; };
}, },
}; });
</script> </script>
<style scoped> <style scoped>
@ -359,14 +361,30 @@
margin-bottom: 10px; margin-bottom: 10px;
} */ } */
div { div {
margin-bottom: 10px; margin-bottom: 1%;
}
.stage{
font-weight: 600;
} }
.timeText { .timeText {
margin: 0 0 40px 20px; margin: 0 20% 3% 3%;
}
.person {
color: red; color: red;
font-weight: 550;
}
.operationTime {
color: gray;
font-weight: 550;
margin-left:80%
}
.duration {
color: #00bbff;
position: absolute;
font-weight: 550;
margin-left:80%;
top: 0.1%;
} }
.titleLabel { .titleLabel {
color: gray; color: gray;
} }

26
src/views/IO/workOrder/orderHandle/api.ts

@ -1,25 +1,23 @@
import { PageQuery, commonExport } from '@/api/base';
import { defHttp } from '@/utils/http/axios'; import { defHttp } from '@/utils/http/axios';
enum Api { enum Api {
root = '/platform/workOrder', root = '/platform/workOrder',
list = '/platform/workOrder/list', list = '/platform/workOrder/dealWithList',
export = '/workflow/leave/export',
getSubcategoryType = '/platform/subcategoryType/list', getSubcategoryType = '/platform/subcategoryType/list',
workOrderAdd = '/platform/workOrder/add', workOrderAdd = '/platform/workOrder/add',
getProjectInfo = '/platform/projectInfo/getNames', getProjectInfo = '/platform/projectInfo/getNames',
getOrganizationType = '/platform/organizationType/list', getOrganizationType = '/platform/organizationType/list',
getContractNamesByProjectName = '/platform/contractInfo/getContractNamesByProjectName', getContractNamesByProjectName = '/platform/contractInfo/getContractNamesByProjectName',
queryProcess = '/platform/orderProcess/queryProcess',
dealOrder = '/platform/workOrder/dealOrder',
dealInfo = '/platform/dealInfo',
takeOrder = '/platform/workOrder/takeOrder',
} }
export function list(params?: PageQuery) { export function list(params?: any) {
return defHttp.get({ url: Api.list, params }); return defHttp.get({ url: Api.list, params });
} }
export function exportExcel(data: any) {
return commonExport(Api.export, data);
}
export function getInfo(id: any) { export function getInfo(id: any) {
return defHttp.get({ url: `${Api.root}/${id}` }); return defHttp.get({ url: `${Api.root}/${id}` });
} }
@ -51,3 +49,15 @@ export function getOrganizationType() {
export function getContractNamesByProjectName(data:any) { export function getContractNamesByProjectName(data:any) {
return defHttp.post({ url: Api.getContractNamesByProjectName,data }); return defHttp.post({ url: Api.getContractNamesByProjectName,data });
} }
export function queryProcess(id: any) {
return defHttp.get({ url: `${Api.queryProcess}?workOrderId=${id}` });
}
export function dealOrder(data:any) {
return defHttp.post({ url: Api.dealOrder,data });
}
export function dealInfo(id: any) {
return defHttp.get({ url: `${Api.dealInfo}/${id}` });
}
export function takeOrder(id: any) {
return defHttp.get({ url: `${Api.takeOrder}?workOrderId=${id}` });
}

143
src/views/IO/workOrder/orderHandle/detailDrawer.vue

@ -7,7 +7,7 @@
:closable="true" :closable="true"
:open="visible" :open="visible"
@close="onClose" @close="onClose"
width="600px" width="800px"
> >
<a-tabs v-model:activeKey="activeKey"> <a-tabs v-model:activeKey="activeKey">
<a-tab-pane key="1" tab="详细信息"> <a-tab-pane key="1" tab="详细信息">
@ -78,17 +78,19 @@
</a-row> </a-row>
<a-row :gutter="[16, 16]"> <a-row :gutter="[16, 16]">
<a-col :span="24"> <a-col :span="24">
<div><span class="titleLabel">故障图片</span> <div
<div v-for="(item,index) in detail.attachments" :key="index"> ><span class="titleLabel">故障图片</span>
<img alt="" :src="item.url" /> <div v-for="(item, index) in detail.attachments" :key="index">
</div> <img alt="" :src="item.url" />
</div>
</div> </div>
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="[16, 16]"> <a-row :gutter="[16, 16]">
<a-col :span="24"> <a-col :span="24">
<div><span class="titleLabel">地图信息</span> <div
<div id="orderHandleDetailMap" style="width: 100%; height: 500px"></div> ><span class="titleLabel">地图信息</span>
<div id="orderHandleDetailMap" style="width: 100%; height: 500px"></div>
</div> </div>
</a-col> </a-col>
</a-row> </a-row>
@ -96,68 +98,58 @@
<a-tab-pane key="2" tab="处理信息" force-render> <a-tab-pane key="2" tab="处理信息" force-render>
<a-row :gutter="[16, 16]"> <a-row :gutter="[16, 16]">
<a-col :span="24"> <a-col :span="24">
<div><span class="titleLabel">维修人员</span>{{ detail.fixPeople }}</div> <div><span class="titleLabel">维修人员</span>{{ dealDetail.fixPeople }}</div>
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="[16, 16]"> <a-row :gutter="[16, 16]">
<a-col :span="24"> <a-col :span="24">
<div><span class="titleLabel">修复时间</span>{{ detail.fixTime }}</div> <div><span class="titleLabel">修复时间</span>{{ dealDetail.fixTime }}</div>
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="[16, 16]"> <a-row :gutter="[16, 16]">
<a-col :span="24"> <a-col :span="24">
<div><span class="titleLabel">修复结果</span>{{ detail.fixResult }}</div> <div><span class="titleLabel">修复结果</span>{{ dealDetail.fixResult }}</div>
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="[16, 16]"> <a-row :gutter="[16, 16]">
<a-col :span="24"> <a-col :span="24">
<div><span class="titleLabel">费用情况</span>{{ detail.cost }}</div> <div><span class="titleLabel">费用情况</span>{{ dealDetail.cost }}</div>
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="[16, 16]"> <a-row :gutter="[16, 16]">
<a-col :span="24"> <a-col :span="24">
<div><span class="titleLabel">处理图片</span>{{ detail.handleImg }}</div> <div
><span class="titleLabel">处理图片</span>
<div v-for="(item, index) in dealDetail.attachments" :key="index">
<img alt="" :src="item.url" />
</div>
</div>
</a-col> </a-col>
</a-row> </a-row>
</a-tab-pane> </a-tab-pane>
<a-tab-pane key="3" tab="流程信息"> <a-tab-pane key="3" tab="流程信息">
<div style="margin-left: 20px"> <div style="margin-left: 20px">
<a-timeline> <a-timeline>
<a-timeline-item> <a-timeline-item v-for="(item, index) in progress" :key="index">
<template #dot>故障上报</template> <template #dot
<div class="timeText">Create a services site 2015-09-01</div> ><span class="stage">{{ item.stage }}</span></template
</a-timeline-item> >
<a-timeline-item> <div class="timeText"
<template #dot>故障派遣</template> ><span class="person">{{ item.operator }}</span
<div class="timeText">Create a services site 2015-09-01</div> >{{ item.description }}</div
</a-timeline-item> >
<a-timeline-item> <div class="timeText">{{ item.feedback }}</div>
<template #dot>故障接单</template> <div class="operationTime">{{ item.operationTime }}</div>
<div class="timeText">Create a services site 2015-09-01</div> <div class="duration" v-if="item.duration">
</a-timeline-item> <Icon icon="ant-design:dashboard-outlined" />用时{{ item.duration }}</div
<a-timeline-item> >
<template #dot>故障处理</template> <a-divider></a-divider>
<div class="timeText">Create a services site 2015-09-01</div>
</a-timeline-item>
<a-timeline-item>
<template #dot>预审</template>
<div class="timeText">Create a services site 2015-09-01</div>
</a-timeline-item>
<a-timeline-item>
<template #dot>初审</template>
<div class="timeText">Create a services site 2015-09-01</div>
</a-timeline-item> </a-timeline-item>
</a-timeline> </a-timeline>
</div> </div>
</a-tab-pane> </a-tab-pane>
<a-tab-pane key="4" tab="历史信息"> <a-tab-pane key="4" tab="历史信息">
<a-table :dataSource="historyInfo" :columns="historyColumns" bordered> <a-table :dataSource="progress" :columns="historyColumns" bordered> </a-table>
<template #bodyCell="{ column }">
<template v-if="column.key === 'action'">
<a-button type="link">查看</a-button>
</template>
</template>
</a-table>
</a-tab-pane> </a-tab-pane>
<a-tab-pane key="5" tab="延期信息"> <a-tab-pane key="5" tab="延期信息">
<a-table :dataSource="delayInfo" :columns="delayColumns" bordered> <a-table :dataSource="delayInfo" :columns="delayColumns" bordered>
@ -174,10 +166,12 @@
</template> </template>
<script> <script>
import { reactive, ref } from 'vue'; import { reactive, ref, defineComponent } from 'vue';
import { getInfo } from './api'; import { getInfo, dealInfo, queryProcess } from './api';
import AMapLoader from '@amap/amap-jsapi-loader'; import AMapLoader from '@amap/amap-jsapi-loader';
export default { import Icon from '@/components/Icon/Icon.vue';
export default defineComponent({
components: { Icon },
setup(props, { emit }) { setup(props, { emit }) {
// //
let detail = reactive({ let detail = reactive({
@ -197,14 +191,18 @@
faultLocation: '', faultLocation: '',
faultDescription: '', faultDescription: '',
attachments: '', attachments: '',
longitude: '',
latitude: '',
});
const dealDetail = reactive({
fixPeople: '', fixPeople: '',
fixTime: '', fixTime: '',
fixResult: '', fixResult: '',
cost: '', cost: '',
handleImg: '', attachments: '',
longitude: '',
latitude: '',
}); });
const progress = ref([]);
const statusOptions = [ const statusOptions = [
{ {
label: '待派遣', label: '待派遣',
@ -240,7 +238,6 @@
return i.value == val; return i.value == val;
})?.label; })?.label;
}; };
const historyInfo = ref([]);
const historyColumns = [ const historyColumns = [
{ {
title: '环节', title: '环节',
@ -249,8 +246,8 @@
}, },
{ {
title: '操作', title: '操作',
dataIndex: 'operation', dataIndex: 'operationName',
key: 'operation', key: 'operationName',
}, },
{ {
title: '操作人', title: '操作人',
@ -258,9 +255,9 @@
key: 'operator', key: 'operator',
}, },
{ {
title: '详细信息', title: '操作时间',
dataIndex: 'action', dataIndex: 'operationTime',
key: 'action ', key: 'operationTime ',
}, },
]; ];
const delayInfo = ref([]); const delayInfo = ref([]);
@ -295,6 +292,13 @@
for (let i in detail) { for (let i in detail) {
detail[i] = data[i]; detail[i] = data[i];
} }
const data1 = await dealInfo(id);
for (let i in dealDetail) {
dealDetail[i] = data1[i];
}
const progressLine = await queryProcess(id);
progress.value = progressLine;
console.log(progress.value);
initMap(detail.longitude, detail.latitude, detail.faultLocation); initMap(detail.longitude, detail.latitude, detail.faultLocation);
}; };
@ -338,15 +342,16 @@
showDrawer, showDrawer,
onClose, onClose,
activeKey, activeKey,
historyInfo,
historyColumns, historyColumns,
delayInfo, delayInfo,
delayColumns, delayColumns,
detail, detail,
statusText dealDetail,
statusText,
progress,
}; };
}, },
}; });
</script> </script>
<style scoped> <style scoped>
@ -359,14 +364,30 @@
margin-bottom: 10px; margin-bottom: 10px;
} */ } */
div { div {
margin-bottom: 10px; margin-bottom: 1%;
}
.stage {
font-weight: 600;
} }
.timeText { .timeText {
margin: 0 0 40px 20px; margin: 0 20% 3% 3%;
}
.person {
color: red; color: red;
font-weight: 550;
}
.operationTime {
color: gray;
font-weight: 550;
margin-left: 80%;
}
.duration {
color: #00bbff;
position: absolute;
font-weight: 550;
margin-left: 80%;
top: 0.1%;
} }
.titleLabel { .titleLabel {
color: gray; color: gray;
} }

15
src/views/IO/workOrder/orderHandle/handleModal.vue

@ -77,7 +77,7 @@
<script> <script>
import { reactive, ref } from 'vue'; import { reactive, ref } from 'vue';
import { message } from 'ant-design-vue'; import { message } from 'ant-design-vue';
import { getInfo,getSubcategoryType } from './api'; import { getInfo,getSubcategoryType,dealOrder } from './api';
import { getToken } from '@/utils/auth'; import { getToken } from '@/utils/auth';
import { useGlobSetting } from '@/hooks/setting'; import { useGlobSetting } from '@/hooks/setting';
export default { export default {
@ -112,7 +112,16 @@
const handleOk = () => { const handleOk = () => {
formRef.value.validate().then((valid) => { formRef.value.validate().then((valid) => {
if (valid) { if (valid) {
emit('success'); const params = {}
for(let i in form){
params[i] = form[i]
}
dealOrder(params).then(_=>{
message.success('操作成功')
emit('success');
closeModal()
})
} }
}); });
}; };
@ -128,7 +137,7 @@
isAccident: [{ required: true, message: '请选择' }], isAccident: [{ required: true, message: '请选择' }],
fixResult: [{ required: true, message: '请输入' }], fixResult: [{ required: true, message: '请输入' }],
cost: [{ required: true, message: '请输入' }], cost: [{ required: true, message: '请输入' }],
attachments: [{ required: true, message: '请输入' }], attachments: [{ required: true, message: '请上传' }],
}; };
// //
const fileLists = ref([]); const fileLists = ref([]);

3
src/views/IO/workOrder/orderHandle/index.vue

@ -28,7 +28,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { PageWrapper } from '@/components/Page'; import { PageWrapper } from '@/components/Page';
import { BasicTable, useTable } from '@/components/Table'; import { BasicTable, useTable } from '@/components/Table';
import { list, getProjectInfo } from './api'; import { list, getProjectInfo,takeOrder } from './api';
import { formSchemas, columns } from './data'; import { formSchemas, columns } from './data';
import detailDrawer from './detailDrawer.vue'; import detailDrawer from './detailDrawer.vue';
import backModal from './backModal.vue'; import backModal from './backModal.vue';
@ -67,6 +67,7 @@
detailDrawerRef.value.showDrawer(id); detailDrawerRef.value.showDrawer(id);
}; };
const receive = async (id: any) => { const receive = async (id: any) => {
await takeOrder(id)
reload(); reload();
}; };
const backModalRef = ref() const backModalRef = ref()

8
src/views/IO/workOrder/orderSearch/api.ts

@ -10,6 +10,8 @@ enum Api {
getProjectInfo = '/platform/projectInfo/getNames', getProjectInfo = '/platform/projectInfo/getNames',
getOrganizationType = '/platform/organizationType/list', getOrganizationType = '/platform/organizationType/list',
getContractNamesByProjectName = '/platform/contractInfo/getContractNamesByProjectName', getContractNamesByProjectName = '/platform/contractInfo/getContractNamesByProjectName',
queryProcess = '/platform/orderProcess/queryProcess',
dealInfo = '/platform/dealInfo',
} }
export function list(params?: PageQuery) { export function list(params?: PageQuery) {
@ -51,3 +53,9 @@ export function getOrganizationType() {
export function getContractNamesByProjectName(data:any) { export function getContractNamesByProjectName(data:any) {
return defHttp.post({ url: Api.getContractNamesByProjectName,data }); return defHttp.post({ url: Api.getContractNamesByProjectName,data });
} }
export function queryProcess(id: any) {
return defHttp.get({ url: `${Api.queryProcess}?workOrderId=${id}` });
}
export function dealInfo(id: any) {
return defHttp.get({ url: `${Api.dealInfo}/${id}` });
}

164
src/views/IO/workOrder/orderSearch/detailDrawer.vue

@ -7,7 +7,7 @@
:closable="true" :closable="true"
:open="visible" :open="visible"
@close="onClose" @close="onClose"
width="600px" width="800px"
> >
<a-tabs v-model:activeKey="activeKey"> <a-tabs v-model:activeKey="activeKey">
<a-tab-pane key="1" tab="详细信息"> <a-tab-pane key="1" tab="详细信息">
@ -78,17 +78,19 @@
</a-row> </a-row>
<a-row :gutter="[16, 16]"> <a-row :gutter="[16, 16]">
<a-col :span="24"> <a-col :span="24">
<div><span class="titleLabel">故障图片</span> <div
<div v-for="(item,index) in detail.attachments" :key="index"> ><span class="titleLabel">故障图片</span>
<img alt="" :src="item.url" /> <div v-for="(item, index) in detail.attachments" :key="index">
</div> <img alt="" :src="item.url" />
</div>
</div> </div>
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="[16, 16]"> <a-row :gutter="[16, 16]">
<a-col :span="24"> <a-col :span="24">
<div><span class="titleLabel">地图信息</span> <div
<div id="orderSearchDetailMap" style="width: 100%; height: 500px"></div> ><span class="titleLabel">地图信息</span>
<div id="orderSearchDetailMap" style="width: 100%; height: 500px"></div>
</div> </div>
</a-col> </a-col>
</a-row> </a-row>
@ -96,67 +98,55 @@
<a-tab-pane key="2" tab="处理信息" force-render> <a-tab-pane key="2" tab="处理信息" force-render>
<a-row :gutter="[16, 16]"> <a-row :gutter="[16, 16]">
<a-col :span="24"> <a-col :span="24">
<div><span class="titleLabel">维修人员</span>{{ detail.fixPeople }}</div> <div><span class="titleLabel">维修人员</span>{{ dealDetail.fixPeople }}</div>
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="[16, 16]"> <a-row :gutter="[16, 16]">
<a-col :span="24"> <a-col :span="24">
<div><span class="titleLabel">修复时间</span>{{ detail.fixTime }}</div> <div><span class="titleLabel">修复时间</span>{{ dealDetail.fixTime }}</div>
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="[16, 16]"> <a-row :gutter="[16, 16]">
<a-col :span="24"> <a-col :span="24">
<div><span class="titleLabel">修复结果</span>{{ detail.fixResult }}</div> <div><span class="titleLabel">修复结果</span>{{ dealDetail.fixResult }}</div>
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="[16, 16]"> <a-row :gutter="[16, 16]">
<a-col :span="24"> <a-col :span="24">
<div><span class="titleLabel">费用情况</span>{{ detail.cost }}</div> <div><span class="titleLabel">费用情况</span>{{ dealDetail.cost }}</div>
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="[16, 16]"> <a-row :gutter="[16, 16]">
<a-col :span="24"> <a-col :span="24">
<div><span class="titleLabel">处理图片</span>{{ detail.handleImg }}</div> <div
><span class="titleLabel">处理图片</span>
<div v-for="(item, index) in dealDetail.attachments" :key="index">
<img alt="" :src="item.url" />
</div>
</div>
</a-col> </a-col>
</a-row> </a-row>
</a-tab-pane> </a-tab-pane>
<a-tab-pane key="3" tab="流程信息"> <a-tab-pane key="3" tab="流程信息">
<div style="margin-left: 20px"> <div style="margin-left: 20px">
<a-timeline> <a-timeline>
<a-timeline-item> <a-timeline-item v-for="(item, index) in progress" :key="index" >
<template #dot>故障上报</template> <template #dot><span class="stage">{{ item.stage }}</span></template>
<div class="timeText">Create a services site 2015-09-01</div> <div class="timeText"
</a-timeline-item> ><span class="person">{{ item.operator }}</span
<a-timeline-item> >{{item.description}}</div
<template #dot>故障派遣</template> >
<div class="timeText">Create a services site 2015-09-01</div> <div class="timeText">{{ item.feedback }}</div>
</a-timeline-item> <div class="operationTime">{{ item.operationTime }}</div>
<a-timeline-item> <div class="duration" v-if="item.duration"> <Icon icon="ant-design:dashboard-outlined" />用时{{item.duration}}</div>
<template #dot>故障接单</template> <a-divider></a-divider>
<div class="timeText">Create a services site 2015-09-01</div>
</a-timeline-item>
<a-timeline-item>
<template #dot>故障处理</template>
<div class="timeText">Create a services site 2015-09-01</div>
</a-timeline-item>
<a-timeline-item>
<template #dot>预审</template>
<div class="timeText">Create a services site 2015-09-01</div>
</a-timeline-item>
<a-timeline-item>
<template #dot>初审</template>
<div class="timeText">Create a services site 2015-09-01</div>
</a-timeline-item> </a-timeline-item>
</a-timeline> </a-timeline>
</div> </div>
</a-tab-pane> </a-tab-pane>
<a-tab-pane key="4" tab="历史信息"> <a-tab-pane key="4" tab="历史信息">
<a-table :dataSource="historyInfo" :columns="historyColumns" bordered> <a-table :dataSource="progress" :columns="historyColumns" bordered>
<template #bodyCell="{ column }">
<template v-if="column.key === 'action'">
<a-button type="link">查看</a-button>
</template>
</template>
</a-table> </a-table>
</a-tab-pane> </a-tab-pane>
<a-tab-pane key="5" tab="延期信息"> <a-tab-pane key="5" tab="延期信息">
@ -174,10 +164,12 @@
</template> </template>
<script> <script>
import { reactive, ref } from 'vue'; import { reactive, ref,defineComponent } from 'vue';
import { getInfo } from './api'; import { getInfo,dealInfo, queryProcess } from './api';
import AMapLoader from '@amap/amap-jsapi-loader'; import AMapLoader from '@amap/amap-jsapi-loader';
export default { import Icon from '@/components/Icon/Icon.vue';
export default defineComponent({
components:{Icon},
setup(props, { emit }) { setup(props, { emit }) {
// //
let detail = reactive({ let detail = reactive({
@ -197,14 +189,17 @@
faultLocation: '', faultLocation: '',
faultDescription: '', faultDescription: '',
attachments: '', attachments: '',
longitude: '',
latitude: '',
});
const dealDetail = reactive({
fixPeople: '', fixPeople: '',
fixTime: '', fixTime: '',
fixResult: '', fixResult: '',
cost: '', cost: '',
handleImg: '', attachments: '',
longitude: '',
latitude: '',
}); });
const progress = ref([]);
const statusOptions = [ const statusOptions = [
{ {
label: '待派遣', label: '待派遣',
@ -240,17 +235,16 @@
return i.value == val; return i.value == val;
})?.label; })?.label;
}; };
const historyInfo = ref([]);
const historyColumns = [ const historyColumns = [
{ {
title: '环节', title: '环节',
dataIndex: 'stage', dataIndex: 'stage',
key: 'stage', key: 'stage',
}, },
{ {
title: '操作', title: '操作',
dataIndex: 'operation', dataIndex: 'operationName',
key: 'operation', key: 'operationName',
}, },
{ {
title: '操作人', title: '操作人',
@ -258,32 +252,32 @@
key: 'operator', key: 'operator',
}, },
{ {
title: '详细信息', title: '操作时间',
dataIndex: 'action', dataIndex: 'operationTime',
key: 'action ', key: 'operationTime ',
}, },
]; ];
const delayInfo = ref([]); const delayInfo = ref([]);
const delayColumns = [ const delayColumns = [
{ {
title: '申请时间', title: '环节',
dataIndex: 'applyTime', dataIndex: 'stage',
key: 'applyTime', key: 'stage',
}, },
{ {
title: '申请原因', title: '操作',
dataIndex: 'applyReason', dataIndex: 'operationName',
key: 'applyReason', key: 'operationName',
}, },
{ {
title: '延期时间', title: '操作人',
dataIndex: 'delayTime', dataIndex: 'operator',
key: 'delayTime', key: 'operator',
}, },
{ {
title: '详细信息', title: '操作时间',
dataIndex: 'action', dataIndex: 'operationTime',
key: 'action ', key: 'operationTime ',
}, },
]; ];
@ -295,6 +289,13 @@
for (let i in detail) { for (let i in detail) {
detail[i] = data[i]; detail[i] = data[i];
} }
const data1 = await dealInfo(id);
for (let i in dealDetail) {
dealDetail[i] = data1[i];
}
const progressLine = await queryProcess(id);
progress.value = progressLine;
console.log(progress.value);
initMap(detail.longitude, detail.latitude, detail.faultLocation); initMap(detail.longitude, detail.latitude, detail.faultLocation);
}; };
@ -338,15 +339,16 @@
showDrawer, showDrawer,
onClose, onClose,
activeKey, activeKey,
historyInfo,
historyColumns, historyColumns,
delayInfo, delayInfo,
delayColumns, delayColumns,
detail, detail,
dealDetail,
statusText, statusText,
progress,
}; };
}, },
}; });
</script> </script>
<style scoped> <style scoped>
@ -359,14 +361,30 @@
margin-bottom: 10px; margin-bottom: 10px;
} */ } */
div { div {
margin-bottom: 10px; margin-bottom: 1%;
}
.stage{
font-weight: 600;
} }
.timeText { .timeText {
margin: 0 0 40px 20px; margin: 0 20% 3% 3%;
}
.person {
color: red; color: red;
font-weight: 550;
}
.operationTime {
color: gray;
font-weight: 550;
margin-left:80%
}
.duration {
color: #00bbff;
position: absolute;
font-weight: 550;
margin-left:80%;
top: 0.1%;
} }
.titleLabel { .titleLabel {
color: gray; color: gray;
} }

8
src/views/IO/workOrder/orderSend/api.ts

@ -10,6 +10,8 @@ enum Api {
getProjectInfo = '/platform/projectInfo/getNames', getProjectInfo = '/platform/projectInfo/getNames',
getOrganizationType = '/platform/organizationType/list', getOrganizationType = '/platform/organizationType/list',
getContractNamesByProjectName = '/platform/contractInfo/getContractNamesByProjectName', getContractNamesByProjectName = '/platform/contractInfo/getContractNamesByProjectName',
queryProcess = '/platform/orderProcess/queryProcess',
dealInfo = '/platform/dealInfo',
} }
export function list(params?: PageQuery) { export function list(params?: PageQuery) {
@ -51,3 +53,9 @@ export function getOrganizationType() {
export function getContractNamesByProjectName(data:any) { export function getContractNamesByProjectName(data:any) {
return defHttp.post({ url: Api.getContractNamesByProjectName,data }); return defHttp.post({ url: Api.getContractNamesByProjectName,data });
} }
export function queryProcess(id: any) {
return defHttp.get({ url: `${Api.queryProcess}?workOrderId=${id}` });
}
export function dealInfo(id: any) {
return defHttp.get({ url: `${Api.dealInfo}/${id}` });
}

133
src/views/IO/workOrder/orderSend/detailDrawer.vue

@ -7,7 +7,7 @@
:closable="true" :closable="true"
:open="visible" :open="visible"
@close="onClose" @close="onClose"
width="600px" width="800px"
> >
<a-tabs v-model:activeKey="activeKey"> <a-tabs v-model:activeKey="activeKey">
<a-tab-pane key="1" tab="详细信息"> <a-tab-pane key="1" tab="详细信息">
@ -31,7 +31,7 @@
</a-row> </a-row>
<a-row :gutter="[16, 16]"> <a-row :gutter="[16, 16]">
<a-col :span="12"> <a-col :span="12">
<div><span class="titleLabel">状态</span>{{statusText(detail.status) }}</div> <div><span class="titleLabel">状态</span>{{ statusText(detail.status) }}</div>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12">
<div><span class="titleLabel">待处理人</span>{{ detail.handler }}</div> <div><span class="titleLabel">待处理人</span>{{ detail.handler }}</div>
@ -88,8 +88,9 @@
</a-row> </a-row>
<a-row :gutter="[16, 16]"> <a-row :gutter="[16, 16]">
<a-col :span="24"> <a-col :span="24">
<div><span class="titleLabel">地图信息</span> <div
<div id="orderSendDetailMap" style="width: 100%; height: 500px"></div> ><span class="titleLabel">地图信息</span>
<div id="orderSendDetailMap" style="width: 100%; height: 500px"></div>
</div> </div>
</a-col> </a-col>
</a-row> </a-row>
@ -97,67 +98,55 @@
<a-tab-pane key="2" tab="处理信息" force-render> <a-tab-pane key="2" tab="处理信息" force-render>
<a-row :gutter="[16, 16]"> <a-row :gutter="[16, 16]">
<a-col :span="24"> <a-col :span="24">
<div><span class="titleLabel">维修人员</span>{{ detail.fixPeople }}</div> <div><span class="titleLabel">维修人员</span>{{ dealDetail.fixPeople }}</div>
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="[16, 16]"> <a-row :gutter="[16, 16]">
<a-col :span="24"> <a-col :span="24">
<div><span class="titleLabel">修复时间</span>{{ detail.fixTime }}</div> <div><span class="titleLabel">修复时间</span>{{ dealDetail.fixTime }}</div>
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="[16, 16]"> <a-row :gutter="[16, 16]">
<a-col :span="24"> <a-col :span="24">
<div><span class="titleLabel">修复结果</span>{{ detail.fixResult }}</div> <div><span class="titleLabel">修复结果</span>{{ dealDetail.fixResult }}</div>
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="[16, 16]"> <a-row :gutter="[16, 16]">
<a-col :span="24"> <a-col :span="24">
<div><span class="titleLabel">费用情况</span>{{ detail.cost }}</div> <div><span class="titleLabel">费用情况</span>{{ dealDetail.cost }}</div>
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="[16, 16]"> <a-row :gutter="[16, 16]">
<a-col :span="24"> <a-col :span="24">
<div><span class="titleLabel">处理图片</span>{{ detail.handleImg }}</div> <div
><span class="titleLabel">处理图片</span>
<div v-for="(item, index) in dealDetail.attachments" :key="index">
<img alt="" :src="item.url" />
</div>
</div>
</a-col> </a-col>
</a-row> </a-row>
</a-tab-pane> </a-tab-pane>
<a-tab-pane key="3" tab="流程信息"> <a-tab-pane key="3" tab="流程信息">
<div style="margin-left: 20px"> <div style="margin-left: 20px">
<a-timeline> <a-timeline>
<a-timeline-item> <a-timeline-item v-for="(item, index) in progress" :key="index" >
<template #dot>故障上报</template> <template #dot><span class="stage">{{ item.stage }}</span></template>
<div class="timeText">Create a services site 2015-09-01</div> <div class="timeText"
</a-timeline-item> ><span class="person">{{ item.operator }}</span
<a-timeline-item> >{{item.description}}</div
<template #dot>故障派遣</template> >
<div class="timeText">Create a services site 2015-09-01</div> <div class="timeText">{{ item.feedback }}</div>
</a-timeline-item> <div class="operationTime">{{ item.operationTime }}</div>
<a-timeline-item> <div class="duration" v-if="item.duration"> <Icon icon="ant-design:dashboard-outlined" />用时{{item.duration}}</div>
<template #dot>故障接单</template> <a-divider></a-divider>
<div class="timeText">Create a services site 2015-09-01</div>
</a-timeline-item>
<a-timeline-item>
<template #dot>故障处理</template>
<div class="timeText">Create a services site 2015-09-01</div>
</a-timeline-item>
<a-timeline-item>
<template #dot>预审</template>
<div class="timeText">Create a services site 2015-09-01</div>
</a-timeline-item>
<a-timeline-item>
<template #dot>初审</template>
<div class="timeText">Create a services site 2015-09-01</div>
</a-timeline-item> </a-timeline-item>
</a-timeline> </a-timeline>
</div> </div>
</a-tab-pane> </a-tab-pane>
<a-tab-pane key="4" tab="历史信息"> <a-tab-pane key="4" tab="历史信息">
<a-table :dataSource="historyInfo" :columns="historyColumns" bordered> <a-table :dataSource="progress" :columns="historyColumns" bordered>
<template #bodyCell="{ column }">
<template v-if="column.key === 'action'">
<a-button type="link">查看</a-button>
</template>
</template>
</a-table> </a-table>
</a-tab-pane> </a-tab-pane>
<a-tab-pane key="5" tab="延期信息"> <a-tab-pane key="5" tab="延期信息">
@ -175,10 +164,12 @@
</template> </template>
<script> <script>
import { reactive, ref } from 'vue'; import { reactive, ref,defineComponent } from 'vue';
import { getInfo } from './api'; import { getInfo, dealInfo,queryProcess } from './api';
import AMapLoader from '@amap/amap-jsapi-loader'; import AMapLoader from '@amap/amap-jsapi-loader';
export default { import Icon from '@/components/Icon/Icon.vue';
export default defineComponent({
components:{Icon},
setup(props, { emit }) { setup(props, { emit }) {
// //
let detail = reactive({ let detail = reactive({
@ -198,14 +189,17 @@
faultLocation: '', faultLocation: '',
faultDescription: '', faultDescription: '',
attachments: '', attachments: '',
longitude: '',
latitude: '',
});
const dealDetail = reactive({
fixPeople: '', fixPeople: '',
fixTime: '', fixTime: '',
fixResult: '', fixResult: '',
cost: '', cost: '',
handleImg: '', attachments: '',
longitude: '',
latitude: '',
}); });
const progress = ref([]);
const statusOptions = [ const statusOptions = [
{ {
label: '待派遣', label: '待派遣',
@ -241,17 +235,16 @@
return i.value == val; return i.value == val;
})?.label; })?.label;
}; };
const historyInfo = ref([]);
const historyColumns = [ const historyColumns = [
{ {
title: '环节', title: '环节',
dataIndex: 'stage', dataIndex: 'stage',
key: 'stage', key: 'stage',
}, },
{ {
title: '操作', title: '操作',
dataIndex: 'operation', dataIndex: 'operationName',
key: 'operation', key: 'operationName',
}, },
{ {
title: '操作人', title: '操作人',
@ -259,9 +252,9 @@
key: 'operator', key: 'operator',
}, },
{ {
title: '详细信息', title: '操作时间',
dataIndex: 'action', dataIndex: 'operationTime',
key: 'action ', key: 'operationTime ',
}, },
]; ];
const delayInfo = ref([]); const delayInfo = ref([]);
@ -296,6 +289,13 @@
for (let i in detail) { for (let i in detail) {
detail[i] = data[i]; detail[i] = data[i];
} }
const data1 = await dealInfo(id);
for (let i in dealDetail) {
dealDetail[i] = data1[i];
}
const progressLine = await queryProcess(id);
progress.value = progressLine;
console.log(progress.value);
initMap(detail.longitude, detail.latitude, detail.faultLocation); initMap(detail.longitude, detail.latitude, detail.faultLocation);
}; };
@ -339,15 +339,16 @@
showDrawer, showDrawer,
onClose, onClose,
activeKey, activeKey,
historyInfo,
historyColumns, historyColumns,
delayInfo, delayInfo,
delayColumns, delayColumns,
detail, detail,
statusText dealDetail,
statusText,
progress,
}; };
}, },
}; });
</script> </script>
<style scoped> <style scoped>
@ -360,14 +361,30 @@
margin-bottom: 10px; margin-bottom: 10px;
} */ } */
div { div {
margin-bottom: 10px; margin-bottom: 1%;
}
.stage{
font-weight: 600;
} }
.timeText { .timeText {
margin: 0 0 40px 20px; margin: 0 20% 3% 3%;
}
.person {
color: red; color: red;
font-weight: 550;
}
.operationTime {
color: gray;
font-weight: 550;
margin-left:80%
}
.duration {
color: #00bbff;
position: absolute;
font-weight: 550;
margin-left:80%;
top: 0.1%;
} }
.titleLabel { .titleLabel {
color: gray; color: gray;
} }

4
src/views/document/addModal.vue

@ -57,7 +57,7 @@
import { getToken } from '@/utils/auth'; import { getToken } from '@/utils/auth';
import { useGlobSetting } from '@/hooks/setting'; import { useGlobSetting } from '@/hooks/setting';
export default { export default {
setup() { setup(props,{emit}) {
const title = ref('新增'); const title = ref('新增');
const formRef = ref(); const formRef = ref();
const visible = ref(false); const visible = ref(false);
@ -111,6 +111,7 @@
delete params.id delete params.id
add(params).then((_) => { add(params).then((_) => {
message.success('新增成功'); message.success('新增成功');
emit('success')
closeModal() closeModal()
}); });
} else { } else {
@ -120,6 +121,7 @@
} }
update(params).then((_) => { update(params).then((_) => {
message.success('编辑成功'); message.success('编辑成功');
emit('success')
closeModal() closeModal()
}); });
} }

2
src/views/document/index.vue

@ -20,7 +20,7 @@
</template> </template>
</BasicTable> </BasicTable>
<detailDrawer ref="detailDrawerRef" /> <detailDrawer ref="detailDrawerRef" />
<addModal ref="addModalRef" /> <addModal ref="addModalRef" @success="reload()"/>
</PageWrapper> </PageWrapper>
</template> </template>

4
src/views/project/IOCheck/checkRating/addModal.vue

@ -61,7 +61,7 @@
import { error } from '@/utils/log'; import { error } from '@/utils/log';
import _default from 'pinia-plugin-persistedstate'; import _default from 'pinia-plugin-persistedstate';
export default { export default {
setup() { setup(props,{emit}) {
const title = ref('新增'); const title = ref('新增');
const visible = ref(false); const visible = ref(false);
const form = reactive({ const form = reactive({
@ -112,6 +112,7 @@
delete params.id delete params.id
add(params).then((_) => { add(params).then((_) => {
message.success('新增成功'); message.success('新增成功');
emit('success')
closeModal(); closeModal();
}); });
} else { } else {
@ -121,6 +122,7 @@
} }
update(params).then((_) => { update(params).then((_) => {
message.success('编辑成功'); message.success('编辑成功');
emit('success')
closeModal(); closeModal();
}); });
} }

2
src/views/project/IOCheck/checkRating/index.vue

@ -21,7 +21,7 @@
</template> </template>
</template> </template>
</BasicTable> </BasicTable>
<addModal ref="addModalRef" /> <addModal ref="addModalRef" @success="reload()" />
<ratingModal ref="ratingModalRef" /> <ratingModal ref="ratingModalRef" />
<checkConfig ref="checkConfigRef" /> <checkConfig ref="checkConfigRef" />
</PageWrapper> </PageWrapper>

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

@ -185,7 +185,7 @@
import { getToken } from '@/utils/auth'; import { getToken } from '@/utils/auth';
import { useGlobSetting } from '@/hooks/setting'; import { useGlobSetting } from '@/hooks/setting';
export default { export default {
setup() { setup(props,{emit}) {
const title = ref('新增'); const title = ref('新增');
const formRef = ref(); const formRef = ref();
const visible = ref(false); const visible = ref(false);
@ -278,6 +278,7 @@
params.endDate = params.contractDuration[1]; params.endDate = params.contractDuration[1];
add(params).then((_) => { add(params).then((_) => {
message.success('新增成功'); message.success('新增成功');
emit('success')
closeModal(); closeModal();
}); });
} else { } else {
@ -289,6 +290,7 @@
params.endDate = params.contractDuration[1]; params.endDate = params.contractDuration[1];
update(params).then((_) => { update(params).then((_) => {
message.success('编辑成功'); message.success('编辑成功');
emit('success')
closeModal(); closeModal();
}); });
} }

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

@ -81,7 +81,7 @@
</a-form> </a-form>
</a-modal> </a-modal>
<detailDrawer ref="detailDrawerRef" /> <detailDrawer ref="detailDrawerRef" />
<addModal ref="addModalRef" /> <addModal ref="addModalRef" @success="reload()"/>
</PageWrapper> </PageWrapper>
</template> </template>

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

@ -98,7 +98,7 @@
import { getToken } from '@/utils/auth'; import { getToken } from '@/utils/auth';
import { useGlobSetting } from '@/hooks/setting'; import { useGlobSetting } from '@/hooks/setting';
export default { export default {
setup() { setup(props,{emit}) {
const title = ref('新增'); const title = ref('新增');
const formRef = ref(); const formRef = ref();
const visible = ref(false); const visible = ref(false);
@ -194,6 +194,7 @@
delete params.id delete params.id
add(params).then((_) => { add(params).then((_) => {
message.success('新增成功'); message.success('新增成功');
emit('success')
closeModal() closeModal()
}); });
} else { } else {
@ -203,6 +204,7 @@
} }
update(params).then((_) => { update(params).then((_) => {
message.success('编辑成功'); message.success('编辑成功');
emit('success')
closeModal() closeModal()
}); });
} }

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

@ -20,7 +20,7 @@
</template> </template>
</BasicTable> </BasicTable>
<detailDrawer ref="detailDrawerRef" /> <detailDrawer ref="detailDrawerRef" />
<addModal ref="addModalRef" /> <addModal ref="addModalRef" @success="reload()"/>
</PageWrapper> </PageWrapper>
</template> </template>

2
src/views/property/meterial/addModal.vue

@ -114,6 +114,7 @@
delete params.id delete params.id
add(params).then((_) => { add(params).then((_) => {
message.success('新增成功'); message.success('新增成功');
emit('success')
visible.value = false; visible.value = false;
}); });
} else { } else {
@ -123,6 +124,7 @@
} }
update(params).then((_) => { update(params).then((_) => {
message.success('编辑成功'); message.success('编辑成功');
emit('success')
visible.value = false; visible.value = false;
}); });
} }

2
src/views/property/meterial/index.vue

@ -36,7 +36,7 @@
</template> </template>
</template> </template>
</BasicTable> </BasicTable>
<addModal ref="addModalRef" /> <addModal ref="addModalRef" @success="reload()"/>
</a-col> </a-col>
</a-row> </a-row>
</PageWrapper> </PageWrapper>

2
src/views/property/point/addModal.vue

@ -131,6 +131,7 @@
delete params.id; delete params.id;
add(params).then((_) => { add(params).then((_) => {
message.success('新增成功'); message.success('新增成功');
emit('success')
visible.value = false; visible.value = false;
}); });
} else { } else {
@ -140,6 +141,7 @@
} }
update(params).then((_) => { update(params).then((_) => {
message.success('编辑成功'); message.success('编辑成功');
emit('success')
visible.value = false; visible.value = false;
}); });
} }

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

@ -40,7 +40,7 @@
</template> </template>
</BasicTable> </BasicTable>
<detailDrawer ref="detailDrawerRef" /> <detailDrawer ref="detailDrawerRef" />
<addModal ref="addModalRef" /> <addModal ref="addModalRef" @success="reload()" />
<pointModal ref="pointModalRef" /> <pointModal ref="pointModalRef" />
</a-col> </a-col>
</a-row> </a-row>

Loading…
Cancel
Save