巡检逻辑代码提交

test
zhangdi 1 year ago
parent d4032ee24a
commit 1bc3529a1a
  1. 91
      api/api.js
  2. 4
      common/betone_components/betone-list.vue
  3. 12
      pages.json
  4. 2
      pages/home/index.vue
  5. 148
      pages/inspection/components/detailsCollapse.vue
  6. 359
      pages/inspection/components/plan-list.vue
  7. 315
      pages/inspection/plan.vue
  8. 218
      pages/inspection/planDetails.vue
  9. 598
      pages/inspection/quest.vue
  10. 702
      pages/inspection/questOrder.vue
  11. 45
      pages/inspection/records.vue
  12. 2
      pages/my/my.vue
  13. 81
      pages/submission/evaluate.vue
  14. 2
      static/scss/index.scss
  15. 2
      static/scss/sp-components/index.scss
  16. 2
      utils/util.js
  17. 3
      utils/website.js

@ -85,7 +85,7 @@ const install = (Vue, vm) => {
isparams: false
})
// 获取人员列表
let getUserList = (params) => http.get('/blade-system/user/page', { ...params }, {
@ -215,8 +215,8 @@ const install = (Vue, vm) => {
authorizations: true,
isparams: false
})
// 巡检计划列表 /
let getDictionaryList = (params) => http.get('/lab-ops/maintenance/plan-page', params, {
// 巡检计划列表 /
let getDictionaryList = (params) => http.get('/lab-ops/maintenance/plan-page', params, {
authorizations: true,
isparams: false
})
@ -250,9 +250,90 @@ const install = (Vue, vm) => {
authorizations: true,
isparams: false
})
// 巡检维修列表
let getRepairPage = (params) => http.get('/lab-ops/maintenance/repair-page', params, {
authorizations: true,
isparams: false
})
// 维修人员 更新明细接口
let updateDetaile = (params) => http.post('/lab-ops/maintenance/task-serviceman-update-detail', params, {
authorizations: true,
isparams: true
})
// 巡检完成
let taskServicemanSubmit = (params) => http.post('/lab-ops/maintenance/task-serviceman-submit', params, {
authorizations: true,
isparams: false
})
// 客户确认巡检完成
let taskCustomerConfirm = (params) => http.post('/lab-ops/maintenance/task-customer-confirm', params, {
authorizations: true,
isparams: false
})
// 客户确认未巡检完成
let taskCustomerRefuse = (params) => http.post('/lab-ops/maintenance/task-customer-refuse', params, {
authorizations: true,
isparams: false
})
// 维修人员 保存维修方案
let taskSolutionSave = (params) => http.post('/lab-ops/maintenance/repair-solution-save', params, {
authorizations: true,
isparams: false
})
// 维修人员 提交维修方案
let taskSolutionSubmit = (params) => http.post('/lab-ops/maintenance/repair-solution-submit', params, {
authorizations: true,
isparams: false
})
// 维修主管 审批维修方案 通过
let repairSolutionSupervisor = (params) => http.post('/lab-ops/maintenance/repair-solution-supervisor-confirm', params, {
authorizations: true,
isparams: false
})
// 维修主管 审批维修方案 驳回
let repairSolutionRefuse = (params) => http.post('/lab-ops/maintenance/repair-solution-supervisor-refuse', params, {
authorizations: true,
isparams: false
})
// 客户 确认巡检维修方案 通过
let repairSolutionCustomer = (params) => http.post('/lab-ops/maintenance/repair-solution-customer-confirm', params, {
authorizations: true,
isparams: false
})
// 客户 确认巡检维修方案 驳回
let repairCustomerRefuse = (params) => http.post('/lab-ops/maintenance/repair-solution-customer-refuse', params, {
authorizations: true,
isparams: false
})
// 维修人员 确认维修是否完成
let repairServicemanSubmit = (params) => http.post('/lab-ops/maintenance/repair-serviceman-submit', params, {
authorizations: true,
isparams: false
})
// 客户 确认完成 lab-ops/maintenance/repair-custome-refuse-finish
let repairConfirmFinish = (params) => http.post('/lab-ops/maintenance/repair-custome-confirm-finish', params, {
authorizations: true,
isparams: false
})
// 客户 确认未完成
let repairRefuseFinish = (params) => http.post('/lab-ops/maintenance/repair-custome-refuse-finish', params, {
authorizations: true,
isparams: false
})
// 客服 确认付款 lab-ops/maintenance/repair-service-confirm-invoic
let confirmInvoic = (params) => http.post('/lab-ops/maintenance/repair-service-confirm-invoic', params, {
authorizations: true,
isparams: false
})
// 将各个定义的接口名称,统一放进对象挂载到vm.$u.api(因为vm就是this,也即this.$u.api)下
vm.$u.api = { getTenantInfo, login, logout, registerUser, getworkbench, getLoginRecords, getEditRecords, subEditRecords, getChildList, getDeviceList, workOrderSave, getWorkOrderRecords, getBreakdownInfo, workOrderupdate, evaluateSign, getRepairPersons, getGoodsList, getDictionaryList, getUserList, workList, deviceList, upkeepStat, pieStat, getUserInfo, overview, sendOrders, cloneOrder, editData, repairReject, applySave, sendVerify, serviceman, servicemanReceive, servicemanSubmit, supervisorReject, supervisorconfirm, customerConfirm, customerReject, servicemanRepairSubmit, evaluateRepairReject, getDeviceDetail, getTaskPage, getTaskDetail,taskSupervisorconfirm,taskServicemanreceive,updateCoordinate ,taskServicemanUpdateTime,getPlanDetail};
vm.$u.api = { getTenantInfo, login, logout, registerUser, getworkbench, getLoginRecords, getEditRecords, subEditRecords, getChildList, getDeviceList, workOrderSave, getWorkOrderRecords, getBreakdownInfo, workOrderupdate, evaluateSign, getRepairPersons, getGoodsList, getDictionaryList, getUserList, workList, deviceList, upkeepStat, pieStat, getUserInfo, overview, sendOrders, cloneOrder, editData, repairReject, applySave, sendVerify, serviceman, servicemanReceive, servicemanSubmit, supervisorReject, supervisorconfirm, customerConfirm, customerReject, servicemanRepairSubmit, evaluateRepairReject, getDeviceDetail, getTaskPage, getTaskDetail, taskSupervisorconfirm, taskServicemanreceive, updateCoordinate, taskServicemanUpdateTime, getPlanDetail, getRepairPage, updateDetaile, taskServicemanSubmit, taskCustomerConfirm, taskCustomerRefuse, taskSolutionSave, taskSolutionSubmit, repairSolutionSupervisor, repairSolutionRefuse, repairSolutionCustomer, repairCustomerRefuse, repairServicemanSubmit,repairConfirmFinish,repairRefuseFinish ,confirmInvoic};
}
export default {

@ -4,7 +4,7 @@
<betone-new-input v-model="searchInfo.requirementCode" :placeholder="dataTypes == 1 ? '搜索单号' : '搜索单号或单位名称'"
icon="search" style="margin-bottom: 32rpx" @changevalue="searchData()" />
<u-tabs :list="tabList" :is-scroll="true" :current="current" @change="changeTab"
bg-color="rgba(248, 248, 248, 1)"></u-tabs>
></u-tabs>
</view>
<view class="order-box">
<!-- @click="goPage(item, 'details')" -->
@ -541,7 +541,7 @@ export default {
padding: 0;
.page-search-top {
background-color: rgba(248, 248, 248, 1);
background-color: #fff;
padding: 0 40rpx 0;
}

@ -148,7 +148,7 @@
{
"path": "pages/inspection/quest",
"style": {
"navigationStyle": "custom",
"navigationStyle": "custom",
"navigationBarTextStyle": "white"
}
},
@ -181,14 +181,7 @@
{
"path": "pages/inspection/plan",
"style": {
"navigationStyle": "custom",
"navigationBarTextStyle": "white"
}
},
{
"path": "pages/inspection/records",
"style": {
"navigationBarTitleText": "巡检计划",
"navigationBarTitleText": "巡检计划",
"enablePullDownRefresh": false,
"navigationBarTextStyle": "black",
"navigationBarBackgroundColor": "#F8F8F8",
@ -197,6 +190,7 @@
}
}
},
{
"path": "pages/inspection/planDetails",
"style": {

@ -72,7 +72,7 @@ export default {
let data_ = res.data
data_.forEach(item => {
if (item.name.indexOf('巡检') > 0) {
item.pagePath = '/pages/inspection/records'
item.pagePath = '/pages/inspection/plan'
item.img = require("@/static/images/home/lab_xj.png")
}
if (item.name.indexOf('记录') > 0) {

@ -3,17 +3,17 @@
<u-collapse :accordion="false">
<u-collapse-item v-for="(item, index) in itemList" :key="index">
<view slot="title">
<text class="collapse-title">实验室楼层{{ item.title }}</text>
<text class="collapse-title">实验室楼层{{ item.floorName }}</text>
</view>
<view v-for="(v, vindex) in item.fangjian" :key="vindex" class="collapse-room">
<view>房间名称{{ v.fangjianmingcheng }}</view>
<view v-for="(s, sindex) in v.neirong" :key="sindex" class="collapse-major">
<view v-for="(v, vindex) in item.details" :key="vindex" class="collapse-room">
<view>房间名称{{ v.deptName }}</view>
<view v-for="(s, sindex) in v.details" :key="sindex" class="collapse-major">
<view>专业分类{{ s.xitong }}</view>
<view v-for="(n, nindex) in s.detection" :key="nindex" class="n-box">
<!-- <view v-for="(n, nindex) in s.details" :key="nindex" class="n-box"> -->
<u-tag :text="nindex + 1" type="info" class="left-tag" />
<u-tag text="已检" type="success" class="right-tag" />
<view class="n-box-title"> 各排/出水口通水顺畅</view>
<view class="n-box-info"> 工艺内容工艺内容工艺内容工艺内容工艺内容工艺内容工艺内容</view>
<view class="n-box-title"> {{ n.checkContent }}</view>
<view class="n-box-info"> {{ n.craft }}</view>
<view class="info_item">
<text class="item_left_txt">状态</text>
<text class="item_right_txt">
@ -44,7 +44,7 @@
<betone-new-input type="textarea" :placeholder="'请输入'"></betone-new-input>
</text>
</view>
</view>
<!-- </view> -->
</view>
</view>
</u-collapse-item>
@ -61,6 +61,10 @@ export default {
type:{
type:String,
default:''
},
collapseData:{
type:Array,
default:null
}
},
computed: {
@ -68,6 +72,10 @@ export default {
return this.type=='view'
},
},
mounted(){
console.log(2222222,this.collapseData)
this.itemList = this.collapseData
},
data() {
return {
image2: '',//
@ -83,68 +91,68 @@ export default {
}
],
itemList: [
{
title: '三层',
fangjian: [
{
fangjianmingcheng: '房间一',
neirong: [{
xitong: '水系统',
detection: [
{
title1: '水量水压满足用水要求1',
radioValue: null,
qianzi: '',//
},
{
title1: '水量水压满足用水要求2',
radioValue: null,
qianzi: '',//
}
]
}]
},
{
fangjianmingcheng: '房间二',
neirong: [{
xitong: '水系统',
detection: [
{
title1: '水量水压满足用水要求1',
radioValue: 0
},
{
title1: '水量水压满足用水要求2',
radioValue: 1
}
]
}, {
xitong: '水系统2',
detection: [
{
title1: '水量水压满足用水要求1',
radioValue: 0
},
{
title1: '水量水压满足用水要求2',
radioValue: 1
}
]
}]
}
]
},
{
title: '四层',
fangjian: [
{
fangjianmingcheng: '房间一',
neirong: [{
xitong: '水系统'
}]
}
]
}
// {
// title: '',
// fangjian: [
// {
// fangjianmingcheng: '',
// neirong: [{
// xitong: '',
// detection: [
// {
// title1: '1',
// radioValue: null,
// qianzi: '',//
// },
// {
// title1: '2',
// radioValue: null,
// qianzi: '',//
// }
// ]
// }]
// },
// {
// fangjianmingcheng: '',
// neirong: [{
// xitong: '',
// detection: [
// {
// title1: '1',
// radioValue: 0
// },
// {
// title1: '2',
// radioValue: 1
// }
// ]
// }, {
// xitong: '2',
// detection: [
// {
// title1: '1',
// radioValue: 0
// },
// {
// title1: '2',
// radioValue: 1
// }
// ]
// }]
// }
// ]
// },
// {
// title: '',
// fangjian: [
// {
// fangjianmingcheng: '',
// neirong: [{
// xitong: ''
// }]
// }
// ]
// }
],
}

@ -1,359 +0,0 @@
<template>
<view class="page-css">
<view class="page-search-top">
<betone-new-input v-model="searchInfo.requirementCode" placeholder='搜索巡检单位名称' icon="search"
style="margin-bottom: 32rpx" @changevalue="searchData()" />
<!-- <u-tabs :list="tabList" :is-scroll="false" :current="current" @change="changeTab"
bg-color="rgba(248, 248, 248, 1)"></u-tabs> -->
</view>
<view class="order-box">
<!-- @click="goPage(item, 'details')" -->
<view class="order-item" v-for="(item, index) in orderData" :key="index">
<view class="item-top">
<view class="item-left">
<text class="item-orderNo">单位</text>
<text class="item-time"> {{ item.deptName }}</text>
</view>
<view class="item-right">
<u-tag :text="statusName(item.status)" type="success" mode="dark" shape="circle"
:bg-color="tagColor[statusName(item.status)]" />
</view>
</view>
<view class="item-con">
<view class="con-right">
<text class="con-title">巡检标题{{ item.planContent }}</text>
<text class="con-title">创建时间{{ item.createTime }}</text>
<view class="con-btn">
<u-button size="mini" plain style="margin-right: 32rpx"
@click="details(item)">查看</u-button>
<block v-if="item.status == 0 && dataTypes == 3">
<u-button size="mini" plain style="margin-right: 32rpx"
@click="assign(item)">指派</u-button>
</block>
</view>
</view>
</view>
</view>
</view>
<u-loadmore margin-top="10" margin-bottom="40" :status="loadingState" />
<!-- 分派人员-->
<u-select v-model="sendOrdersShow" :list="sendOrdersList" @confirm="sendOrdersConfirm" :isShowsearch="true"
value-name="id" title="选择维修人员"></u-select>
<betone-loading ref="BetLoading" />
</view>
</template>
<script>
export default {
props: {
},
data() {
return {
searchInfo: {
requirementCode: "",
type: '',//
},
tabList: [
{
name: "全部",
key: "9999",
},
{
name: "启用",
key: "1",
},
{
name: "停用",
key: "0",
},
],
tagColor: {
停用: "#909399",
启用: "#67c23a",
},
current: 0,
loadingState: "loadmore",
isNomore: false,
noDataFlag: false,
page: {
currentPage: 1,
pageSize: 10,
},
orderData: [],
sendOrder: {
repairPerson: '',// id
name: '',//
},
sendOrdersShow: false,//
sendOrdersList: [],
};
},
computed: {
noData() {
return this.orderData && this.orderData.length == 0;
},
dataTypes() {
return this.$store.state.dataType
},
},
mounted() {
this.$nextTick(() => {
this.getRecordsList()
this.getRepairPersons()
//
uni.$on('onReachBottom', () => {
if (this.isNomore) {
return;
}
this.page.currentPage++;
this.getRecordsList();
})
//
uni.$on('onPullDownRefresh', () => {
this.isNomore = false
this.page.currentPage = 1;
this.getRecordsList();
uni.stopPullDownRefresh();
});
});
},
methods: {
//
getRecordsList() {
this.BetLoading.show();
this.$u.api.getDictionaryList().then(res => {
var totalPage = res.data.total;
var newOrders = res.data.records;
if (this.page.currentPage == 1) {
this.orderData = [];
}
this.orderData = [...this.orderData, ...(res.data.records || [])];
if (newOrders.length == 0) {
this.loadingState = "nomore";
this.isNomore = true;
}
if (totalPage == this.orderData.length) {
this.loadingState = "nomore";
this.isNomore = true;
}
this.BetLoading.hide();
}).catch(err => {
})
},
//
searchData() {
if (this.dataTypes != 1) {
//
this.searchInfo.reportUnit = this.searchInfo.requirementCode
} else {
this.searchInfo.reportUnit = ''
}
this.isNomore = false
// this.page.currentPage = 1;
this.getRecordsList()
},
// tab
changeTab(index) {
this.current = index;
this.searchInfo.type = this.tabList[index].key == '9999' ? '' : this.tabList[index].key
this.isNomore = false
// this.page.currentPage = 1;
this.getRecordsList()
},
//
statusName(item) {
if (item == 1) {
return '停用'
}
if (item == 0) {
return '启用'
}
},
//
assign(item) {
this.rowInfo = item
this.sendOrdersShow = true
},
//
getRepairPersons() {
this.$u.api.getRepairPersons().then(res => {
if (res.code == 200) {
let data_ = res.data
data_.forEach(i => {
this.sendOrdersList.push({ ...i, label: i.name })
})
}
})
},
//
sendOrdersConfirm(e) {
let query = {
servicemanId: e[0].value,
id: this.rowInfo.id
}
this.$u.api.taskSupervisorconfirm(query).then(res => {
if (res.code == 200) {
uni.showToast({ title: "指派成功", icon: "none" });
this.sendOrdersShow = false
//
this.getRecordsList()
}
})
},
details(item) {
let param = {
id: item.id,
}
uni.navigateTo({
url: `/pages/inspection/planDetails${this.$u.queryParams(param)}`,
});
},
},
};
</script>
<style lang="scss" scoped>
.page-css {
padding: 0 !important;
.page-search-top {
max-height: 210rpx;
background-color: rgba(248, 248, 248, 1);
padding: 0 40rpx 0;
}
.order-box {
margin-top: 20rpx;
.order-item {
min-height: 214rpx;
margin: 0 24rpx 20rpx;
border-radius: 20rpx;
background: #fff;
display: flex;
flex-direction: column;
.item-top {
height: 114rpx;
border-bottom: 1px solid rgba(239, 239, 239, 1);
display: flex;
flex-direction: row;
width: 100%;
.item-left {
flex: 1;
text {
display: block;
}
.item-orderNo {
color: rgba(51, 51, 51, 1);
font-size: 28rpx;
padding: 12rpx 0 0 26rpx;
}
.item-time {
color: rgba(190, 190, 190, 1);
font-size: 24rpx;
padding: 12rpx 0 0 26rpx;
}
}
.item-right {
width: 132rpx;
height: 48rpx;
margin: 36rpx 24rpx 0 0;
}
}
.item-con {
flex: 1;
display: flex;
flex-direction: row;
margin-bottom: 32rpx;
.con-left {
width: 150rpx;
height: 150rpx;
margin: 24rpx 28rpx 0 28rpx;
image {
width: 100%;
height: 100%;
}
}
.con-right {
flex: 1;
margin-right: 24rpx;
display: flex;
flex-direction: column;
margin-left: 32rpx;
text {
display: block;
}
.con-title {
margin-top: 12rpx;
line-height: 60rpx;
color: rgba(0, 0, 0, 1);
font-size: 28rpx;
}
.con-content {
color: rgba(108, 108, 108, 1);
font-size: 24rpx;
// line-height: 36rpx;
margin-top: 14rpx;
flex: 1;
text {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
text-overflow: ellipsis;
line-height: 1.5em;
/* 这个值根据你的需求调整,这里假设为1.5倍行高 */
max-height: 3em;
/* 3行的高度 */
width: 100%;
/* 根据需要设置宽度 */
word-wrap: break-word;
/* 允许在单词内换行 */
word-break: break-all;
/* 允许在任意字符处换行 */
}
}
.con-btn {
margin-top: 56rpx;
// margin-bottom: 32rpx;
display: inline-block;
text-align: right;
}
}
}
}
}
}
</style>

@ -1,48 +1,327 @@
<template>
<view class="">
<view class="page-header-txt">科研医疗建筑运维平台</view>
<planList></planList>
<betone-tabbar ref="tabbarRef" />
<view class="page-css">
<!-- <view class="page-header-txt">科研医疗建筑运维平台</view> -->
<view class="page-search-top">
<betone-new-input v-model="searchInfo.requirementCode" placeholder='搜索巡检单位名称' icon="search"
style="margin-bottom: 32rpx" @changevalue="searchData()" />
<!-- <u-tabs :list="tabList" :is-scroll="false" :current="current" @change="changeTab"
bg-color="rgba(248, 248, 248, 1)"></u-tabs> -->
</view>
<view class="order-box">
<!-- @click="goPage(item, 'details')" -->
<view class="order-item" v-for="(item, index) in orderData" :key="index">
<view class="item-top">
<view class="item-left">
<text class="item-orderNo">单位</text>
<text class="item-time"> {{ item.deptName }}</text>
</view>
<view class="item-right">
<u-tag :text="statusName(item.isOpen)" type="success" mode="dark" shape="circle"
:bg-color="tagColor[statusName(item.isOpen)]" />
</view>
</view>
<view class="item-con">
<view class="con-right">
<text class="con-title">巡检标题{{ item.planContent }}</text>
<text class="con-title">创建时间{{ item.createTime }}</text>
<view class="con-btn">
<u-button size="mini" plain style="margin-right: 32rpx" @click="details(item)">查看</u-button>
<u-button size="mini" plain type="primary" style="margin-right: 32rpx" @click="openTaskPage(item)">巡检任务</u-button>
</view>
</view>
</view>
</view>
</view>
<u-loadmore margin-top="10" margin-bottom="40" :status="loadingState" />
<betone-loading ref="BetLoading" />
</view>
</template>
<script>
import planList from './components/plan-list.vue'
export default {
components: {
planList,
},
props: {
},
data() {
return {
searchInfo: {
requirementCode: "",
type: '',//
},
tabList: [
{
name: "全部",
key: "9999",
},
{
name: "启用",
key: "1",
},
{
name: "停用",
key: "0",
},
],
tagColor: {
停用: "#909399",
启用: "#67c23a",
},
current: 0,
loadingState: "loadmore",
isNomore: false,
noDataFlag: false,
page: {
currentPage: 1,
pageSize: 10,
},
orderData: [],
sendOrder: {
repairPerson: '',// id
name: '',//
},
};
},
computed: {
noData() {
return this.orderData && this.orderData.length == 0;
},
dataTypes() {
return this.$store.state.dataType
},
},
onReachBottom() {
uni.$emit('onReachBottom');
onPullDownRefresh() {
if (this.isNomore) {
return;
}
this.page.currentPage++;
this.getRecordsList();
},
onPullDownRefresh() {
uni.$emit('onPullDownRefresh');
this.isNomore = false
this.page.currentPage = 1;
this.getRecordsList();
uni.stopPullDownRefresh();
},
onShow() {
this.$nextTick(() => {
this.$refs.tabbarRef.getPermission();
this.getRecordsList()
});
},
methods: {
//
getRecordsList() {
this.BetLoading.show();
this.$u.api.getDictionaryList().then(res => {
var totalPage = res.data.total;
var newOrders = res.data.records;
if (this.page.currentPage == 1) {
this.orderData = [];
}
this.orderData = [...this.orderData, ...(res.data.records || [])];
if (newOrders.length == 0) {
this.loadingState = "nomore";
this.isNomore = true;
}
if (totalPage == this.orderData.length) {
this.loadingState = "nomore";
this.isNomore = true;
}
this.BetLoading.hide();
}).catch(err => {
})
},
//
searchData() {
if (this.dataTypes != 1) {
//
this.searchInfo.reportUnit = this.searchInfo.requirementCode
} else {
this.searchInfo.reportUnit = ''
}
this.isNomore = false
// this.page.currentPage = 1;
this.getRecordsList()
},
// tab
changeTab(index) {
this.current = index;
this.searchInfo.type = this.tabList[index].key == '9999' ? '' : this.tabList[index].key
this.isNomore = false
// this.page.currentPage = 1;
this.getRecordsList()
},
//
statusName(item) {
if (item == 0) {
return '停用'
}
if (item == 1) {
return '启用'
}
},
//
details(item) {
let param = {
id: item.id,
}
uni.navigateTo({
url: `/pages/inspection/planDetails${this.$u.queryParams(param)}`,
});
},
//
openTaskPage(item){
let param = {
id: item.id,
}
uni.navigateTo({
url: `/pages/inspection/quest${this.$u.queryParams(param)}`,
});
}
},
};
</script>
<style lang="scss" scoped>
.page-css {
padding: 0 !important;
.page-search-top {
max-height: 210rpx;
background-color: #F8F8F8;
padding: 30rpx 40rpx 20rpx;
}
.order-box {
margin-top: 20rpx;
.order-item {
min-height: 214rpx;
margin: 0 24rpx 20rpx;
border-radius: 20rpx;
background: #fff;
display: flex;
flex-direction: column;
.item-top {
height: 114rpx;
border-bottom: 1px solid rgba(239, 239, 239, 1);
display: flex;
flex-direction: row;
width: 100%;
.item-left {
flex: 1;
text {
display: block;
}
.item-orderNo {
color: rgba(51, 51, 51, 1);
font-size: 28rpx;
padding: 12rpx 0 0 26rpx;
}
.item-time {
color: rgba(190, 190, 190, 1);
font-size: 24rpx;
padding: 12rpx 0 0 26rpx;
}
}
.item-right {
width: 132rpx;
height: 48rpx;
margin: 36rpx 24rpx 0 0;
}
}
.item-con {
flex: 1;
display: flex;
flex-direction: row;
margin-bottom: 32rpx;
.con-left {
width: 150rpx;
height: 150rpx;
margin: 24rpx 28rpx 0 28rpx;
image {
width: 100%;
height: 100%;
}
}
.con-right {
flex: 1;
margin-right: 24rpx;
display: flex;
flex-direction: column;
margin-left: 32rpx;
text {
display: block;
}
.con-title {
margin-top: 12rpx;
line-height: 60rpx;
color: rgba(0, 0, 0, 1);
font-size: 28rpx;
}
.con-content {
color: rgba(108, 108, 108, 1);
font-size: 24rpx;
// line-height: 36rpx;
margin-top: 14rpx;
flex: 1;
text {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
text-overflow: ellipsis;
line-height: 1.5em;
/* 这个值根据你的需求调整,这里假设为1.5倍行高 */
max-height: 3em;
/* 3行的高度 */
width: 100%;
/* 根据需要设置宽度 */
word-wrap: break-word;
/* 允许在单词内换行 */
word-break: break-all;
/* 允许在任意字符处换行 */
}
}
.con-btn {
margin-top: 56rpx;
// margin-bottom: 32rpx;
display: inline-block;
text-align: right;
}
}
}
}
}
}
</style>

@ -14,7 +14,6 @@
<view class="info">
<view class="info_title">巡检任务</view>
<!-- <detailsCollapse :data="detailForm.details" type="view"></detailsCollapse> -->
<u-collapse :accordion="false">
<u-collapse-item v-for="(item, index) in detailForm.details" :key="index">
<view slot="title">
@ -22,44 +21,37 @@
</view>
<view v-for="(v, vindex) in item.details" :key="vindex" class="collapse-room">
<view>房间名称{{ v.deptName }}</view>
<view v-for="(s, sindex) in v.details" :key="sindex" class="collapse-major">
<view>专业分类{{ s.checkContent }}</view>
<view v-for="(n, nindex) in s.details" :key="nindex" class="n-box">
<u-tag :text="nindex + 1" type="info" class="left-tag" />
<!-- <u-tag text="已检" type="success" class="right-tag" /> -->
<view class="n-box-title"> 各排/出水口通水顺畅</view>
<view class="n-box-info"> 工艺内容工艺内容工艺内容工艺内容工艺内容工艺内容工艺内容</view>
<view class="info_item">
<text class="item_left_txt">状态</text>
<text class="item_right_txt">
<u-radio-group v-model="n.radioValue">
<u-radio name="1">正常</u-radio>
<u-radio name="0">异常</u-radio>
</u-radio-group>
</text>
</view>
<view class="info_item">
<text class="item_left_txt">现场照片</text>
<text class="item_right_txt">
<view class="btn">上传照片</view>
</text>
</view>
<view class="info_item">
<text class="item_left_txt">使用人签字</text>
<text class="item_right_txt">
<image v-if="n.qianzi" :src="n.qianzi" style="width: 144px;height: 77rpx;"
mode="widthFix" @click="toPop1(index, vindex, sindex, nindex)"></image>
<view v-else class="btn" @click="toPop1(index, vindex, sindex, nindex)">签字
</view>
</text>
</view>
<view class="info_item">
<text class="item_left_txt">备注</text>
<text class="item_right_txt">
<betone-new-input type="textarea" :placeholder="'请输入'"></betone-new-input>
</text>
</view>
<view v-for="(s, sindex) in v.details" :key="sindex" class="n-box">
<u-tag :text="sindex + 1" type="info" class="left-tag" />
<view class="info_item">
<text class="item_left_txt">设备</text>
<text class="item_right_txt">
{{ s.deviceName }}
</text>
</view>
<view class="info_item">
<text class="item_left_txt">巡检内容</text>
<text class="item_right_txt">
{{ s.checkContent }}
</text>
</view>
<view class="info_item">
<text class="item_left_txt">工艺要求</text>
<text class="item_right_txt">
{{ s.craft }}
</text>
</view>
<view class="info_item">
<text class="item_left_txt">巡检周期</text>
<text class="item_right_txt">
{{ periodName(s.period) }}
</text>
</view>
<view class="info_item">
<text class="item_left_txt">开始时间</text>
<text class="item_right_txt">
{{ s.startTime }}
</text>
</view>
</view>
</view>
@ -101,6 +93,17 @@ export default {
this.detailForm = res.data
}
})
},
periodName(value){
if(value == 1){
return '月'
}
if(value == 2){
return '季度'
}
if(value == 3){
return '半年'
}
}
}
}
@ -183,89 +186,90 @@ export default {
color: rgba(0, 0, 0, 1);
}
.collapse-major {
margin: 0 32rpx 20rpx;
color: rgba(0, 0, 0, 1);
margin: 12rpx 24rpx 12rpx;
// .collapse-major {
// margin: 0 32rpx 20rpx;
// color: rgba(0, 0, 0, 1);
// margin: 12rpx 24rpx 12rpx;
.n-box {
border: 1px solid rgba(239, 239, 239, 1);
padding: 32rpx 54rpx 0;
margin-top: 24rpx;
margin-bottom: 24rpx;
position: relative;
.n-box {
border: 1px solid rgba(239, 239, 239, 1);
padding: 32rpx 54rpx 0;
margin-top: 24rpx;
margin-bottom: 24rpx;
position: relative;
.right-tag {
position: absolute;
right: 0;
top: 0;
}
.right-tag {
position: absolute;
right: 0;
top: 0;
}
.left-tag {
position: absolute;
left: 0;
top: 0;
padding-left: 10rpx;
padding-right: 10rpx;
}
.left-tag {
position: absolute;
left: 0;
top: 0;
padding-left: 10rpx;
padding-right: 10rpx;
}
.n-box-title {
color: rgba(0, 0, 0, 1);
.n-box-title {
color: rgba(0, 0, 0, 1);
font-size: 28rpx;
text-align: left;
}
.n-box-info {
line-height: 32rpx;
color: rgba(154, 154, 154, 1);
font-size: 24rpx;
padding-top: 12rpx;
padding-bottom: 12rpx;
}
.info_item {
width: 100%;
display: flex;
flex-direction: row;
margin: 24rpx 0 24rpx;
.item_left_txt {
color: rgba(108, 108, 108, 1);
font-size: 28rpx;
text-align: left;
width: 170rpx;
margin-right: 20rpx;
line-height: 60rpx;
}
.n-box-info {
line-height: 32rpx;
color: rgba(154, 154, 154, 1);
font-size: 24rpx;
padding-top: 12rpx;
padding-bottom: 12rpx;
}
.info_item {
width: 100%;
display: flex;
flex-direction: row;
margin: 24rpx 0 24rpx;
.item_right_txt {
flex: 1;
max-width: calc(100% - 220rpx);
color: rgba(0, 0, 0, 1);
font-size: 28rpx;
// text-align: left;
text-align: justify;
font-family: SourceHanSansSC-regular;
.item_left_txt {
color: rgba(108, 108, 108, 1);
font-size: 28rpx;
text-align: left;
width: 170rpx;
margin-right: 20rpx;
line-height: 60rpx;
/deep/.u-radio-group {
flex-wrap: nowrap;
padding-right: 48rpx;
}
.item_right_txt {
flex: 1;
max-width: calc(100% - 220rpx);
color: rgba(0, 0, 0, 1);
.btn {
width: 260rpx;
height: 60rpx;
line-height: 60rpx;
border-radius: 8rpx;
background-color: rgba(255, 255, 255, 1);
color: rgba(58, 98, 215, 1);
font-size: 28rpx;
// text-align: left;
text-align: justify;
font-family: SourceHanSansSC-regular;
/deep/.u-radio-group {
flex-wrap: nowrap;
padding-right: 48rpx;
}
.btn {
width: 260rpx;
height: 60rpx;
line-height: 60rpx;
border-radius: 8rpx;
background-color: rgba(255, 255, 255, 1);
color: rgba(58, 98, 215, 1);
font-size: 28rpx;
text-align: center;
border: 2rpx dashed rgba(58, 98, 215, 1);
}
text-align: center;
border: 2rpx dashed rgba(58, 98, 215, 1);
}
}
}
}
// }
}
</style>

@ -1,42 +1,88 @@
<template>
<view class="page-css">
<view class="page-header-txt">科研医疗建筑运维平台</view>
<view class="protocol-content"> <u-subsection :list="subsectionList" :current="subsectionCurrent"></u-subsection></view>
<u-navbar v-if="planOrderId" title="巡检任务" back-icon-color="rgb(0, 0, 0)" back-icon-size="54" :title-bold="true"
:title-size="38" title-color="rgb(0, 0, 0)"></u-navbar>
<view class="protocol-content">
<u-tabs-swiper ref="tabs" :list="subsectionList" :current="subsectionCurrent" :is-scroll="false"
@change="subsectionChange" v-if="dataTypes != 2"></u-tabs-swiper>
</view>
<view class="page-search-top">
<betone-new-input v-model="searchInfo.requirementCode" placeholder="搜索巡检单单号" icon="search"
style="margin-bottom: 32rpx" @changevalue="searchData()" />
<u-tabs :list="tabList" :is-scroll="false" :current="current" @change="changeTab"
bg-color="rgba(248, 248, 248, 1)"></u-tabs>
<u-tabs v-if="subsectionCurrent == '0'" :list="tabList" :is-scroll="true" :current="current"
@change="changeTab"></u-tabs>
<u-tabs v-if="subsectionCurrent == '1'" :list="tasktabList" :is-scroll="true" :current="current"
@change="changeTab"></u-tabs>
</view>
<view class="order-box">
<view class="order-item" v-for="(item, index) in orderData" :key="index"
@click="goPage(item, '/pages/inspection/questDetails')">
<view class="order-item" v-for="(item, index) in orderData" :key="index">
<view class="item-top">
<view class="item-left">
<text class="item-orderNo">{{ item.unitName }}</text>
<text class="item-time"> 单号{{ item.taskNo }} {{ item.fillingTime }}</text>
<text class="item-orderNo">单号 {{ item.taskCode }}</text>
</view>
<view class="item-right">
<u-tag :text="statusName(item.status)" type="success" mode="dark" shape="circle"
:bg-color="tagColor[statusName(item.status)]" />
<u-tag v-if="subsectionCurrent == '0'" :text="statusName(item.taskStatus)" type="success"
mode="dark" shape="circle" :bg-color="tagColor[statusName(item.taskStatus)]" />
<u-tag v-if="subsectionCurrent == '1'" :text="taskStatusName(item.repairStatus)" type="success"
mode="dark" shape="circle" :bg-color="tagColor[taskStatusName(item.repairStatus)]" />
</view>
</view>
<view class="item-con">
<view class="con-left">
<image src="@/static/images/pic-default.png" alt="" />
</view>
<view class="con-right">
<text class="con-title">提报类型{{ item.faultType }}</text>
<view class="con-content">
<text>{{ item.faultDescribe }}</text>
</view>
<text class="con-title">单位{{ item.deptName }}</text>
<text class="con-title">巡检说明{{ item.taskContent }}</text>
<text class="con-title">计划开始时间{{ item.startTime }}</text>
<!-- <text class="con-title">计划开始时间{{ item.startTime }}</text> -->
<view class="con-btn">
<block>
<u-button size="mini" plain style="margin-right: 32rpx"
@click="taskDetails(item)">查看</u-button>
<u-button size="mini" plain style="margin-right: 32rpx"
@click="taskDetails(item)">查看</u-button>
<!-- 巡检任务 客户 确认-->
<block v-if="subsectionCurrent == '0' && dataTypes == 1 && item.taskStatus == 3">
<u-button size="mini" plain style="margin-right: 32rpx"
@click="openWorkOrder(item)">接收</u-button>
@click.stop="openWorkOrder(item)">确认</u-button>
</block>
<!--巡检任务 维修人员 接单 提交-->
<block v-if="subsectionCurrent == '0' && dataTypes == 4">
<u-button v-if="item.taskStatus == 1" size="mini" plain style="margin-right: 32rpx"
@click="openWorkOrder(item)">接单</u-button>
<u-button v-if="item.taskStatus == 2" size="mini" plain style="margin-right: 32rpx"
@click="openWorkOrder(item)">巡检</u-button>
</block>
<!--巡检任务 维修主管 指派 -->
<block v-if="subsectionCurrent == '0' && dataTypes == 3">
<u-button v-if="item.taskStatus == 0" size="mini" plain style="margin-right: 32rpx"
@click="assign(item)">指派</u-button>
</block>
<!--巡检维修 客户 -->
<block v-if="subsectionCurrent == '1' && dataTypes == 1">
<u-button v-if="item.repairStatus == 3" size="mini" plain style="margin-right: 32rpx"
@click="openWorkOrder(item)">审批</u-button>
<u-button v-if="item.repairStatus == 5" size="mini" plain style="margin-right: 32rpx"
@click="openEvaluate(item)">评价</u-button>
</block>
<!--巡检维修 客服 -->
<block v-if="subsectionCurrent == '1' && dataTypes == 2">
<u-button v-if="item.repairStatus == 6" size="mini" plain
style="margin-right: 32rpx" @click.stop="openModel(item, 'paymentInfo')">确认付款</u-button>
</block>
<!--巡检维修 维修主管 -->
<block v-if="subsectionCurrent == '1' && dataTypes == 3">
<u-button v-if="item.repairStatus == 2" size="mini" plain style="margin-right: 32rpx"
@click="openWorkOrder(item)">审批</u-button>
</block>
<!--巡检维修 维修人员 -->
<block v-if="subsectionCurrent == '1' && dataTypes == 4">
<u-button v-if="item.repairStatus == 1" size="mini" plain style="margin-right: 32rpx"
@click="openWorkOrder(item)">提交</u-button>
<u-button v-if="item.repairStatus == 4" size="mini" plain style="margin-right: 32rpx"
@click="openModel(item, 'repairComplete')">维修完成</u-button>
</block>
</view>
</view>
</view>
@ -45,23 +91,41 @@
<u-loadmore margin-top="10" margin-bottom="40" :status="loadingState" />
<!-- 分派人员-->
<u-select v-model="sendOrdersShow" :list="sendOrdersList" @confirm="sendOrdersConfirm" :isShowsearch="true"
value-name="id" title="选择维修人员"></u-select>
<!-- 维修人员 确认维修是否完成 -->
<betone-modal v-model="repairCompleteShow" :title="'提示'" @confirm="repairCompleteFn" @cancel="repairCompleteShow = false">
维修是否完成
</betone-modal>
<!-- 客服确认付款 -->
<betone-modal v-model="paymentShow" :title="'提示'" @confirm="paymentFn" @cancel="paymentShow = false">
<view class="modal-text">
请确认付款是否已经完成
</view>
</betone-modal>
<betone-loading ref="BetLoading" />
<betone-tabbar ref="tabbarRef" />
<betone-tabbar ref="tabbarRef" v-if="!planOrderId" />
</view>
</template>
<script>
export default {
props: {
},
data() {
return {
type: '',//
searchInfo: {
requirementCode: "",
type: '',//
reportUnit: '',//
},
userInfo: {},//
rowInfo: {},//
tagColor: {
维修中: "#3A62D7",
@ -71,42 +135,14 @@ export default {
已完成: "#CECECE",
待维修: '#E99D42'
},
tabList: [
{
name: "全部",
key: "9999",
},
{
name: "待提报",
key: "-1",
},
{
name: "维修中",
key: "1,2,3",
},
{
name: "已完成",
key: "4,5,6",
},
],
tabList: [],
tasktabList: [],
current: 0,
loadingState: "loadmore",
isNomore: false,
noDataFlag: false,
orderData: [{
id: '888888', //id
taskNo: '888888', //
unitName: '888888', //
inspectionName: '888888', //
projectAddr: '888888', //
inspectionFloor: '888888', //
inspectionDate: '888888', //
status: '888888', // 0- 1-
appointTime: '888888', //
}],
orderData: [],
page: {
currentPage: 1,
pageSize: 10,
@ -120,8 +156,15 @@ export default {
},
],
subsectionCurrent:1,//
subsectionCurrent: '0',//
planOrderId: '',//id
sendOrdersShow: false,//
sendOrdersList: [],
rowInfo: {},//
repairCompleteShow: false,//
paymentShow:false,//
};
},
computed: {
@ -132,14 +175,30 @@ export default {
return this.$store.state.dataType
},
},
onLoad(options) {
if (options.id) {
this.planOrderId = options.id
}
if (options.type) {
this.type = options.type
}
},
onShow() {
this.$nextTick(() => {
this.statusList()
this.getTasktabList()
this.getRepairPersons()
if (this.dataTypes == 2) {
this.subsectionCurrent = '1'
}
this.getRecordsList()
this.$refs.tabbarRef.getPermission();
this.BetLoading.show();
setTimeout(() => {
this.BetLoading.hide();
}, 1000);
//
if (!this.planOrderId) {
this.$refs.tabbarRef.getPermission();
}
});
},
onReachBottom() {
@ -158,37 +217,41 @@ export default {
methods: {
//
getRecordsList() {
async getRecordsList() {
this.BetLoading.show();
this.loadingState = "loading";
let query = {
current: this.page.currentPage, //
size: this.page.pageSize, //
}
if (this.planOrderId) {
query.planId = this.planOrderId
}
let res = {}
if (this.subsectionCurrent == '0') {
res = await this.$u.api.getTaskPage(query)
} else {
res = await this.$u.api.getRepairPage(query)
}
if (res.code == 200) {
var totalPage = res.data.total;
var newOrders = res.data.records;
if (this.page.currentPage == 1) {
this.orderData = [];
}
this.$u.api.getTaskPage(query).then(res => {
if (res.code == 200) {
var totalPage = res.data.total;
var newOrders = res.data.records;
// if (this.page.currentPage == 1) {
// this.orderData = [];
// }
// this.orderData = [...this.orderData, ...(res.data.records || [])];
// if (newOrders.length == 0) {
// this.loadingState = "nomore";
// this.isNomore = true;
// }
// if (totalPage == this.orderData.length) {
// this.loadingState = "nomore";
// this.isNomore = true;
// }
this.BetLoading.hide();
this.orderData = [...this.orderData, ...(res.data.records || [])];
if (newOrders.length == 0) {
this.loadingState = "nomore";
this.isNomore = true;
}
if (totalPage == this.orderData.length) {
this.loadingState = "nomore";
this.isNomore = true;
}
}).catch(err => {
this.BetLoading.hide();
}
})
},
//
searchData() {
@ -210,21 +273,6 @@ export default {
this.page.currentPage = 1;
this.getRecordsList()
},
//
statusName(item) {
if (item == -1) {
return '待提报'
}
if (item == 0) {
return '待接单'
}
if (item == 1 || item == 2 || item == 3) {
return '待维修'
}
if (item == 4 || item == 5 || item == 6) {
return '已完成'
}
},
//
taskDetails(item) {
@ -233,7 +281,7 @@ export default {
type: 'view'
}
uni.navigateTo({
url: `/pages/inspection/questDetails${this.$u.queryParams(param)}`,
url: `/pages/inspection/questOrder${this.$u.queryParams(param)}`,
});
},
//
@ -245,8 +293,339 @@ export default {
uni.navigateTo({
url: `/pages/inspection/questOrder${this.$u.queryParams(param)}`,
});
}
},
subsectionChange(e) {
this.subsectionCurrent = e;
this.getRecordsList()
},
//
assign(item) {
this.rowInfo = item
this.sendOrdersShow = true
},
//
getRepairPersons() {
this.$u.api.getRepairPersons().then(res => {
if (res.code == 200) {
let data_ = res.data
data_.forEach(i => {
this.sendOrdersList.push({ ...i, label: i.name })
})
}
})
},
//
sendOrdersConfirm(e) {
let query = {
servicemanId: e[0].value,
id: this.rowInfo.id
}
this.$u.api.taskSupervisorconfirm(query).then(res => {
if (res.code == 200) {
uni.showToast({ title: "指派成功", icon: "none" });
this.sendOrdersShow = false
//
this.getRecordsList()
}
})
},
openModel(item, type) {
if (type == 'repairComplete') {
this.repairCompleteShow = true
}
if(type =='paymentInfo'){
this.paymentShow = true
}
this.rowInfo = item
},
//
repairCompleteFn() {
let query = {
id: this.rowInfo.id
}
this.$u.api.repairServicemanSubmit(query).then(res => {
if (res.code == 200) {
uni.showToast({ title: "维修完成", icon: "none" });
this.repairCompleteShow = false
//
this.getRecordsList()
}
})
},
//
paymentFn(){
let query = {
id: this.rowInfo.id,
}
this.BetLoading.show();
this.$u.api.confirmInvoic(query).then(res => {
this.paymentShow = false
this.BetLoading.hide();
if (res.code == 200) {
uni.showToast({ title: "确认成功", icon: "none" });
this.getRecordsList()
}
})
},
//
openEvaluate(item) {
let param = {
id: item.id,
istask: true
}
uni.navigateTo({
url: `/pages/submission/evaluate${this.$u.queryParams(param)}`,
});
},
//
statusName(item) {
if ((this.dataTypes == 1 && (item == 0 || item == 1)) || (this.dataTypes == 3 && item == 1)) {
return '待巡检'
}
if ((this.dataTypes == 1 && item == 2) || (this.dataTypes == 3 && (item == 2 || item == 3)) || (this.dataTypes == 4 && item == 2)) {
return '巡检中'
}
if ((this.dataTypes == 1 && item == 3) || (this.dataTypes == 4 && item == 3)) {
return '待确认'
}
if ((this.dataTypes == 3 && item == 0) || (this.dataTypes == 4 && item == 0)) {
return '待派单'
}
if (this.dataTypes == 4 && item == 1) {
return '待接单'
}
if (item == 4) {
return '已完成'
}
},
taskStatusName(item) {
if (item == 1) {
return '待提交'
}
if (item == 7 || item == 8 || (this.dataTypes == 4 && item == 6)) {
return '已完成'
}
if (item == 2) {
return '待审批'
}
if (item == 4) {
return '维修中'
}
if (((this.dataTypes == 4 || this.dataTypes == 2 || this.dataTypes == 1) && item == 3)) {
return '待审批'
}
if (item == 3 && this.dataTypes == 3) {
return '待确认'
}
if ((item == 5 && this.dataTypes == 1) || (item == 5 && this.dataTypes == 2)) {
return '待评价'
}
if ((item == 5 && this.dataTypes == 3) || (item == 5 && this.dataTypes == 4)) {
return '维修完成'
}
if ((item == 6 && this.dataTypes == 3) || (item == 6 && this.dataTypes == 2)) {
return '待付款'
}
},
// tablist
statusList() {
//
if (this.dataTypes == 1) {
this.tabList = [
{
name: "全部",
key: "9999",
},
{
name: "待巡检",
key: "0,1",
},
{
name: "巡检中",
key: "2",
},
{
name: "待确认",
key: "3",
},
{
name: "已完成",
key: "4",
},
]
}
if (this.dataTypes == 3) {//
this.tabList = [
{
name: "全部",
key: "9999",
},
{
name: "待指派",
key: "0",
},
{
name: "待巡检",
key: "1",
},
{
name: "巡检中",
key: "2,3",
},
{
name: "已完成",
key: "4",
},
]
}
if (this.dataTypes == 4) {
this.tabList = [
{
name: "全部",
key: "9999",
},
{
name: "待接单",
key: "1",
},
{
name: "巡检中",
key: "2",
},
{
name: "待确认",
key: "3",
},
{
name: "已完成",
key: "4",
},
]
}
},
// tab
getTasktabList() {
if (this.dataTypes == 1 || this.dataTypes == 2) {
this.tasktabList = [
{
name: "全部",
key: "9999",
},
// {
// name: "",
// key: "0",
// },
{
name: "待提交",
key: "1",
},
{
name: "待审批",
key: "2,3",
},
{
name: "维修中",
key: "4",
},
{
name: "待评价",
key: "5",
},
{
name: "待付款",
key: "6",
},
{
name: "已完成",
key: "7,8",
},
]
}
if (this.dataTypes == 3) {
this.tasktabList = [
{
name: "全部",
key: "9999",
},
// {
// name: "",
// key: "0",
// },
{
name: "待提交",
key: "1",
},
{
name: "待审批",
key: "2",
},
{
name: "待确认",
key: "3",
},
{
name: "维修中",
key: "4",
},
{
name: "维修完成",
key: "5",
},
{
name: "待付款",
key: "6",
},
{
name: "已完成",
key: "7,8",
},
]
}
if (this.dataTypes == 4) {
this.tasktabList = [
{
name: "全部",
key: "9999",
},
// {
// name: "",
// key: "0",
// },
{
name: "待提交",
key: "1",
},
{
name: "待审批",
key: "2,3",
},
{
name: "维修中",
key: "4",
},
{
name: "维修完成",
key: "5",
},
{
name: "待付款",
key: "6",
},
{
name: "已完成",
key: "7,8",
},
]
}
},
},
};
@ -257,19 +636,21 @@ export default {
padding: 0;
.page-search-top {
height: 210rpx;
background-color: rgba(248, 248, 248, 1);
height: 220rpx;
background-color: #fff;
padding: 0 40rpx 0;
}
.protocol-content{
padding: 30rpx;
.protocol-content {
padding: 40rpx 0rpx 0rpx 0rpx;
background-color: #fff;
}
.order-box {
margin-top: 20rpx;
.order-item {
height: 414rpx;
min-height: 414rpx;
margin: 0 24rpx 20rpx;
border-radius: 20rpx;
background: #fff;
@ -293,7 +674,7 @@ export default {
.item-orderNo {
color: rgba(51, 51, 51, 1);
font-size: 28rpx;
padding: 12rpx 0 0 26rpx;
padding: 36rpx 0 0 26rpx;
}
.item-time {
@ -304,7 +685,7 @@ export default {
}
.item-right {
width: 132rpx;
min-width: 132rpx;
height: 48rpx;
margin: 36rpx 24rpx 0 0;
}
@ -331,6 +712,7 @@ export default {
margin-right: 24rpx;
display: flex;
flex-direction: column;
margin-left: 32rpx;
text {
display: block;
@ -371,7 +753,7 @@ export default {
}
.con-btn {
margin-top: 56rpx;
margin-top: 18rpx;
margin-bottom: 32rpx;
display: inline-block;
text-align: right;

@ -4,64 +4,252 @@
<view class="info_title">基本信息</view>
<view class="info_item">
<text class="item_left_txt">单位名称</text>
<text class="item_right_txt">张三</text>
<text class="item_right_txt">{{ detailForm.deptName }}</text>
</view>
<view class="info_item">
<text class="item_left_txt">巡检项目名称</text>
<text class="item_right_txt">张三</text>
</view>
<view class="info_item">
<text class="item_left_txt">项目地址</text>
<text class="item_right_txt">张三</text>
<text class="item_left_txt">巡检内容</text>
<text class="item_right_txt">{{ detailForm.taskContent }}</text>
</view>
</view>
<view class="info">
<view class="info_title">巡检配置</view>
<!-- <view class="info_item">
<text class="item_left_txt">巡检内容</text>
<text class="item_right_txt">张三</text>
</view>
<view class="info_item">
<text class="item_left_txt">任务开始时间</text>
<text class="item_right_txt"></text>
</view>
<view class="info_item">
<text class="item_left_txt">预约上门时间</text>
<text class="item_right_txt"></text>
</view> -->
<u-form labelPosition="left" ref="sendOrderForm" :model="detailForm" :label-width="200" class="repair_form">
<u-form-item label="巡检内容:" prop="dispatchTime" :border-bottom="false">
<betone-new-input label="" v-model="detailForm.taskContent" placeholder="" />
<betone-new-input label="" v-model="detailForm.taskContent" placeholder="" :disabled="true" />
</u-form-item>
<u-form-item label="任务开始时间:" prop="dispatchTime" :border-bottom="false">
<betone-new-input label="" v-model="detailForm.startTime" placeholder="" />
<betone-new-input label="" v-model="detailForm.startTime" placeholder="" :disabled="true" />
</u-form-item>
<u-form-item label="预约上门时间:" prop="customerOpinion" :border-bottom="false">
<u-input v-model="reservationTime" type="select" @click="calendarShow = true" :border="true"
placeholder="请选择时间" />
<u-input v-if="reservationDisabled" v-model="reservationTime" type="select"
@click="calendarShow = true" :border="true" placeholder="请选择时间" />
<view v-else>{{ detailForm.reservationTime }}</view>
</u-form-item>
</u-form>
</view>
<view class="info">
<!-- 巡检任务 只查看-->
<view class="info" v-if="reservationDisabled">
<view class="info_title">巡检任务</view>
<detailsCollapse type="view"></detailsCollapse>
<u-collapse :accordion="false">
<u-collapse-item v-for="(item, index) in detailForm.details" :key="index">
<view slot="title">
<text class="collapse-title">实验室楼层{{ item.floorName }}</text>
</view>
<view v-for="(v, vindex) in item.details" :key="vindex" class="collapse-room">
<view>房间名称{{ v.deptName }}</view>
<view v-for="(s, sindex) in v.details" :key="sindex" class="n-box">
<u-tag :text="sindex + 1" type="info" class="left-tag" />
<view class="info_item">
<text class="item_left_txt">设备</text>
<text class="item_right_txt">
{{ s.deviceName }}
</text>
</view>
<view class="info_item">
<text class="item_left_txt">巡检内容</text>
<text class="item_right_txt">
{{ s.checkContent }}
</text>
</view>
<view class="info_item">
<text class="item_left_txt">工艺要求</text>
<text class="item_right_txt">
{{ s.craft }}
</text>
</view>
<view class="info_item">
<text class="item_left_txt">巡检周期</text>
<text class="item_right_txt">
{{ periodName(s.period) }}
</text>
</view>
<view class="info_item">
<text class="item_left_txt">开始时间</text>
<text class="item_right_txt">
{{ s.startTime }}
</text>
</view>
</view>
</view>
</u-collapse-item>
</u-collapse>
</view>
<!-- 填写内容 -->
<view class="info" v-if="!reservationDisabled">
<view class="info_title">巡检任务</view>
<u-collapse :accordion="false">
<u-collapse-item v-for="(item, index) in detailForm.details" :key="index">
<view slot="title">
<text class="collapse-title">实验室楼层{{ item.floorName }}</text>
</view>
<view v-for="(v, vindex) in item.details" :key="vindex" class="collapse-room">
<view>房间名称{{ v.deptName }}</view>
<view v-for="(s, sindex) in v.details" :key="sindex" class="n-box">
<u-tag :text="sindex + 1" type="info" class="left-tag" />
<!-- <u-tag text="已检" type="success" class="right-tag" /> -->
<view class="n-box-title"> {{ s.checkContent }}</view>
<view class="n-box-info"> {{ s.craft }}</view>
<view class="info_item">
<text class="item_left_txt">状态</text>
<text class="item_right_txt">
<u-radio-group v-model="s.status">
<u-radio name="0">正常</u-radio>
<u-radio name="1">异常</u-radio>
</u-radio-group>
</text>
</view>
<view class="info_item">
<text class="item_left_txt">现场照片</text>
<text class="item_right_txt" v-if="s.picUrl == ''">
<view class="btn" @click="uploadImg(index, vindex, sindex)">上传照片</view>
</text>
<text class="item_right_txt" v-else>
<image @click="uploadImg(index, vindex, sindex)" class="item_right_img"
:src="s.picUrl"></image>
</text>
</view>
<view class="info_item">
<text class="item_left_txt">使用人签字</text>
<text class="item_right_txt">
<betone-new-input v-model="s.signUrl" :placeholder="'请输入'"></betone-new-input>
<!-- <image v-if="s.qianzi" :src="s.qianzi" style="width: 144px;height: 77rpx;"
mode="widthFix" @click="toPop1(index, vindex, sindex)"></image>
<view v-else class="btn" @click="toPop1(index, vindex, sindex)">签字</view> -->
</text>
</view>
<view class="info_item">
<text class="item_left_txt">备注</text>
<text class="item_right_txt">
<betone-new-input v-model="s.remark" type="textarea"
:placeholder="'请输入'"></betone-new-input>
</text>
</view>
<!-- v-if="dataTypes == 4 && detailForm.repairStatus == 1" -->
<view class="info_item">
<text class="item_left_txt">价格</text>
<text class="item_right_txt">
<u-input v-model="s.price" type="number" :border="true" />
</text>
</view>
<view class="info_item" v-if="dataTypes == 1 && detailForm.repairStatus == 3">
<text class="item_left_txt">是否维修</text>
<text class="item_right_txt">
<u-radio-group v-model="s.isRepair">
<u-radio name="1"></u-radio>
<u-radio name="0"></u-radio>
</u-radio-group>
</text>
</view>
</view>
</view>
</u-collapse-item>
</u-collapse>
</view>
<!-- 客户巡检任务 确认审批 -->
<view class="info" v-if="dataTypes == 1 && detailForm.taskStatus == 3">
<view class="info_title">巡检确认</view>
<u-form labelPosition="left" ref="repairInfoForm" :model="approveInfo" :label-width="140"
class="repair_form">
<u-form-item label="结果:" prop="reportPeople" :border-bottom="false">
<betone-input-picker :label="''" :pickerData="approveType" :mode="'selector'" :keyName="'text'"
@changeSelect="changeApproveResult" v-model="approveInfo.approveText"></betone-input-picker>
</u-form-item>
<u-form-item label="意见:" prop="reportPeople" :border-bottom="false"
v-if="approveInfo.approveText == '未完成'">
<betone-new-input label="" v-model="approveInfo.approveRemark" placeholder="请输入" type="textarea"
:height="120" />
</u-form-item>
</u-form>
</view>
<!-- 维修负责人 巡检维修方案审批 -->
<view class="info" v-if="dataTypes == 3 && detailForm.repairStatus == 2">
<view class="info_title">维修方案审批</view>
<u-form labelPosition="left" ref="repairInfoForm" :model="repairApproveInfo" :label-width="140"
class="repair_form">
<u-form-item label="审批结果:" prop="reportPeople" :border-bottom="false">
<betone-input-picker :label="''" :pickerData="repairApproveType" :mode="'selector'"
:keyName="'text'" @changeSelect="changeRepairApproveResult"
v-model="repairApproveInfo.approveText"></betone-input-picker>
</u-form-item>
<u-form-item label="审批意见:" prop="reportPeople" :border-bottom="false"
v-if="repairApproveInfo.approveText == '驳回'">
<betone-new-input label="" v-model="repairApproveInfo.approveRemark" placeholder="请输入"
type="textarea" :height="120" />
</u-form-item>
</u-form>
</view>
<view class="info" v-if="dataTypes == 1 && detailForm.repairStatus == 3">
<view class="info_title">客户确认</view>
<u-form labelPosition="left" ref="repairInfoForm" :model="customerApproveInfo" :label-width="140"
class="repair_form">
<u-form-item label="审批结果:" prop="reportPeople" :border-bottom="false">
<betone-input-picker :label="''" :pickerData="repairApproveType" :mode="'selector'"
:keyName="'text'" @changeSelect="changeCustomerApproveResult"
v-model="customerApproveInfo.approveText"></betone-input-picker>
</u-form-item>
<u-form-item label="审批意见:" prop="reportPeople" :border-bottom="false"
v-if="customerApproveInfo.approveText == '驳回'">
<betone-new-input label="" v-model="customerApproveInfo.approveRemark" placeholder="请输入"
type="textarea" :height="120" />
</u-form-item>
</u-form>
</view>
<!-- <view class="repair-btn" style="margin-right: 32rpx;width:100%">
<u-button size="medium" @click="endOrderCancel()">取消</u-button>
<u-button size="medium" type="primary">提交</u-button>
</view> -->
<!-- 维修人员接收任务单 -->
<view class="repair-btn" style="margin-right: 32rpx;width:100%">
<view class="repair-btn" style="margin-right: 32rpx;width:100%"
v-if="dataTypes == 4 && detailForm.taskStatus == 1">
<u-button size="medium" @click="endOrderCancel()">取消</u-button>
<u-button size="medium" type="primary" @click="receiveQuest()">接单</u-button>
</view>
<!-- 维修人员提交巡检详情 -->
<view class="repair-btn" style="margin-right: 32rpx;width:100%"
v-if="dataTypes == 4 && detailForm.taskStatus == 2">
<u-button size="medium" @click="endOrderCancel()">取消</u-button>
<u-button size="medium" type="primary" @click="submitQuest()">提交</u-button>
</view>
<!-- 客户 确认巡检任务是否完成提交 -->
<view class="repair-btn" style="margin-right: 32rpx;width:100%"
v-if="dataTypes == 1 && detailForm.taskStatus == 3">
<u-button size="medium" @click="endOrderCancel()">取消</u-button>
<u-button size="medium" type="primary" @click="customerQuest()">提交</u-button>
</view>
<!-- 维修人员 提交维修方案 -->
<view class="repair-btn" style="margin-right: 32rpx;width:100%"
v-if="dataTypes == 4 && detailForm.repairStatus == 1">
<u-button size="medium" @click="endOrderCancel()">取消</u-button>
<u-button size="medium" type="primary" @click="solutionSubmit()">提交方案</u-button>
</view>
<!-- 维修主管审批 巡检 维修方案 -->
<view class="repair-btn" style="margin-right: 32rpx;width:100%"
v-if="dataTypes == 3 && detailForm.repairStatus == 2">
<u-button size="medium" @click="endOrderCancel()">取消</u-button>
<u-button size="medium" type="primary" @click="repairApproveSubmit()">提交</u-button>
</view>
<!-- 客户审批 巡检 维修方案 确认是否维修-->
<view class="repair-btn" style="margin-right: 32rpx;width:100%"
v-if="dataTypes == 1 && detailForm.repairStatus == 3">
<u-button size="medium" @click="endOrderCancel()">取消</u-button>
<u-button size="medium" type="primary" @click="receiveQuest()">接收</u-button>
<u-button size="medium" type="primary" @click="customerApproveSubmit()">提交</u-button>
</view>
<u-calendar v-model="calendarShow" mode="date" @change="calendarChange" :min-date="minDate"
:max-date="maxDate"></u-calendar>
<betone-loading ref="BetLoading" />
</view>
</template>
<script>
import detailsCollapse from './components/detailsCollapse.vue'
import website from '@/utils/website'
import { dateFormat } from '@/utils/util.js'
export default {
components: {
detailsCollapse,
@ -70,6 +258,10 @@ export default {
dataTypes() {
return this.$store.state.dataType
},
reservationDisabled() {
return (this.dataTypes == 4 && this.detailForm.taskStatus == 1) || (this.type == 'view') ? true : false
},
},
data() {
return {
@ -80,7 +272,49 @@ export default {
minDate: null,
maxDate: null,
calendarShow: false,//
collapseData: [],
approveInfo: {//
approvePerson: '',// id
approveRemark: '',//
approveResult: null,//1 0
approveText: '',//
approveTime: '',//
},
approveType: [
{
text: '已完成',
value: 1
},
{
text: '未完成',
value: 0
},
],
repairApproveInfo: {
approvePerson: '',// id
approveRemark: '',//
approveResult: null,//1 0
approveText: '',//
approveTime: '',//
},
repairApproveType: [
{
text: '通过',
value: 1
},
{
text: '驳回',
value: 0
},
],
customerApproveInfo: {
approvePerson: '',// id
approveRemark: '',//
approveResult: null,//1 0
approveText: '',//
approveTime: '',//
}
}
},
onLoad(options) {
@ -88,6 +322,7 @@ export default {
this.orderId = options.id
this.getDetails()
this.initDate()
this.userInfo = uni.getStorageSync("userinfo");
},
methods: {
getDetails() {
@ -97,6 +332,7 @@ export default {
this.$u.api.getTaskDetail(query).then(res => {
if (res.code == 200) {
this.detailForm = res.data
this.collapseData = JSON.parse(JSON.stringify(res.data.details))
}
})
},
@ -110,7 +346,11 @@ export default {
let query = {
id: this.detailForm.id
}
//
if (this.reservationTime == '') {
uni.showToast({ title: "请选择上门时间", icon: "none" });
return false
}
// //
this.$u.api.taskServicemanreceive(query).then(res => {
if (res.code == 200) {
let query_ = {
@ -118,7 +358,7 @@ export default {
reservationTime: this.reservationTime
}
this.$u.api.taskServicemanUpdateTime(query_).then(res => {
uni.showToast({ title: "接成功", icon: "none" });
uni.showToast({ title: "接成功", icon: "none" });
setTimeout(() => {
uni.navigateBack({
delta: 1 // 1退
@ -129,6 +369,300 @@ export default {
}
})
},
uploadImg(index, vindex, sindex) {
uni.chooseImage({
count: 1, // 9
sizeType: ["original", "compressed"], //
sourceType: ["album", "camera"], //
success: (res) => {
this.BetLoading.show()
//
const tempFilePaths = res.tempFilePaths;
this.uploadFile(tempFilePaths[0], index, vindex, sindex);
},
});
},
uploadFile(filePath, index, vindex, sindex) {
const token = uni.getStorageSync("token")
uni.uploadFile({
url: website.baseUrl + "/blade-resource/oss/endpoint/put-file", //
filePath: filePath,
name: "file", //
header: {
'Blade-Auth': 'bearer ' + token,
'Authorization': `Basic ${Base64.encode(`${website.clientId}:${website.clientSecret}`)}`,
'blade-requested-with': 'BladeHttpRequest' //
},
formData: {},
success: (res) => {
let info = JSON.parse(res.data);
console.log("上传成功", info); //
this.detailForm.details[index].details[vindex].details[sindex].picUrl = info.data.link
this.BetLoading.hide()
},
error: (uploadFileRes) => {
this.BetLoading.hide()
},
});
},
//
submitQuest() {
let newArr = this.handleData(this.detailForm.details)
let status = newArr.every((item) => {
return item.status != null
})
let signUrl = newArr.every((item) => {
return item.signUrl !== ''
})
if (!status) {
uni.showToast({ title: "请选择设备状态", icon: "none" });
return false
}
if (!signUrl) {
uni.showToast({ title: "请填写使用人", icon: "none" });
return false
}
let queryData = []
newArr.forEach(item => {
// item.id=this.detailForm.id
queryData.push({
id: this.detailForm.id,
status: item.status,
signUrl: item.signUrl,
remark: item.remark
})
})
this.$u.api.updateDetaile(queryData).then(res => {
if (res.code == 200) {
let query = {
id: this.detailForm.id,
}
this.$u.api.taskServicemanSubmit(query).then(res => {
if (res.code == 200) {
uni.showToast({ title: "提交成功", icon: "none" });
setTimeout(() => {
uni.navigateBack({
delta: 1 // 1退
})
}, 500)
}
})
}
})
},
//
changeApproveResult(e) {
this.approveInfo.approveText = this.approveType[e].text
this.approveInfo.approveResult = this.approveType[e].value
},
customerQuest() {
if (this.approveInfo.approveResult == null) {
uni.showToast({ title: "请选择确认结果", icon: "none" });
return false
}
if (this.approveInfo.approveResult == 0 && this.approveInfo.approveRemark == '') {
uni.showToast({ title: "请填写未完成原因", icon: "none" });
return false
}
if (this.approveInfo.approveResult == 1) {
let query = {
id: this.detailForm.id
}
this.$u.api.taskCustomerConfirm(query).then(res => {
if (res.code == 200) {
uni.showToast({ title: "确认成功", icon: "none" });
setTimeout(() => {
this.endOrderCancel()
}, 500)
}
})
} else {
let query = {
id: this.detailForm.id,
approvePerson: this.userInfo.user_id,
appproveResult: this.approveInfo.approveResult,
approveTime: dateFormat("yyyy-MM-dd hh:mm:ss", new Date()),//
approveRemark: this.approveInfo.approveRemark,//
}
this.$u.api.taskCustomerRefuse(query).then(res => {
if (res.code == 200) {
uni.showToast({ title: "确认成功", icon: "none" });
this.submitTaskShow = false
//
this.getRecordsList()
}
})
}
},
//
solutionSubmit() {
let newArr = this.handleData(this.detailForm.details)
let price = newArr.every((item) => {
return item.price > 0
})
if (!price) {
uni.showToast({ title: "请填写正确的维修价格", icon: "none" });
return false
}
// let queryData = []
let query_ = {
task: { id: this.detailForm.id },
detailList: newArr,
}
this.$u.api.taskSolutionSave(query_).then(res => {
if (res.code == 200) {
let query = {
id: this.detailForm.id,
}
this.$u.api.taskSolutionSubmit(query).then(res => {
if (res.code == 200) {
uni.showToast({ title: "提交成功", icon: "none" });
setTimeout(() => {
uni.navigateBack({
delta: 1 // 1退
})
}, 500)
}
})
}
})
},
//
changeRepairApproveResult(e) {
this.repairApproveInfo.approveText = this.repairApproveType[e].text
this.repairApproveInfo.approveResult = this.repairApproveType[e].value
},
//
repairApproveSubmit() {
if (this.repairApproveInfo.approveResult == 1) {//
let query = {
id: this.detailForm.id
}
this.$u.api.repairSolutionSupervisor(query).then(res => {
if (res.code == 200) {
uni.showToast({ title: "审批成功", icon: "none" });
setTimeout(() => {
uni.navigateBack({
delta: 1 // 1退
})
}, 500)
}
})
} else {//
let query_ = {
id: this.detailForm.id,
approvePerson: this.userInfo.user_id,
appproveResult: this.repairApproveInfo.approveResult,
approveTime: dateFormat("yyyy-MM-dd hh:mm:ss", new Date()),//
approveRemark: this.repairApproveInfo.approveRemark,//
}
this.$u.api.repairSolutionRefuse(query_).then(res => {
if (res.code == 200) {
uni.showToast({ title: "审批成功", icon: "none" });
setTimeout(() => {
uni.navigateBack({
delta: 1 // 1退
})
}, 500)
}
})
}
},
//
changeCustomerApproveResult(e) {
this.customerApproveInfo.approveText = this.repairApproveType[e].text
this.customerApproveInfo.approveResult = this.repairApproveType[e].value
},
//
customerApproveSubmit() {
let newArr = this.handleData(this.detailForm.details)
let isRepair = newArr.every((item) => {
return item.isRepair == -1
})
if (isRepair) {
uni.showToast({ title: "请选择异常设备是否维修", icon: "none" });
return false
}
if (this.customerApproveInfo.approveResult == null) {
uni.showToast({ title: "请选择审核结果", icon: "none" });
return false
}
if (this.customerApproveInfo.approveResult == 0 && this.customerApproveInfo.approveRemark == '') {
uni.showToast({ title: "请填写驳回原因", icon: "none" });
return false
}
if (this.customerApproveInfo.approveResult == 1) {//
let query = {
task: {
id: this.detailForm.id
},
detailList: newArr
}
console.log(query)
this.$u.api.repairSolutionCustomer(query).then(res => {
if (res.code == 200) {
uni.showToast({ title: "审核成功", icon: "none" });
setTimeout(() => {
this.endOrderCancel()
}, 500)
}
})
} else {//
let query_ = {
id: this.detailForm.id,
approvePerson: this.userInfo.user_id,
appproveResult: this.customerApproveInfo.approveResult,
approveTime: dateFormat("yyyy-MM-dd hh:mm:ss", new Date()),//
approveRemark: this.customerApproveInfo.approveRemark,//
}
// this.$u.api.repairCustomerRefuse(query_).then(res => {
// if (res.code == 200) {
// uni.showToast({ title: "", icon: "none" });
// setTimeout(() => {
// this.endOrderCancel()
// }, 500)
// }
// })
}
},
//
handleData(arr) {
let result = [];
arr.forEach(subArray => {
if (Array.isArray(subArray.details)) {
subArray.details.forEach(item => {
if (Array.isArray(item.details)) {
item.details.forEach(v => {
result = result.concat(v);
})
//
} else {
result.push(item);
}
});
}
});
return result;
},
//
periodName(value) {
if (value == 1) {
return '月'
}
if (value == 2) {
return '季度'
}
if (value == 3) {
return '半年'
}
},
//
initDate() {
let date = new Date();
@ -200,6 +734,11 @@ export default {
text-align: justify;
font-family: SourceHanSansSC-regular;
}
.item_right_img {
width: 100%;
height: 200rpx;
}
}
}
@ -220,5 +759,102 @@ export default {
.repair_form {
padding: 0 18rpx;
}
.collapse-room {
margin: 0 32rpx 20rpx;
color: rgba(0, 0, 0, 1);
}
// .collapse-major {
// margin: 0 32rpx 20rpx;
// color: rgba(0, 0, 0, 1);
// margin: 12rpx 24rpx 12rpx;
.n-box {
border: 1px solid rgba(239, 239, 239, 1);
padding: 32rpx 54rpx 0;
margin-top: 24rpx;
margin-bottom: 24rpx;
position: relative;
.right-tag {
position: absolute;
right: 0;
top: 0;
}
.left-tag {
position: absolute;
left: 0;
top: 0;
padding-left: 10rpx;
padding-right: 10rpx;
}
.n-box-title {
color: rgba(0, 0, 0, 1);
font-size: 28rpx;
text-align: left;
}
.n-box-info {
line-height: 32rpx;
color: rgba(154, 154, 154, 1);
font-size: 24rpx;
padding-top: 12rpx;
padding-bottom: 12rpx;
}
.info_item {
width: 100%;
display: flex;
flex-direction: row;
margin: 24rpx 0 24rpx;
.item_left_txt {
color: rgba(108, 108, 108, 1);
font-size: 28rpx;
text-align: left;
width: 170rpx;
margin-right: 20rpx;
line-height: 60rpx;
}
.item_right_txt {
flex: 1;
max-width: calc(100% - 220rpx);
color: rgba(0, 0, 0, 1);
font-size: 28rpx;
// text-align: left;
text-align: justify;
font-family: SourceHanSansSC-regular;
/deep/.u-radio-group {
flex-wrap: nowrap;
padding-right: 48rpx;
}
.btn {
width: 260rpx;
height: 60rpx;
line-height: 60rpx;
border-radius: 8rpx;
background-color: rgba(255, 255, 255, 1);
color: rgba(58, 98, 215, 1);
font-size: 28rpx;
text-align: center;
border: 2rpx dashed rgba(58, 98, 215, 1);
}
}
}
}
/deep/.u-collapse {
padding: 0 16rpx;
}
/deep/.arrow {
top: 12rpx;
}
}
</style>

@ -1,45 +0,0 @@
<template>
<view class="">
<planList></planList>
<betone-loading ref="BetLoading" />
</view>
</template>
<script>
import planList from './components/plan-list.vue'
export default {
components: {
planList,
},
props: {
},
data() {
return {
};
},
computed: {
},
mounted() {
},
methods: {
},
};
</script>
<style lang="scss" scoped>
</style>

@ -127,7 +127,7 @@ export default {
.info-top {
min-height: 210rpx;
background-color: rgba(248, 248, 248, 1);
background-color: #fff;
display: flex;
flex-direction: row;

@ -84,12 +84,15 @@ export default {
value: 2
}
],
istask: null,//
}
},
onLoad(options) {
this.id = options.id
if (options.istask == true) {
this.istask = options.istask
}
},
onShow() {
this.userInfo = uni.getStorageSync('loginInfo')
@ -97,9 +100,6 @@ export default {
methods: {
submitBreakdown() {
let timeNow = new Date().toLocaleDateString()
let query_ = {
id: this.id, //id
// isOkQuality: this.questionList[0].type, // 0- 1-
@ -109,7 +109,7 @@ export default {
// signaturePerson: this.userInfo.user_name, //
// signatureTime: this.$u.timeFrom(timeNow, 'yyyy-mm-dd hh:MM:ss'), //
}
this.BetLoading.show()
this.BetLoading.show()
if (this.completeValue == 1) {//
for (let i = 0; i < this.questionList.length; i++) {
if (this.questionList[i].type == null) {
@ -119,17 +119,32 @@ export default {
this.uploadFile(this.image2)
} else {// evaluateRepairReject
this.$u.api.evaluateRepairReject(query_).then(res => {
if (res.code == 200) {
this.BetLoading.hide()
uni.showToast({ title: "提交成功", icon: "none" });
if (this.istask == true) {
this.$u.api.repairRefuseFinish(query_).then(res => {
if (res.code == 200) {
this.BetLoading.hide()
uni.showToast({ title: "提交成功", icon: "none" });
//
uni.navigateBack({
delta: 1 // 1
})
}
})
} else {
this.$u.api.evaluateRepairReject(query_).then(res => {
if (res.code == 200) {
this.BetLoading.hide()
uni.showToast({ title: "提交成功", icon: "none" });
//
uni.navigateBack({
delta: 1 // 1
})
}
})
}
//
uni.navigateBack({
delta: 1 // 1
})
}
})
}
},
@ -166,20 +181,34 @@ export default {
signaturePerson: this.userInfo.user_name, //
signatureTime: dateFormat("yyyy-MM-dd hh:mm:ss", new Date()), //
}
this.$u.api.evaluateSign(query_).then(res => {
if (res.code == 200) {
this.BetLoading.hide()
uni.showToast({ title: "评价成功", icon: "none" });
//
uni.navigateBack({
delta: 1 // 1
})
}
})
if (this.istask == true) {
this.$u.api.repairConfirmFinish(query_).then(res => {
if (res.code == 200) {
this.BetLoading.hide()
uni.showToast({ title: "评价成功", icon: "none" });
//
uni.navigateBack({
delta: 1 // 1
})
}
})
} else {
this.$u.api.evaluateSign(query_).then(res => {
if (res.code == 200) {
this.BetLoading.hide()
uni.showToast({ title: "评价成功", icon: "none" });
//
uni.navigateBack({
delta: 1 // 1
})
}
})
}
},
error: (uploadFileRes) => {
console.log("上传失败", uploadFileRes.data); //
this.BetLoading.hide()
this.BetLoading.hide()
},
});
}

@ -20,7 +20,7 @@
.page-header-txt {
height: 88rpx;
background-color: rgba(248, 248, 248, 1);
background-color: #fff;
color: rgba(16, 16, 16, 1);
font-size: 32rpx;
text-align: left;

@ -72,7 +72,7 @@
/* #ifdef H5 */
.page-css {
min-height: calc(100vh - 44px - env(safe-area-inset-top));
min-height: calc(100vh - env(safe-area-inset-top));
}

@ -425,4 +425,4 @@ export const dateFormat=(fmt, date)=> {
}
}
return fmt;
}
}

@ -3,7 +3,8 @@
*/
export default {
// baseUrl: 'http://124.221.142.15:8088/lab',
baseUrl:'http://192.168.0.111:80',
// baseUrl:'http://192.168.0.111:80',
baseUrl:'http://192.168.0.109:80',
indexTitle: "科研医疗建筑运维平台",
clientId: "saber", // 客户端id
clientSecret: "saber_secret", // 客户端密钥

Loading…
Cancel
Save