jy-safe-app/pages/camera/index.vue

267 lines
7.8 KiB
Vue
Raw Permalink Normal View History

2025-10-14 15:17:30 +08:00
<template>
<view class="camera-page">
<uni-card class="card-style" margin="0" :is-shadow="true">
<u--form labelPosition="left" labelWidth="auto" labelAlign="center" :model="dataModel" :rules="rules"
ref="wForm" errorType="border-bottom">
<u-form-item label="接收人" prop="recipient.name" borderBottom
@click="handleShowPersonQuery">
<u--input :value="dataModel.recipient.name" readonly disabledColor="#fff" placeholder="请选择接收人"
border="none" inputAlign="right"></u--input>
<u-icon style="margin-left: 4px;" slot="right" name="arrow-down"></u-icon>
</u-form-item>
<!-- <u-form-item label="检查层级" prop="checkLevel" borderBottom-->
<!-- @click="handleShowSheet({title: '检查层级', name: 'checkLevel'})">-->
<!-- <u&#45;&#45;input :value="dataModel.checkLevel.name" placeholder="请选择检查层级" disabled disabledColor="#fff"-->
<!-- border="none" inputAlign="right"></u&#45;&#45;input>-->
<!-- <u-icon style="margin-left: 4px;" slot="right" name="arrow-down"></u-icon>-->
<!-- </u-form-item>-->
<!-- <u-form-item label="检查时间" prop="checkDate" borderBottom @click="showCheckDate = true;">-->
<!-- <u&#45;&#45;input disabled disabledColor="#fff" :value="dataModel.checkDate.value" border="none"-->
<!-- inputAlign="right"></u&#45;&#45;input>-->
<!-- </u-form-item>-->
<view class="label-title">照片</view>
<u-form-item borderBottom prop="pictureLists">
<u-upload :fileList="dataModel.pictureLists" @afterRead="afterRead" @delete="deletePic" multiple :maxCount="3"
style="margin-bottom: 0;" :previewFullImage="true" uploadIcon="plus"></u-upload>
</u-form-item>
<view>
<view class="label-title">检查内容</view>
<u-form-item borderBottom>
<u--textarea :value="dataModel.checkContent.value" @input="onInput" placeholder="请输入检查内容"
border="surround"></u--textarea>
</u-form-item>
</view>
</u--form>
<!-- <people-selector :show="showSelectorPerson" @select="handleSelectorPeople"-->
<!-- @close="showSelectorPerson = false">-->
<!-- </people-selector>-->
<query-selector :show="showQueryPerson" :lists="userLists" :total="curTotal"
@close="handleClosePopup" @search="handleSearchUser" @select="handleSelectedUser" />
<!-- <u-datetime-picker :show="showCheckDate" mode="datetime" :value="dataModel.checkDate.value"-->
<!-- @confirm="handleCheckDate" @close="showCheckDate = false;"-->
<!-- @cancel="showCheckDate = false;"></u-datetime-picker>-->
<!-- <u-picker :show="comPickerInfo.showSheet" :columns="comPickerInfo.columns" @confirm="onConfirmPicker"-->
<!-- @close="closePicker" @cancel="closePicker" keyName="name"></u-picker>-->
</uni-card>
<button type="primary" @click="handleSubmit">提交</button>
</view>
</template>
<script>
import {
extendFilterGroup,
extendGroupRule,
extendInclude,
extendOrder,
extendRule,
guid,
initFilter, initFilterGroup
} from '../../utils/common'
import {
getUserLists
} from '../../services/safe'
import {
saveSnapShot
} from '../../services/app'
import config from '../../config/common'
export default {
data() {
return {
sourceUrl: config.uni_app_web_source_url,
userLists: [],
curTotal: 0,
showSelectorPerson: false,
showQueryPerson: false,
dataModel: {
recipient: {
name: '',
value: ''
},
checkContent: {
value: ''
},
pictureLists: [],
},
rules: {
'recipient.name': {
type: 'string',
required: true,
message: '请选择接收人',
trigger: ['blur', 'change']
},
'pictureLists': {
type: 'array',
required: true,
message: '请上传照片',
trigger: ['blur', 'change']
}
}
}
},
onLoad() {
this.dataModel.pictureLists = this.$store.state.imageLists.map(i => {
return {
url: this.sourceUrl + i.IMG_FILE_PATH,
id: i.IMG_FILE_ID,
IMG_FILE_PATH: this.sourceUrl + i.IMG_FILE_PATH,
IMG_FILE_ID: i.IMG_FILE_ID,
}
})
},
methods: {
handleShowPersonQuery() {
this.showQueryPerson = true
this.handleSearchUser('init')
},
handleClosePopup() {
this.showQueryPerson = false
},
// handleSelectorPeople(e) {
// console.log(e)
// },
handleSearchUser(val, pageIndex) {
const orgId = uni.getStorageSync('orgId')
const json = initFilter(orgId, "", "NAME", '', pageIndex)
extendInclude(json, "Nav_Person.Nav_Post")
extendRule(json, 'ENABLE_STATUS', 1, '0')
if (val !== 'init') {
const tempGroup = initFilterGroup(false);
extendGroupRule(tempGroup, 'NAME', 9, val)
extendFilterGroup(json, tempGroup);
}
json.Limit = 20
if (pageIndex) {
json.Start = (pageIndex - 1) * 20;
}
getUserLists(json).then(res => {
if (res.IsSuccessful) {
this.userLists = res.Data.map(i => {
return {
...i,
name: i.NAME,
code: i.CODE
}
})
this.curTotal = res.TotalCount
}
})
},
handleSelectedUser(val) {
this.showQueryPerson = false
this.lists = []
this.dataModel.recipient = val
},
onInput(e) {
this.dataModel.checkContent.value = e
},
handleSubmit() {
const ele = this.$refs
ele['wForm'].validate().then(res => {
const orgId = uni.getStorageSync('orgId')
const appInfoData = uni.getStorageSync('appInfo')
const {
recipient,
checkContent,
pictureLists
} = this.dataModel
// const submitId = guid()
const params = {
ACCEPT_ID: recipient.ID,
DESCRIPTION: checkContent.value,
Nav_Files: pictureLists.map(i => {
return {
ID: guid(),
IMG_FILE_ID: i.IMG_FILE_ID,
ORG_ID: orgId,
}
}),
}
saveSnapShot(params).then(res => {
if (res) {
uni.$showMsgFunc('提交成功', () => {
uni.switchTab({
url: '/pages/index/index2'
})
}, '', 1000)
}
})
}).catch(err => {
console.log('校验失败', err)
})
},
deletePic(event) {
this.dataModel.pictureLists.splice(event.index, 1)
},
async afterRead(event) {
// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
let lists = [].concat(event.file)
let fileListLen = this.dataModel.pictureLists.length
lists.map((item) => {
this.dataModel.pictureLists.push({
...item,
status: 'uploading',
message: '上传中'
})
})
for (let i = 0; i < lists.length; i++) {
const result = await this.uploadFilePromise(lists[i].url)
let item = this.dataModel.pictureLists[fileListLen]
this.dataModel.pictureLists.splice(fileListLen, 1, Object.assign(item, {
status: 'success',
message: '',
IMG_FILE_ID: result.imgFileID
// url: result
}))
fileListLen++
}
},
uploadFilePromise(url) {
const appInfoData = uni.getStorageSync('appInfo')
const userId = appInfoData?.User?.ID || ''
const orgId = uni.getStorageSync('orgId')
const tenant = uni.getStorageSync('Tenant') || ''
const remoteUrl = config.serviceHost('/PF/File/UploadFile')
return new Promise((resolve, reject) => {
uni.uploadFile({
url: remoteUrl,
filePath: url,
fileList: url,
name: 'file',
formData: {
OrgId: orgId
},
header: {
Tenant: tenant,
userid: userId
},
success: (res) => {
if (res.statusCode === 200) {
const uploadResult = JSON.parse(res.data)
if (uploadResult.IsSuccessful) {
resolve(uploadResult.Data)
}
}
}
})
})
},
}
}
</script>
<style scoped>
/* @import url("@/style/css/editTemplate.css"); */
.camera-page {
padding: 16px;
}
.label-title {
color: #303133;
font-size: 15px;
line-height: 22px;
padding-top: 8px;
}
</style>