<template>
	<uv-navbar
	  :fixed="false"
	  :title="title"
	  left-arrow
	  @leftClick="$onClickLeft"
	/>
	<view style="overflow:hidden">
		<view class="set-box bg-white">
			<uv-alert  type="warning" v-if="form.checkStatus == 1" description="发票正在审核中,不可以修改!"></uv-alert>
			<uv-alert  type="warning" v-else-if="form.checkStatus == 2" description="发票已经审核通过,不可以修改,可以开具!"></uv-alert>
			<uv-form :model="form" ref="uForm" :errorType="errorType" labelPosition="top" labelWidth="130" :rules="rules">
				<uv-form-item  label="选择合同:" @click="type != 'check' ? selectShow() : ''"  required prop="contractName" v-if="form.checkStatus != 2">
					<uv-input disabledColor="#ffffff" disabled v-model="form.contractName" placeholder="选择合同" >
						<template v-slot:suffix>
							<uv-icon name="arrow-right"></uv-icon>
						</template>
					</uv-input>
				</uv-form-item>
				<uv-form-item label="开票主体:" required prop="invoiceBody" v-if="form.checkStatus != 2">
					<uv-input  v-model="form.invoiceBody" :disabled="isCheck" placeholder="开票主体"   />
				</uv-form-item>
				<uv-form-item label="发票抬头:" prop="invoiceName" required v-if="form.checkStatus != 2">
					<uv-input  v-model="form.invoiceName" :disabled="isCheck" placeholder="发票抬头"   />
				</uv-form-item>
				<uv-form-item  label="抬头类型:"  v-if="form.checkStatus != 2">
					<uv-radio-group v-model="form.invoiceIssue" required>
						<uv-radio v-for="(item, index) in sexList"  :key="index"  :name="item.name">
							{{ item.text }}
						</uv-radio>
					</uv-radio-group>
				</uv-form-item>
				<uv-form-item  label="发票类型:"  v-if="form.checkStatus != 2">
					<uv-radio-group v-model="form.invoiceType" required>
						<uv-radio v-for="(item, index) in typeList"  :key="index" :name="item.name">
							{{ item.text }}
						</uv-radio>
					</uv-radio-group>
				</uv-form-item>
				<uv-form-item label="统一社会信用代码:"  v-if="form.checkStatus != 2" >
					<uv-input  v-model="form.registerNo" :disabled="isCheck" placeholder="统一社会信用代码"   />
				</uv-form-item>
				<uv-form-item label="开户行名称:"   v-if="form.checkStatus != 2">
					<uv-input  v-model="form.bankName" :disabled="isCheck" placeholder="开户行名称"   />
				</uv-form-item>
				<uv-form-item label="开户账户:"  v-if="form.checkStatus != 2">
					<uv-input  v-model="form.bankNo" :disabled="isCheck" placeholder="开户账户"  />
				</uv-form-item>
				<uv-form-item label="开票金额:" prop="money" required >
					<uv-input type="number" v-model="form.money" :disabled="isCheck" placeholder="开票金额"   />
				</uv-form-item>
				<uv-form-item label="开票税率(%):"   >
					<uv-input type="number" v-model="form.taxRate" :disabled="isCheck" placeholder="开票税率"   />
				</uv-form-item>
				<uv-form-item label="开票内容:" >
					<uv-input  v-model="form.content" :disabled="isCheck" placeholder="开票内容"    />
				</uv-form-item>
				<uv-form-item label="接收邮箱:"  >
					<uv-input  v-model="form.email" :disabled="isCheck" placeholder="开票时会把发票附件发送到邮箱"    />
				</uv-form-item>
				<uv-form-item label="收件人:"  >
					<uv-input  v-model="form.userName" :disabled="isCheck"  placeholder="如果需要邮寄请填写"   />
				</uv-form-item>
				<uv-form-item label="手机:">
					<uv-input  v-model="form.userPhone" :disabled="isCheck"  placeholder="如果需要邮寄请填写"   />
				</uv-form-item>
				<uv-form-item label="邮寄地址:" >
					<uv-input  v-model="form.userAddress" :disabled="isCheck"   placeholder="如果需要邮寄请填写"  />
				</uv-form-item>
				<uv-form-item  label="审批人:"  v-if="form.checkStatus != 2" >
					<uv-input disabledColor="#ffffff" disabled v-model="form.flowAdminIdName" placeholder="请去审批流程里配置合同审批" />
				</uv-form-item>
				<uv-form-item label="发票附件:"  v-if="form.checkStatus == 2" >
				<!-- 	<uv-upload
						:fileList="fileList1"
						name="1"
						:maxCount="1"
						@afterRead="afterRead" 
						@delete="deletePic" 
					></uv-upload> -->
					<upload-file v-model="fileList" />
				</uv-form-item>
				<uv-form-item label="备注:" >
					<uv-textarea v-model="form.remarks" :disabled="isCheck" placeholder="请输入备注"></uv-textarea>
				</uv-form-item>
			</uv-form>
			<view class="mt-4" style="text-align: center;" v-if="!isCheck">
				<uv-button  color="#09b4f1"  @click="submit" v-if="form.checkStatus == 0 || form.checkStatus == 3"  :ripple="true">确定提交</uv-button>
				<uv-button  color="#09b4f1"  @click="submit2" v-if="form.checkStatus == 2" :ripple="true">开具发票</uv-button>
			</view>
			<view class="mt-4 flex justify-end" style="text-align: center;" v-else>
				<view style="width: 25%;margin-right: 10rpx;">
					<uv-button  color="#09b4f1"  @click="submitCheck(1)" >审核</uv-button>
				</view>
				<view style="width: 25%;">
					<uv-button  type="error"  @click="selectShow5()" >拒绝</uv-button>
				</view>
			</view>
		</view>
		<uv-popup  mode="bottom" round="38"  ref="selectShowRef5" >
			<view class="popup-content">
				<view class="popup-title">
					<view class=""  style="width: 45px;">
					</view>
					<text class="">输入驳回理由</text> 
					<view class="" @click="selectShowClose5" style="width: 45px;">
						<uv-icon name="close"  color="#909399" size="30"></uv-icon>
					</view>
				</view>
				<view style="height: 500rpx;padding: 20rpx;">
					<uv-textarea v-model="form2.remark"  placeholder="输入驳回理由"></uv-textarea>
				</view>
				<view style="padding: 20rpx;">
					<uv-button  color="#09b4f1"  @click="submitCheck(2)" >确定</uv-button>
				</view>
		
			</view>
		</uv-popup>
		<!-- 选择客户弹窗 -->
		<uv-popup  mode="bottom" round="38"  ref="selectShowRef" >
			<view class="popup-content">
				<view class="popup-title">
					<view class=""  style="width: 45px;">
					</view>
					<text class="">选择合同</text> 
					<view class="" @click="selectShowClose" style="width: 45px;">
						<uv-icon name="close"  color="#909399" size="30"></uv-icon>
					</view>
				</view>
				<uv-search margin="30rpx 20rpx" shape="square" v-model="keyword" :show-action="false" :clearabled="true"  placeholder="输入客户名称搜索" @change="onSearch"></uv-search>
				<scroll-view scroll-y style="height: 760rpx;width: 100%;" @scrolltolower="reachBottom">
					<view class="list">
						<block v-if="customerList.length > 0">
							<view class="mb-4">
								<view class="item flex" v-for="(item,index) in customerList" :key="index" @click="onItem(item,index)">
									<view class="title">{{item.name}}</view>
									<view class="check-icon">
										<uv-icon v-if="item.checked" name="checkmark" color="#09b4f1" size="28"></uv-icon>
									</view>
								</view>
							</view>
							<uv-load-more :status="listStatus" ></uv-load-more>
						</block>
						<uv-empty text="暂无数据" v-else  mode="list"></uv-empty>
					</view>
				</scroll-view>
			</view>
		</uv-popup>
		<uv-datetime-picker ref="datetimePicker" v-model="timeValue" mode="datetime" @confirm="createTimeChange"></uv-datetime-picker>
	</view>
</template>

<script setup>
import {
  ref,
  unref,
  computed
} from 'vue'
import { onLoad,onShow } from '@dcloudio/uni-app'
import {
  getContractPage
} from '@/api/contract'
import {
  invoiceCreate,
  getInvoice,
  invoiceUpdate,
  check,
  invoiceIssue
} from '@/api/invoice'
import {
  getSimpleUserList,
  getFlowUsers,
  getSimpleUserList2
} from '@/api/user'
import AddressSelect from '@/components/AddressSelect/index.vue'
import { formatDateTime,prePage } from '@/utils/util'
const title = ref('申请发票')
const labelPosition = ref('left')
const keyword = ref('')
const listStatus =ref('loadmore')
const listStatus3 =ref('loadmore')
const customerList = ref([])
const accountName  = ref('')
const page = ref(1)
const page3 = ref(1)
const pageSize = ref(10)
const lastPage = ref(false)
const lastPage3 = ref(false)
const selectList = ref([])
const businessData = ref({})
const type = ref('add')
const contractId = ref(0)
const customerId = ref(0)
const nextTime = ref('')
const returnTime  = ref(formatDateTime(new Date()))
const content = ref('')
const customerName = ref('')
const form = ref({
	invoiceIssue:1,
	invoiceType: 1,
	contractName: '',
	invoiceBody: '',
	invoiceName: '',
	money: '',
})
const timeText = ref('')
const errorType = ref('message')
const rules = ref({
	contractName: [
		{
			required: true,
			message: '请选择合同',
			trigger: ['change','blur']
		},
	],
	invoiceBody: [
		{
			required: true,
			message: '请填写开票主体',
			trigger: ['change','blur']
		},
	],
	invoiceName: [
		{
			required: true,
			message: '请填写发票抬头',
			trigger: ['change','blur']
		},
	],
	money: [
		{
			required: true,
			message: '请填写发票金额',
			trigger: ['change','blur']
		},
	],
})
const customerContacts = ref([])
const userList = ref([])
const username = ref('')
const keyword3 = ref('')
const businessList = ref([])
const isCheck = ref(false)
const form2 = ref({
	id: 0,
	agreeType: 1,
	remark: ''
})
const sexList = ref([
	{
		name: 1,
		text: '企业',
	},
	{
		name: 2,
		text: '个人',
	},
	{
		name: 3,
		text: '事业单位',
	},
])
const typeList = ref([
	{
		name: 1,
		text: '增值税普票',
	},
	{
		name: 2,
		text: '增值税专票',
	},
])
const fileList = ref([])

onLoad((e) => {
	if(e.type){
		type.value = e.type
	}
	if(type.value == 'check'){
		isCheck.value = true
		title.value = '审核发票'
		contractId.value = e.id
		getContractInfo()
	}
	if(type.value == "edit") {
		title.value = '编辑发票'
		contractId.value = e.id
		getContractInfo()
	}
	getCustomerList()
	getFlowUsersList()
})

onShow(()=>{

})

const getFlowUsersList = async() => {
	let data = await getFlowUsers({flowType: 'invoice'})
	let users = await getSimpleUserList2()
	let userIdArr = []
	let userArr = []
	for(var i = 0;i <= data.length;i++){
		users.forEach((item,index) => {
			if(data[i] == item.id){
				userIdArr.push(item.id)
				userArr.push(item.nickname)
			}
		})
	}
	
	form.value.flowAdminIdName = userArr.join(',')
	form.value.flowAdminId = userIdArr

	
}

const getNumber = async() => {
	form.value.number = await getCode()
}

const selectShowRef = ref()
const selectShow = () => {
	unref(selectShowRef).open()
}
const selectShowClose = () => {
	unref(selectShowRef).close()
}



// 获取商机数据详情
const getContractInfo = async() => {
	form.value = await getInvoice({id:contractId.value})
	form.value.flowAdminId = form.value.flowAdminId2
}
// 搜索
const onSearch = () => {
	page.value = 1
	lastPage.value = false
	getCustomerList()
}


const getCustomerList = async(isNextPage,pages) => {
	await getContractPage({
		pageNo: page.value,
		pageSize: pageSize.value,
		relation: 'my',
		name:keyword.value,
	}).then(res => {
		if(res) {
			// 不够一页
			if (res.list.length < 10) {
				listStatus.value = 'nomore'
			}
			// 最后一页
			if(res.list.length == 0) {
				lastPage.value = true
			} 
			// 第二页开始
			if(isNextPage) {
				customerList.value = customerList.value.concat(res.list)
				return 
			}
			customerList.value = res.list
			
			if(form.value.customerId) {
				customerList.value.forEach((item,index) => {
					if(form.value.customerId == item.id) {
						item.checked = true
						customerName.value = item.name
					} else {
						item.checked = false
					}
				})
			}
		}
	})
}


// 滚动到底部加载更多
const reachBottom = () => {
	if(lastPage.value || listStatus.value == 'loading') return 
	listStatus .value= 'loading'
	setTimeout(() => {
		getCustomerList(true,++page.value)
		if(customerList.value.length >= 10) {
			listStatus.value = 'loadmore';
		}else{
			listStatus.values = 'loading';
		} 
	}, 1200)
}


// 选择客户
const onItem = async(val,i) => {
	customerList.value.forEach((item,index) => {
		if(val.id == item.id) {
			item.checked = true
			val.name=val.name?val.name:item.name;
		} else {
			item.checked = false
		}
	})
	form.value.contractId = val.id
	form.value.invoiceBody = val.customerName
	form.value.invoiceName = val.customerName
	//customerId.value = val.id
	form.value.contractName = val.name ? val.name : ''
	selectShowClose()
}



const selectShowRef5 = ref()
const selectShow5 = async() => {
	unref(selectShowRef5).open()
}
const selectShowClose5 = () => {
	unref(selectShowRef5).close()
}



const submitCheck = async(type) => {
	if(type == 2 && form2.value.remark == ''){
		uni.showToast({
			icon: 'error',
			title: '请填写驳回理由'
		})
		
		return
	}
	form2.value.id = contractId.value
	form2.value.type
	await check(form2.value)
	
	uni.showToast({
		title: '审核成功',
		icon: 'success',
		duration: 2000
	})
	prePage().$vm.isRefresh = true
	setTimeout(() => {
		uni.navigateBack();
	}, 1000);
}

const submit2 = async() => {
	console.log('fileList:',fileList.value)
	if(fileList.value.length == 0){
		uni.showToast({
			icon: 'error',
			title: '请上传发票附件'
		})
		
		return
	}
	let fileArr = []
	fileList.value.forEach((item,index) => {
		fileArr.push(item.url)
	})
	const files = fileArr.join(",")
	form.value.files = files
	await invoiceIssue(form.value)
	uni.showToast({
		title: '开具成功',
		icon: 'success',
		duration: 2000
	})
	prePage().$vm.isRefresh = true
	setTimeout(() => {
		uni.navigateBack();
	}, 1000);
	
}

// 提交跟进
const uForm = ref()
const submit = () => {
	if(form.value.contractName == ''){
		uni.showToast({
			icon: 'error',
			title: '请选择合同'
		})
		
		return
	}
	
	uForm.value.validate().then(res => {
		onSubmit()
	}).catch(errors => {
		uni.showToast({
			icon: 'error',
			title: '校验失败'
		})
	})


}


// 修确认提交
const onSubmit = async() => {
	if(type.value == 'add'){
		await invoiceCreate(form.value)
		
		uni.showToast({
			title: '申请成功',
			icon: 'success',
			duration: 2000
		})
		prePage().$vm.isRefresh = true
		setTimeout(() => {
			uni.navigateBack();
		}, 1000);
	}else{
		await invoiceUpdate(form.value)
		uni.showToast({
			title: '修改成功',
			icon: 'success',
			duration: 2000
		})
		prePage().$vm.isRefresh = true
		setTimeout(() => {
			uni.navigateBack();
		}, 1000);
	}
	
}
	
	
</script>

<style lang="scss" scoped>
.set-box {
  padding: 0rpx 22rpx;
  margin-bottom: 80rpx;
  .list {
		margin: 40rpx 15rpx 60rpx;
    .item {
			position: relative;
			border-radius: 15rpx;
			box-shadow: 1px 0px 5px rgba(50, 50, 50, 0.3);
			padding: 25rpx 35rpx;
			margin-bottom: 45rpx;
			.number {
				margin-bottom: 20rpx;
			}
			.content {
				margin-bottom: 20rpx;
				.price {
					width: 245rpx;
					font-size: 28rpx;
					color: #fa3534;
				}
			}
			.brief {
				margin: 10rpx 0;
				font-size: 28rpx;
				color: $uv-tips-color;
			}
			.close {
				position: absolute;
				right: -8px;
				top: -30rpx;
				background-color: #fff;
				border-radius: 50%;
				height: 60rpx;
				width: 60rpx;
				display: flex;
				align-items: center;
				justify-content: center;
				box-shadow: 1px 0px 5px rgba(50, 50, 50, 0.3);
			}
    }

  }
 }
 .popup-content {
	.popup-title {
		display: flex;
		align-items: center;
		justify-content: space-between;
		position: relative;
		font-size: 35rpx;
		font-weight: 600;
		text-align: center;
		height: 50px;
		padding-right: 25rpx;
	}
	.list {
		margin-bottom: 45rpx;
		.item {
			padding: 0 25rpx;
			justify-content: space-between;
			height: 45px;
			.title {
				flex: 1;
				font-size: 28rpx;
				font-weight: 600;
			}
			.check-icon {
				text-align: center;
				width: 100rpx;
			}
		}
	}
	.bottom_btn {
		display: flex;
		justify-content: flex-end;
		padding: 28rpx 10rpx 45rpx;
	}
}
</style>
