ZhiYeJianKang_QiYe_APP/pages/upload/upload.vue
2025-02-20 15:38:43 +08:00

628 lines
16 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="app">
<view class="body">
<u-form :model="formxcjyListadd" ref="uForm" :label-width='200' :rules="rules">
<u-form-item label="报告名称 " labelWidth="130" prop="bgname"><u-input v-model="formxcjyListadd.bgname"
placeholder="{企业简称首字母}-{企业全名}-{年月日}-{序列号}" /></u-form-item>
<u-form-item label="检测机构名称" prop="jcjgname">
<!-- // page-meta 解决input聚焦时滑动穿透 你有其他方案可以用自己的方案 -->
<!-- <page-meta :page-style="`overflow: ${ hidden ? 'hidden' : 'unset'}`"></page-meta> -->
<lx-input class="input" placeholder="请选择机构" v-model="formxcjyListadd.jcjgname" :list="testname"
:hidden.sync="hidden" @focus="showitemlist" @clickItem="confirm" @input="input"></lx-input>
<!-- <u-select v-model="showitem" mode="single-column" :list="testname" @confirm="confirm"
@cancel="cancel"></u-select>
<u-input v-model="formxcjyListadd.jcjgname" type="select" @tap="showitemlist" placeholder="请选择机构" /> -->
</u-form-item>
<view class="" @tap="showdays()">
<u-form-item label="报告时间" labelWidth="140" prop="bgtime">
<view class="button" v-if="button">请选择报告时间</view>
<u-calendar v-model="showday" :mode="mode" @change="changetime">
</u-calendar>
{{formxcjyListadd.bgtime | formatDate('-')}}
</u-form-item>
</view>
<!-- <u-form-item label="报告时间"><u-input v-model="form.intro" /></u-form-item> -->
<u-form-item label="下次时间" prop="nextjctime">
<u-radio-group v-model="formxcjyListadd.reportPeriod">
<u-radio name="半年" @change="halfChange">半年</u-radio>
<u-radio shape="circle" name="一年" @change="oneChange">一年</u-radio>
<u-radio shape="circle" name="两年" @change="twoChange">两年</u-radio>
<u-radio shape="circle" name="三年" @change="threeChange">三年</u-radio>
<view class="time" v-if="formxcjyListadd.nextjctime">
{{ formxcjyListadd.nextjctime }}
</view>
</u-radio-group>
</u-form-item>
<u-form-item label="工作场所职业病危害因素检测报告" labelWidth="250" prop="bgcontent">
<lsj-upload ref="lsjUpload" childId="upload1" :option="option" :size="size" :formats="formats"
:debug="debug" :instantly="instantly" @uploadEnd="onuploadEnd" @progress="onprogre"
@change="change">
<u-button type="primary" size="medium" class="up">文件上传</u-button>
<u-icon name="checkbox-mark" v-if="formxcjyListadd.bgcontent" class="icon"></u-icon>
<!-- <u-icon name="checkbox-mark" v-if="formxcjyListadd.collectReport" class="icon"></u-icon>
<u-button type="primary" size="medium" @click="upload" class="up">文件上传</u-button> -->
</lsj-upload>
</u-form-item>
</u-form>
<view class="but">
<view class="sub">
<u-button type="primary" text="确定" @tap="submit()">提交</u-button>
</view>
<view class="res">
<u-button type="primary" text="确定" @tap="reset()">重置</u-button>
</view>
</view>
<u-toast ref="uToast" />
</view>
</view>
</template>
<script>
import {
pjjgListno,
insertJcxxno,
jcxxList,
deleteJcxx,
addqyjcxxRenew
} from "@/api/upload/upload.js";
import baseUrl from '@/api/baseurl.js'
import moment from 'moment'
export default {
data() {
return {
formxcjyListadd: {
id: '',
bgname: '',
jcjgname: '',
enterpriseName: '',
jcjgid: '',
enterpriseid: '',
jhysId: '',
bgtime: '',
nextjctime: '',
bgcontent: '',
reportPeriod: '',
},
showday: false, //报告时间
showitem: false,
mode: 'date',
value: '',
token: '',
tadytime: '',
jiansheadd: [],
testname: [
],
button: true,
list: [{
name: '半年',
disabled: false
},
{
name: '一年',
disabled: false
},
{
name: '两年',
disabled: false
},
{
name: '三年',
disabled: false
}
],
rules: {
bgname: [{
required: true,
message: "请填写报告名称",
trigger: "blur"
}, ],
jcjgname: [{
required: true,
message: "请选择检测机构名称",
trigger: "blur"
}, ],
bgtime: [{
required: true,
message: "请选择报告时间",
trigger: "blur"
}, ],
nextjctime: [{
required: true,
message: "请选择下次时间",
trigger: "blur"
}, ],
bgcontent: [{
required: true,
message: "请上传文件",
trigger: "blur"
}, ]
},
value1: '',
value2: '',
value3: '',
list1: [
// {
// value: '1',
// label: '江'
// },
// {
// value: '2',
// label: '湖'
// }
],
list2: [],
list3: [],
hidden: false,
/////////////////////////////////////////////////////////////
// 上传接口参数
option: {
// 上传服务器地址,需要替换为你的接口地址
url: baseUrl + `/dzzyb/a/zyb/ar/uploadFile`, // 该地址非真实路径,需替换为你项目自己的接口地址
// 上传附件的key
name: 'file',
// 根据你接口需求自定义请求头,默认不要写content-type,让浏览器自适配
header: {
// 示例参数可删除
token: '',
},
// 根据你接口需求自定义body参数
formData: {
// 'orderId': 1000
}
},
// 选择文件后是否立即自动上传true=选择后立即上传
instantly: true,
// 必传宽高且宽高应与slot宽高保持一致
// width: '300rpx',
// height: '120rpx',
// 限制允许上传的格式,空串=不限制,默认为空
formats: '',
// 文件上传大小限制
size: 30,
// 文件数量限制
count: 1,
// 文件回显列表
files: new Map(),
// 微信小程序Map对象for循环不显示所以转成普通数组不要问为什么我也不知道
wxFiles: [],
// 是否打印日志
debug: true,
// 演示用
tabIndex: 0,
list: [],
}
},
created() {
this.token = uni.getStorageSync("token")
console.log(this.token)
console.log(moment().format("YYYY-MM-DD HH:mm"))
this.getlist()
},
filters: {
// 时间戳处理
formatDate: function(value, spe = '/') {
if (value) {
value = value
let data = new Date(value);
let year = data.getFullYear();
let month = data.getMonth() + 1;
let day = data.getDate();
// let h = data.getHours();
// let mm = data.getMinutes();
// let s = data.getSeconds();
month = month >= 10 ? month : "0" + month;
day = day >= 10 ? day : "0" + day;
// h = h >= 10 ? h : "0" + h;
// mm = mm >= 10 ? mm : "0" + mm;
// s = s >= 10 ? s : "0" + s;
return `${year}${spe}${month}${spe}${day}`;
}
}
},
//如果是封装的组件需要在mounted调用不然校验有时会不生效
//不是的话在onReady调用也可
// mounted() {
// this.$refs.uForm.setRules(this.rules)
// },
onReady() {
this.$refs.uForm.setRules(this.rules);
},
methods: {
// clear(e){
// console.log(e)
// },
/**
* 某文件上传结束回调(成功失败都回调)
* @param {Object} item 当前上传完成的文件
*/
onuploadEnd(item) {
// 更新当前窗口状态变化的文件
this.files.set(item.name, item);
if (item['responseText']) {
// console.log('演示服务器返回的字符串JSON转Object对象');
this.files.get(item.name).responseText = JSON.parse(item.responseText);
this.formxcjyListadd.bgcontent = this.files.get(item.name).responseText.data.src
this.$refs.uToast.show({
title: '上传成功',
type: 'success',
duration: 1500
})
uni.hideLoading();
}
// #ifdef MP-WEIXIN
this.wxFiles = [...this.files.values()];
// #endif
// 强制更新视图
this.$forceUpdate();
},
/**
* 上传进度回调
* 如果网页上md文档没有渲染出事件名称onprogre请复制代码的小伙伴自行添加上哈没有哪个事件是只(item)的
* @param {Object} item 当前正在上传的文件
*/
onprogre(item) {
// uni.showLoading({
// title: '文件上传中'
// });
// 更新当前状态变化的文件
this.files.set(item.name, item);
// console.log('打印对象', JSON.parse(JSON.stringify(this.files.get(item.name))));
// #ifdef MP-WEIXIN
this.wxFiles = [...this.files.values()];
// #endif
// 强制更新视图
this.$forceUpdate();
},
/**
* 文件选择回调
* @param {Object} files 已选择的所有文件Map集合
*/
change(files) {
// console.log('当前选择的文件列表:', JSON.stringify([...files.values()]));
// 更新选择的文件
this.files = files;
// 强制更新视图
this.$forceUpdate();
// 微信小程序Map对象for循环不显示所以转成普通数组不要问为什么我也不知道
// #ifdef MP-WEIXIN
this.wxFiles = [...this.files.values()];
// #endif
},
// 必须要在onReady生命周期因为onLoad生命周期组件可能尚未创建完毕
// 报告时间
showdays() {
this.showday = true;
},
// 报告时间点击事件
changetime(e) {
// console.log(e)
this.formxcjyListadd.bgtime = e.result
this.button = false
// 获取当前时间
// 获取半年后时间
console.log(this.formxcjyListadd.reportPeriod)
if (this.formxcjyListadd.reportPeriod == '三年') {
// 赋值给新值
this.tadytime = e.result
let newdate = moment(this.tadytime).subtract(-3, 'year').format('YYYY-MM-DD') // 三年
this.formxcjyListadd.nextjctime = newdate
} else if (this.formxcjyListadd.reportPeriod == '半年') {
this.tadytime = e.result
let newdate = moment(this.tadytime).subtract(-0.5, 'year').format('YYYY-MM-DD')
this.formxcjyListadd.nextjctime = newdate
} else if (this.formxcjyListadd.reportPeriod == '一年') {
this.tadytime = e.result
let newdate = moment(this.tadytime).subtract(-1, 'year').format('YYYY-MM-DD')
this.formxcjyListadd.nextjctime = newdate
} else if (this.formxcjyListadd.reportPeriod == '两年') {
this.tadytime = e.result
let newdate = moment(this.tadytime).subtract(-2, 'year').format('YYYY-MM-DD')
this.formxcjyListadd.nextjctime = newdate
}
// console.log(e);
// // console.log(this.formlist)
// this.formxcjyListadd.bgtime = e.result
},
// 检测机构名称
getlist() {
pjjgListno().then(res => {
this.jiansheadd = res
this.testname = []
this.jiansheadd.forEach((e) => {
var obj = {
label: e.companyName,
value: e.id
};
this.testname.push(obj);
})
})
},
showitemlist(e) {
// console.log("2222222", e)
this.showitem = true
},
// 检测机构名称确定
confirm(e) {
// console.log(e)
this.formxcjyListadd.jcjgname = e.label
this.formxcjyListadd.jcjgid = e.value
// console.log(e);
},
input(e) {
if(e){
this.formxcjyListadd.jcjgname = e
this.formxcjyListadd.jcjgid = ''
console.log(e)
}
},
cancel(e) {
},
actionSheetCallback(index) {
// console.log('111', index)
// uni.hideKeyboard();
// this.datalist.dwgm = this.jiansheadd[index].text;
// this.list= this.list[index].value;
},
halfChange(e) {
console.log(e)
this.formxcjyListadd.reportPeriod = e
if (this.formxcjyListadd.bgtime) {
let newdate = moment(this.formxcjyListadd.bgtime).subtract(-0.5, 'year').format('YYYY-MM-DD')
this.formxcjyListadd.nextjctime = newdate
}
},
// 一年
oneChange(e) {
this.formxcjyListadd.reportPeriod = e
if (this.formxcjyListadd.bgtime) {
let newdate = moment(this.formxcjyListadd.bgtime).subtract(-1, 'year').format('YYYY-MM-DD')
this.formxcjyListadd.nextjctime = newdate
}
},
// 两年
twoChange(e) {
this.formxcjyListadd.reportPeriod = e
if (this.formxcjyListadd.bgtime) {
let newdate = moment(this.formxcjyListadd.bgtime).subtract(-2, 'year').format('YYYY-MM-DD')
this.formxcjyListadd.nextjctime = newdate
}
},
// 三年
threeChange(e) {
this.formxcjyListadd.reportPeriod = e
if (this.formxcjyListadd.bgtime) {
let newdate = moment(this.formxcjyListadd.bgtime).subtract(-3, 'year').format('YYYY-MM-DD')
this.formxcjyListadd.nextjctime = newdate
}
},
// 选中任一radio时由radio-group触发
radioGroupChange(e) {
// console.log(e);
},
// 重置
reset() {
// this.value='',
this.formxcjyListadd.reportPeriod = ''
this.button = true
this.formxcjyListadd = {
id: '',
bgname: '',
jcjgname: '',
enterpriseName: '',
jcjgid: '',
enterpriseid: '',
jhysId: '',
bgtime: '',
nextjctime: '',
bgcontent: '',
reportPeriod: '',
}
},
// 提交
submit() {
console.log(this.formxcjyListadd)
this.$refs.uForm.validate(valid => {
if (valid) {
insertJcxxno(this.formxcjyListadd).then(response => {
if (response.code == '0' && response.mess == '下次检测日期重复!') {
this.$refs.uToast.show({
title: response.mess,
type: 'error',
duration: 1500
})
} else {
this.$refs.uToast.show({
title: '新增成功',
type: 'success',
duration: 1500
})
uni.$emit('update', '1')
setTimeout(function() {
uni.switchTab({
url: '/pages/homepage/homepage'
});
}, 2000);
}
});
}
});
}
},
}
</script>
<style lang="scss">
//css函数 声明函数
@function tovmin($rpx) {
//$rpx为需要转换的字号
@return #{$rpx * 100 / 750}vmin;
}
::v-deep .u-form-item {
padding-left: tovmin(50) !important;
}
::v-deep .u-icon__icon uicon-checkbox-mark u-iconfont {
left: tovmin(8);
}
::v-deep .srollViewBox .scrollView-item {
padding-left: 0 !important;
line-height: tovmin(50) !important;
color: #3C9CFF !important;
}
::v-deep .inputBox .focusBox .inputStyle {
width: 100% !important;
color: #000 !important;
}
::v-deep .uni-input-placeholder {
font-size: tovmin(27) !important;
color: #C0C4CC !important;
}
::v-deep .srollViewBox .scrollView{
height: tovmin(200) !important;
}
::v-deep .srollViewBox{
height: tovmin(220) !important;
}
::v-deep .uni-input-input{
font-size: tovmin(27) !important;
}
// 请选择机构
.app {
color: #C3C1C1;
font-weight: 400;
height: 100vh;
.body {
margin-top: tovmin(30);
.but {
display: flex;
justify-content: space-around;
margin-top: tovmin(50);
.res {
width: tovmin(170);
height: tovmin(70);
line-height: tovmin(70);
text-align: center;
color: #fff;
background-color: #3C9CFF;
border-radius: tovmin(10);
}
.sub {
width: tovmin(170);
height: tovmin(70);
line-height: tovmin(70);
text-align: center;
color: #fff;
background-color: #3C9CFF;
border-radius: tovmin(10);
}
}
}
.up {
// background-color: red;
position: absolute;
// right: tovmin(120);
}
.icon {
position: absolute;
right: tovmin(60);
}
.button {
color: #C0C4CC;
}
}
.content {
padding: 0 tovmin(30);
.inputContent {
display: flex;
align-items: center;
margin-top: tovmin(100);
.label {
font-size: tovmin(15);
font-weight: bold;
margin-right: tovmin(15);
}
.input {
flex: 1;
font-size: tovmin(10);
color: red;
}
}
}
</style>