修改了对应设备类型列表和楼层列表

This commit is contained in:
chenze 2024-08-15 17:33:04 +08:00
parent 48c28a9b41
commit 8a3cb3524d
9 changed files with 294 additions and 221 deletions

View File

@ -6,16 +6,17 @@ const api = {
export function getRepair (parameter) { export function getRepair (parameter) {
return axios({ return axios({
url: api.repair + '/get/' + parameter, url: api.repair + '/get',
method: 'get' method: 'post',
data: parameter
}) })
} }
export function getRepairList (parameter) { export function getRepairList (data) {
return axios({ return axios({
url: api.repair + '/list', url: api.repair + '/list',
method: 'get', method: 'post',
params: parameter data: data
}) })
} }
@ -30,11 +31,14 @@ export function saveRepair (parameter) {
}) })
} }
export function review (parameter) { export function review (parameter, uniqueArr) {
return axios({ return axios({
url: api.repair + '/review', url: api.repair + '/flow/start',
method: 'post', method: 'post',
data: parameter, data: {
'repair': parameter,
'files': uniqueArr
},
headers: { headers: {
'Content-Type': 'application/json;charset=UTF-8' 'Content-Type': 'application/json;charset=UTF-8'
} }
@ -60,14 +64,6 @@ export function delRepair (parameter) {
}) })
} }
export function selectWorkerIdByTypeId (parameter) {
return axios({
url: api.repair + '/selectWorkerIdByTypeId',
method: 'get',
params: parameter
})
}
export function selectDispatcher () { export function selectDispatcher () {
return axios({ return axios({
url: api.repair + '/selectDispatcher', url: api.repair + '/selectDispatcher',

View File

@ -34,7 +34,16 @@ export function delRepairType (parameter) {
export function selectUserListByType (parameter) { export function selectUserListByType (parameter) {
return axios({ return axios({
url: api.repairType + '/selectUserListByType', url: api.repairType + '/selectUserListByType',
method: 'get' method: 'get',
params: parameter
})
}
export function selectWorkerIdByTypeId (parameter) {
return axios({
url: api.repairType + '/selectWorkerIdByTypeId',
method: 'get',
params: parameter
}) })
} }

View File

@ -5,7 +5,7 @@
<a-row :gutter="48"> <a-row :gutter="48">
<a-col :md="5" :sm="15"> <a-col :md="5" :sm="15">
<a-form-item label="报修单号"> <a-form-item label="报修单号">
<a-input placeholder="请输入报修单号" v-model="queryParam.sn"/> <a-input placeholder="请输入报修单号" v-model="queryParam.sn" />
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :md="8" :sm="24"> <a-col :md="8" :sm="24">
@ -20,25 +20,23 @@
<div class="table-operator"> <div class="table-operator">
<a-button v-if="addEnable" type="primary" icon="plus" @click="$refs.modal.add()">新建</a-button> <a-button v-if="addEnable" type="primary" icon="plus" @click="$refs.modal.add()">新建</a-button>
</div> </div>
<s-table <a-table
size="default" size="default"
ref="table" ref="table"
rowKey="id" rowKey="id"
:columns="columns" :columns="columns"
:data="loadData" :data-source="loadData"
> >
<span slot="status" slot-scope="text"> <span slot="status" slot-scope="text">
{{ text | statusFilter }} {{ text | statusFilter }}
</span> </span>
<span slot="action" slot-scope="text, record"> <span slot="action" slot-scope="text, record">
<a v-if="editEnabel" @click="handleView(record.id)">详情</a> <a v-if="editEnabel" @click="handleView(record.id)">详情</a>
<a-divider type="vertical" /> <!-- <a v-if="editEnabel" @click="handleEdit(record)">指派</a>-->
<!-- <a v-if="editEnabel" @click="handleEdit(record)">指派</a>--> <!-- <a-divider type="vertical" />-->
<!-- <a-divider type="vertical" />-->
<a v-if="editEnabel" @click="handleComplete(record)">完成</a>
</span> </span>
</s-table> </a-table>
<repair-modal ref="modal" @ok="handleOk"/> <repair-modal ref="modal" @ok="handleOk" />
</a-card> </a-card>
</template> </template>
@ -70,6 +68,7 @@ export default {
advanced: false, advanced: false,
// //
queryParam: {}, queryParam: {},
loadData:[],
// //
columns: [ columns: [
{ {
@ -86,7 +85,7 @@ export default {
}, },
{ {
title: '设备名称', title: '设备名称',
dataIndex: 'repairDeviceName' dataIndex: 'deviceName'
}, },
{ {
@ -100,7 +99,7 @@ export default {
}, },
{ {
title: '提交人', title: '提交人',
dataIndex: 'userName' dataIndex: 'name'
}, },
{ {
title: '报修时间', title: '报修时间',
@ -115,29 +114,42 @@ export default {
} }
], ],
// Promise // Promise
loadData: parameter => { // loadData: parameter => {
return getRepairList(Object.assign(parameter, this.queryParam)) // return getRepairList(Object.assign(parameter, this.queryParam))
}, // },
addEnable: checkPermission('admin:repair:add'), addEnable: checkPermission('admin:repair:add'),
editEnabel: checkPermission('admin:repair:edit'), editEnabel: checkPermission('admin:repair:edit'),
removeEnable: checkPermission('admin:repair:list') removeEnable: checkPermission('admin:repair:list')
} }
}, },
filters: { filters: {
// :1 ,3 ,5 ,7 , 9 , 11 13
statusFilter (status) { statusFilter (status) {
const statusMap = { const statusMap = {
'PENDING_ASSIGN': '待分配', '1': '待分配',
'PENDING_PROCESS': '待处理', '3': '重新派单',
'COMPLETED': '已完成', '5': '已派单',
'CANCELED': '已取消', '7': '处理中',
'SCORE': '已评价' '9': '已完成,待评价',
'11': '已关闭',
'13': '已评价'
} }
return statusMap[status] return statusMap[status]
} }
}, },
created () { created () {
this.getRepairList()
}, },
methods: { methods: {
getRepairList () {
let datas = {
'menu': 7,
'type': 'all'
}
getRepairList(datas).then(res => {
this.loadData = res.rows
})
},
handleAdd () { handleAdd () {
this.$refs.modal.add() this.$refs.modal.add()
}, },
@ -171,11 +183,11 @@ export default {
this.$message.error('系统错误,请稍后再试') this.$message.error('系统错误,请稍后再试')
}) })
}, },
onCancel () {} onCancel () {
}
}) })
} }
}, },
watch: { watch: {}
}
} }
</script> </script>

View File

@ -55,8 +55,8 @@
<a-descriptions-item label="维修单号">{{ mdl.sn }}</a-descriptions-item> <a-descriptions-item label="维修单号">{{ mdl.sn }}</a-descriptions-item>
<a-descriptions-item label="工单名称">{{ mdl.repairName }}</a-descriptions-item> <a-descriptions-item label="工单名称">{{ mdl.repairName }}</a-descriptions-item>
<a-descriptions-item label="设备类型">{{ mdl.typeName }}</a-descriptions-item> <a-descriptions-item label="设备类型">{{ mdl.typeName }}</a-descriptions-item>
<a-descriptions-item label="设备名称">{{ mdl.repairDeviceName }}</a-descriptions-item> <a-descriptions-item label="设备名称">{{ mdl.deviceName }}</a-descriptions-item>
<a-descriptions-item label="发起人">{{ mdl.userName }}</a-descriptions-item> <a-descriptions-item label="发起人">{{ mdl.name }}</a-descriptions-item>
<a-descriptions-item label="电话">{{ mdl.phone }}</a-descriptions-item> <a-descriptions-item label="电话">{{ mdl.phone }}</a-descriptions-item>
<a-descriptions-item label="故障等级">{{ mdl.repairLevel }}</a-descriptions-item> <a-descriptions-item label="故障等级">{{ mdl.repairLevel }}</a-descriptions-item>
<a-descriptions-item label="故障类型">{{ mdl.failureTypeName }}</a-descriptions-item> <a-descriptions-item label="故障类型">{{ mdl.failureTypeName }}</a-descriptions-item>
@ -64,9 +64,9 @@
<a-descriptions-item label="故障地点">{{ mdl.repairLevel }}</a-descriptions-item> <a-descriptions-item label="故障地点">{{ mdl.repairLevel }}</a-descriptions-item>
<a-descriptions-item label="门牌号">{{ mdl.repairLevel }}</a-descriptions-item> <a-descriptions-item label="门牌号">{{ mdl.repairLevel }}</a-descriptions-item>
<a-descriptions-item label="派单员">{{ mdl.repairLevel }}</a-descriptions-item> <a-descriptions-item label="派单员">{{ mdl.repairLevel }}</a-descriptions-item>
<a-descriptions-item label="维修人">{{ mdl.workerName }}</a-descriptions-item> <a-descriptions-item label="维修人">{{ mdl.repairUserId }}</a-descriptions-item>
<a-descriptions-item label="故障时间">{{ mdl.failureDate }}</a-descriptions-item> <a-descriptions-item label="故障时间">{{ mdl.repairTime }}</a-descriptions-item>
<a-descriptions-item label="报修时间">{{ mdl.repairTime }}</a-descriptions-item> <a-descriptions-item label="报修时间">{{ mdl.createTime }}</a-descriptions-item>
<a-descriptions-item label="状态">{{ mdl.statusName }}</a-descriptions-item> <a-descriptions-item label="状态">{{ mdl.statusName }}</a-descriptions-item>
<a-descriptions-item label="完成时间">{{ mdl.endDate }}</a-descriptions-item> <a-descriptions-item label="完成时间">{{ mdl.endDate }}</a-descriptions-item>
</a-descriptions> </a-descriptions>
@ -76,9 +76,7 @@
<span style="margin:40px"> <span style="margin:40px">
报修图片 报修图片
</span> </span>
<div style="margin-bottom: 50px; margin-left: 30px" class="clearfix"> <div style="margin-bottom: 50px; margin-left: 30px" class="clearfix">
<a-upload list-type="picture-card" :file-list="fileList" @preview="handlePreview">
</a-upload>
<a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel"> <a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
<img alt="example" style="width: 100%" :src="previewImage" /> <img alt="example" style="width: 100%" :src="previewImage" />
</a-modal> </a-modal>
@ -86,29 +84,29 @@
</div> </div>
<div> <div>
<div> <div>
<a-descriptions layout="vertical" bordered> <a-descriptions layout="vertical" bordered>
<a-descriptions-item label="解决方案"> <a-descriptions-item label="解决方案">
更换空调滤芯 {{ mdl.solution }}
</a-descriptions-item> </a-descriptions-item>
</a-descriptions> </a-descriptions>
<a-descriptions layout="vertical" bordered> <a-descriptions layout="vertical" bordered>
<a-descriptions-item label="故障原因"> <a-descriptions-item label="故障原因">
空调使用时间长 {{ mdl.cause }}
</a-descriptions-item> </a-descriptions-item>
</a-descriptions> </a-descriptions>
</div> </div>
</div> </div>
</a-card> </a-card>
<a-card style="margin-top: 10px" :bordered="false" title="评价"> <a-card style="margin-top: 10px" :bordered="false" title="评价">
<a-descriptions > <a-descriptions>
<a-descriptions-item label="维修速度"> <a-descriptions-item label="维修速度">
<a-rate v-model="mdl.speed" disabled/> <a-rate v-model="mdl.evalService" disabled />
</a-descriptions-item> </a-descriptions-item>
<a-descriptions-item label="服务评价"> <a-descriptions-item label="服务评价">
<a-rate v-model="mdl.serve" disabled/> <a-rate v-model="mdl.evalService" disabled />
</a-descriptions-item> </a-descriptions-item>
<a-descriptions-item label="效果评价"> <a-descriptions-item label="效果评价">
<a-rate v-model="mdl.effect" disabled/> <a-rate v-model="mdl.evalService" disabled />
</a-descriptions-item> </a-descriptions-item>
<a-descriptions-item label="意见建议"> <a-descriptions-item label="意见建议">
{{ mdl.remark }} {{ mdl.remark }}
@ -129,6 +127,7 @@
<script> <script>
import { getRepair } from '@/api/admin/repair' import { getRepair } from '@/api/admin/repair'
export default { export default {
name: 'BaseForm', name: 'BaseForm',
data () { data () {
@ -145,24 +144,20 @@ export default {
columns: [ columns: [
{ {
title: '操作类型', title: '操作类型',
dataIndex: 'type', dataIndex: 'to',
key: 'type',
scopedSlots: { customRender: 'type' } scopedSlots: { customRender: 'type' }
}, },
{ {
title: '操作人', title: '操作人',
dataIndex: 'updateBy', dataIndex: 'sendUserName'
key: 'updateBy'
}, },
{ {
title: '操作详情', title: '操作详情',
dataIndex: 'detail', dataIndex: 'content'
key: 'detail'
}, },
{ {
title: '操作时间', title: '操作时间',
dataIndex: 'updateTime', dataIndex: 'createTime'
key: 'updateTime'
} }
], ],
dataSource: [], dataSource: [],
@ -186,11 +181,13 @@ export default {
filters: { filters: {
typeFilter (type) { typeFilter (type) {
const typeMap = { const typeMap = {
'PENDING_ASSIGN': '待分配', '1': '待分配',
'PENDING_PROCESS': '待处理', '3': '重新派单',
'COMPLETED': '已完成', '5': '已派单',
'CANCELED': '已取消', '7': '处理中',
'SCORE': '已评价' '9': '已完成,待评价',
'11': '已关闭',
'13': '已评价'
} }
return typeMap[type] return typeMap[type]
} }
@ -199,27 +196,44 @@ export default {
this.handleInit() this.handleInit()
}, },
methods: { methods: {
typeFilterRQ (type) {
const typeMap = {
'1': '待分配',
'3': '重新派单',
'5': '已派单',
'7': '处理中',
'9': '已完成,待评价',
'11': '已关闭',
'13': '已评价'
}
return typeMap[type]
},
handleInit () { handleInit () {
const { repairId } = this.$route.query const { repairId } = this.$route.query
if (repairId) { if (repairId) {
getRepair(repairId).then(record => { const data = {
this.mdl = Object.assign(record) 'id': repairId
}
getRepair(data).then(record => {
this.mdl = Object.assign(record.repair)
this.mdl.statusName = this.typeFilterRQ(this.mdl.status)
// //
if (this.mdl.repairLogs.length > 0) { if (record.log.length > 0) {
this.dataSource = this.mdl.repairLogs this.dataSource = record.log
} }
if (this.mdl.repairImages) { if (record.files.feedback) {
this.mdl.repairImages = JSON.parse(this.mdl.repairImages) record.files.feedback.forEach((item, i) => {
this.mdl.repairImages.forEach((item, i) => {
item.url = process.env.VUE_APP_API_BASE_URL + item.url item.url = process.env.VUE_APP_API_BASE_URL + item.url
console.log(item.url)
}) })
this.fileList = this.mdl.repairImages console.log(record.files.feedback[0].url
)
this.fileList = record.files.feedback
// this.previewImage = .url
} else { } else {
this.fileList = [] this.fileList = []
} }
// //
this.fileList = this.mdl.repairImages // this.fileList = record.files.feedback
}) })
} }
}, },
@ -227,11 +241,8 @@ export default {
this.previewVisible = false this.previewVisible = false
}, },
async handlePreview (file) { async handlePreview (file) {
if (!file.url && !file.preview) { console.log(this.fileList)
file.preview = await getBase64(file.originFileObj)
}
this.previewImage = file.url || file.preview this.previewImage = file.url || file.preview
this.previewVisible = true
}, },
handleChange ({ fileList }) { handleChange ({ fileList }) {
this.fileList = fileList this.fileList = fileList

View File

@ -9,26 +9,27 @@
> >
<a-form :form="form"> <a-form :form="form">
<a-form-item style="display:none"> <a-form-item style="display:none">
<a-input v-decorator="['id']"/> <a-input v-decorator="['id']" />
</a-form-item> </a-form-item>
<a-row> <a-row>
<a-col :span='10'> <a-col :span="10">
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="工单名称"> <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="工单名称">
<a-input placeholder="工单名称" v-decorator="['repairName', {rules: [{ required: true, message: '请输入工单名称' }]}]"/> <a-input placeholder="工单名称"
v-decorator="['repairName', {rules: [{ required: true, message: '请输入工单名称' }]}]" />
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span='10'> <a-col :span="10">
<a-form-item label='故障时间' :labelCol='labelCol' :wrapperCol='wrapperCol'> <a-form-item label="故障时间" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-date-picker <a-date-picker
format='YYYY-MM-DD HH:mm:ss' format="YYYY-MM-DD HH:mm:ss"
valueFormat='YYYY-MM-DD HH:mm:ss' valueFormat="YYYY-MM-DD HH:mm:ss"
v-decorator="['failureDate',{rules: [{ required: true, message: '选择报修时间'}]}]" v-decorator="['repairTime',{rules: [{ required: true, message: '选择报修时间'}]}]"
:show-time="{ defaultValue: moment('00:00:00', 'HH:mm:ss') }" :show-time="{ defaultValue: moment('00:00:00', 'HH:mm:ss') }"
type='date' type="date"
placeholder='选择报修时间' placeholder="选择报修时间"
style='width: 100%;' style="width: 100%;"
/> />
</a-form-item> </a-form-item>
@ -36,26 +37,26 @@
</a-row> </a-row>
<a-row> <a-row>
<a-col :span='10'> <a-col :span="10">
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="故障等级"> <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="故障等级">
<a-select v-decorator="['repairLevel',{rules: [{ required: true, message: '请选择故障等级'}]}]" <a-select v-decorator="['repairLevel',{rules: [{ required: true, message: '请选择故障等级'}]}]"
placeholder='请选择故障等级'> placeholder="请选择故障等级">
<a-select-option value='一级'> <a-select-option value="一级">
一级 一级
</a-select-option> </a-select-option>
<a-select-option value="二级"> <a-select-option value="二级">
二级 二级
</a-select-option> </a-select-option>
<a-select-option value='三级'> <a-select-option value="三级">
三级 三级
</a-select-option> </a-select-option>
<a-select-option value='四级'> <a-select-option value="四级">
四级 四级
</a-select-option> </a-select-option>
</a-select> </a-select>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span='10'> <a-col :span="10">
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="故障类型"> <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="故障类型">
<a-select v-decorator="['failureTypeId', {rules: [{ required: true, message: '请选择所属设备' }]}]" <a-select v-decorator="['failureTypeId', {rules: [{ required: true, message: '请选择所属设备' }]}]"
> >
@ -65,96 +66,99 @@
</a-col> </a-col>
</a-row> </a-row>
<a-row> <a-row>
<a-col :span='10'> <a-col :span="10">
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="所属分类"> <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="所属分类">
<a-select v-decorator="['typeId', {rules: [{ required: true, message: '请选择所属分类' }]}]" <a-select v-decorator="['typeId', {rules: [{ required: true, message: '请选择所属分类' }]}]"
@change="selectDevice"> @change="selectDevice">
<a-select-option v-for="item in typeList" :key="item.id">{{ item.name }}</a-select-option> <a-select-option v-for="item in typeList" :key="item.id" :value="item">{{ item.name }}</a-select-option>
</a-select> </a-select>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span='10'> <a-col :span="10">
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="报修设备"> <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="报修设备">
<a-select v-decorator="['repairDevice', {rules: [{ required: true, message: '请选择所属设备' }]}]" <a-select v-decorator="['deviceId', {rules: [{ required: true, message: '请选择所属设备' }]}]"
> @change="getDeviceName">
<a-select-option v-for="item in deviceList" :key="item.id">{{ item.name }}</a-select-option> <a-select-option v-for="item in deviceList" :key="item.id" :value="item">{{ item.name }}</a-select-option>
</a-select> </a-select>
</a-form-item> </a-form-item>
</a-col> </a-col>
</a-row> </a-row>
<a-row> <a-row>
<a-col :span='10'> <a-col :span="10">
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="报修人"> <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="报修人">
<a-input placeholder="报修人" v-decorator="['userId', {rules: [{ required: true, message: '请选择报修人' }]}]"/> <a-input placeholder="报修人"
v-decorator="['name', {rules: [{ required: true, message: '请选择报修人' }]}]" />
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span='10'> <a-col :span="10">
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="联系电话"> <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="联系电话">
<a-input placeholder="联系电话" v-decorator="['phone', {rules: [{ required: true, message: '请输入联系电话' }]}]"/> <a-input placeholder="联系电话"
v-decorator="['phone', {rules: [{ required: true, message: '请输入联系电话' }]}]" />
</a-form-item> </a-form-item>
</a-col> </a-col>
</a-row> </a-row>
<a-row> <a-row>
<a-col :span='10'> <a-col :span="10">
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="维修负责人"> <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="维修负责人">
<a-select v-decorator="['workerId', {rules: [{ required: true, message: '请输入维修负责人' }]}]" <a-select v-decorator="['repairUserId', {rules: [{ required: true, message: '请输入维修负责人' }]}]"
> @change="selectUser">
<a-select-option v-for="item in userList" :key="item.id">{{ item.username }}</a-select-option> <a-select-option v-for="item in userList" :key="item.userId">{{ item.userName }}</a-select-option>
</a-select> </a-select>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span='10'> <a-col :span="10">
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="报修地点"> <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="报修地点">
<a-select v-decorator="['addressId', {rules: [{ required: true, message: '请选择报修地点' }]}]" <a-select v-decorator="['addressId', {rules: [{ required: true, message: '请选择报修地点' }]}]"
@change="selectRoomList"> @change="selectRoomList">
<a-select-option v-for="item in addressList" :key="item.id">{{ item.name }}</a-select-option> <a-select-option v-for="item in addressList" :key="item.id" :value="item">{{ item.name }}</a-select-option>
</a-select> </a-select>
</a-form-item> </a-form-item>
</a-col> </a-col>
</a-row> </a-row>
<a-row> <a-row>
<a-col :span='10'> <a-col :span="10">
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="详细地址"> <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="详细地址">
<a-select v-decorator="['roomId', {rules: [{ required: true, message: '请选择详细地址' }]}]" <a-select v-decorator="['floorId', {rules: [{ required: true, message: '请选择详细地址' }]}]"
> @change="selectFloorName">
<a-select-option v-for="item in roomList" :key="item.id">{{ item.name }}</a-select-option> <a-select-option v-for="item in roomList" :key="item.id" :value="item">{{ item.name }}</a-select-option>
</a-select> </a-select>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :span='10'> <a-col :span="10">
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="门牌号"> <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="门牌号">
<a-input placeholder="门牌号" v-decorator="['area', {rules: [{ required: true, message: '请输入门牌号' }]}]"/> <a-input placeholder="门牌号"
v-decorator="['room', {rules: [{ required: true, message: '请输入门牌号' }]}]" />
</a-form-item> </a-form-item>
</a-col> </a-col>
</a-row> </a-row>
<a-row> <a-row>
<a-col :span='10'> <a-col :span="10">
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="报修内容"> <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="报修内容">
<a-textarea placeholder="报修内容" v-decorator="['content']"/> <a-textarea placeholder="报修内容" v-decorator="['explain']" />
</a-form-item> </a-form-item>
</a-col> </a-col>
</a-row> </a-row>
<a-row> <a-row>
<a-col :span='10'> <a-col :span="10">
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='报修图片'> <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="报修图片">
<a-upload <a-upload
v-decorator="['repairImages', {rules: [{ required: true, message: '上传室内图片' }]}]" v-decorator="['repairImages']"
list-type='picture-card' list-type="picture-card"
class='avatar-uploader' class="avatar-uploader"
:file-list='fileList' :file-list="fileList"
:action='uploadUrl' :action="uploadUrl"
:headers='headers' :headers="headers"
@preview='handlePreview' @preview="handlePreview"
@change='handleChangeFileList' @change="handleChangeFileList"
> >
<div v-if='fileList.length < 4'> <div v-if="fileList.length < 4">
<a-icon type='plus' /> <a-icon type="plus" />
<div class='ant-upload-text'> 上传</div> <div class="ant-upload-text"> 上传</div>
</div> </div>
</a-upload> </a-upload>
<a-modal :visible='previewVisible' :footer='null' @cancel='handleCancel'> <a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
<img style='width: 100%' :src='previewImage' /> <img style="width: 100%" :src="previewImage" />
</a-modal> </a-modal>
</a-form-item> </a-form-item>
</a-col> </a-col>
@ -163,28 +167,26 @@
</a-modal> </a-modal>
</template> </template>
<script> <script>
import { review,selectWorkerIdByTypeId } from '@/api/admin/repair' import { review } from '@/api/admin/repair'
import pick from 'lodash.pick' import pick from 'lodash.pick'
import { getUserList } from '@/api/system' import { getUserList } from '@/api/system'
import {getRepairTypeList} from '@/api/admin/repair/repairDeviceType' import { getRepairTypeList, selectWorkerIdByTypeId } from '@/api/admin/repair/repairDeviceType'
import { getRepairDeviceList } from '@/api/admin/repair/repairDevice' import { getRepairDeviceList } from '@/api/admin/repair/repairDevice'
import {getRepairFailureTypeList} from '@/api/admin/repair/repairFailureType' import { getRepairFailureTypeList } from '@/api/admin/repair/repairFailureType'
import {getRepairAddressList} from '@/api/admin/repair/repairAddress'
import {getRepairRoomList} from '@/api/admin/repair/repairAddressFloor'
import { getRepairAddressList } from '@/api/admin/repair/repairAddress'
import { getRepairRoomList } from '@/api/admin/repair/repairAddressFloor'
import moment from 'moment' import moment from 'moment'
import storage from 'store' import storage from 'store'
import { ACCESS_TOKEN } from '@/store/mutation-types' import { ACCESS_TOKEN } from '@/store/mutation-types'
const dateFormat = 'YYYY-MM-DD HH:mm:ss' const dateFormat = 'YYYY-MM-DD HH:mm:ss'
export default { export default {
name: 'RepairModal', name: 'RepairModal',
props: { props: {},
}, components: {},
components: {
},
data () { data () {
return { return {
visible: false, visible: false,
@ -196,7 +198,7 @@ export default {
xs: { span: 24 }, xs: { span: 24 },
sm: { span: 16 } sm: { span: 16 }
}, },
uploadUrl: process.env.VUE_APP_API_BASE_URL + '/api/dfs/upload', uploadUrl: process.env.VUE_APP_API_BASE_URL + '/admin/repairAttach/upload?operate=repair',
imageUrl: '', imageUrl: '',
headers: { headers: {
Authorization: 'Bearer ' + storage.get(ACCESS_TOKEN) Authorization: 'Bearer ' + storage.get(ACCESS_TOKEN)
@ -218,21 +220,21 @@ export default {
failureTypeList: [], failureTypeList: [],
userList: [], userList: [],
addressList: [], addressList: [],
roomList: [] roomList: [],
typeName: '',
typeId: '',
deviceName: '',
deviceId: '',
floor: '',
floorId: '',
address: '',
addressId: '',
files: []
} }
}, },
beforeCreate () { beforeCreate () {
}, },
created () { created () {
//
// getUserList({ dtype: 'Admin' }).then(res => {
// if (res.code === 0) {
// const result = res.rows
// result.forEach(r => {
// this.workerData.push({ value: r.id, text: r.username + '(' + r.mobile + ')' })
// })
// }
// })
this.selectType() this.selectType()
this.selectFailureType() this.selectFailureType()
this.getRepairAddressList() this.getRepairAddressList()
@ -244,45 +246,64 @@ export default {
this.typeList = res.rows this.typeList = res.rows
}) })
}, },
selectUser(id){
console.log(id)
},
// id // id
selectDevice(id){ selectDevice (item) {
getRepairDeviceList({"typeId":id}).then(res =>{ getRepairDeviceList({ 'typeId': item.id }).then(res => {
this.deviceList = res.rows this.deviceList = res.rows
}) })
selectWorkerIdByTypeId({"typeId":id}).then(res =>{ selectWorkerIdByTypeId({ 'typeId': item.id }).then(res => {
this.userList =res.data this.userList = res.data
}) })
this.typeName = item.name
this.typeId = item.id
}, },
selectFailureType(){ getDeviceName (item) {
getRepairFailureTypeList().then(res =>{ this.deviceName = item.name
this.deviceId = item.id
},
selectFailureType () {
getRepairFailureTypeList().then(res => {
this.failureTypeList = res.rows this.failureTypeList = res.rows
}) })
}, },
getRepairAddressList(){ getRepairAddressList () {
getRepairAddressList().then(res =>{ getRepairAddressList().then(res => {
this.addressList = res.rows this.addressList = res.rows
}) })
}, },
selectRoomList(id){ selectRoomList (item) {
getRepairRoomList({"addressId":id}).then(res =>{ getRepairRoomList({ 'addressId': item.id }).then(res => {
this.roomList = res.rows this.roomList = res.rows
}) })
this.address = item.name
this.addressId = item.id
},
selectFloorName (item) {
this.floor = item.name
this.floorId = item.id
}, },
async handlePreview (file) {
async handlePreview(file) {
if (!file.url && !file.preview) { if (!file.url && !file.preview) {
file.preview = await getBase64FileList(file.originFileObj) file.preview = await getBase64FileList(file.originFileObj)
} }
this.previewImage = file.url || file.preview this.previewImage = file.url || file.preview
this.previewVisible = true this.previewVisible = true
}, },
handleCancel() { handleCancel () {
this.previewVisible = false this.previewVisible = false
}, },
// banner // banner
handleChangeFileList({ fileList }) { handleChangeFileList ({ fileList }) {
fileList.forEach(item => {
if (item.response !== undefined) {
this.files.push(item.response.id)
}
})
this.fileList = fileList this.fileList = fileList
}, },
add () { add () {
@ -302,7 +323,6 @@ export default {
} }
// //
if (this.mdl.repairImages) { if (this.mdl.repairImages) {
console.log("1111111111111111111111")
this.mdl.repairImages = JSON.parse(this.mdl.repairImages) this.mdl.repairImages = JSON.parse(this.mdl.repairImages)
this.mdl.repairImages.forEach((item, i) => { this.mdl.repairImages.forEach((item, i) => {
item.url = process.env.VUE_APP_API_BASE_URL + item.url item.url = process.env.VUE_APP_API_BASE_URL + item.url
@ -320,13 +340,26 @@ export default {
}, },
handleSubmit (e) { handleSubmit (e) {
e.preventDefault() e.preventDefault()
console.log(this.files)
const uniqueArr = this.files.filter((value, index, self) => {
return self.indexOf(value) === index
})
console.log()
this.form.validateFields((err, values) => { this.form.validateFields((err, values) => {
if (!err) { if (!err) {
console.log('Received values of form: ', values) console.log('Received values of form: ', values)
this.confirmLoading = true this.confirmLoading = true
values.beginDate = this.beginDate values.beginDate = this.beginDate
values.endDate = this.endDate values.endDate = this.endDate
values.typeName = this.typeName
values.typeId = this.typeId
values.deviceName = this.deviceName
values.deviceId = this.deviceId
values.floor = this.floor
values.floorId = this.floorId
values.address = this.address
values.addressId = this.addressId
const repairImages = [] const repairImages = []
this.fileList.forEach((file, index) => { this.fileList.forEach((file, index) => {
// //
@ -340,7 +373,7 @@ export default {
}) })
// //
values.repairImages = JSON.stringify(repairImages) values.repairImages = JSON.stringify(repairImages)
review(values).then(res => { review(values, uniqueArr).then(res => {
if (res.code === 0) { if (res.code === 0) {
this.$message.success('保存成功') this.$message.success('保存成功')
this.$emit('ok') this.$emit('ok')
@ -357,10 +390,10 @@ export default {
}) })
} }
}, },
watch: { watch: {}
}
} }
function getBase64(img, callback) {
function getBase64 (img, callback) {
const reader = new FileReader() const reader = new FileReader()
reader.addEventListener('load', () => callback(reader.result)) reader.addEventListener('load', () => callback(reader.result))
reader.readAsDataURL(img) reader.readAsDataURL(img)

View File

@ -19,12 +19,12 @@
</div> </div>
<a-tabs default-active-key="1" @change="callback"> <a-tabs default-active-key="1" @change="callback">
<a-tab-pane key="1" tab="维修人员"> <a-tab-pane key="1" tab="维修人员">
<s-table <a-table
size="default" size="default"
ref="table" ref="table"
rowKey="id" rowKey="id"
:columns="columns" :columns="columns"
:data="loadData" :data-source="loadData"
> >
<span slot="status" slot-scope="text"> <span slot="status" slot-scope="text">
{{ text | statusFilter }} {{ text | statusFilter }}
@ -33,15 +33,15 @@
<a v-if="editEnabel" @click="handleView(record.id)">详情</a> <a v-if="editEnabel" @click="handleView(record.id)">详情</a>
<a-divider type="vertical" /> <a-divider type="vertical" />
</span> </span>
</s-table> </a-table>
</a-tab-pane> </a-tab-pane>
<a-tab-pane key="2" tab="楼层负责人" force-render> <a-tab-pane key="2" tab="楼层负责人" force-render>
<s-table <a-table
size="default" size="default"
ref="table" ref="table"
rowKey="id" rowKey="id"
:columns="floorColumns" :columns="floorColumns"
:data="loadData" :data-source="loadData"
> >
<span slot="status" slot-scope="text"> <span slot="status" slot-scope="text">
{{ text | statusFilter }} {{ text | statusFilter }}
@ -51,7 +51,7 @@
<!-- <a v-if="editEnabel" @click="handleEdit(record)">指派</a>--> <!-- <a v-if="editEnabel" @click="handleEdit(record)">指派</a>-->
<!-- <a-divider type="vertical" />--> <!-- <a-divider type="vertical" />-->
</span> </span>
</s-table> </a-table>
</a-tab-pane> </a-tab-pane>
</a-tabs> </a-tabs>
</a-card> </a-card>
@ -175,12 +175,13 @@ export default {
} }
], ],
// Promise // Promise
loadData: parameter => { // loadData: parameter => {
return getRepairList(Object.assign(parameter, this.queryParam)) // return getRepairList(Object.assign(parameter, this.queryParam))
}, // },
addEnable: checkPermission('admin:repair:add'), addEnable: checkPermission('admin:repair:add'),
editEnabel: checkPermission('admin:repair:edit'), editEnabel: checkPermission('admin:repair:edit'),
removeEnable: checkPermission('admin:repair:list') removeEnable: checkPermission('admin:repair:list'),
loadData: []
} }
}, },
filters: { filters: {

View File

@ -131,6 +131,7 @@ export default {
methods: { methods: {
seeWorKerList (id, list) { seeWorKerList (id, list) {
this.workerVisible = true this.workerVisible = true
console.log(list)
this.data = list.map(item => { this.data = list.map(item => {
return { return {
username: item username: item

View File

@ -21,9 +21,9 @@
<a-input placeholder="楼层" v-decorator="['name']"/> <a-input placeholder="楼层" v-decorator="['name']"/>
</a-form-item> </a-form-item>
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="楼层管理员"> <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="楼层管理员">
<a-select v-decorator="['adminId', {rules: [{ required: true, message: '楼层管理员' }]}]" <a-select show-search v-decorator="['adminId', {rules: [{ required: true, message: '楼层管理员' }]}]" optionFilterProp="label"
> >
<a-select-option v-for="item in staffLists" :key="item.id">{{ item.username }}--{{ item.mobile}}</a-select-option> <a-select-option v-for="item in staffLists" :key="item.id" :label="item.mobile">{{ item.username }}--{{ item.mobile}}</a-select-option>
</a-select> </a-select>
</a-form-item> </a-form-item>
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="备注"> <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="备注">

View File

@ -1,34 +1,38 @@
<template> <template>
<a-modal <a-modal
title='操作' title="操作"
style='top: 20px;' style="top: 20px;"
:width='800' :width="800"
v-model='visible' v-model="visible"
:confirmLoading='confirmLoading' :confirmLoading="confirmLoading"
@ok='handleSubmit' @ok="handleSubmit"
> >
<a-form :form='form'> <a-form :form="form">
<a-form-item style='display:none'> <a-form-item style="display:none">
<a-input v-decorator="['id']" /> <a-input v-decorator="['id']" />
</a-form-item> </a-form-item>
<a-form-item style='display:none'> <a-form-item style="display:none">
<a-input v-decorator="['version']" /> <a-input v-decorator="['version']" />
</a-form-item> </a-form-item>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='类别名称'> <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="类别名称">
<a-input placeholder='名称' v-decorator="['name']" /> <a-input placeholder="名称" v-decorator="['name']" />
</a-form-item> </a-form-item>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='派单员'> <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="派单员">
<a-select v-decorator="['staffId', {rules: [{ required: true, message: '派单员' }]}]"> <a-select show-search v-decorator="['staffId', {rules: [{ required: true, message: '派单员' }]}]" optionFilterProp="label"
<a-select-option v-for='item in staffLists' :key='item.id'>{{ item.username }}--{{ item.mobile }}</a-select-option> >
<a-select-option v-for="item in staffLists" :key="item.id" :label="item.mobile">{{ item.username }}--{{ item.mobile }}
</a-select-option>
</a-select> </a-select>
</a-form-item> </a-form-item>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='维修员'> <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="维修员">
<a-select mode="multiple" v-decorator="['workerId', {rules: [{ required: true, message: '维修员' }]}]"> <a-select show-search mode="multiple"
<a-select-option v-for='item in staffLists' :key='item.id'>{{ item.username }}--{{ item.mobile }}</a-select-option> v-decorator="['workerId', {rules: [{ required: true, message: '维修员' }]}]" optionFilterProp="label">
<a-select-option v-for="item in staffLists" :key="item.id" :label="item.mobile">{{ item.username }}--{{ item.mobile }}
</a-select-option>
</a-select> </a-select>
</a-form-item> </a-form-item>
<a-form-item :labelCol='labelCol' :wrapperCol='wrapperCol' label='备注'> <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="备注">
<a-input placeholder='备注' v-decorator="['remark']" /> <a-input placeholder="备注" v-decorator="['remark']" />
</a-form-item> </a-form-item>
</a-form> </a-form>
</a-modal> </a-modal>
@ -41,7 +45,7 @@ export default {
name: 'RepairTypeModal', name: 'RepairTypeModal',
props: {}, props: {},
components: {}, components: {},
data() { data () {
return { return {
visible: false, visible: false,
labelCol: { labelCol: {
@ -58,23 +62,29 @@ export default {
staffLists: [] staffLists: []
} }
}, },
beforeCreate() { beforeCreate () {
}, },
created() { created () {
}, },
methods: { methods: {
selectUserListByType (){ selectUserListByType () {
selectUserListByType().then(res =>{ selectUserListByType().then(res => {
this.staffLists =res.data this.staffLists = res.data
}) })
}, },
add() { handleSearch (value) {
console.log(value)
selectUserListByType({ 'phone': value }).then(res => {
console.log(res.data)
// this.staffLists = res.data
})
},
add () {
this.form.resetFields() this.form.resetFields()
this.edit({ id: 0 }) this.edit({ id: 0 })
}, },
edit(record) { edit (record) {
this.selectUserListByType() this.selectUserListByType()
this.mdl = Object.assign(record) this.mdl = Object.assign(record)
@ -84,7 +94,7 @@ export default {
this.form.setFieldsValue(pick(this.mdl, 'id', 'name', 'staffId', 'workerId', 'staffLists', 'remark', 'deleteFlag', 'createBy', 'createTime', 'updateBy', 'updateTime', 'tenantId', 'parkId')) this.form.setFieldsValue(pick(this.mdl, 'id', 'name', 'staffId', 'workerId', 'staffLists', 'remark', 'deleteFlag', 'createBy', 'createTime', 'updateBy', 'updateTime', 'tenantId', 'parkId'))
}) })
}, },
handleSubmit(e) { handleSubmit (e) {
e.preventDefault() e.preventDefault()
this.form.validateFields((err, values) => { this.form.validateFields((err, values) => {
if (!err) { if (!err) {