<route lang="json5" type="page">
|
{
|
layout: 'default',
|
style: {
|
navigationBarTitleText: '添加报修',
|
'app-plus': {
|
titleNView: {
|
buttons: [
|
{
|
text: '提交',
|
fontSize: '14px',
|
color: '#FFFFFF',
|
},
|
{
|
text: '',
|
fontSize: '24px',
|
color: '#FFFFFF',
|
},
|
],
|
},
|
},
|
},
|
}
|
</route>
|
|
<template>
|
<view class="bg-base">
|
<wd-form ref="form" :model="model">
|
<wd-cell-group custom-class="group" title="类型信息" border>
|
<wd-picker
|
prop="reqType"
|
:columns="reqList"
|
label-key="dictLabel"
|
value-key="dictValue"
|
label="故障类型"
|
v-model="model.reqType"
|
@confirm="handleConfirmReqType"
|
/>
|
</wd-cell-group>
|
|
<wd-cell-group
|
v-if="model.reqType === '1'"
|
custom-class="mt-2"
|
title="设备信息"
|
use-slot
|
border
|
>
|
<template #value>
|
<view class="text-color-gray flex items-center">
|
<wd-icon class="icon-color-base" name="scan" size="30rpx"></wd-icon>
|
<text class="ml-1">扫设备码添加</text>
|
</view>
|
</template>
|
<wd-input
|
@click.stop="handleSelectEqu"
|
label="设备名称"
|
label-width="200rpx"
|
prop="equName"
|
readonly
|
required
|
suffix-icon="arrow-right"
|
clearable
|
v-model="model.equName"
|
placeholder="请选择设备"
|
/>
|
</wd-cell-group>
|
|
<wd-cell-group
|
v-if="model.reqType === '2'"
|
custom-class="mt-2"
|
title="工具信息"
|
use-slot
|
border
|
>
|
<template #value>
|
<view class="text-color-gray flex items-center">
|
<wd-icon class="icon-color-base" name="scan" size="30rpx"></wd-icon>
|
<text class="ml-1">扫工具码添加</text>
|
</view>
|
</template>
|
<wd-input
|
@click.stop="handleSelectFixture"
|
label="工具名称"
|
label-width="200rpx"
|
prop="fixtureName"
|
readonly
|
required
|
suffix-icon="arrow-right"
|
clearable
|
v-model="model.fixtureName"
|
placeholder="请选择工具"
|
/>
|
</wd-cell-group>
|
|
<wd-cell-group custom-class="mt-2" title="故障信息" border>
|
<wd-input
|
v-if="false"
|
label="报修单号"
|
placeholder="请生成报修单号"
|
label-width="200rpx"
|
v-model="model.code"
|
prop="code"
|
>
|
<template #suffix>
|
<wd-button size="small" icon="edit-outline" @click.stop="handleRepairCode">
|
生成
|
</wd-button>
|
</template>
|
</wd-input>
|
|
<wd-textarea
|
label="报修描述"
|
label-width="200rpx"
|
type="textarea"
|
v-model="model.reqDesc"
|
auto-height
|
:maxlength="200"
|
show-word-limit
|
placeholder="请输入报修描述"
|
clearable
|
prop="reqDesc"
|
/>
|
<wd-cell title="报修图片" title-width="200rpx" prop="fileList">
|
<wd-upload
|
:auto-upload="false"
|
:file-list="model.fileList"
|
:action="VITE_UPLOAD_BASEURL"
|
@change="handleFileChange"
|
></wd-upload>
|
</wd-cell>
|
|
<wd-datetime-picker
|
label="发生时间"
|
label-width="200rpx"
|
placeholder="请选择故障发生时间"
|
prop="occTime"
|
v-model="occTime"
|
@open="openOccTime"
|
@confirm="handleOccTimeConfirm"
|
/>
|
</wd-cell-group>
|
|
<wd-cell-group custom-class="mt-2" title="其他信息" border>
|
<wd-picker
|
:columns="faultList"
|
label-key="dictLabel"
|
value-key="dictValue"
|
label="故障类别"
|
v-model="model.faultType"
|
@confirm="handleConfirmFaultType"
|
/>
|
<wd-picker
|
:columns="urgencyList"
|
label-key="dictLabel"
|
value-key="dictValue"
|
label="紧急程度"
|
v-model="model.urgencyLevel"
|
@confirm="handleConfirmUrgencyLevel"
|
/>
|
</wd-cell-group>
|
</wd-form>
|
</view>
|
</template>
|
<script setup lang="ts">
|
import { reactive, ref } from 'vue'
|
import { getEnvBaseUploadUrl } from '@/utils'
|
import { generateCode } from '@/service/utils'
|
import { addRepairReq } from '@/service/repair'
|
import { formatDate } from '@/utils/DateUtils'
|
import { useToast, useMessage } from 'wot-design-uni'
|
import { useUserStore } from '@/store'
|
import {
|
DICT_REPAIR_FAULT_TYPE,
|
DICT_REPAIR_REQ_TYPE,
|
DICT_REPAIR_URGENCY_LEVEL,
|
getDictInfo,
|
} from '@/service/dict'
|
|
const VITE_UPLOAD_BASEURL = `${getEnvBaseUploadUrl()}`
|
const message = useMessage()
|
const toast = useToast()
|
const userStore = useUserStore()
|
|
// 报修类型
|
const reqList = ref<any>([])
|
// 故障类别
|
const faultList = ref<any>([])
|
// 紧急程度
|
const urgencyList = ref<any>([])
|
|
const form = ref()
|
const occTime = ref(0)
|
const model = reactive<{
|
code: string
|
status: string
|
reqDesc: string
|
occTime: string
|
reqTime: string
|
reqDept: number | string
|
reqUser: number | string
|
equId: string
|
equName: string
|
reqType: string
|
faultType: string
|
urgencyLevel: string
|
fixtureId: string
|
fixtureName: string
|
fileList: []
|
}>({
|
code: '',
|
reqDesc: '',
|
status: '',
|
occTime: '',
|
reqTime: '',
|
reqDept: null,
|
reqUser: null,
|
equId: '',
|
equName: '',
|
reqType: '',
|
faultType: '',
|
urgencyLevel: '',
|
fixtureId: '',
|
fixtureName: '',
|
fileList: [],
|
})
|
|
/**
|
* 选择设备
|
*/
|
function handleSelectEqu() {
|
uni.navigateTo({
|
url: '/pages/equ/equ-list',
|
events: {
|
// 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据
|
selectEqu: function (data) {
|
model.equId = data.data.equId
|
model.equName = data.data.equName
|
},
|
},
|
success: function (res) {
|
// 通过eventChannel向被打开页面传送数据
|
res.eventChannel.emit('OnSelectEqu', { data: '点检页面选择设备' })
|
},
|
})
|
}
|
|
/**
|
* 选择工具
|
*/
|
function handleSelectFixture() {
|
uni.navigateTo({
|
url: '/pages/fixture/fixture-list',
|
events: {
|
// 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据
|
selectFixture: function (data) {
|
model.fixtureId = data.data.id
|
model.fixtureName = data.data.fixtureName
|
},
|
},
|
success: function (res) {
|
// 通过eventChannel向被打开页面传送数据
|
res.eventChannel.emit('OnSelectFixture', { data: '添加维修页面选择工具' })
|
},
|
})
|
}
|
|
/**
|
* 生成报修编号
|
*/
|
async function handleRepairCode() {
|
try {
|
const code: any = await generateCode('BXD')
|
model.code = code
|
console.log('生成报修单号:', code)
|
|
message
|
.confirm({
|
msg: '确定提交?',
|
title: '提示',
|
beforeConfirm: ({ resolve }) => {
|
resolve(true)
|
handleAddRepairReq()
|
},
|
})
|
.then(() => {})
|
.catch((error) => {
|
console.log(error)
|
})
|
} catch (error) {
|
console.error('生成报修单号失败:', error)
|
toast.error('生成报修单号失败,请检查网络后重试')
|
}
|
}
|
|
function handleAddRepairReq() {
|
// 补充必要字段
|
model.status = '0'
|
model.reqTime = formatDate(new Date())
|
model.reqDept = userStore?.userInfo?.deptId
|
model.reqUser = userStore?.userInfo?.userId
|
addRepairReq(model)
|
.then((res: any) => {
|
if (res?.code === 200) {
|
toast.success(res?.msg)
|
uni.$emit('req-list-refresh')
|
setTimeout(() => {
|
uni.navigateBack()
|
}, 1500)
|
}
|
})
|
.catch((res) => {
|
toast.error(res?.data?.msg || '请求失败')
|
})
|
}
|
|
/**
|
* 上传点检图片
|
* @param fileList
|
*/
|
function handleFileChange({ fileList }) {
|
model.fileList = fileList
|
}
|
|
function checkData() {
|
if (!model.reqType) {
|
toast.error('请选择报修类型')
|
return false
|
}
|
if (model.reqType === '1' && !model.equId) {
|
toast.error('请选择报修设备')
|
return false
|
}
|
if (model.reqType === '2' && !model.fixtureId) {
|
toast.error('请选择报修工具')
|
return false
|
}
|
if (!model.occTime) {
|
toast.error('请选发生时间')
|
return false
|
}
|
return true
|
}
|
|
function handleSubmit() {
|
if (!checkData()) {
|
return false
|
}
|
handleRepairCode()
|
}
|
|
/**
|
* 打开发生时间 时间选择器
|
*/
|
function openOccTime() {
|
occTime.value = Date.now()
|
}
|
/**
|
* 确认选择发生时间
|
*/
|
function handleOccTimeConfirm({ value }) {
|
model.occTime = formatDate(new Date(value))
|
}
|
|
/**
|
* 选择报修类型
|
*/
|
function handleConfirmReqType({ value }) {
|
}
|
|
/**
|
* 选择故障类别
|
*/
|
function handleConfirmFaultType({ value }) {
|
}
|
|
/**
|
* 选择紧急程度
|
*/
|
function handleConfirmUrgencyLevel({ value }) {
|
}
|
|
async function initData() {
|
const reqTypeList = await getDictInfo(DICT_REPAIR_REQ_TYPE)
|
reqList.value = reqTypeList
|
|
const fList = await getDictInfo(DICT_REPAIR_FAULT_TYPE)
|
faultList.value = fList
|
|
const uList = await getDictInfo(DICT_REPAIR_URGENCY_LEVEL)
|
urgencyList.value = uList
|
}
|
|
onNavigationBarButtonTap((e) => {
|
if (e.index === 0) {
|
handleSubmit()
|
}
|
})
|
|
onLoad((options) => {
|
initData()
|
})
|
</script>
|
<style scoped lang="scss">
|
.footer {
|
background: white;
|
padding: 60rpx 42rpx;
|
}
|
</style>
|