|
@ -11,37 +11,37 @@ |
|
|
<div class="bg-white pb-3"> |
|
|
<div class="bg-white pb-3"> |
|
|
<div class="text-gray-500 px-4 py-3 font-semibold">发票信息</div> |
|
|
<div class="text-gray-500 px-4 py-3 font-semibold">发票信息</div> |
|
|
<!-- 是否上传票据 --> |
|
|
<!-- 是否上传票据 --> |
|
|
<div v-show="isInvoice"> |
|
|
<div v-show="data.isInvoice"> |
|
|
<div class="mx-4 pb-3 border-b"> |
|
|
<div class="mx-4 pb-3 border-b"> |
|
|
<div class="flex pt-3 pb-2 justify-between" v-show="titleHidden"> |
|
|
<div class="flex pt-3 pb-2 justify-between" v-show="data.titleHidden"> |
|
|
<div> |
|
|
<div> |
|
|
<span class="text-red-500">*</span> |
|
|
<span class="text-red-500">*</span> |
|
|
<span class="text-gray-500">上传票据凭证 </span> |
|
|
<span class="text-gray-500">上传票据凭证 </span> |
|
|
<span class="text-gray-400 text-xs">(仅支持ipg格式)</span> |
|
|
<span class="text-gray-400 text-xs">(仅支持ipg格式)</span> |
|
|
</div> |
|
|
</div> |
|
|
<van-button plain type="primary" size="mini" @click="isInvoice = false">手动输入</van-button> |
|
|
<van-button plain type="primary" size="mini" @click="data.isInvoice = false">手动输入</van-button> |
|
|
</div> |
|
|
</div> |
|
|
<div class="text-center border-b w-52 h-24 bg-gray-100 border-dashed border-2" @click="uploadBill" v-show="!isSuccess"> |
|
|
<div class="text-center border-b w-52 h-24 bg-gray-100 border-dashed border-2" @click="uploadBill" v-show="!data.isSuccess"> |
|
|
<p class="text-gray-400 text-xl pt-3">+</p> |
|
|
<p class="text-gray-400 text-xl pt-3">+</p> |
|
|
<p class="text-gray-400 text-xs">上传并识别凭证</p> |
|
|
<p class="text-gray-400 text-xs">上传并识别凭证</p> |
|
|
</div> |
|
|
</div> |
|
|
<!-- 上传票据成功后显示发票信息 --> |
|
|
<!-- 上传票据成功后显示发票信息 --> |
|
|
<div v-show="isSuccess"> |
|
|
<div v-show="data.isSuccess"> |
|
|
<van-field |
|
|
<van-field |
|
|
v-for="item in billList" |
|
|
v-for="item in data.billList" |
|
|
required |
|
|
required |
|
|
v-model="item.values" |
|
|
v-model="item.values" |
|
|
:label=item.name |
|
|
:label="item.name" |
|
|
input-align="right" |
|
|
input-align="right" |
|
|
/> |
|
|
/> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div > |
|
|
</div > |
|
|
<!-- 手动输入信息 --> |
|
|
<!-- 手动输入信息 --> |
|
|
<div v-show="!isInvoice"> |
|
|
<div v-show="!data.isInvoice"> |
|
|
<van-field |
|
|
<van-field |
|
|
required |
|
|
required |
|
|
v-model="applyMoney" |
|
|
v-model="data.applyMoney" |
|
|
label="申请金额" |
|
|
label="申请金额" |
|
|
placeholder="输入申请金额" |
|
|
placeholder="输入申请金额" |
|
|
input-align="right" |
|
|
input-align="right" |
|
@ -51,7 +51,7 @@ |
|
|
<div class="text-gray-500 py-4 pl-5">备注</div> |
|
|
<div class="text-gray-500 py-4 pl-5">备注</div> |
|
|
<van-cell-group> |
|
|
<van-cell-group> |
|
|
<van-field |
|
|
<van-field |
|
|
v-model="message" |
|
|
v-model="data.message" |
|
|
rows="2" |
|
|
rows="2" |
|
|
autosize |
|
|
autosize |
|
|
type="textarea" |
|
|
type="textarea" |
|
@ -73,11 +73,12 @@ |
|
|
<van-button |
|
|
<van-button |
|
|
class="button" |
|
|
class="button" |
|
|
size="mini" |
|
|
size="mini" |
|
|
v-for="item in reviewerList" |
|
|
v-for="item in data.reviewerList" |
|
|
:type="selected.find(checker => checker === item) ? 'primary' : 'default'" |
|
|
:key="item.userId" |
|
|
@click="handleSelectChecker(item)" |
|
|
:type="data.checkerList.find(checker => checker === item.userId) ? 'primary' : 'default'" |
|
|
|
|
|
@click="handleSelectChecker(item.userId)" |
|
|
> |
|
|
> |
|
|
{{item}} |
|
|
{{item.name}} |
|
|
</van-button> |
|
|
</van-button> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
@ -87,21 +88,21 @@ |
|
|
<div class="text-gray-500 p-4 font-semibold">其他信息</div> |
|
|
<div class="text-gray-500 p-4 font-semibold">其他信息</div> |
|
|
<!-- 申请类型 --> |
|
|
<!-- 申请类型 --> |
|
|
<!-- 普通票据申请 --> |
|
|
<!-- 普通票据申请 --> |
|
|
<div v-show="isInvoice"> |
|
|
<div v-show="data.isInvoice"> |
|
|
<van-field |
|
|
<van-field |
|
|
v-model="applyType" |
|
|
v-model="data.applyType" |
|
|
is-link |
|
|
is-link |
|
|
readonly |
|
|
readonly |
|
|
label="申请类型" |
|
|
label="申请类型" |
|
|
placeholder="请选择申请类型" |
|
|
placeholder="请选择申请类型" |
|
|
@click="showType = true" |
|
|
@click="data.showType = true" |
|
|
required |
|
|
required |
|
|
input-align="right" |
|
|
input-align="right" |
|
|
/> |
|
|
/> |
|
|
<van-popup v-model:show="showType" round position="bottom"> |
|
|
<van-popup v-model:show="data.showType" round position="bottom"> |
|
|
<van-cascader |
|
|
<van-cascader |
|
|
:options="applyTypeOptions" |
|
|
:options="data.applyTypeOptions" |
|
|
@close="showType = false" |
|
|
@close="data.showType = false" |
|
|
@finish="finishApplyType" |
|
|
@finish="finishApplyType" |
|
|
active-color="#1989fa" |
|
|
active-color="#1989fa" |
|
|
class="p-0" |
|
|
class="p-0" |
|
@ -109,59 +110,52 @@ |
|
|
</van-popup> |
|
|
</van-popup> |
|
|
<!-- 所属项目 --> |
|
|
<!-- 所属项目 --> |
|
|
<van-field |
|
|
<van-field |
|
|
v-model="applyProject" |
|
|
v-model="data.projectName" |
|
|
is-link |
|
|
is-link |
|
|
readonly |
|
|
readonly |
|
|
label="所属项目" |
|
|
label="所属项目" |
|
|
placeholder="请选择所属项目" |
|
|
placeholder="请选择所属项目" |
|
|
@click="showProject = true" |
|
|
|
|
|
required |
|
|
required |
|
|
input-align="right" |
|
|
input-align="right" |
|
|
|
|
|
disabled |
|
|
/> |
|
|
/> |
|
|
<van-popup v-model:show="showProject" round position="bottom"> |
|
|
<van-popup v-model:show="data.projectName" round position="bottom"> |
|
|
<van-cascader |
|
|
<van-cascader |
|
|
:options="applyProjectOptions" |
|
|
|
|
|
@close="showProject = false" |
|
|
|
|
|
@finish="finishApplyProject" |
|
|
|
|
|
active-color="#1989fa" |
|
|
active-color="#1989fa" |
|
|
class="p-0" |
|
|
class="p-0" |
|
|
/> |
|
|
/> |
|
|
</van-popup> |
|
|
</van-popup> |
|
|
<!-- 所属任务的 --> |
|
|
<!-- 所属任务的 --> |
|
|
<van-field |
|
|
<van-field |
|
|
v-model="applyTask" |
|
|
v-model="data.taskName" |
|
|
is-link |
|
|
is-link |
|
|
readonly |
|
|
readonly |
|
|
label="所属任务" |
|
|
label="所属任务" |
|
|
placeholder="请选择所属任务" |
|
|
placeholder="请选择所属任务" |
|
|
@click="showTask = true" |
|
|
|
|
|
required |
|
|
required |
|
|
input-align="right" |
|
|
input-align="right" |
|
|
|
|
|
disabled |
|
|
/> |
|
|
/> |
|
|
<van-popup v-model:show="showTask" round position="bottom"> |
|
|
<van-popup v-model:show="data.taskName" round position="bottom"> |
|
|
<van-cascader |
|
|
<van-cascader |
|
|
:options="applyTaskOptions" |
|
|
|
|
|
@close="showTask = false" |
|
|
|
|
|
@finish="finishApplyTask" |
|
|
|
|
|
active-color="#1989fa" |
|
|
active-color="#1989fa" |
|
|
class="p-0" |
|
|
class="p-0" |
|
|
/> |
|
|
/> |
|
|
</van-popup> |
|
|
</van-popup> |
|
|
<!-- 类目选择 --> |
|
|
<!-- 类目选择 --> |
|
|
<van-field |
|
|
<van-field |
|
|
v-model="applyCategory" |
|
|
v-model="data.applyCategory" |
|
|
is-link |
|
|
is-link |
|
|
readonly |
|
|
readonly |
|
|
label="类目" |
|
|
label="类目" |
|
|
placeholder="请选择类目" |
|
|
placeholder="请选择类目" |
|
|
@click="showCategory = true" |
|
|
@click="data.showCategory = true" |
|
|
required |
|
|
|
|
|
input-align="right" |
|
|
input-align="right" |
|
|
/> |
|
|
/> |
|
|
<van-popup v-model:show="showCategory" round position="bottom"> |
|
|
<van-popup v-model:show="data.showCategory" round position="bottom"> |
|
|
<van-cascader |
|
|
<van-cascader |
|
|
:options="applyCategoryOptions" |
|
|
:options="data.applyCategoryOptions" |
|
|
@close="showCategory = false" |
|
|
@close="data.showCategory = false" |
|
|
@finish="finishApplyCategory" |
|
|
@finish="finishApplyCategory" |
|
|
active-color="#1989fa" |
|
|
active-color="#1989fa" |
|
|
class="p-0" |
|
|
class="p-0" |
|
@ -169,19 +163,18 @@ |
|
|
</van-popup> |
|
|
</van-popup> |
|
|
<!-- 名目选择 --> |
|
|
<!-- 名目选择 --> |
|
|
<van-field |
|
|
<van-field |
|
|
v-model="applyName" |
|
|
v-model="data.applyName" |
|
|
is-link |
|
|
is-link |
|
|
readonly |
|
|
readonly |
|
|
label="类目" |
|
|
label="名目" |
|
|
placeholder="请选择类目" |
|
|
placeholder="请选择名目" |
|
|
@click="showName = true" |
|
|
@click="data.showName = true" |
|
|
required |
|
|
|
|
|
input-align="right" |
|
|
input-align="right" |
|
|
/> |
|
|
/> |
|
|
<van-popup v-model:show="showName" round position="bottom"> |
|
|
<van-popup v-model:show="data.showName" round position="bottom"> |
|
|
<van-cascader |
|
|
<van-cascader |
|
|
:options="applyNameOptions" |
|
|
:options="data.applyNameOptions" |
|
|
@close="showName = false" |
|
|
@close="data.showName = false" |
|
|
@finish="finishApplyName" |
|
|
@finish="finishApplyName" |
|
|
active-color="#1989fa" |
|
|
active-color="#1989fa" |
|
|
class="p-0" |
|
|
class="p-0" |
|
@ -189,10 +182,10 @@ |
|
|
</van-popup> |
|
|
</van-popup> |
|
|
</div> |
|
|
</div> |
|
|
<!-- 个人手动申请 --> |
|
|
<!-- 个人手动申请 --> |
|
|
<div v-show="!isInvoice"> |
|
|
<div v-show="!data.isInvoice"> |
|
|
<div class="pl-2"> |
|
|
<div class="pl-2"> |
|
|
<van-cell title="单元格" is-link :value="personalType" required/> |
|
|
<van-cell title="单元格" is-link :value="data.personalType" required/> |
|
|
<van-cell title="单元格" is-link :value="personalCategory" required/> |
|
|
<van-cell title="单元格" is-link :value="data.personalCategory" required/> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
</div> |
|
|
</div> |
|
@ -202,26 +195,26 @@ |
|
|
<div class="text-gray-500 p-4 font-semibold">提交人信息</div> |
|
|
<div class="text-gray-500 p-4 font-semibold">提交人信息</div> |
|
|
<van-field |
|
|
<van-field |
|
|
required |
|
|
required |
|
|
v-model="name" |
|
|
v-model="data.name" |
|
|
label="姓名" |
|
|
label="姓名" |
|
|
placeholder="输入姓名" |
|
|
placeholder="输入姓名" |
|
|
input-align="right" |
|
|
input-align="right" |
|
|
/> |
|
|
/> |
|
|
<!-- 选择所属部门 --> |
|
|
<!-- 选择所属部门 --> |
|
|
<van-field |
|
|
<van-field |
|
|
v-model="applyDepartment" |
|
|
v-model="data.applyDepartment" |
|
|
is-link |
|
|
is-link |
|
|
readonly |
|
|
readonly |
|
|
label="所属部门" |
|
|
label="所属部门" |
|
|
placeholder="请选择所属部门" |
|
|
placeholder="请选择所属部门" |
|
|
@click="showDepartment = true" |
|
|
@click="data.showDepartment = true" |
|
|
required |
|
|
required |
|
|
input-align="right" |
|
|
input-align="right" |
|
|
/> |
|
|
/> |
|
|
<van-popup v-model:show="showDepartment" round position="bottom"> |
|
|
<van-popup v-model:show="data.showDepartment" round position="bottom"> |
|
|
<van-cascader |
|
|
<van-cascader |
|
|
:options="applyDepartmentOptions" |
|
|
:options="data.applyDepartmentOptions" |
|
|
@close="showDepartment = false" |
|
|
@close="data.showDepartment = false" |
|
|
@finish="finishApplyDepartment" |
|
|
@finish="finishApplyDepartment" |
|
|
active-color="#1989fa" |
|
|
active-color="#1989fa" |
|
|
class="p-0" |
|
|
class="p-0" |
|
@ -231,13 +224,10 @@ |
|
|
<!-- 历史申请 --> |
|
|
<!-- 历史申请 --> |
|
|
<div class="bg-white mt-3 p-4"> |
|
|
<div class="bg-white mt-3 p-4"> |
|
|
<div class="text-gray-500 font-semibold">历史申请</div> |
|
|
<div class="text-gray-500 font-semibold">历史申请</div> |
|
|
<div v-if="showHistory"> |
|
|
<div> |
|
|
<Search /> |
|
|
<Search /> |
|
|
<FinanceManage /> |
|
|
<FinanceManage /> |
|
|
</div> |
|
|
</div> |
|
|
<div v-if="!showHistory" class="no-data"> |
|
|
|
|
|
暂无历史记录 |
|
|
|
|
|
</div> |
|
|
|
|
|
</div> |
|
|
</div> |
|
|
<!-- 底部立即提交按钮 --> |
|
|
<!-- 底部立即提交按钮 --> |
|
|
<NuxtLink to="/application-details"> |
|
|
<NuxtLink to="/application-details"> |
|
@ -249,213 +239,112 @@ |
|
|
</div> |
|
|
</div> |
|
|
</template> |
|
|
</template> |
|
|
<script setup> |
|
|
<script setup> |
|
|
import {ref} from 'vue' |
|
|
import {ref, reactive} from 'vue' |
|
|
const isInvoice = ref(true); // 判断是否是手动输入 |
|
|
// import useApplication from 'hooks/useApplication'; |
|
|
const message = ref(''); // 备注的值 |
|
|
import { queryChecker } from 'apis/member' |
|
|
const billList = ref([ |
|
|
import { queryType } from 'apis/finance' |
|
|
{ |
|
|
|
|
|
name: '发票代码', |
|
|
|
|
|
values:0 |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
name: '发票号码', |
|
|
|
|
|
values:1 |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
name: '合计金额(元)', |
|
|
|
|
|
values:2 |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
name: '税额(元)', |
|
|
|
|
|
values:3 |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
name: '开票日期', |
|
|
|
|
|
values:4 |
|
|
|
|
|
} |
|
|
|
|
|
]) // 识别后的发票信息 |
|
|
|
|
|
const reviewerList = ref(['冯教授','周亮','李洪明','夏红','麦琪其','薇薇安','卫老师']); //审核人数组 |
|
|
|
|
|
const selected = ref(['冯教授']); //默认的审核人 |
|
|
|
|
|
const showHistory = ref(true); // 根据数据判断是否有历史记录 |
|
|
|
|
|
const applyData = ref([ |
|
|
|
|
|
{ |
|
|
|
|
|
applicant:'代用名1', |
|
|
|
|
|
money:100, |
|
|
|
|
|
time:'2021/12/31 12:31', |
|
|
|
|
|
type: 1 |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
applicant:'代用名2', |
|
|
|
|
|
money:100, |
|
|
|
|
|
time:'2021/12/31 12:31', |
|
|
|
|
|
type: 2 |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
applicant:'代用名1', |
|
|
|
|
|
money:100, |
|
|
|
|
|
time:'2021/12/31 12:31', |
|
|
|
|
|
type: 3 |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
applicant:'代用名2', |
|
|
|
|
|
money:100, |
|
|
|
|
|
time:'2021/12/31 12:31', |
|
|
|
|
|
type: 3 |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
applicant:'代用名1', |
|
|
|
|
|
money:100, |
|
|
|
|
|
time:'2021/12/31 12:31', |
|
|
|
|
|
type: 1 |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
applicant:'代用名2', |
|
|
|
|
|
money:100, |
|
|
|
|
|
time:'2021/12/31 12:31', |
|
|
|
|
|
type: 2 |
|
|
|
|
|
} |
|
|
|
|
|
]); // 申请的记录 |
|
|
|
|
|
const isSuccess = ref(false) // 上传票据是否成功 |
|
|
|
|
|
const name = ref('') // 提交人的姓名 |
|
|
|
|
|
const applyMoney = ref(5000) // 手动输入时输入的申请的金额 |
|
|
|
|
|
const titleHidden = ref(true) // 上传提示语隐藏 |
|
|
|
|
|
const currentPage = ref(0) //当前显示页数 |
|
|
|
|
|
const personalType = ref('个人申请') |
|
|
|
|
|
const personalCategory = ref('用款') |
|
|
|
|
|
|
|
|
|
|
|
// 其他信息的多个选择按钮 |
|
|
// const getApplication = useApplication(); |
|
|
// 申请类型的 |
|
|
const projectName = useProjectName() |
|
|
const showType = ref(false); |
|
|
const taskName = useTaskName() |
|
|
const applyProject = ref(''); // 选择的类型的值 |
|
|
const projectId = useProjectId() |
|
|
const applyTypeOptions = [ |
|
|
const data = reactive({ |
|
|
{ |
|
|
isInvoice: true, |
|
|
text: '项目申请', |
|
|
message: '', |
|
|
value: '330000', |
|
|
billList: [ |
|
|
}, |
|
|
{ |
|
|
{ |
|
|
name: '发票代码', |
|
|
text: '日常申请', |
|
|
values:0 |
|
|
value: '320000', |
|
|
}, |
|
|
} |
|
|
{ |
|
|
]; |
|
|
name: '发票号码', |
|
|
function finishApplyType({ selectedOptions }){ |
|
|
values:1 |
|
|
showType.value = false; |
|
|
}, |
|
|
applyType.value = selectedOptions.map((option) => option.text); |
|
|
{ |
|
|
} |
|
|
name: '合计金额(元)', |
|
|
// 所属项目的 |
|
|
values:2 |
|
|
const showProject = ref(false); |
|
|
}, |
|
|
const applyType = ref(''); // 选择的项目的值 |
|
|
{ |
|
|
const applyProjectOptions = [ |
|
|
name: '税额(元)', |
|
|
{ |
|
|
values:3 |
|
|
text: '项目一', |
|
|
}, |
|
|
value: '330000', |
|
|
{ |
|
|
}, |
|
|
name: '开票日期', |
|
|
{ |
|
|
values:4 |
|
|
text: '项目二', |
|
|
|
|
|
value: '320000', |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
text: '项目三', |
|
|
|
|
|
value: '310000', |
|
|
|
|
|
} |
|
|
|
|
|
]; |
|
|
|
|
|
function finishApplyProject({ selectedOptions }){ |
|
|
|
|
|
showProject.value = false; |
|
|
|
|
|
applyProject.value = selectedOptions.map((option) => option.text); |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
], |
|
|
|
|
|
reviewerList: [], // 审核人数组 |
|
|
|
|
|
checkerList: [], // 默认的审核人 |
|
|
|
|
|
applyData: [ |
|
|
|
|
|
{ |
|
|
|
|
|
applicant:'代用名1', |
|
|
|
|
|
money:100, |
|
|
|
|
|
time:'2021/12/31 12:31', |
|
|
|
|
|
type: 1 |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
applicant:'代用名2', |
|
|
|
|
|
money:100, |
|
|
|
|
|
time:'2021/12/31 12:31', |
|
|
|
|
|
type: 2 |
|
|
|
|
|
}, |
|
|
|
|
|
], // 申请的记录 |
|
|
|
|
|
isSuccess: false, // 上传票据是否成功 |
|
|
|
|
|
name: '', // 提交人的姓名 |
|
|
|
|
|
pplyMoney: '5000', // 手动输入时输入的申请的金额 |
|
|
|
|
|
titleHidden: true, // 上传提示语隐藏 |
|
|
|
|
|
currentPage: 0, // 当前显示页数 |
|
|
|
|
|
personalType: '个人申请', // 上传提示语隐藏 |
|
|
|
|
|
personalCategory: '用款', |
|
|
|
|
|
// 其他信息的多个选择按钮 |
|
|
|
|
|
showType: false, // 申请类型的 |
|
|
|
|
|
applyProject: '', // 选择的类型的值 |
|
|
|
|
|
applyTypeOptions: [], |
|
|
|
|
|
showCategory: false, // 所属的类目 |
|
|
|
|
|
applyCategory: '', // 选择的类目的值 |
|
|
|
|
|
applyCategoryOptions: [], |
|
|
|
|
|
showName: false, // 所属的名目 |
|
|
|
|
|
applyName: '', // 选择的名目的值 |
|
|
|
|
|
applyNameOptions: [], |
|
|
|
|
|
showDepartment: false, // 所属的部门 |
|
|
|
|
|
applyDepartment: '', // 选择的部门的值 |
|
|
|
|
|
applyDepartmentOptions: [], |
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
// 所属任务的 |
|
|
// 选择申请类型 |
|
|
const showTask = ref(false); |
|
|
function finishApplyType({ selectedOptions }){ |
|
|
const applyTask = ref(''); // 选择的任务的值 |
|
|
showType.value = false; |
|
|
const applyTaskOptions = [ |
|
|
applyType.value = selectedOptions.map((option) => option.text); |
|
|
{ |
|
|
} |
|
|
text: '任务一', |
|
|
|
|
|
value: '330000', |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
text: '任务二', |
|
|
|
|
|
value: '320000', |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
text: '任务三', |
|
|
|
|
|
value: '310000', |
|
|
|
|
|
} |
|
|
|
|
|
]; |
|
|
|
|
|
function finishApplyTask({ selectedOptions }){ |
|
|
|
|
|
showTask.value = false; |
|
|
|
|
|
applyTask.value = selectedOptions.map((option) => option.text); |
|
|
|
|
|
} |
|
|
|
|
|
// 所属的类目 |
|
|
|
|
|
const showCategory = ref(false); |
|
|
|
|
|
const applyCategory = ref(''); // 选择的类目的值 |
|
|
|
|
|
const applyCategoryOptions = [ |
|
|
|
|
|
{ |
|
|
|
|
|
text: '报销', |
|
|
|
|
|
value: '330000', |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
text: '奖金', |
|
|
|
|
|
value: '320000', |
|
|
|
|
|
}, |
|
|
|
|
|
]; |
|
|
|
|
|
function finishApplyCategory({ selectedOptions }){ |
|
|
|
|
|
showCategory.value = false; |
|
|
|
|
|
applyCategory.value = selectedOptions.map((option) => option.text); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 所属的名目 |
|
|
// 所属的类目 |
|
|
const showName = ref(false); |
|
|
function finishApplyCategory({ selectedOptions }){ |
|
|
const applyName = ref(''); // 选择的名目的值 |
|
|
showCategory.value = false; |
|
|
const applyNameOptions = [ |
|
|
applyCategory.value = selectedOptions.map((option) => option.text); |
|
|
{ |
|
|
} |
|
|
text: '办公费', |
|
|
|
|
|
value: '330000', |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
text: '车辆费用', |
|
|
|
|
|
value: '320000', |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
text: '差旅费', |
|
|
|
|
|
value: '310000', |
|
|
|
|
|
} |
|
|
|
|
|
]; |
|
|
|
|
|
function finishApplyName({ selectedOptions }){ |
|
|
|
|
|
showName.value = false; |
|
|
|
|
|
applyName.value = selectedOptions.map((option) => option.text); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 所属部门 |
|
|
// 所属的名目 |
|
|
const showDepartment = ref(false); |
|
|
function finishApplyName({ selectedOptions }){ |
|
|
const applyDepartment = ref(''); // 选择的部门的值 |
|
|
showName.value = false; |
|
|
const applyDepartmentOptions = [ |
|
|
applyName.value = selectedOptions.map((option) => option.text); |
|
|
{ |
|
|
} |
|
|
text: '软件部', |
|
|
|
|
|
value: '330000', |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
text: '硬件部', |
|
|
|
|
|
value: '320000', |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
text: '人事部', |
|
|
|
|
|
value: '310000', |
|
|
|
|
|
} |
|
|
|
|
|
]; |
|
|
|
|
|
function finishApplyDepartment({ selectedOptions }){ |
|
|
|
|
|
showDepartment.value = false; |
|
|
|
|
|
applyDepartment.value = selectedOptions.map((option) => option.text); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 所属部门 |
|
|
|
|
|
function finishApplyDepartment({ selectedOptions }){ |
|
|
|
|
|
showDepartment.value = false; |
|
|
|
|
|
applyDepartment.value = selectedOptions.map((option) => option.text); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// 检查被选中的审核人的状态 |
|
|
// 检查被选中的审核人的状态 |
|
|
function handleSelectChecker(items){ |
|
|
function handleSelectChecker(id){ |
|
|
const target = selected.value.find(item =>item === items) |
|
|
const target = data.checkerList.find(item =>item === id) |
|
|
if(target){ |
|
|
if(target){ |
|
|
selected.value = selected.value.filter(item =>item !== items) |
|
|
data.checkerList = data.checkerList.filter(item =>item !== id) |
|
|
}else{ |
|
|
}else{ |
|
|
selected.value.push(items) |
|
|
data.checkerList.push(id) |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// 上传票据事件 |
|
|
// 上传票据事件 |
|
|
function uploadBill(){ |
|
|
function uploadBill(){ |
|
|
//TODO:调取接口识别票据 |
|
|
//TODO:调取接口识别票据 |
|
@ -465,6 +354,53 @@ function uploadBill(){ |
|
|
},1000) |
|
|
},1000) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 查询所有成员 |
|
|
|
|
|
* @param { String } projectId |
|
|
|
|
|
*/ |
|
|
|
|
|
async function handleQueryChecker(){ |
|
|
|
|
|
try { |
|
|
|
|
|
const params = { |
|
|
|
|
|
param:{ |
|
|
|
|
|
projectId: projectId.value |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
const res = await queryChecker(params) |
|
|
|
|
|
data.reviewerList = res |
|
|
|
|
|
} catch (error) { |
|
|
|
|
|
console.error('error: ', error); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 查询费用申请类型 |
|
|
|
|
|
* @param { String } parentId 上级类型ID,默认为0 |
|
|
|
|
|
* @param { Number } type 类型:0申请类型 1类目 2名目 |
|
|
|
|
|
*/ |
|
|
|
|
|
async function handleQueryType(parentId, type){ |
|
|
|
|
|
try { |
|
|
|
|
|
const params = { |
|
|
|
|
|
param:{ |
|
|
|
|
|
parentId, |
|
|
|
|
|
type, |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
const res = await queryType(params) |
|
|
|
|
|
res.forEach((item) => { |
|
|
|
|
|
data.applyTypeOptions.push(item.name) |
|
|
|
|
|
}) |
|
|
|
|
|
} catch (error) { |
|
|
|
|
|
console.error('error: ', error); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
onMounted(() =>{ |
|
|
|
|
|
// 查询所有成员 |
|
|
|
|
|
handleQueryChecker() |
|
|
|
|
|
// 查询费用申请类型 |
|
|
|
|
|
handleQueryType(0, 0) |
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
</script> |
|
|
</script> |
|
|
|
|
|
|
|
|
<style lang="less" scoped> |
|
|
<style lang="less" scoped> |
|
|