开票接口对接
This commit is contained in:
parent
26e6d5b611
commit
07169ff815
@ -1,18 +1,13 @@
|
|||||||
<template>
|
<template>
|
||||||
<uv-navbar
|
<uv-navbar :fixed="false" :title="title" left-arrow @leftClick="$onClickLeft" />
|
||||||
:fixed="false"
|
<view>
|
||||||
:title="title"
|
|
||||||
left-arrow
|
|
||||||
@leftClick="$onClickLeft"
|
|
||||||
/>
|
|
||||||
<view >
|
|
||||||
<view class="set-box bg-white pb-5">
|
<view class="set-box bg-white pb-5">
|
||||||
<uv-form :model="form" ref="uForm" :rules="rules" :errorType="errorType" labelWidth="80">
|
<uv-form :model="form" ref="uForm" :rules="rules" :errorType="errorType" labelWidth="80">
|
||||||
<uv-form-item label="跟进线索:" prop="name">
|
<uv-form-item label="跟进线索:" prop="name">
|
||||||
<uv-input v-model="cluesName" border="none" disabled disabledColor="#ffffff" />
|
<uv-input v-model="cluesName" border="none" disabled disabledColor="#ffffff" />
|
||||||
</uv-form-item>
|
</uv-form-item>
|
||||||
<uv-form-item label="跟进状态:" prop="followStatus" @click="followShow" required>
|
<uv-form-item label="跟进状态:" prop="followStatus" @click="followShow" required>
|
||||||
<uv-input v-model="followName" placeholder="选择跟进状态" disabled disabledColor="#ffffff" >
|
<uv-input v-model="followName" placeholder="选择跟进状态" disabled disabledColor="#ffffff">
|
||||||
<template v-slot:suffix>
|
<template v-slot:suffix>
|
||||||
<uv-icon name="arrow-right"></uv-icon>
|
<uv-icon name="arrow-right"></uv-icon>
|
||||||
</template>
|
</template>
|
||||||
@ -25,12 +20,8 @@
|
|||||||
</template>
|
</template>
|
||||||
</uv-input>
|
</uv-input>
|
||||||
</uv-form-item>
|
</uv-form-item>
|
||||||
<uv-form-item :label-position="labelPosition" label="下次跟进 :" @click="createTimeShow">
|
<uv-form-item :label-position="labelPosition" label="下次跟进 :">
|
||||||
<uv-input v-model="nextTime" placeholder="选择跟进时间" disabled disabledColor="#ffffff" >
|
<uni-datetime-picker type="datetime" v-model="form.nextTime" />
|
||||||
<template v-slot:suffix>
|
|
||||||
<uv-icon name="arrow-right"></uv-icon>
|
|
||||||
</template>
|
|
||||||
</uv-input>
|
|
||||||
</uv-form-item>
|
</uv-form-item>
|
||||||
<uv-form-item required label="跟进内容:" prop="content">
|
<uv-form-item required label="跟进内容:" prop="content">
|
||||||
<uv-textarea v-model="form.content" placeholder="请输入跟进内容"></uv-textarea>
|
<uv-textarea v-model="form.content" placeholder="请输入跟进内容"></uv-textarea>
|
||||||
@ -38,121 +29,131 @@
|
|||||||
</uv-form>
|
</uv-form>
|
||||||
<view class="mt-5" style="text-align: center;">
|
<view class="mt-5" style="text-align: center;">
|
||||||
<view class="mb-3">
|
<view class="mb-3">
|
||||||
<uv-button @click="submit(false)" :ripple="true" color="#09b4f1" >立即提交</uv-button>
|
<uv-button @click="submit(false)" :ripple="true" color="#09b4f1">立即提交</uv-button>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<!-- 选择跟进方式 -->
|
<!-- 选择跟进方式 -->
|
||||||
<uv-action-sheet :actions="selectList" ref="selectShowRef" title="请选择跟进方式" @select="recordTypeClick"></uv-action-sheet>
|
<uv-action-sheet :actions="selectList" ref="selectShowRef" title="请选择跟进方式"
|
||||||
|
@select="recordTypeClick"></uv-action-sheet>
|
||||||
<!-- 选择跟进状态 -->
|
<!-- 选择跟进状态 -->
|
||||||
<uv-action-sheet :actions="followList" ref="followStatusShowRef" title="请选择跟进状态" @select="followClick"></uv-action-sheet>
|
<uv-action-sheet :actions="followList" ref="followStatusShowRef" title="请选择跟进状态"
|
||||||
<uv-datetime-picker ref="datetimePicker" v-model="timeValue" mode="datetime" @confirm="createTimeChange"></uv-datetime-picker>
|
@select="followClick"></uv-action-sheet>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import {
|
import {
|
||||||
ref,
|
ref,
|
||||||
unref,
|
unref,
|
||||||
computed
|
computed
|
||||||
} from 'vue'
|
} from 'vue'
|
||||||
import { onLoad,onShow ,onReady} from '@dcloudio/uni-app'
|
import {
|
||||||
import {
|
onLoad,
|
||||||
|
onShow,
|
||||||
|
onReady
|
||||||
|
} from '@dcloudio/uni-app'
|
||||||
|
import {
|
||||||
getDictData,
|
getDictData,
|
||||||
createRecord
|
createRecord
|
||||||
} from '@/api/customer'
|
} from '@/api/customer'
|
||||||
import { formatDateTime } from '@/utils/util'
|
import {
|
||||||
const title = ref('添加线索跟进')
|
formatDateTime
|
||||||
const selectList = ref([])
|
} from '@/utils/util'
|
||||||
const followList = ref([])
|
const title = ref('添加线索跟进')
|
||||||
const followName = ref('')
|
const selectList = ref([])
|
||||||
const lists = ref([])
|
const followList = ref([])
|
||||||
const content = ref('')
|
const followName = ref('')
|
||||||
const recordTypeName = ref('')
|
const lists = ref([])
|
||||||
const form = ref({
|
const content = ref('')
|
||||||
|
const recordTypeName = ref('')
|
||||||
|
const form = ref({
|
||||||
name: '',
|
name: '',
|
||||||
nexxTime: '',
|
nextTime: '',
|
||||||
recordType: '',
|
recordType: '',
|
||||||
followStatus: '',
|
followStatus: '',
|
||||||
content: '',
|
content: '',
|
||||||
types: 'clues',
|
types: 'clues',
|
||||||
})
|
})
|
||||||
const cluesId = ref(0)
|
const cluesId = ref(0)
|
||||||
const cluesName = ref('')
|
const cluesName = ref('')
|
||||||
const errorType = ref('message')
|
const errorType = ref('message')
|
||||||
const nextTime = ref('')
|
const rules = ref({
|
||||||
const rules = ref({
|
followStatus: [{
|
||||||
followStatus: [
|
|
||||||
{
|
|
||||||
required: true,
|
required: true,
|
||||||
message: '请选择跟进状态',
|
message: '请选择跟进状态',
|
||||||
trigger: ['change','blur']
|
trigger: ['change', 'blur']
|
||||||
},
|
}, ],
|
||||||
],
|
recordType: [{
|
||||||
recordType: [
|
|
||||||
{
|
|
||||||
required: true,
|
required: true,
|
||||||
message: '请选择跟进方式',
|
message: '请选择跟进方式',
|
||||||
trigger: ['change','blur']
|
trigger: ['change', 'blur']
|
||||||
},
|
}, ],
|
||||||
],
|
content: [{
|
||||||
content: [
|
|
||||||
{
|
|
||||||
required: true,
|
required: true,
|
||||||
message: '请填写跟进内容',
|
message: '请填写跟进内容',
|
||||||
trigger: ['change','blur']
|
trigger: ['change', 'blur']
|
||||||
},
|
}, ],
|
||||||
],
|
})
|
||||||
})
|
|
||||||
|
|
||||||
onLoad((e) => {
|
onLoad((e) => {
|
||||||
cluesId.value = e.cluesId
|
cluesId.value = e.cluesId
|
||||||
cluesName.value = e.cluesName
|
cluesName.value = e.cluesName
|
||||||
|
|
||||||
getBaseConfig()
|
getBaseConfig()
|
||||||
})
|
})
|
||||||
|
|
||||||
const followStatusShowRef = ref()
|
const getNowTime = () => {
|
||||||
const followShow = () => {
|
// 创建一个Date对象,表示当前日期和时间
|
||||||
|
let currentDate = new Date();
|
||||||
|
let year = currentDate.getFullYear();
|
||||||
|
let month = currentDate.getMonth() + 1;
|
||||||
|
let day = currentDate.getDate();
|
||||||
|
let hours = currentDate.getHours();
|
||||||
|
let minutes = currentDate.getMinutes();
|
||||||
|
let seconds = currentDate.getSeconds();
|
||||||
|
return year + '-' + month + '-' + day + '-' + hours + '-' + minutes + '-' + seconds
|
||||||
|
}
|
||||||
|
|
||||||
|
const followStatusShowRef = ref()
|
||||||
|
const followShow = () => {
|
||||||
followStatusShowRef.value.open()
|
followStatusShowRef.value.open()
|
||||||
}
|
}
|
||||||
|
|
||||||
const selectShowRef = ref()
|
const selectShowRef = ref()
|
||||||
const selectShow = () => {
|
const selectShow = () => {
|
||||||
selectShowRef.value.open()
|
selectShowRef.value.open()
|
||||||
}
|
}
|
||||||
|
|
||||||
const datetimePicker = ref()
|
const datetimePicker = ref()
|
||||||
const createTimeShow = () => {
|
const createTimeShow = () => {
|
||||||
unref(datetimePicker).open()
|
unref(datetimePicker).open()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 获取配置字段
|
// 获取配置字段
|
||||||
const getBaseConfig = async() => {
|
const getBaseConfig = async () => {
|
||||||
followList.value = await getDictData({type:'follow_status'})
|
followList.value = await getDictData({
|
||||||
selectList.value = await getDictData({type:'follow_type'})
|
type: 'follow_status'
|
||||||
}
|
})
|
||||||
|
selectList.value = await getDictData({
|
||||||
|
type: 'follow_type'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// 选择跟进方式
|
// 选择跟进方式
|
||||||
const recordTypeClick = (index) => {
|
const recordTypeClick = (index) => {
|
||||||
recordTypeName.value = index.name
|
recordTypeName.value = index.name
|
||||||
form.value.recordType = index.value
|
form.value.recordType = index.value
|
||||||
}
|
}
|
||||||
// 选择跟进状态
|
// 选择跟进状态
|
||||||
const followClick = (index) => {
|
const followClick = (index) => {
|
||||||
followName.value = index.name
|
followName.value = index.name
|
||||||
form.value.followStatus = index.value
|
form.value.followStatus = index.value
|
||||||
}
|
}
|
||||||
const createTimeChange = (e) => {
|
|
||||||
form.value.nextTime = e.value
|
|
||||||
nextTime.value = formatDateTime(e.value)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// 提交跟进
|
||||||
// 提交跟进
|
const uForm = ref()
|
||||||
const uForm = ref()
|
const submit = (val) => {
|
||||||
const submit = (val) => {
|
|
||||||
uForm.value.validate().then(res => {
|
uForm.value.validate().then(res => {
|
||||||
onSubmit()
|
onSubmit()
|
||||||
}).catch(errors => {
|
}).catch(errors => {
|
||||||
@ -161,22 +162,22 @@ const submit = (val) => {
|
|||||||
title: '校验失败'
|
title: '校验失败'
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
// 开始提交跟进
|
// 开始提交跟进
|
||||||
const onSubmit = async() => {
|
const onSubmit = async () => {
|
||||||
form.value.typesId = cluesId.value
|
form.value.typesId = cluesId.value
|
||||||
form.value.content = '【'+followName.value+'】' + form.value.content
|
form.value.content = '【' + followName.value + '】' + form.value.content
|
||||||
await createRecord(form.value)
|
await createRecord(form.value)
|
||||||
|
|
||||||
uni.navigateBack()
|
uni.navigateBack()
|
||||||
}
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.set-box {
|
.set-box {
|
||||||
padding: 0rpx 22rpx;
|
padding: 0rpx 22rpx;
|
||||||
margin-bottom: 80rpx;
|
margin-bottom: 80rpx;
|
||||||
|
|
||||||
.option {
|
.option {
|
||||||
.text {
|
.text {
|
||||||
color: #747474;
|
color: #747474;
|
||||||
@ -184,11 +185,11 @@ const onSubmit = async() => {
|
|||||||
text-align: justify;
|
text-align: justify;
|
||||||
padding-bottom: 15rpx;
|
padding-bottom: 15rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.input-box {
|
.input-box {
|
||||||
width: 200rpx;
|
width: 200rpx;
|
||||||
margin-right: 15rpx;
|
margin-right: 15rpx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
@ -332,11 +332,11 @@
|
|||||||
</view>
|
</view>
|
||||||
</uv-popup>
|
</uv-popup>
|
||||||
|
|
||||||
<uv-datetime-picker ref="datetimePicker" v-model="timeValue" mode="date"
|
<uv-datetime-picker ref="datetimePicker" v-model="form.signingDate" mode="date"
|
||||||
@confirm="createTimeChange"></uv-datetime-picker>
|
@confirm="createTimeChange"></uv-datetime-picker>
|
||||||
<uv-datetime-picker ref="datetimePicker2" v-model="timeValue2" mode="date"
|
<uv-datetime-picker ref="datetimePicker2" v-model="form.startDate" mode="date"
|
||||||
@confirm="createTimeChange2"></uv-datetime-picker>
|
@confirm="createTimeChange2"></uv-datetime-picker>
|
||||||
<uv-datetime-picker ref="datetimePicker3" v-model="timeValue2" mode="date"
|
<uv-datetime-picker ref="datetimePicker3" v-model="form.endDate" mode="date"
|
||||||
@confirm="createTimeChange3"></uv-datetime-picker>
|
@confirm="createTimeChange3"></uv-datetime-picker>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
@ -2,100 +2,106 @@
|
|||||||
<uv-navbar :fixed="false" :title="title" left-arrow @leftClick="$onClickLeft" />
|
<uv-navbar :fixed="false" :title="title" left-arrow @leftClick="$onClickLeft" />
|
||||||
<view style="overflow:hidden">
|
<view style="overflow:hidden">
|
||||||
<view class="set-box bg-white">
|
<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 :model="form" ref="uForm" :errorType="errorType" labelPosition="top" labelWidth="130" :rules="rules">
|
||||||
<uv-form-item label="选择合同:" @click="type != 'check' ? selectShow() : ''" required prop="contractName"
|
<uv-form-item label="选择合同:" @click="!isCheck ? selectShow() : ''" required prop="contractName">
|
||||||
v-if="form.checkStatus != 2">
|
<uv-input :disabled="isCheck" v-model="form.contractName" placeholder="选择合同">
|
||||||
<uv-input disabledColor="#ffffff" disabled v-model="form.contractName" placeholder="选择合同">
|
|
||||||
<template v-slot:suffix>
|
<template v-slot:suffix>
|
||||||
<uv-icon name="arrow-right"></uv-icon>
|
<uv-icon name="arrow-right"></uv-icon>
|
||||||
</template>
|
</template>
|
||||||
</uv-input>
|
</uv-input>
|
||||||
</uv-form-item>
|
</uv-form-item>
|
||||||
<uv-form-item label="开票主体:" required prop="invoiceBody" v-if="form.checkStatus != 2">
|
<uv-form-item label="计划开票日期:" required prop="invoiceDate">
|
||||||
<uv-input v-model="form.invoiceBody" :disabled="isCheck" placeholder="开票主体" />
|
<uni-datetime-picker v-if="!isCheck" type="date" placeholder="请选择计划开票日期" :clear-icon="false"
|
||||||
|
v-model="form.invoiceDate" />
|
||||||
|
<uv-input v-else v-model="form.invoiceDate" :disabled="isCheck" placeholder="请输入开票内容" />
|
||||||
</uv-form-item>
|
</uv-form-item>
|
||||||
<uv-form-item label="发票抬头:" prop="invoiceName" required v-if="form.checkStatus != 2">
|
<uv-form-item label="开票主体:" required prop="invoiceBody">
|
||||||
<uv-input v-model="form.invoiceName" :disabled="isCheck" placeholder="发票抬头" />
|
<uv-input v-model="form.invoiceBody" :disabled="isCheck" placeholder="请输入开票主体" />
|
||||||
</uv-form-item>
|
</uv-form-item>
|
||||||
<uv-form-item label="抬头类型:" v-if="form.checkStatus != 2">
|
<uv-form-item label="发票抬头:" prop="invoiceName" required>
|
||||||
|
<uv-input v-model="form.invoiceName" :disabled="isCheck" placeholder="请输入发票抬头" />
|
||||||
|
</uv-form-item>
|
||||||
|
<uv-form-item label="抬头类型:" required prop="invoiceIssue">
|
||||||
<view style="margin-top: 14rpx;">
|
<view style="margin-top: 14rpx;">
|
||||||
<uv-radio-group v-model="form.invoiceIssue" required>
|
<uv-radio-group v-model="form.invoiceIssue" required :disabled="isCheck">
|
||||||
<uv-radio v-for="(item, index) in sexList" :key="index" :name="item.name">
|
<uv-radio v-for="(item, index) in sexList" :key="index" :name="item.name">
|
||||||
<text style="padding-right: 20rpx;">{{ item.text }}</text>
|
<text style="padding-right: 20rpx;">{{ item.text }}</text>
|
||||||
</uv-radio>
|
</uv-radio>
|
||||||
</uv-radio-group>
|
</uv-radio-group>
|
||||||
</view>
|
</view>
|
||||||
</uv-form-item>
|
</uv-form-item>
|
||||||
<uv-form-item label="发票类型:" v-if="form.checkStatus != 2">
|
<uv-form-item label="发票类型:" required prop="invoiceType">
|
||||||
<view style="margin-top: 14rpx;">
|
<view style="margin-top: 14rpx;">
|
||||||
<uv-radio-group v-model="form.invoiceType" required>
|
<uv-radio-group v-model="form.invoiceType" required :disabled="isCheck">
|
||||||
<uv-radio v-for="(item, index) in typeList" :key="index" :name="item.name">
|
<uv-radio v-for="(item, index) in typeList" :key="index" :name="item.name">
|
||||||
<text style="padding-right: 20rpx;">{{ item.text }}</text>
|
<text style="padding-right: 20rpx;">{{ item.text }}</text>
|
||||||
</uv-radio>
|
</uv-radio>
|
||||||
</uv-radio-group>
|
</uv-radio-group>
|
||||||
</view>
|
</view>
|
||||||
</uv-form-item>
|
</uv-form-item>
|
||||||
<uv-form-item label="统一社会信用代码:" v-if="form.checkStatus != 2">
|
<uv-form-item label="统一社会信用代码:" required prop="registerNo">
|
||||||
<uv-input v-model="form.registerNo" :disabled="isCheck" placeholder="统一社会信用代码" />
|
<uv-input v-model="form.registerNo" :disabled="isCheck" placeholder="请输入统一社会信用代码" />
|
||||||
</uv-form-item>
|
</uv-form-item>
|
||||||
<uv-form-item label="开户行名称:" v-if="form.checkStatus != 2">
|
<uv-form-item label="开票金额:" prop="amount" required>
|
||||||
<uv-input v-model="form.bankName" :disabled="isCheck" placeholder="开户行名称" />
|
<uv-input type="number" v-model="form.amount" :disabled="isCheck" placeholder="请输入开票金额" />
|
||||||
</uv-form-item>
|
</uv-form-item>
|
||||||
<uv-form-item label="开户账户:" v-if="form.checkStatus != 2">
|
<uv-form-item label="开票内容:" prop="content">
|
||||||
<uv-input v-model="form.bankNo" :disabled="isCheck" placeholder="开户账户" />
|
<uv-input v-model="form.content" :disabled="isCheck" placeholder="请输入开票内容" />
|
||||||
</uv-form-item>
|
</uv-form-item>
|
||||||
<uv-form-item label="开票金额:" prop="money" required>
|
<uv-form-item label="开票单位地址:" prop="unitAddress">
|
||||||
<uv-input type="number" v-model="form.money" :disabled="isCheck" placeholder="开票金额" />
|
<uv-input v-model="form.unitAddress" :disabled="isCheck" placeholder="请输入开票单位地址" />
|
||||||
</uv-form-item>
|
</uv-form-item>
|
||||||
<uv-form-item label="开票税率(%):">
|
<uv-form-item label="开票单位电话:" prop="unitPhone">
|
||||||
<uv-input type="number" v-model="form.taxRate" :disabled="isCheck" placeholder="开票税率" />
|
<uv-input v-model="form.unitPhone" :disabled="isCheck" placeholder="请输入开票单位电话" />
|
||||||
</uv-form-item>
|
</uv-form-item>
|
||||||
<uv-form-item label="开票内容:">
|
<uv-form-item label="开票单位开户银行:" prop="unitBankName">
|
||||||
<uv-input v-model="form.content" :disabled="isCheck" placeholder="开票内容" />
|
<uv-input v-model="form.unitBankName" :disabled="isCheck" placeholder="请输入开票单位开户银行" />
|
||||||
</uv-form-item>
|
</uv-form-item>
|
||||||
<uv-form-item label="接收邮箱:">
|
<uv-form-item label="开票单位银行账号:" prop="unitBankNo">
|
||||||
<uv-input v-model="form.email" :disabled="isCheck" placeholder="开票时会把发票附件发送到邮箱" />
|
<uv-input v-model="form.unitBankNo" :disabled="isCheck" placeholder="请输入开票单位银行账号" />
|
||||||
</uv-form-item>
|
</uv-form-item>
|
||||||
<uv-form-item label="收件人:">
|
<uv-form-item label="开票单位邮箱:" prop="email">
|
||||||
<uv-input v-model="form.userName" :disabled="isCheck" placeholder="如果需要邮寄请填写" />
|
<uv-input v-model="form.email" :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-item>
|
||||||
|
<view class="container-item" style="flex-direction: column;align-items: flex-start;border-bottom: none;">
|
||||||
|
<view class="container-item-upload">
|
||||||
|
<view class="container-item-label">图片</view>
|
||||||
|
</view>
|
||||||
|
<view class="item-photo-list">
|
||||||
|
<view class="item-photo-list-item" style="font-size: 0; position: relative;margin-bottom: 60rpx;"
|
||||||
|
:style="{marginRight:(index+1)%3==0?'0rpx':'20rpx'}" v-for="(item, index) in imgFiles" :key="item"
|
||||||
|
@click="replaceImage(item, index)">
|
||||||
|
<image v-if="!isCheck" src="@/static/greyguanbi.png" mode="aspectFit" class="item-photo-list-item-close"
|
||||||
|
@click.stop="deleteItem(item, index)"></image>
|
||||||
|
<image v-if="!isCheck" :src="item.url" mode="" style="width: 100%; height: 100%"></image>
|
||||||
|
</view>
|
||||||
|
<image src="http://sys.znkjfw.com/imgs/process/uploadzp.png" mode="aspectFill" class="item-photo-list-item"
|
||||||
|
v-if="imgFiles.length<9 && !isCheck" @click="chooseImage"></image>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="container-item" style="flex-direction: column;align-items: flex-start;border-bottom: none;">
|
||||||
|
<view class="container-item-upload">
|
||||||
|
<view class="container-item-label">附件 (pdf)</view>
|
||||||
|
</view>
|
||||||
|
<view class="item-photo-list">
|
||||||
|
<view class="item-photo-list-item" style="font-size: 0; position: relative;margin-bottom: 60rpx;"
|
||||||
|
:style="{marginRight:(index+1)%3==0?'0rpx':'20rpx'}" v-for="(item, index) in pdfList" :key="item">
|
||||||
|
<image v-if="!isCheck" src="@/static/greyguanbi.png" mode="aspectFit" class="item-photo-list-item-close"
|
||||||
|
@click.stop="deleteFiles(item, index)"></image>
|
||||||
|
<image v-if="!isCheck" src="http://sys.znkjfw.com/imgs/process/pdfIcon.png" mode=""
|
||||||
|
style="width: 100%; height: 100%">
|
||||||
|
</image>
|
||||||
|
<view class="item-photo-list-item-name">
|
||||||
|
{{item.name || ''}}
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<image v-if="!isCheck" src="http://sys.znkjfw.com/imgs/process/uploadzp.png" mode="aspectFill"
|
||||||
|
class="item-photo-list-item" @click="chooseFiles"></image>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
</uv-form>
|
</uv-form>
|
||||||
<view class="mt-4" style="text-align: center;" v-if="!isCheck">
|
<view class="mt-4" style="text-align: center;">
|
||||||
<uv-button color="#09b4f1" @click="submit" v-if="form.checkStatus == 0 || form.checkStatus == 3"
|
<uv-button color="#09b4f1" @click="submit" :disabled="isCheck" :ripple="true">确定提交</uv-button>
|
||||||
: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>
|
||||||
</view>
|
</view>
|
||||||
<uv-popup mode="bottom" round="38" ref="selectShowRef5">
|
<uv-popup mode="bottom" round="38" ref="selectShowRef5">
|
||||||
@ -114,7 +120,6 @@
|
|||||||
<view style="padding: 20rpx;">
|
<view style="padding: 20rpx;">
|
||||||
<uv-button color="#09b4f1" @click="submitCheck(2)">确定</uv-button>
|
<uv-button color="#09b4f1" @click="submitCheck(2)">确定</uv-button>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
</uv-popup>
|
</uv-popup>
|
||||||
<!-- 选择客户弹窗 -->
|
<!-- 选择客户弹窗 -->
|
||||||
@ -128,20 +133,17 @@
|
|||||||
<uv-icon name="close" color="#909399" size="30"></uv-icon>
|
<uv-icon name="close" color="#909399" size="30"></uv-icon>
|
||||||
</view>
|
</view>
|
||||||
</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">
|
<scroll-view scroll-y style="height: 760rpx;width: 100%;" @scrolltolower="reachBottom">
|
||||||
<view class="list">
|
<view class="list">
|
||||||
<block v-if="customerList.length > 0">
|
<block v-if="customerList.length > 0">
|
||||||
<view class="mb-4">
|
<view class="mb-4">
|
||||||
<view class="item flex" v-for="(item,index) in customerList" :key="index" @click="onItem(item,index)">
|
<view class="item flex" v-for="(item,index) in customerList" :key="index" @click="onItem(item,index)">
|
||||||
<view class="title">{{item.name}}</view>
|
<view class="title">{{item.contractName}}</view>
|
||||||
<view class="check-icon">
|
<view class="check-icon">
|
||||||
<uv-icon v-if="item.checked" name="checkmark" color="#09b4f1" size="28"></uv-icon>
|
<uv-icon v-if="item.checked" name="checkmark" color="#09b4f1" size="28"></uv-icon>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<uv-load-more :status="listStatus"></uv-load-more>
|
|
||||||
</block>
|
</block>
|
||||||
<uv-empty text="暂无数据" v-else mode="list"></uv-empty>
|
<uv-empty text="暂无数据" v-else mode="list"></uv-empty>
|
||||||
</view>
|
</view>
|
||||||
@ -164,7 +166,7 @@
|
|||||||
onShow
|
onShow
|
||||||
} from '@dcloudio/uni-app'
|
} from '@dcloudio/uni-app'
|
||||||
import {
|
import {
|
||||||
getContractPage
|
getListByDeptId
|
||||||
} from '@/api/contract'
|
} from '@/api/contract'
|
||||||
import {
|
import {
|
||||||
invoiceCreate,
|
invoiceCreate,
|
||||||
@ -176,7 +178,9 @@
|
|||||||
import {
|
import {
|
||||||
getSimpleUserList,
|
getSimpleUserList,
|
||||||
getFlowUsers,
|
getFlowUsers,
|
||||||
getSimpleUserList2
|
getSimpleUserList2,
|
||||||
|
uploadFile,
|
||||||
|
deleteBpmFile
|
||||||
} from '@/api/user'
|
} from '@/api/user'
|
||||||
import AddressSelect from '@/components/AddressSelect/index.vue'
|
import AddressSelect from '@/components/AddressSelect/index.vue'
|
||||||
import {
|
import {
|
||||||
@ -185,8 +189,6 @@
|
|||||||
} from '@/utils/util'
|
} from '@/utils/util'
|
||||||
const title = ref('申请发票')
|
const title = ref('申请发票')
|
||||||
const labelPosition = ref('left')
|
const labelPosition = ref('left')
|
||||||
const keyword = ref('')
|
|
||||||
const listStatus = ref('loadmore')
|
|
||||||
const listStatus3 = ref('loadmore')
|
const listStatus3 = ref('loadmore')
|
||||||
const customerList = ref([])
|
const customerList = ref([])
|
||||||
const accountName = ref('')
|
const accountName = ref('')
|
||||||
@ -205,12 +207,25 @@
|
|||||||
const content = ref('')
|
const content = ref('')
|
||||||
const customerName = ref('')
|
const customerName = ref('')
|
||||||
const form = ref({
|
const form = ref({
|
||||||
invoiceIssue: 1,
|
invoiceDate: undefined, // 开票日期
|
||||||
invoiceType: 1,
|
customerName: undefined, // 客户名称
|
||||||
contractName: '',
|
customerId: undefined, // 客户编号
|
||||||
invoiceBody: '',
|
projectId: [], // 开票项目
|
||||||
invoiceName: '',
|
invoiceBody: undefined, // 开票主体
|
||||||
money: '',
|
invoiceName: undefined, // 发票抬头
|
||||||
|
invoiceIssue: 1, // 抬头类型 | 1企业2个人3事业单位
|
||||||
|
invoiceType: 1, // 发票类型 | 1增值税普票2增值税专票
|
||||||
|
registerNo: undefined, // 纳税人识别号
|
||||||
|
amount: undefined, // 开票金额
|
||||||
|
content: undefined, // 开票内容
|
||||||
|
unitAddress: undefined, // 开票单位地址
|
||||||
|
unitPhone: undefined, // 开票单位联系方式
|
||||||
|
unitBankName: undefined, // 开票单位开户行
|
||||||
|
unitBankNo: undefined, // 开票单位银行账号
|
||||||
|
email: undefined, // 开票单位邮箱
|
||||||
|
contractId: undefined, // 关联合同编号
|
||||||
|
contractInstanceId: undefined, // 关联合同审批单编号
|
||||||
|
fileItems: []
|
||||||
})
|
})
|
||||||
const timeText = ref('')
|
const timeText = ref('')
|
||||||
const errorType = ref('message')
|
const errorType = ref('message')
|
||||||
@ -219,22 +234,32 @@
|
|||||||
required: true,
|
required: true,
|
||||||
message: '请选择合同',
|
message: '请选择合同',
|
||||||
trigger: ['change', 'blur']
|
trigger: ['change', 'blur']
|
||||||
}, ],
|
}],
|
||||||
|
invoiceDate: [{
|
||||||
|
required: true,
|
||||||
|
message: '请选择开票日期',
|
||||||
|
trigger: ['change', 'blur']
|
||||||
|
}],
|
||||||
invoiceBody: [{
|
invoiceBody: [{
|
||||||
required: true,
|
required: true,
|
||||||
message: '请填写开票主体',
|
message: '请填写开票主体',
|
||||||
trigger: ['change', 'blur']
|
trigger: ['change', 'blur']
|
||||||
}, ],
|
}],
|
||||||
invoiceName: [{
|
invoiceName: [{
|
||||||
required: true,
|
required: true,
|
||||||
message: '请填写发票抬头',
|
message: '请填写发票抬头',
|
||||||
trigger: ['change', 'blur']
|
trigger: ['change', 'blur']
|
||||||
}, ],
|
}],
|
||||||
money: [{
|
registerNo: [{
|
||||||
|
required: true,
|
||||||
|
message: '请填写统一社会信用代码',
|
||||||
|
trigger: ['change', 'blur']
|
||||||
|
}],
|
||||||
|
amount: [{
|
||||||
required: true,
|
required: true,
|
||||||
message: '请填写发票金额',
|
message: '请填写发票金额',
|
||||||
trigger: ['change', 'blur']
|
trigger: ['change', 'blur']
|
||||||
}, ],
|
}],
|
||||||
})
|
})
|
||||||
const customerContacts = ref([])
|
const customerContacts = ref([])
|
||||||
const userList = ref([])
|
const userList = ref([])
|
||||||
@ -262,59 +287,24 @@
|
|||||||
])
|
])
|
||||||
const typeList = ref([{
|
const typeList = ref([{
|
||||||
name: 1,
|
name: 1,
|
||||||
text: '增值税普票',
|
text: '普票',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 2,
|
name: 2,
|
||||||
text: '增值税专票',
|
text: '专票',
|
||||||
},
|
},
|
||||||
])
|
])
|
||||||
const fileList = ref([])
|
|
||||||
|
|
||||||
onLoad((e) => {
|
onLoad((e) => {
|
||||||
if (e.type) {
|
|
||||||
type.value = 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()
|
getCustomerList()
|
||||||
getFlowUsersList()
|
if (type.value == 'detail') {
|
||||||
})
|
isCheck.value = true
|
||||||
|
title.value = '发票详情'
|
||||||
onShow(() => {
|
contractId.value = e.id
|
||||||
|
getContractInfo()
|
||||||
})
|
|
||||||
|
|
||||||
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 () => {
|
const getNumber = async () => {
|
||||||
form.value.number = await getCode()
|
form.value.number = await getCode()
|
||||||
@ -328,96 +318,53 @@
|
|||||||
unref(selectShowRef).close()
|
unref(selectShowRef).close()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 获取商机数据详情
|
// 获取商机数据详情
|
||||||
const getContractInfo = async () => {
|
const getContractInfo = async () => {
|
||||||
form.value = await getInvoice({
|
form.value = await getInvoice({
|
||||||
id: contractId.value
|
id: contractId.value
|
||||||
})
|
})
|
||||||
form.value.flowAdminId = form.value.flowAdminId2
|
form.value.invoiceDate = form.value.invoiceDate.join("-")
|
||||||
}
|
|
||||||
// 搜索
|
|
||||||
const onSearch = () => {
|
|
||||||
page.value = 1
|
|
||||||
lastPage.value = false
|
|
||||||
getCustomerList()
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (form.value.fileItems.length) {
|
||||||
const getCustomerList = async (isNextPage, pages) => {
|
form.value.fileItems.forEach(item => {
|
||||||
await getContractPage({
|
if (getFileType(item.name) == 'image') {
|
||||||
pageNo: page.value,
|
imgFiles.value.push(item)
|
||||||
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
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
if (getFileType(item.name) == 'pdf') {
|
||||||
|
pdfList.value.push(item)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
customerList.value.forEach(item => {
|
||||||
// 滚动到底部加载更多
|
if (item.id == form.value.contractId) {
|
||||||
const reachBottom = () => {
|
form.value.contractName = item.contractName
|
||||||
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 getCustomerList = async () => {
|
||||||
|
await getListByDeptId().then(res => {
|
||||||
|
customerList.value = res
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// 选择客户
|
// 选择客户
|
||||||
const onItem = async (val, i) => {
|
const onItem = async (val, i) => {
|
||||||
customerList.value.forEach((item, index) => {
|
customerList.value.forEach((item, index) => {
|
||||||
if (val.id == item.id) {
|
if (val.id == item.id) {
|
||||||
item.checked = true
|
item.checked = true
|
||||||
val.name = val.name ? val.name : item.name;
|
|
||||||
} else {
|
} else {
|
||||||
item.checked = false
|
item.checked = false
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
form.value.contractId = val.id
|
form.value.contractId = val.id
|
||||||
form.value.invoiceBody = val.customerName
|
form.value.contractName = val.contractName
|
||||||
form.value.invoiceName = val.customerName
|
form.value.contractInstanceId = val.processInstanceId
|
||||||
//customerId.value = val.id
|
|
||||||
form.value.contractName = val.name ? val.name : ''
|
|
||||||
selectShowClose()
|
selectShowClose()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const selectShowRef5 = ref()
|
const selectShowRef5 = ref()
|
||||||
const selectShow5 = async () => {
|
const selectShow5 = async () => {
|
||||||
unref(selectShowRef5).open()
|
unref(selectShowRef5).open()
|
||||||
@ -426,15 +373,12 @@
|
|||||||
unref(selectShowRef5).close()
|
unref(selectShowRef5).close()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const submitCheck = async (type) => {
|
const submitCheck = async (type) => {
|
||||||
if (type == 2 && form2.value.remark == '') {
|
if (type == 2 && form2.value.remark == '') {
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
icon: 'error',
|
icon: 'error',
|
||||||
title: '请填写驳回理由'
|
title: '请填写驳回理由'
|
||||||
})
|
})
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
form2.value.id = contractId.value
|
form2.value.id = contractId.value
|
||||||
@ -452,34 +396,6 @@
|
|||||||
}, 1000);
|
}, 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 uForm = ref()
|
||||||
@ -489,28 +405,21 @@
|
|||||||
icon: 'error',
|
icon: 'error',
|
||||||
title: '请选择合同'
|
title: '请选择合同'
|
||||||
})
|
})
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
uForm.value.validate().then(res => {
|
uForm.value.validate().then(res => {
|
||||||
onSubmit()
|
onSubmit()
|
||||||
}).catch(errors => {
|
}).catch(errors => {
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
icon: 'error',
|
icon: 'error',
|
||||||
title: '校验失败'
|
title: '请完善发票信息'
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 修确认提交
|
// 修确认提交
|
||||||
const onSubmit = async () => {
|
const onSubmit = async () => {
|
||||||
if (type.value == 'add') {
|
|
||||||
await invoiceCreate(form.value)
|
await invoiceCreate(form.value)
|
||||||
|
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: '申请成功',
|
title: '申请成功',
|
||||||
icon: 'success',
|
icon: 'success',
|
||||||
@ -520,26 +429,121 @@
|
|||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
uni.navigateBack();
|
uni.navigateBack();
|
||||||
}, 1000);
|
}, 1000);
|
||||||
} else {
|
|
||||||
await invoiceUpdate(form.value)
|
|
||||||
uni.showToast({
|
|
||||||
title: '修改成功',
|
|
||||||
icon: 'success',
|
|
||||||
duration: 2000
|
|
||||||
})
|
|
||||||
prePage().$vm.isRefresh = true
|
|
||||||
setTimeout(() => {
|
|
||||||
uni.navigateBack();
|
|
||||||
}, 1000);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 附件上传相关
|
||||||
|
const imgFiles = ref([]) //图片列表
|
||||||
|
const pdfList = ref([]) //pdf列表
|
||||||
|
//删除文件
|
||||||
|
const deleteFiles = (val, i) => {
|
||||||
|
deleteBpmFile({
|
||||||
|
url: val.url
|
||||||
|
}).then(res => {
|
||||||
|
pdfList.value.splice(i, 1)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
//上传
|
||||||
|
const uploadFileApi = (url) => {
|
||||||
|
return new Promise((reslove, reject) => {
|
||||||
|
uploadFile(url, true)
|
||||||
|
.then((res) => {
|
||||||
|
console.log(res, 'success')
|
||||||
|
reslove(res);
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
console.log(err, 'err')
|
||||||
|
reject(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//获取文件后缀名
|
||||||
|
const getExtension = (fileName) => {
|
||||||
|
let arr = fileName.split('.');
|
||||||
|
return arr[arr.length - 1];
|
||||||
|
}
|
||||||
|
//选择图片
|
||||||
|
const chooseImage = () => {
|
||||||
|
uni.chooseImage({
|
||||||
|
count: 9 - imgFiles.value.length, //默认9
|
||||||
|
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
|
||||||
|
sourceType: ['album', 'camera'], //从相册选择
|
||||||
|
success: (res) => {
|
||||||
|
let promise = Promise.resolve();
|
||||||
|
let arr = [];
|
||||||
|
uni.showLoading({
|
||||||
|
title: '上传中'
|
||||||
|
})
|
||||||
|
|
||||||
|
res.tempFilePaths.forEach((item) => {
|
||||||
|
promise = promise.then(() => uploadFileApi(item));
|
||||||
|
promise
|
||||||
|
.then((ress) => {
|
||||||
|
arr.push(1)
|
||||||
|
imgFiles.value.push({
|
||||||
|
name: ress.name,
|
||||||
|
url: ress.url
|
||||||
|
})
|
||||||
|
if (arr.length >= res.tempFilePaths.length) {
|
||||||
|
uni.hideLoading()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
uni.hideLoading()
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//上传文件 pdf
|
||||||
|
const chooseFiles = () => {
|
||||||
|
wx.chooseMessageFile({
|
||||||
|
count: 9 - pdfList.value.length, //默认100
|
||||||
|
extension: ['pdf', '.pdf'],
|
||||||
|
success: (res) => {
|
||||||
|
let isUploadFile = true
|
||||||
|
res.tempFiles.forEach(item => {
|
||||||
|
if (getExtension(item.name) != 'pdf') {
|
||||||
|
isUploadFile = false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if (!isUploadFile) {
|
||||||
|
uni.showToast({
|
||||||
|
title: '请您上传pdf格式文件',
|
||||||
|
});
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let promise = Promise.resolve();
|
||||||
|
let arr = [];
|
||||||
|
uni.showLoading({
|
||||||
|
title: '上传中'
|
||||||
|
})
|
||||||
|
|
||||||
|
res.tempFiles.forEach((item) => {
|
||||||
|
promise = promise.then(() => uploadFileApi(item.path));
|
||||||
|
promise
|
||||||
|
.then((ress) => {
|
||||||
|
arr.push(1)
|
||||||
|
pdfList.value.push({
|
||||||
|
name: ress.name,
|
||||||
|
url: ress.url
|
||||||
|
})
|
||||||
|
if (arr.length >= res.tempFilePaths.length) {
|
||||||
|
uni.hideLoading()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
uni.hideLoading()
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.set-box {
|
.set-box {
|
||||||
padding: 0rpx 22rpx 20rpx 34rpx;
|
padding: 0rpx 22rpx 50rpx 34rpx;
|
||||||
margin-bottom: 80rpx;
|
|
||||||
|
|
||||||
.list {
|
.list {
|
||||||
margin: 40rpx 15rpx 60rpx;
|
margin: 40rpx 15rpx 60rpx;
|
||||||
@ -590,6 +594,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.popup-content {
|
.popup-content {
|
||||||
|
width: 750rpx;
|
||||||
|
|
||||||
.popup-title {
|
.popup-title {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@ -629,4 +635,69 @@
|
|||||||
padding: 28rpx 10rpx 45rpx;
|
padding: 28rpx 10rpx 45rpx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.container-item {
|
||||||
|
width: 100%;
|
||||||
|
padding: 25rpx 0;
|
||||||
|
border-bottom: 1rpx solid #e8e8e8;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container-item-label {
|
||||||
|
flex-shrink: 0;
|
||||||
|
color: #020202;
|
||||||
|
font-weight: 400;
|
||||||
|
font-face: PingFang SC;
|
||||||
|
font-size: 30rpx;
|
||||||
|
margin-right: 15rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-photo-list {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
padding: 0 30rpx;
|
||||||
|
margin-top: 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-photo-list-item-name {
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
left: 0;
|
||||||
|
bottom: -40rpx;
|
||||||
|
font-size: 22rpx;
|
||||||
|
text-align: center;
|
||||||
|
overflow: hidden;
|
||||||
|
/* 确保超出容器的文本被裁剪 */
|
||||||
|
white-space: nowrap;
|
||||||
|
/* 确保文本在一行内显示 */
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
/* 超出部分显示为省略号 */
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-photo-list-item-close {
|
||||||
|
width: 40rpx;
|
||||||
|
height: 40rpx;
|
||||||
|
position: absolute;
|
||||||
|
right: -20rpx;
|
||||||
|
top: -20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-photo-list-item {
|
||||||
|
width: 180rpx;
|
||||||
|
height: 180rpx;
|
||||||
|
flex-shrink: 0;
|
||||||
|
border: 2rpx solid #e5e5e5;
|
||||||
|
border-radius: 10rpx;
|
||||||
|
margin-bottom: 20rpx;
|
||||||
|
/* margin-right: 20rpx; */
|
||||||
|
}
|
||||||
|
|
||||||
|
.container-item-upload {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
@ -18,7 +18,7 @@
|
|||||||
@scrolltolower="reachBottom">
|
@scrolltolower="reachBottom">
|
||||||
<view class="page-box">
|
<view class="page-box">
|
||||||
<block v-if="dataList.length > 0">
|
<block v-if="dataList.length > 0">
|
||||||
<view class="client" v-for="(items, index) in dataList" :key="index" @click="onItem(items.id)">
|
<view class="client" v-for="(items, index) in dataList" :key="index">
|
||||||
<view class="top">
|
<view class="top">
|
||||||
<view class="left uv-line-1">
|
<view class="left uv-line-1">
|
||||||
<view class="store uv-line-1">{{items.invoiceName}}</view>
|
<view class="store uv-line-1">{{items.invoiceName}}</view>
|
||||||
@ -39,11 +39,8 @@
|
|||||||
<view class="bottom">
|
<view class="bottom">
|
||||||
<view class="client_time">¥{{items.amount}}</view>
|
<view class="client_time">¥{{items.amount}}</view>
|
||||||
<view class="flex">
|
<view class="flex">
|
||||||
<block v-if="items.isCheck">
|
<block>
|
||||||
<view class="btn ml-1 entity" @click.stop="onCheck(items.id)">审核</view>
|
<view class="btn ml-1 primary" @click="onCheck(items.id)">详情</view>
|
||||||
</block>
|
|
||||||
<block v-else-if="items.checkStatus == 2">
|
|
||||||
<view class="btn ml-1 primary" @click.stop="onCheck(items.id,'look')">开具</view>
|
|
||||||
</block>
|
</block>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@ -140,16 +137,10 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 审核
|
// 审核
|
||||||
const onCheck = (id, type) => {
|
const onCheck = (id) => {
|
||||||
if (type == 'look') {
|
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url: '/pages/components/pages/invoice/add?id=' + id + '&type=edit'
|
url: '/pages/components/pages/invoice/add?id=' + id + '&type=detail'
|
||||||
});
|
});
|
||||||
} else {
|
|
||||||
uni.navigateTo({
|
|
||||||
url: '/pages/components/pages/invoice/add?id=' + id + '&type=check'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleSelect = (key) => {
|
const handleSelect = (key) => {
|
||||||
@ -228,12 +219,6 @@
|
|||||||
getList()
|
getList()
|
||||||
}
|
}
|
||||||
|
|
||||||
const onItem = (val) => {
|
|
||||||
uni.navigateTo({
|
|
||||||
url: '/pages/components/pages/invoice/add?id=' + val + '&type=edit'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// 添加
|
// 添加
|
||||||
const onAdd = () => {
|
const onAdd = () => {
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
@ -324,10 +309,6 @@
|
|||||||
color: $uv-info-dark;
|
color: $uv-info-dark;
|
||||||
}
|
}
|
||||||
|
|
||||||
.entity {
|
|
||||||
color: #fff;
|
|
||||||
background-color: #FF6146;
|
|
||||||
}
|
|
||||||
|
|
||||||
.primary {
|
.primary {
|
||||||
color: #FFF;
|
color: #FFF;
|
||||||
|
Loading…
Reference in New Issue
Block a user