yxk_h5_master/pages/reimApply/addReimApply.vue

408 lines
11 KiB
Vue
Raw 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="page">
<view class="step_num" style="margin-bottom: 22upx;">
<view class="step step1">完善报销明细</view>
<view class="step step2">上传报销凭证</view>
</view>
<view v-for="(item,index) in itemList" :key="index" class="example-box">
<view class="item">
<view class="itemname">报销明细{{index+1}}</view>
<view class="itemtext" style="color:#007aff;" @click="deleteItem(index)">
<uni-icons type="trash" class="myarrowright" style="right:56upx; font-size: 36upx;color:#007aff;"></uni-icons>删除
</view>
</view>
<view class="item">
<view class="itemname redMi">报销金额</view>
<view class="itemtext">
<input class="iteminput InputRightMargin" type="number" placeholder="请输入金额" v-model="item.reiCount" @change='dataChange'/>
<view class="itemunit">元</view>
</view>
</view>
<view class="item " @click="onShowDatePicker(index)">
<view class="itemname redMi">日期</view>
<view class="itemtext">
<view >
<input class="iteminput InputRightMargin" disabled placeholder="请选择日期" :value='item.reiDate'/>
<img src="../../static/img/dateIcon.png" class="dateIcon" />
</view>
</view>
</view>
<view class="item">
<view class="itemname redMi">报销类别</view>
<view class="itemtext">
<input class="iteminput InputRightMargin" disabled placeholder="请选择报销类别" @click="showSinglePicker(index)" :value="item.typeName"/>
<uni-icons type="arrowright" class="myarrowright" style="right: 0px;"></uni-icons>
</view>
</view>
<view class="item item_line">
<view class="itemname">报销摘要</view>
<view class="itemtext">
<input class="iteminput" placeholder="请输入报销摘要" v-model="item.reiItemDescription" @input='dataChange'/>
</view>
</view>
</view>
<view class="fixMargin"></view>
<view class="fixBottom">
<view class="uni-flex uni-row">
<view style="-webkit-flex:1;flex: 1;">
<button type="primary" plain="true" style="width: 90%; background: #fff;" @click="addReim">新增报销明细</button>
</view>
<view style="-webkit-flex:1;flex: 1;">
<button type="primary" style="width: 90%;" @click="next">下一步</button>
</view>
</view>
</view>
<mx-datepicker type="date" :value="value_time" :show="showPicker" @confirm="onSelected" @cancel="onSelected"></mx-datepicker>
<mpvue-picker themeColor="#007AFF" ref="mpvuePicker" mode="selector" :deepLength="deepLength"
@onConfirm="pickerConfirm" :pickerValueArray="reim_type"></mpvue-picker>
<view class="goHome" @click='goMain("reimInfo")'>
<img src="../../static/img/gohome.png">
</view>
</view>
</template>
<script>
import {
config
} from '../../request/js/config.js'
import mpvuePicker from '@/components/mpvue-picker/mpvuePicker.vue';
import mxDatepicker from '@/components/mx-datepicker/mx-datepicker.vue'
import uniIcons from "@/components/uni-icons/uni-icons.vue"
export default {
components: {
mxDatepicker, mpvuePicker,
uniIcons
},
data() {
return {
config:config,
showPicker: false,
csr:[],
imgsrc_list_local:[],
imgsrc_list:[],
deepLength:1,
itemList:[{
"reiCount":"",
"reiDate":"",
"type":"",
"typeName":'',
"reiItemDescription":""}
],
value_time:'',
id:'',
reim_type:[],
dateIndex:0,
pickerIndex:0,
deletDetailIds:[]
}
},
onLoad(option) {
var _this = this;
this.id = option.id||'';
//如果是编辑,就根据接口获取数据,
if(option.id){
this.$http.request({
url: '/apis/reimApply/detail',
method:'GET',
params: {
id:option.id,
},
}).then(res => {
if (res.data.code == 0) {
var reimInfos = res.data.reimApplyDO;
res.data.approveList.forEach((vals,index)=>{
var json = {
user_id:vals.user_id,
name:vals.name
}
this.csr.push(json);
});
for(var i=0;i<res.data.initFileList.length;i++){
this.imgsrc_list.push(res.data.initFileList[i].filePath);
this.imgsrc_list_local.push(config.imgURL+res.data.initFileList[i].filePath);
}
var items = res.data.itemList;
_this.itemList = [];
for(var i=0;i<items.length;i++){
var json = {
"reiCount":items[i].rei_count,
"reiDate":items[i].rei_date,
"type":items[i].type,
"typeName":items[i].typeName,
"reiItemDescription":items[i].rei_item_description,
"id":items[i].id
}
_this.itemList.push(json);
}
uni.setStorage({
key: 'reimInfo',
data: {
info:this.itemList,
imgsrc_list:this.imgsrc_list,
imgsrc_list_local:this.imgsrc_list_local,
targetList:this.csr,
id:_this.id,
process_instance_id:reimInfos.process_instance_id,
approveState:reimInfos.approveState,
deletDetailIds:_this.deletDetailIds
},
success: function () {
}
});
}
}).catch(err => {
uni.showToast({
title: '获取信息失败',
icon: 'none',
duration: 2000
});
});
}else{
//如果不是是新增获取session中的数据。
uni.getStorage({
key: 'reimInfo',
success: function (res) {
_this.itemList = res.data.info||[],
_this.csr = res.data.targetList||[];
_this.imgsrc_list = res.data.imgsrc_list||[];
_this.imgsrc_list_local = res.data.imgsrc_list_local||[];
}
});
}
//初始化获取 报销类别
this.$http.request({
url: '/apis/dict/getDictsByType',
params: {
type: 'reim_apply_type'
},
}).then(res=>{
if(res.statusCode == '200'){
var useType = res.data.datas;
for (let i = 0; i < useType.length; i++) {
var myVal=
{
'label': useType[i].name,
'value': useType[i].id
}
_this.reim_type.push(myVal);
}
}
}).catch(err=>{
console.log(err);
});
},
methods: {
addReim(){
var myjson = {
"reiCount":"",
"reiDate":"",
"type":"",
'typeName':'',
"reiItemDescription":""
};
this.itemList.push(myjson);
},
next(){
//在跳转到下一个界面之前,需要判断当前报销内容是否都填写完整。
if(this.itemList.length >0){
var items = this.itemList;
for(var i=0; i<items.length; i++){
if(!items[i].reiCount || !items[i].reiDate || !items[i].type){
uni.showToast({
title: '请填写完整该条报销明细',
duration: 2000,
icon:"none",
});
return false;
}
}
}else{
uni.showToast({
title: '请至少新增一条报销明细',
duration: 2000,
icon:"none"
});
return false;
}
uni.navigateTo({
url: "addReimApplyStep"
});
},
deleteItem(index){
//删除报销的同时需要保存当前删除的id
var thisItem = this.itemList[index];
if(thisItem && thisItem.id){
//如果当前存在id就删除如果不存在代表是新增的就不需要保存
this.deletDetailIds.push(thisItem.id);
}
//删除 报销
this.itemList.splice(index,1);
//保存当前修改信息 保存删除信息
var reimInfo = uni.getStorageSync('reimInfo');
if(!reimInfo){
reimInfo = {}
}
reimInfo.info = this.itemList;
reimInfo.deletDetailIds = this.deletDetailIds;
uni.setStorage({
key: 'reimInfo',
data: reimInfo,
success: function () {
}
});
},
pickerConfirm(e){
var n = this.pickerIndex;
this.itemList[n].typeName = e.label;
this.itemList[n].type = e.value[0]; //我也不知道为什么这边是数组可能改picker框架支持多选
var reimInfo = uni.getStorageSync('reimInfo');
if(!reimInfo){
reimInfo = {}
}
reimInfo.info = this.itemList;
uni.setStorage({
key: 'reimInfo',
data: reimInfo,
success: function () {
}
});
},
showSinglePicker(index) {
this.pickerIndex = index;
this.pickerValueDefault = [0]
this.$refs.mpvuePicker.show()
},
onShowDatePicker(n) { //显示
this.dateIndex = n;
this.value_time=this.itemList[n].reiDate;
this.showPicker = true;
},
onSelected(e) { //选择
this.showPicker = false;
var _this = this;
if (e) {
this.itemList[_this.dateIndex].reiDate= e.value
//保存当前修改信息
var reimInfo = uni.getStorageSync('reimInfo');
if(!reimInfo){
reimInfo = {}
}
reimInfo.info = this.itemList;
uni.setStorage({
key: 'reimInfo',
data: reimInfo,
success: function () {
}
});
}
},
dataChange(){
//保存当前修改信息
var reimInfo = uni.getStorageSync('reimInfo');
if(!reimInfo){
reimInfo = {}
}
reimInfo.info = this.itemList;
uni.setStorage({
key: 'reimInfo',
data: reimInfo,
success: function () {
}
});
},
//点击暂存和确认提交 需要进行的操作
goAddRepair(flag){
if(flag == 'tj'){
//提交进行的操作
var url = '/apis/payApply/saveSbmitChange'
}else if(flag == 'zc'){
//暂存进行的操作
var url = '/apis/payApply/addAndSaveChange'
}
var _this = this;
}
},
onBackPress(options) { //取消默认的返回事件.用来返回上一页时重新加载页面删除本地缓存的巡检操作
uni.removeStorageSync('reimInfo');
uni.navigateTo({
url: 'reimApply'
});
return true;
},
}
</script>
<style scoped>
.step_num {
display: flex;
flex-direction: row;
justify-content: center;
width: 100%;
height: 80upx;
background-color: #fff;
padding-right: 48upx;
box-sizing: border-box;
}
.step {
position: relative;
font-size: 28upx;
line-height: 80upx;
padding-left: 30upx;
float: left;
}
.step:before {
position: absolute;
left: 0px;
content: '1';
border: 1px solid #000;
width: 28upx;
height: 28upx;
box-sizing: border-box;
line-height: 28upx;
border-radius: 200upx;
font-size: 20upx;
text-align: center;
top: 26upx;
}
.step:after {
position: absolute;
content: '';
width: 60upx;
height: 2upx;
background-color: #000;
top: 40upx;
left: 200upx;
}
.step2 {
margin-left: 64upx;
color: #828282;
}
.step2:before {
content: '2';
border: 2upx solid #828282;
}
.step2:after{
background-color: transparent;
}
.itemunit{
position: absolute;
right: 0;
top: 0;
height: 92upx;
line-height: 92upx;
color: #999;
font-size: 26upx;
}
</style>