yxk_h5_master/pages/reimApply/addReimApply.vue

408 lines
11 KiB
Vue
Raw Normal View History

2025-08-28 15:21:09 +08:00
<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>