中航光电PDA端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

241 lines
6.1 KiB

<template>
<ifrm ref="ifrm">
<!-- 安全巡检-->
<uni-forms ref="form" err-show-type="toast">
<uni-forms-item>
<input
type="text"
v-model="insNum"
@confirm="insConfirm"
class="uni-input-border"
placeholder="巡检点编码"
/>
</uni-forms-item>
</uni-forms>
<uni-table border stripe emptyText="暂无更多数据" class="table">
<uni-tr>
<uni-th align="center">巡检点编码</uni-th>
<uni-th align="center">巡检点位置</uni-th>
</uni-tr>
<uni-tr v-for="(item, index) in insList" :key="index">
<uni-td align="center">{{ item.insNum }}</uni-td>
<uni-td align="center">{{ item.insSite }}</uni-td>
</uni-tr>
</uni-table>
<view style="font-size: 36rpx">巡检备注</view>
<uni-forms ref="form" err-show-type="toast">
<uni-forms-item>
<uni-easyinput
type="textarea"
autoHeight
v-model="memo"
placeholder="请输入内容"
/>
</uni-forms-item>
</uni-forms>
<view class="photoTitleSize">{{ uploader.length }}/9</view>
<view class="showImage">
<view v-for="(item, i) in uploader" :key="i" class="showImage-for">
<view class="view-image">
<image :src="item.imageUrl" @tap="previewImage(i)" />
</view>
<view class="view-icon">
<uni-icons
type="trash"
size="14"
color="gray"
@click="removeScene(item, i)"
></uni-icons>
</view>
</view>
<view class="view-center" v-if="uploader.length < 9">
<image
src="../../static/images/photo.png"
@click="chooseImage()"
></image>
</view>
</view>
<view class="buttonBox">
<button
class="button"
type="primary"
:disabled="!(insList.length > 0)"
@click="submitClick"
>
提交
</button>
</view>
</ifrm>
</template>
<script>
import ifrm from "@/pages/index/ifrm";
import scan from "../../mixin/scan.js";
import { options } from "@/http/config.js";
export default {
mixins: [scan],
components: {
ifrm,
},
data() {
return {
insNum: "",
insList: [],
uploader: [],
memo: "",
};
},
methods: {
getBarCode(code) {
this.getData(code);
},
insConfirm(e) {
this.insList = [];
this.getBarCode(e.target.value);
},
getData(code) {
if (!code) return;
this.insNum = code;
this.$u.api.getInspectionByCode(code).then((res) => {
this.insNum = "";
this.insList = res.data;
uni.showToast({ title: "数据获取成功" });
});
},
submitClick() {
this.$u.api
.saveInspection({
code: this.insList.map((item) => item.insNum).join(","),
memo: this.memo,
// 取出所有上传成功的文件
path: this.uploader.map((item) => item.imageUrl),
})
.then((data) => {
uni.showToast({ title: "巡检成功" });
// 清空表单
this.insList = [];
this.memo = "";
this.uploader = [];
});
},
chooseImage: async function () {
if (this.insList.length == 0) {
return uni.showToast({
title: "请先查询巡检点",
icon: "none",
});
}
uni.chooseImage({
count: 9,
// sizeType: ['compressed'],
// sourceType: ['album', 'camera'],
success: (res) => {
uni.showLoading({
title: "上传中,请稍候",
});
res.tempFilePaths.forEach((filePath) => {
console.log("file-----------", filePath);
console.log("options.baseURL------", options.baseURL);
uni.uploadFile({
url:
options.baseURL +
"/blade-resource/oss/endpoint/put-file-attach",
filePath: filePath,
name: "file",
header: {
token: "bearer " + uni.getStorageSync("accessToken"),
"Blade-Auth": "bearer " + uni.getStorageSync("accessToken"),
"Blade-Requested-With": "BladeHttpRequest",
},
success: (uploadRes) => {
uni.hideLoading();
uni.showToast({ title: "上传成功" });
this.uploader.push({
upId: JSON.parse(uploadRes.data).data.attachId,
imageUrl: JSON.parse(uploadRes.data).data.link,
});
},
fail: (err) => {
console.error("❌ 上传失败", err);
uni.showToast({ title: "上传失败", icon: "none" });
},
});
});
},
});
},
// 预览图片
previewImage(index) {
const urls = this.uploader.map((item) => item.imageUrl);
uni.previewImage({ current: index, urls });
},
// 删除图片
removeScene(item, index) {
// 先删本地列表
this.uploader.splice(index, 1);
uni.showToast({ title: "删除成功", icon: "none" });
},
},
onNavigationBarButtonTap(btn) {
this.$refs.ifrm.topMenuClick(btn);
},
onShow() {},
};
</script>
<style scoped lang="less">
.photoTitleSize {
color: #a1a1a1;
text-align: right;
margin-right: 30rpx;
margin-top: -30rpx;
}
.showImage {
display: flex;
flex-direction: row;
justify-content: flex-start;
flex-wrap: wrap;
margin-left: -20rpx;
.showImage-for {
display: flex;
flex-direction: column;
width: 200rpx;
margin-left: 30rpx;
height: 260rpx;
.view-icon {
display: flex;
flex-direction: row;
justify-content: center;
margin-top: -10rpx;
}
image {
border-width: 2rpx;
border-color: rgb(229, 229, 229);
border-style: solid;
border-radius: 20rpx;
width: 190rpx;
height: 190rpx;
}
}
}
.view-center {
margin: 0rpx 25rpx;
image {
border-width: 2rpx;
border-color: rgb(229, 229, 229);
border-style: solid;
border-radius: 20rpx;
width: 190rpx;
height: 190rpx;
}
}
</style>