|
|
|
|
@ -0,0 +1,333 @@
|
|
|
|
|
<template>
|
|
|
|
|
<uni-nav-bar
|
|
|
|
|
fixed
|
|
|
|
|
:border="false"
|
|
|
|
|
background-color="#dcf4ff"
|
|
|
|
|
color="black"
|
|
|
|
|
status-bar
|
|
|
|
|
title="铭牌信息更新"
|
|
|
|
|
><template v-slot:left>
|
|
|
|
|
<view style="display: flex; align-items: center" @click="back">
|
|
|
|
|
<!-- 图标 -->
|
|
|
|
|
<uni-icons type="left" size="20" color="black"></uni-icons>
|
|
|
|
|
</view>
|
|
|
|
|
</template>
|
|
|
|
|
<template v-slot:right>
|
|
|
|
|
<view style="display: flex; align-items: center" @click="onQrCode">
|
|
|
|
|
<!-- 文本 -->
|
|
|
|
|
<text>二维码</text>
|
|
|
|
|
</view>
|
|
|
|
|
</template>
|
|
|
|
|
</uni-nav-bar>
|
|
|
|
|
<div class="content">
|
|
|
|
|
<div class="search">
|
|
|
|
|
<uni-easyinput v-model="keyWord" placeholder="请输入设备编码"></uni-easyinput>
|
|
|
|
|
<button
|
|
|
|
|
type="primary"
|
|
|
|
|
size="mini"
|
|
|
|
|
@click="handleSearch"
|
|
|
|
|
style="margin-left: 10px; background-color: #18bc37"
|
|
|
|
|
>
|
|
|
|
|
查询
|
|
|
|
|
</button>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div class="popup" style="margin: 20px 0 30px" @click="handlePopup(1)">{{ typeName || '请选择对应机具' }}</div>
|
|
|
|
|
|
|
|
|
|
<div class="search-item">
|
|
|
|
|
<div>设备类型:{{ formData.materialName }}</div>
|
|
|
|
|
<div>
|
|
|
|
|
<span><span style="color: red">*</span>规格型号:</span
|
|
|
|
|
><uni-easyinput v-model="formData.materialModel" placeholder="请输入"></uni-easyinput>
|
|
|
|
|
</div>
|
|
|
|
|
<div>二维码:{{ formData.qrCode }}</div>
|
|
|
|
|
<div>设备编码:{{ formData.maCode }}</div>
|
|
|
|
|
<div>设备状态:{{ formData.maStatus }}</div>
|
|
|
|
|
<div>
|
|
|
|
|
<span>本次检修人员:</span
|
|
|
|
|
><uni-easyinput v-model="formData.checkMan" placeholder="请输入"></uni-easyinput>
|
|
|
|
|
</div>
|
|
|
|
|
<div>
|
|
|
|
|
<span>本次检修时间:</span>
|
|
|
|
|
<uni-datetime-picker type="date" v-model="formData.thisCheckTime" @change="changeTime" />
|
|
|
|
|
</div>
|
|
|
|
|
<div>
|
|
|
|
|
<span>下次检修时间:</span>
|
|
|
|
|
<uni-datetime-picker
|
|
|
|
|
type="date"
|
|
|
|
|
v-model="formData.nextCheckTime"
|
|
|
|
|
@change="changeNextTime"
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
<div>
|
|
|
|
|
<span><span style="color: red">*</span>出厂时间:</span>
|
|
|
|
|
<uni-datetime-picker type="date" v-model="formData.outFacTime" @change="changeFacTime" />
|
|
|
|
|
</div>
|
|
|
|
|
<div style="display: flex; align-items: center; justify-content: space-between">
|
|
|
|
|
<div><span style="color: red">*</span>机具厂家:</div>
|
|
|
|
|
<div class="popup" style="width: 70%" @click="handlePopup(2)">
|
|
|
|
|
{{ formData.maVender || '请选择' }}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<button
|
|
|
|
|
type="primary"
|
|
|
|
|
size="mini"
|
|
|
|
|
@click="handleSubmit"
|
|
|
|
|
style="margin-top: 30px; background-color: #18bc37; width: 100%"
|
|
|
|
|
>
|
|
|
|
|
确认修改
|
|
|
|
|
</button>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<uni-popup ref="popup" border-radius="5px 5px 5px 5px" background-color="#fff">
|
|
|
|
|
<div
|
|
|
|
|
v-for="(item, index) in list"
|
|
|
|
|
:key="index"
|
|
|
|
|
class="popup-item"
|
|
|
|
|
@click.stop="handleCheck(item)"
|
|
|
|
|
>
|
|
|
|
|
<div>{{ item.name }}</div>
|
|
|
|
|
<uni-data-checkbox
|
|
|
|
|
v-model="item.isChecked"
|
|
|
|
|
:localdata="range"
|
|
|
|
|
@change="handleCheck(item, $event)"
|
|
|
|
|
></uni-data-checkbox>
|
|
|
|
|
</div>
|
|
|
|
|
</uni-popup>
|
|
|
|
|
<ScanQrCode ref="scanQrCodeRef" @scanSuccess="handleScanSuccess" @scanError="handleScanError" />
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script setup>
|
|
|
|
|
import { getWsMaInfoList, updateCheckTime } from '@/services/wsMaInfo/wsMaInfo.js'
|
|
|
|
|
import { getInfoByCode, updateInfo } from '@/services/information'
|
|
|
|
|
import { getSupplierList } from '@/services/repair/repair.js'
|
|
|
|
|
import { onLoad } from '@dcloudio/uni-app'
|
|
|
|
|
import { reactive, ref } from 'vue'
|
|
|
|
|
import ScanQrCode from '@/pages/devicesSearch/ScanQrCode'
|
|
|
|
|
|
|
|
|
|
const keyWord = ref('')
|
|
|
|
|
const qrCode = ref('')
|
|
|
|
|
let formData = reactive({
|
|
|
|
|
id: '',
|
|
|
|
|
maVender: '',
|
|
|
|
|
supplierId: '',
|
|
|
|
|
})
|
|
|
|
|
const scanQrCodeRef = ref()
|
|
|
|
|
const popup = ref()
|
|
|
|
|
const typeName = ref('')
|
|
|
|
|
const list = ref([])
|
|
|
|
|
const typeList = ref([]) // 设备类型
|
|
|
|
|
const range = ref([{ value: 0, text: '' }])
|
|
|
|
|
const supplierList = ref([]) // 厂家
|
|
|
|
|
|
|
|
|
|
onLoad(() => {
|
|
|
|
|
console.log('onLoad')
|
|
|
|
|
getSupplier()
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
const back = () => {
|
|
|
|
|
uni.navigateBack({
|
|
|
|
|
delta: 1,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const onQrCode = () => {
|
|
|
|
|
console.log('🚀 ~ onQrCode ~ 二维码:')
|
|
|
|
|
if (scanQrCodeRef.value) scanQrCodeRef.value.scanQrCode()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const handleSearch = () => {
|
|
|
|
|
console.log('🚀 ~ handleSearch ~ 查询:', keyWord.value)
|
|
|
|
|
if (!keyWord.value) {
|
|
|
|
|
uni.showToast({
|
|
|
|
|
title: '请输入设备编码',
|
|
|
|
|
icon: 'none',
|
|
|
|
|
})
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
qrCode.value = ''
|
|
|
|
|
typeList.value = []
|
|
|
|
|
getInfo()
|
|
|
|
|
}
|
|
|
|
|
const getInfo = () => {
|
|
|
|
|
const params = {
|
|
|
|
|
maCode: keyWord.value,
|
|
|
|
|
qrCode: qrCode.value,
|
|
|
|
|
}
|
|
|
|
|
getInfoByCode(params)
|
|
|
|
|
.then((res) => {
|
|
|
|
|
if (res.code === 200 && res.data && res.data.length > 0) {
|
|
|
|
|
typeList.value = res.data.map((option) => {
|
|
|
|
|
return {
|
|
|
|
|
...option,
|
|
|
|
|
id: option.maId,
|
|
|
|
|
name: option.materialName + '-' + option.materialModel,
|
|
|
|
|
isChecked: 1,
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
.catch((error) => {
|
|
|
|
|
console.log(error)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取厂家
|
|
|
|
|
const getSupplier = () => {
|
|
|
|
|
getSupplierList()
|
|
|
|
|
.then((res) => {
|
|
|
|
|
if (res.code === 200) {
|
|
|
|
|
supplierList.value = res.rows.map((item) => {
|
|
|
|
|
return {
|
|
|
|
|
...item,
|
|
|
|
|
id: item.supplierId,
|
|
|
|
|
name: item.supplier,
|
|
|
|
|
isChecked: 1,
|
|
|
|
|
isSupplier: true,
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
.catch((error) => {
|
|
|
|
|
console.log(error)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const changeTime = (e) => {
|
|
|
|
|
formData.thisCheckTime = e
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const changeNextTime = (e) => {
|
|
|
|
|
formData.nextCheckTime = e
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const changeFacTime = (e) => {
|
|
|
|
|
formData.outFacTime = e
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const handlePopup = (type) => {
|
|
|
|
|
console.log('🚀 ~ handlePopup ~ 弹窗:')
|
|
|
|
|
if (type === 1) {
|
|
|
|
|
list.value = typeList.value
|
|
|
|
|
} else {
|
|
|
|
|
list.value = supplierList.value
|
|
|
|
|
}
|
|
|
|
|
if (list.value.length === 0) {
|
|
|
|
|
uni.showToast({ title: '暂无数据', icon: 'none' })
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
popup.value.open()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const handleCheck = (item) => {
|
|
|
|
|
console.log('🚀 ~ handleCheck ~ 单选:', item)
|
|
|
|
|
// 循环 typeList 将当前点击的 item.isChecked 设置为 0 其他设置 1
|
|
|
|
|
list.value.forEach((i) => {
|
|
|
|
|
i.isChecked = i.id === item.id ? 0 : 1
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
if (item.isSupplier) {
|
|
|
|
|
formData.maVender = item.supplier
|
|
|
|
|
formData.supplierId = item.supplierId
|
|
|
|
|
} else {
|
|
|
|
|
formData = {}
|
|
|
|
|
formData = item
|
|
|
|
|
typeName.value = item.name
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
popup.value.close()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 处理扫描成功事件
|
|
|
|
|
const handleScanSuccess = (result) => {
|
|
|
|
|
qrCode.value = result?.text?.split('?qrcode=')[1] || result?.text
|
|
|
|
|
if (qrCode.value === '') {
|
|
|
|
|
uni.showToast({ title: '扫码识别失败', icon: 'none' })
|
|
|
|
|
} else {
|
|
|
|
|
keyWord.value = ''
|
|
|
|
|
getInfo()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 处理扫描失败事件
|
|
|
|
|
const handleScanError = (error) => {
|
|
|
|
|
console.error('扫描出错:', error.message)
|
|
|
|
|
uni.showToast({ title: error.message, icon: 'none' })
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 提交
|
|
|
|
|
const handleSubmit = () => {
|
|
|
|
|
// 必填项 验证
|
|
|
|
|
console.log('🚀 ~ handleSubmit ~ formData:', formData)
|
|
|
|
|
if (!formData.materialModel || !formData.outFacTime || !formData.maVender) {
|
|
|
|
|
uni.showToast({ title: '请填写完整信息', icon: 'none' })
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
delete formData.maStatus
|
|
|
|
|
updateInfo(formData)
|
|
|
|
|
.then((res) => {
|
|
|
|
|
if (res.code === 200) {
|
|
|
|
|
uni.showToast({
|
|
|
|
|
title: res.msg,
|
|
|
|
|
icon: 'none',
|
|
|
|
|
})
|
|
|
|
|
resetFormData()
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
.catch((error) => {
|
|
|
|
|
console.log(error)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
const resetFormData = () => {
|
|
|
|
|
Object.keys(formData).forEach(key => {
|
|
|
|
|
formData[key] = ''
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style scoped lang="scss">
|
|
|
|
|
.content {
|
|
|
|
|
padding: 10px;
|
|
|
|
|
|
|
|
|
|
.search {
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.popup {
|
|
|
|
|
background: #fff;
|
|
|
|
|
/* margin: 20px 0 30px; */
|
|
|
|
|
padding: 5px 10px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.search-item {
|
|
|
|
|
line-height: 1.9;
|
|
|
|
|
div {
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
margin-bottom: 5px;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.popup-item {
|
|
|
|
|
padding: 10px;
|
|
|
|
|
border-bottom: 1px solid #c7c9ce;
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
::v-deep .uni-popup__wrapper {
|
|
|
|
|
width: calc(100% - 20px);
|
|
|
|
|
/* padding: 10px; */
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
::v-deep .uni-data-checklist {
|
|
|
|
|
// 去掉 flex: 1
|
|
|
|
|
flex: none;
|
|
|
|
|
}
|
|
|
|
|
</style>
|