From 99229b25c71c8305082743ad623fad3cad6f2f6a Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期三, 12 八月 2026 13:56:47 +0800
Subject: [PATCH] 附件缩放旋转
---
src/views/project/travelexpenseapply/travelexpensedetail/index.vue | 1033 +++++++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 817 insertions(+), 216 deletions(-)
diff --git a/src/views/project/travelexpenseapply/travelexpensedetail/index.vue b/src/views/project/travelexpenseapply/travelexpensedetail/index.vue
index 8750f26..1851048 100644
--- a/src/views/project/travelexpenseapply/travelexpensedetail/index.vue
+++ b/src/views/project/travelexpenseapply/travelexpensedetail/index.vue
@@ -3,19 +3,37 @@
<div class="boxdiv">
<div class="top-text">{{ title }}</div>
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
- <el-row><el-col :span="5">
+ <el-row
+ ><el-col :span="5">
<el-form-item label="鐢宠鏃ユ湡" prop="applyTime">
- <el-date-picker style="width: 100%" v-model="form.applyTime" type="date"
- value-format="yyyy-MM-dd HH:mm:ss" placeholder="鐢宠鏃ユ湡" :disabled="true">
+ <el-date-picker
+ style="width: 100%"
+ v-model="form.applyTime"
+ type="date"
+ value-format="yyyy-MM-dd HH:mm:ss"
+ placeholder="鐢宠鏃ユ湡"
+ :disabled="true"
+ >
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="缁忓姙浜�" prop="username">
- <el-select v-model="form.username" clearable filterable allow-create ref="getReportname"
- default-first-option placeholder="璇烽�夋嫨">
- <el-option v-for="item in personsList" :key="item.reportNo" :label="item.reportName"
- :value="item.reportName">
+ <el-select
+ v-model="form.username"
+ clearable
+ filterable
+ allow-create
+ ref="getReportname"
+ default-first-option
+ placeholder="璇烽�夋嫨"
+ >
+ <el-option
+ v-for="item in personsList"
+ :key="item.reportNo"
+ :label="item.reportName"
+ :value="item.reportName"
+ >
</el-option>
</el-select>
</el-form-item>
@@ -40,38 +58,87 @@
</el-col>
<el-col :span="5">
<el-form-item label="鎶ラ攢绫诲埆" prop="costtype">
- <el-select v-model="form.costtype" value-key="value" placeholder="璇烽�夋嫨鎶ラ攢浜哄憳绫诲埆">
- <el-option v-for="dict in dict.type.sys_travelexpensebelong" :key="dict.value" :label="dict.label"
- :value="dict.value"></el-option>
+ <el-select
+ v-model="form.costtype"
+ value-key="value"
+ placeholder="璇烽�夋嫨鎶ラ攢浜哄憳绫诲埆"
+ >
+ <el-option
+ v-for="dict in dict.type.sys_travelexpensebelong"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.value"
+ ></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="5">
- <el-form-item label="鎹愮尞鑰�" prop="infoid" v-show="form.costtype == 4">
- <el-select v-model="form.infoid" @change="selectbaseinfo" clearable filterable placeholder="璇烽�夋嫨鎹愮尞鑰�">
- <el-option v-for="item in baselist" :key="item.index" :label="item.name" :value="item.infoid">
+ <el-form-item
+ label="鎹愮尞鑰�"
+ prop="infoid"
+ v-show="form.costtype == 3 || form.costtype == 4"
+ >
+ <el-select
+ v-model="form.infoid"
+ @change="selectbaseinfo"
+ clearable
+ filterable
+ placeholder="璇烽�夋嫨鎹愮尞鑰�"
+ >
+ <el-option
+ v-for="item in baselist"
+ :key="item.index"
+ :label="item.name"
+ :value="item.infoid"
+ >
</el-option>
</el-select>
</el-form-item>
+ </el-col>
+ <el-col :span="4">
+ <div style="margin-left: 10px;">
+ <dict-tag
+ :options="dict.type.sys_DonationStatus"
+ :value="form.invoicecount"
+ />
+ </div>
</el-col>
</el-row>
<el-row style="margin-top: 10px">
<el-col :span="5">
<el-form-item label="瀹℃牳鐘舵��" prop="flowlevel">
- <el-select v-model="form.recordstatus" placeholder="璇烽�夋嫨瀹℃牳鐘舵��" clearable :disabled="true" size="small">
- <el-option v-for="dict in dict.type.sys_recordstatus" :key="dict.value" :label="dict.label"
- :value="dict.value" />
+ <el-select
+ v-model="form.recordstatus"
+ placeholder="璇烽�夋嫨瀹℃牳鐘舵��"
+ clearable
+ :disabled="true"
+ size="small"
+ >
+ <el-option
+ v-for="dict in dict.type.sys_recordstatus"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.value"
+ />
</el-select>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="鎶ラ攢閲戦" prop="amountrequested">
- <el-input :disabled="true" v-model="form.amountrequested" placeholder="鎶ラ攢鍚堣閲戦" />
+ <el-input
+ :disabled="true"
+ v-model="form.amountrequested"
+ placeholder="鎶ラ攢鍚堣閲戦"
+ />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="澶у啓閲戦" prop="bigstrmoney">
- <el-input :disabled="true" v-model="form.bigstrmoney" placeholder="鎶ラ攢澶у啓閲戦" />
+ <el-input
+ :disabled="true"
+ v-model="form.bigstrmoney"
+ placeholder="鎶ラ攢澶у啓閲戦"
+ />
</el-form-item>
</el-col>
</el-row>
@@ -86,7 +153,7 @@
<el-form-item label="鍑哄樊浜�" prop="travelers">
<el-select v-model="form.travelers" clearable filterable allow-create ref="getReportname"
default-first-option placeholder="璇烽�夋嫨" @change="getAccountinfo()">
- <el-option v-for="item in travelers" :key="item.reportNo" :label="item.reportName"
+ <el-option v-for="item in travelers" :label="item.reportName"
:value="item.reportName">
</el-option>
</el-select>
@@ -167,145 +234,324 @@
<el-row v-if="jurisdiction">
<!-- <el-alert title="褰撳墠涓烘煡鐪嬬姸鎬侊紝涓嶆敮鎸佷慨鏀瑰瓨鍌ㄣ��" type="warning">
</el-alert> -->
- <el-alert title="褰撳墠涓烘煡鐪嬬姸鎬侊紝涓嶆敮鎸佷慨鏀瑰瓨鍌ㄣ��" type="warning" show-icon>
+ <el-alert
+ title="褰撳墠涓烘煡鐪嬬姸鎬侊紝涓嶆敮鎸佷慨鏀瑰瓨鍌ㄣ��"
+ type="warning"
+ show-icon
+ >
</el-alert>
</el-row>
<el-row style="margin-top: 25px; margin-bottom: 5px">
<el-col :span="20">鎶ラ攢鏄庣粏</el-col>
</el-row>
<el-row>
- <el-table :data="rbDetails" ref="table" border max-height="800" highlight-current-row
- :summary-method="getSummaries" show-summary>
- <el-table-column prop="orderno" slot="" label="搴忓彿" align="center" fixed width="88">
+ <el-table
+ :data="rbDetails"
+ ref="table"
+ border
+ max-height="800"
+ highlight-current-row
+ :summary-method="getSummaries"
+ show-summary
+ >
+ <el-table-column
+ prop="orderno"
+ slot=""
+ label="搴忓彿"
+ align="center"
+ fixed
+ width="88"
+ >
<template slot-scope="scope">
<el-input v-model="scope.row.orderno" placeholder="搴忓彿" />
</template>
</el-table-column>
<!--涓婚敭銆佸涓嶅睍绀�-->
- <el-table-column prop="id" slot="" label="涓婚敭" align="center" fixed width="95" v-if="false">
+ <el-table-column
+ prop="id"
+ slot=""
+ label="涓婚敭"
+ align="center"
+ fixed
+ width="95"
+ v-if="false"
+ >
<template slot-scope="scope">
<el-input v-model="scope.row.id" placeholder="id" />
</template>
</el-table-column>
- <el-table-column prop="rbid" slot="" label="澶栭敭" align="center" fixed width="95" v-if="false">
+ <el-table-column
+ prop="rbid"
+ slot=""
+ label="澶栭敭"
+ align="center"
+ fixed
+ width="95"
+ v-if="false"
+ >
<template slot-scope="scope">
<el-input v-model="scope.row.rbid" placeholder="rbid" />
</template>
</el-table-column>
- <el-table-column prop="persontype" slot="" label="浜哄憳绫诲埆" align="center" fixed width="130">
+ <el-table-column
+ prop="persontype"
+ slot=""
+ label="浜哄憳绫诲埆"
+ align="center"
+ fixed
+ width="130"
+ >
<template slot-scope="scope">
- <el-select v-model="scope.row.persontype" value-key="value" placeholder="浜哄憳绫诲埆"
- @change="getPersons(scope.row)">
- <el-option v-for="dict in dict.type.sys_travelexpensebelong" :key="dict.value" :label="dict.label"
- :value="dict.label"></el-option>
+ <el-select
+ v-model="scope.row.persontype"
+ value-key="value"
+ placeholder="浜哄憳绫诲埆"
+ @change="getPersons(scope.row)"
+ >
+ <el-option
+ v-for="dict in dict.type.sys_travelexpensebelong"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.label"
+ ></el-option>
</el-select>
</template>
</el-table-column>
- <el-table-column prop="personname" slot="" label="璐圭敤浜哄憳" align="center" fixed width="110">
+ <el-table-column
+ prop="personname"
+ slot=""
+ label="璐圭敤浜哄憳"
+ align="center"
+ fixed
+ width="110"
+ >
<template slot-scope="scope">
- <el-select v-model="scope.row.personname" clearable filterable allow-create default-first-option
- placeholder="璇烽�夋嫨">
- <el-option v-for="item in personsSel" :key="item.id" :label="item.reportNameDesc"
- :value="item.reportName">
+ <el-select
+ v-model="scope.row.personname"
+ clearable
+ filterable
+ allow-create
+ default-first-option
+ placeholder="璇烽�夋嫨"
+ >
+ <el-option
+ v-for="item in personsSel"
+ :key="item.id"
+ :label="item.reportNameDesc"
+ :value="item.reportName"
+ >
</el-option>
</el-select>
</template>
</el-table-column>
- <el-table-column prop="starttime" slot="" label="寮�濮嬫棩鏈�" fixed align="center" width="150">
+ <el-table-column
+ prop="starttime"
+ slot=""
+ label="寮�濮嬫棩鏈�"
+ fixed
+ align="center"
+ width="150"
+ >
<template slot-scope="scope">
- <el-date-picker :picker-options="{
- disabledDate: time => {
- if (scope.row.endtime) {
- return (
- time.getTime() >
- new Date(scope.row.endtime.replace(/-/g, '/'))
- );
+ <el-date-picker
+ :picker-options="{
+ disabledDate: time => {
+ if (scope.row.endtime) {
+ return (
+ time.getTime() >
+ new Date(scope.row.endtime.replace(/-/g, '/'))
+ );
+ }
}
- }
- }" clearable size="small" style="width: 100%" v-model="scope.row.starttime" type="date"
- value-format="yyyy-MM-dd HH:mm:ss" placeholder="寮�濮嬫棩鏈�" @blur="getdays(scope.row)">
+ }"
+ clearable
+ size="small"
+ style="width: 100%"
+ v-model="scope.row.starttime"
+ type="date"
+ value-format="yyyy-MM-dd HH:mm:ss"
+ placeholder="寮�濮嬫棩鏈�"
+ @blur="getdays(scope.row)"
+ >
</el-date-picker>
</template>
</el-table-column>
- <el-table-column prop="endtime" slot="" label="缁撴潫鏃ユ湡" align="center" fixed width="150">
+ <el-table-column
+ prop="endtime"
+ slot=""
+ label="缁撴潫鏃ユ湡"
+ align="center"
+ fixed
+ width="150"
+ >
<template slot-scope="scope">
- <el-date-picker :picker-options="{
- disabledDate: time => {
- if (scope.row.starttime) {
- return (
- time.getTime() <
- new Date(scope.row.starttime.replace(/-/g, '/'))
- );
+ <el-date-picker
+ :picker-options="{
+ disabledDate: time => {
+ if (scope.row.starttime) {
+ return (
+ time.getTime() <
+ new Date(scope.row.starttime.replace(/-/g, '/'))
+ );
+ }
}
- }
- }" clearable size="small" style="width: 100%" v-model="scope.row.endtime" type="date"
- value-format="yyyy-MM-dd HH:mm:ss" placeholder="缁撴潫鏃ユ湡" @blur="getdays(scope.row)">
+ }"
+ clearable
+ size="small"
+ style="width: 100%"
+ v-model="scope.row.endtime"
+ type="date"
+ value-format="yyyy-MM-dd HH:mm:ss"
+ placeholder="缁撴潫鏃ユ湡"
+ @blur="getdays(scope.row)"
+ >
</el-date-picker>
</template>
</el-table-column>
- <el-table-column prop="departure" slot="" label="鍑哄彂鍦�" align="center" width="100">
+ <el-table-column
+ prop="departure"
+ slot=""
+ label="鍑哄彂鍦�"
+ align="center"
+ width="100"
+ >
<template slot-scope="scope">
<el-input v-model="scope.row.departure" placeholder="鍑哄彂鍦�" />
</template>
</el-table-column>
- <el-table-column label="鍒拌揪鍦�" prop="destination" align="center" width="140">
+ <el-table-column
+ label="鍒拌揪鍦�"
+ prop="destination"
+ align="center"
+ width="140"
+ >
<template slot-scope="scope">
<!-- <el-input v-model="scope.row.destination" placeholder="鍒拌揪鍦�" @blur="getallowance(scope.row)" /> -->
- <el-select filterable allow-create v-model="scope.row.destination" value-key="value" placeholder="鍒拌揪鍦�"
- @change="getallowance(scope.row)">
- <el-option v-for="dict in dict.type.sys_area_name" :key="dict.value" :label="dict.label"
- :value="dict.label"></el-option>
+ <el-select
+ filterable
+ allow-create
+ v-model="scope.row.destination"
+ value-key="value"
+ placeholder="鍒拌揪鍦�"
+ @change="getallowance(scope.row)"
+ >
+ <el-option
+ v-for="dict in dict.type.sys_area_name"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.label"
+ ></el-option>
</el-select>
</template>
</el-table-column>
- <el-table-column prop="days" label="澶╂暟" width="100" align="center">
+ <el-table-column
+ prop="days"
+ label="澶╂暟"
+ width="100"
+ align="center"
+ >
<template slot-scope="scope">
- <el-input v-model="scope.row.days" @blur="getallowance(scope.row)" placeholder="澶╂暟" />
+ <el-input
+ v-model="scope.row.days"
+ @blur="getallowance(scope.row)"
+ placeholder="澶╂暟"
+ />
</template>
</el-table-column>
- <el-table-column prop="traffictype" label="鍑哄彂浜ら�氬伐鍏�" align="center" width="100">
+ <el-table-column
+ prop="traffictype"
+ label="鍑哄彂浜ら�氬伐鍏�"
+ align="center"
+ width="100"
+ >
<template slot-scope="scope">
- <el-select v-model="scope.row.traffictype" placeholder="鍑哄彂浜ら�氬伐鍏�">
- <el-option v-for="dict in dict.type.sys_traffictype" :key="dict.value" :label="dict.label"
- :value="dict.label"></el-option>
+ <el-select
+ v-model="scope.row.traffictype"
+ placeholder="鍑哄彂浜ら�氬伐鍏�"
+ >
+ <el-option
+ v-for="dict in dict.type.sys_traffictype"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.label"
+ ></el-option>
</el-select>
</template>
</el-table-column>
- <el-table-column prop="traffictype2" label="杩斿洖浜ら�氬伐鍏�" align="center" width="100">
+ <el-table-column
+ prop="traffictype2"
+ label="杩斿洖浜ら�氬伐鍏�"
+ align="center"
+ width="100"
+ >
<template slot-scope="scope">
- <el-select v-model="scope.row.traffictype2" placeholder="杩斿洖浜ら�氬伐鍏�">
- <el-option v-for="dict in dict.type.sys_traffictype" :key="dict.value" :label="dict.label"
- :value="dict.label"></el-option>
+ <el-select
+ v-model="scope.row.traffictype2"
+ placeholder="杩斿洖浜ら�氬伐鍏�"
+ >
+ <el-option
+ v-for="dict in dict.type.sys_traffictype"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.label"
+ ></el-option>
</el-select>
</template>
</el-table-column>
- <el-table-column prop="trafficexpense" label="浜ら�氳垂" align="center" width="120">
+ <el-table-column
+ prop="trafficexpense"
+ label="浜ら�氳垂"
+ align="center"
+ width="120"
+ >
<template slot-scope="scope">
- <el-input v-model="scope.row.trafficexpense" placeholder="浜ら�氳垂" @blur="
- val => {
- sumRowFee(scope.row);
- }
- " />
+ <el-input
+ v-model="scope.row.trafficexpense"
+ placeholder="浜ら�氳垂"
+ @blur="
+ val => {
+ sumRowFee(scope.row);
+ }
+ "
+ />
</template>
</el-table-column>
- <el-table-column prop="cityfee" label="甯傚唴浜ら�氳垂" align="center" width="120">
+ <el-table-column
+ prop="cityfee"
+ label="甯傚唴浜ら�氳垂"
+ align="center"
+ width="120"
+ >
<template slot-scope="scope">
- <el-input v-model="scope.row.cityfee" placeholder="甯傚唴浜ら�氳垂" @blur="
- val => {
- sumRowFee(scope.row);
- }
- ">{{ Number(scope.row.cityfee).toFixed(2) }}
+ <el-input
+ v-model="scope.row.cityfee"
+ placeholder="甯傚唴浜ら�氳垂"
+ @blur="
+ val => {
+ sumRowFee(scope.row);
+ }
+ "
+ >{{ Number(scope.row.cityfee).toFixed(2) }}
</el-input>
</template>
</el-table-column>
- <el-table-column prop="hotelexpense" label="浣忓璐�" align="center" width="120">
+ <el-table-column
+ prop="hotelexpense"
+ label="浣忓璐�"
+ align="center"
+ width="120"
+ >
<template slot-scope="scope">
- <el-input v-model="scope.row.hotelexpense" placeholder="浣忓璐�" @blur="
- val => {
- sumRowFee(scope.row);
- }
- " />
+ <el-input
+ v-model="scope.row.hotelexpense"
+ placeholder="浣忓璐�"
+ @blur="
+ val => {
+ sumRowFee(scope.row);
+ }
+ "
+ />
</template>
</el-table-column>
@@ -327,55 +573,118 @@
/>
</template>
</el-table-column> -->
- <el-table-column prop="foodallowance" label="浼欓琛ュ姪" align="center" width="120">
+ <el-table-column
+ prop="foodallowance"
+ label="浼欓琛ュ姪"
+ align="center"
+ width="120"
+ >
<template slot-scope="scope">
- <el-input v-model="scope.row.foodallowance" placeholder="浼欓璐硅ˉ鍔�" @blur="
- val => {
- sumRowFee(scope.row);
- }
- " />
+ <el-input
+ v-model="scope.row.foodallowance"
+ placeholder="浼欓璐硅ˉ鍔�"
+ @blur="
+ val => {
+ sumRowFee(scope.row);
+ }
+ "
+ />
</template>
</el-table-column>
- <el-table-column prop="otherexpense" label="鍏潅璐硅ˉ鍔�" align="center" width="120">
+ <el-table-column
+ prop="otherexpense"
+ label="鍏潅璐硅ˉ鍔�"
+ align="center"
+ width="120"
+ >
<template slot-scope="scope">
- <el-input v-model="scope.row.otherexpense" placeholder="鏉傝垂" @blur="
- val => {
- sumRowFee(scope.row);
- }
- " />
+ <el-input
+ v-model="scope.row.otherexpense"
+ placeholder="鏉傝垂"
+ @blur="
+ val => {
+ sumRowFee(scope.row);
+ }
+ "
+ />
</template>
</el-table-column>
- <el-table-column prop="otherfeeamount" label="鍏朵粬璐圭敤" align="center" width="120">
+ <el-table-column
+ prop="otherfeeamount"
+ label="鍏朵粬璐圭敤"
+ align="center"
+ width="120"
+ >
<template slot-scope="scope">
- <el-input v-model="scope.row.otherfeeamount" placeholder="鍏朵粬璐圭敤" @blur="
- val => {
- sumRowFee(scope.row);
- }
- " />
+ <el-input
+ v-model="scope.row.otherfeeamount"
+ placeholder="鍏朵粬璐圭敤"
+ @blur="
+ val => {
+ sumRowFee(scope.row);
+ }
+ "
+ />
</template>
</el-table-column>
- <el-table-column prop="departure" slot="" label="鍏朵粬璐圭敤璇存槑" align="center" width="120">
+ <el-table-column
+ prop="departure"
+ slot=""
+ label="鍏朵粬璐圭敤璇存槑"
+ align="center"
+ width="120"
+ >
<template slot-scope="scope">
- <el-input v-model="scope.row.otherfeedesc" placeholder="鍏朵粬璐圭敤璇存槑" />
+ <el-input
+ v-model="scope.row.otherfeedesc"
+ placeholder="鍏朵粬璐圭敤璇存槑"
+ />
</template>
</el-table-column>
- <el-table-column prop="total" label="鍚堣" align="center" width="110" fixed="right">
+ <el-table-column
+ prop="total"
+ label="鍚堣"
+ align="center"
+ width="110"
+ fixed="right"
+ >
<template slot-scope="scope">
<el-input v-model="scope.row.total" placeholder="鍚堣" />
</template>
</el-table-column>
- <el-table-column fixed="right" label="鎿嶄綔" align="center" width="120">
+ <el-table-column
+ fixed="right"
+ label="鎿嶄綔"
+ align="center"
+ width="120"
+ >
<template slot-scope="scope">
- <el-button type="text" size="mini" @click="addDetailRow(scope.$index)"
- v-if="operationType == 'edit'">鏂板</el-button>
- <el-button @click.native.prevent="
- deleteDetailRow(scope.$index, rbDetails, scope.row)
- " type="text" size="small" v-if="operationType == 'edit'">鍒犻櫎</el-button>
- <el-button @click.native.prevent="
- Filepopup(scope.$index, rbDetails, scope.row)
- " type="text" size="small">绁ㄦ嵁</el-button>
+ <el-button
+ type="text"
+ size="mini"
+ @click="addDetailRow(scope.$index)"
+ v-if="operationType == 'edit'"
+ >鏂板</el-button
+ >
+ <el-button
+ @click.native.prevent="
+ deleteDetailRow(scope.$index, rbDetails, scope.row)
+ "
+ type="text"
+ size="small"
+ v-if="operationType == 'edit'"
+ >鍒犻櫎</el-button
+ >
+ <el-button
+ @click.native.prevent="
+ Filepopup(scope.$index, rbDetails, scope.row)
+ "
+ type="text"
+ size="small"
+ >绁ㄦ嵁</el-button
+ >
</template>
</el-table-column>
</el-table>
@@ -384,60 +693,154 @@
<el-col :span="20">鎵撴鏄庣粏</el-col>
</el-row>
<el-row style="margin-top: 5px">
- <el-table :data="rbPayees" border max-height="400" highlight-current-row :summary-method="getSummaries"
- show-summary>
- <el-table-column prop="orderno" slot="" label="搴忓彿" align="center" fixed width="65">
+ <el-table
+ :data="rbPayees"
+ border
+ max-height="400"
+ highlight-current-row
+ :summary-method="getSummaries"
+ show-summary
+ >
+ <el-table-column
+ prop="orderno"
+ slot=""
+ label="搴忓彿"
+ align="center"
+ fixed
+ width="65"
+ >
<template slot-scope="scope">
<el-input v-model="scope.row.orderno" placeholder="搴忓彿" />
</template>
</el-table-column>
<!--涓婚敭銆佸閿笉灞曠ず-->
- <el-table-column prop="id" slot="" label="涓婚敭" align="center" fixed width="95" v-if="false">
+ <el-table-column
+ prop="id"
+ slot=""
+ label="涓婚敭"
+ align="center"
+ fixed
+ width="95"
+ v-if="false"
+ >
<template slot-scope="scope">
<el-input v-model="scope.row.id" placeholder="id" />
</template>
</el-table-column>
- <el-table-column prop="rbid" slot="" label="澶栭敭" align="center" fixed width="95" v-if="false">
+ <el-table-column
+ prop="rbid"
+ slot=""
+ label="澶栭敭"
+ align="center"
+ fixed
+ width="95"
+ v-if="false"
+ >
<template slot-scope="scope">
<el-input v-model="scope.row.rbid" placeholder="rbid" />
</template>
</el-table-column>
- <el-table-column prop="persontype" slot="" label="鏀舵浜虹被鍒�" align="center" fixed width="150">
+ <el-table-column
+ prop="persontype"
+ slot=""
+ label="鏀舵浜虹被鍒�"
+ align="center"
+ fixed
+ width="150"
+ >
<template slot-scope="scope">
- <el-select v-model="scope.row.persontype" value-key="value" placeholder="鏀舵浜虹被鍒�"
- @change="getPersons(scope.row)">
- <el-option v-for="dict in dict.type.sys_travelexpensebelong" :key="dict.value" :label="dict.label"
- :value="dict.label"></el-option>
+ <el-select
+ v-model="scope.row.persontype"
+ value-key="value"
+ placeholder="鏀舵浜虹被鍒�"
+ @change="getPersons(scope.row)"
+ >
+ <el-option
+ v-for="dict in dict.type.sys_travelexpensebelong"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.label"
+ ></el-option>
</el-select>
</template>
</el-table-column>
- <el-table-column prop="personname" slot="" label="鏀舵浜�" align="center" fixed width="200">
+ <el-table-column
+ prop="personname"
+ slot=""
+ label="鏀舵浜�"
+ align="center"
+ fixed
+ width="200"
+ >
<template slot-scope="scope">
- <el-select v-model="scope.row.personname" clearable filterable allow-create ref="getReportname"
- default-first-option placeholder="璇烽�夋嫨" @change="getAccountinfo2(scope.row, scope.row.persontype)">
- <el-option v-for="item in personsSel" :key="item.id" :label="item.reportNameDesc" :value="item.id">
+ <el-select
+ v-model="scope.row.personname"
+ clearable
+ filterable
+ allow-create
+ ref="getReportname"
+ default-first-option
+ placeholder="璇烽�夋嫨"
+ @change="getAccountinfo2(scope.row, scope.row.persontype)"
+ >
+ <el-option
+ v-for="item in personsSel"
+ :key="item.id"
+ :label="item.reportNameDesc"
+ :value="item.id"
+ >
</el-option>
</el-select>
</template>
</el-table-column>
- <el-table-column prop="bankname" slot="" label="鏀舵閾惰" align="center" fixed width="250">
+ <el-table-column
+ prop="bankname"
+ slot=""
+ label="鏀舵閾惰"
+ align="center"
+ fixed
+ width="250"
+ >
<template slot-scope="scope">
<el-input v-model="scope.row.bankname" placeholder="鏀舵閾惰" />
</template>
</el-table-column>
- <el-table-column prop="bankcardno" slot="" label="閾惰璐﹀彿" align="center" fixed width="200">
+ <el-table-column
+ prop="bankcardno"
+ slot=""
+ label="閾惰璐﹀彿"
+ align="center"
+ fixed
+ width="200"
+ >
<template slot-scope="scope">
- <el-input v-model="scope.row.bankcardno" placeholder="閾惰璐﹀彿" />
+ <el-input
+ v-model="scope.row.bankcardno"
+ placeholder="閾惰璐﹀彿"
+ />
</template>
</el-table-column>
- <el-table-column prop="amount" slot="" label="鎵撴閲戦" align="center" fixed width="130">
+ <el-table-column
+ prop="amount"
+ slot=""
+ label="鎵撴閲戦"
+ align="center"
+ fixed
+ width="130"
+ >
<template slot-scope="scope">
<el-input v-model="scope.row.amount" placeholder="鎵撴閲戦" />
</template>
</el-table-column>
- <el-table-column prop="remark" slot="" label="璇锋璇存槑" align="center" fixed>
+ <el-table-column
+ prop="remark"
+ slot=""
+ label="璇锋璇存槑"
+ align="center"
+ fixed
+ >
<template slot-scope="scope">
<el-input v-model="scope.row.remark" placeholder="璇存槑" />
</template>
@@ -450,42 +853,80 @@
</el-date-picker>
</template>
</el-table-column>-->
- <el-table-column label="鎿嶄綔" align="center" width="100" v-if="operationType == 'edit'">
+ <el-table-column
+ label="鎿嶄綔"
+ align="center"
+ width="100"
+ v-if="operationType == 'edit'"
+ >
<template slot-scope="scope">
- <el-button type="text" size="mini" @click="addPayeeRow(scope.$index)">鏂板</el-button>
- <el-button @click.native.prevent="
- deletePayeeRow(scope.$index, rbPayees, scope.row)
- " type="text" size="small">
+ <el-button
+ type="text"
+ size="mini"
+ @click="addPayeeRow(scope.$index)"
+ >鏂板</el-button
+ >
+ <el-button
+ @click.native.prevent="
+ deletePayeeRow(scope.$index, rbPayees, scope.row)
+ "
+ type="text"
+ size="small"
+ >
鍒犻櫎
</el-button>
</template>
</el-table-column>
</el-table>
</el-row>
- <el-row style="margin-top: 25px; margin-bottom: 5px" v-if="operationType != 'edit'">
+ <el-row
+ style="margin-top: 25px; margin-bottom: 5px"
+ v-if="operationType != 'edit'"
+ >
<el-col :span="20">瀹℃牳璁板綍</el-col>
</el-row>
<el-row v-if="operationType != 'add'">
<el-table :data="fundflowList" border>
- <el-table-column label="瀹℃牳鏃ユ湡" align="center" width="200" prop="createTime" />
- <el-table-column label="瀹℃牳浜�" align="center" width="150" prop="checkusername" />
- <el-table-column label="瀹℃牳缁撴灉" align="center" width="200" prop="flowconclusion">
+ <el-table-column
+ label="瀹℃牳鏃ユ湡"
+ align="center"
+ width="200"
+ prop="createTime"
+ />
+ <el-table-column
+ label="瀹℃牳浜�"
+ align="center"
+ width="150"
+ prop="checkusername"
+ />
+ <el-table-column
+ label="瀹℃牳缁撴灉"
+ align="center"
+ width="200"
+ prop="flowconclusion"
+ >
<template slot-scope="scope">
<span v-if="scope.row.flowconclusion == 1">閫氳繃</span>
<span v-if="scope.row.flowconclusion == 2">涓嶉�氳繃</span>
</template>
</el-table-column>
- <el-table-column label="瀹℃牳澶囨敞" align="center" prop="flowcontent" />
+ <el-table-column
+ label="瀹℃牳澶囨敞"
+ align="center"
+ prop="flowcontent"
+ />
</el-table>
</el-row>
- <el-row style="margin-top: 25px; margin-bottom: 5px"
- v-if="operationType == 'check' && userprofile.nickName == '闄堟厱鍗�'">
+ <el-row
+ style="margin-top: 25px; margin-bottom: 5px"
+ v-if="operationType == 'check' && userprofile.nickName == '闄堟厱鍗�'"
+ >
<el-col :span="12">
<el-form-item label="棰勫鏉愭枡" prop="infoid">
<el-radio-group v-model="form.checkstatus" align="left">
- <el-radio label="1">寰呯敵璇锋潗鏂�</el-radio>
- <el-radio label="2">瀹℃牳閫氳繃绛夊緟閭瘎绾歌川鏉愭枡</el-radio>
- <el-radio label="3">宸叉敹鍒版姤閿�鏉愭枡</el-radio>
+ <el-radio label="1">寰呯敵璇�</el-radio>
+ <el-radio label="2">瀹℃牳閫氳繃绛夊緟绾歌川鏉愭枡</el-radio>
+ <el-radio label="3">宸叉敹鍒扮焊璐ㄦ潗鏂�</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
@@ -500,7 +941,10 @@
</el-col>
</el-row>
- <el-row style="margin-top: 25px; margin-bottom: 5px" v-if="operationType == 'check'">
+ <el-row
+ style="margin-top: 25px; margin-bottom: 5px"
+ v-if="operationType == 'check'"
+ >
<el-col :span="7">
<el-form-item label="瀹℃牳缁撴灉" align="left">
<el-radio-group v-model="checkObj.flowlevelone" align="left">
@@ -519,15 +963,30 @@
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
- <el-button type="primary" @click="submitForm" v-if="operationType == 'edit' || userprofile.nickName == '闄堟厱鍗�'">淇�
- 瀛�</el-button>
- <el-button type="primary" @click="checksubmit" v-if="operationType == 'check'">鎻愪氦瀹℃牳</el-button>
+ <el-button
+ type="primary"
+ @click="submitForm"
+ v-if="operationType == 'edit' || userprofile.nickName == '闄堟厱鍗�'"
+ >淇� 瀛�</el-button
+ >
+ <el-button
+ type="primary"
+ @click="checksubmit"
+ v-if="operationType == 'check'"
+ >鎻愪氦瀹℃牳</el-button
+ >
<!--<el-button @click="cancel">閫� 鍑�</el-button>-->
</div>
</div>
- <el-dialog v-dialogDrags :modal="false" :close-on-click-modal="false" :title="pdftitle" :visible.sync="pdfVisible"
- width="60%">
+ <el-dialog
+ v-dialogDrags
+ :modal="false"
+ :close-on-click-modal="false"
+ :title="pdftitle"
+ :visible.sync="pdfVisible"
+ width="60%"
+ >
<div style="margin-bottom: 10px;">
<el-table :data="tableDatatop" style="width: 100%">
<el-table-column prop="orderno" label="搴忓彿"> </el-table-column>
@@ -557,27 +1016,66 @@
</el-table-column>
</el-table>
</div>
- <el-alert title="鏂颁笂浼犳枃浠堕渶鍦ㄦ彁浜や繚瀛樺悗鎵嶅彲杩涜妗堜緥鍏宠仈锛屽惁鍒欒涓烘斁寮�" type="error" show-icon close-text="鐭ラ亾浜�">
+ <el-alert
+ title="鏂颁笂浼犳枃浠堕渶鍦ㄦ彁浜や繚瀛樺悗鎵嶅彲杩涜妗堜緥鍏宠仈锛屽惁鍒欒涓烘斁寮�"
+ type="error"
+ show-icon
+ close-text="鐭ラ亾浜�"
+ >
</el-alert>
- <el-tabs style="margin-top: 20px;" v-model="activeName" type="border-card" @tab-click="handleClick">
+ <el-tabs
+ style="margin-top: 20px;"
+ v-model="activeName"
+ type="border-card"
+ @tab-click="handleClick"
+ >
<el-tab-pane label="鏅�氶檮浠�" :name="1">
<div class="pdfimg">
<div class="box-pdf">
<div>
- <el-upload size="mini" class="upload-demo" :action="uploadFileUrl" :file-list="fileListto"
- :show-file-list="false" multiple drag :headers="headers" :on-success="(response, file, fileList) =>
- uploadSccess(response, file, fileList)
- " :on-preview="downFile" :disabled="operationType == 'detail'" :on-error="handleUploadError"
- :on-remove="remove" accept="image/*,.pdf">
+ <el-upload
+ size="mini"
+ class="upload-demo"
+ :action="uploadFileUrl"
+ :file-list="fileListto"
+ :show-file-list="false"
+ multiple
+ drag
+ :headers="headers"
+ :on-success="
+ (response, file, fileList) =>
+ uploadSccess(response, file, fileList)
+ "
+ :on-preview="downFile"
+ :disabled="operationType == 'detail'"
+ :on-error="handleUploadError"
+ :on-remove="remove"
+ accept="image/*,.pdf"
+ >
<i class="el-icon-upload"></i>
<div class="el-upload__text">
灏嗙エ鎹嫋鍒版澶勶紝鎴�
- <em><el-button :disabled="operationType == 'detail'" size="small"
- type="primary">鐐瑰嚮涓婁紶</el-button></em>
+ <em
+ ><el-button
+ :disabled="operationType == 'detail'"
+ size="small"
+ type="primary"
+ >鐐瑰嚮涓婁紶</el-button
+ ></em
+ >
</div>
</el-upload>
- <el-table :data="fileListto" @row-click="downFile" style="width: 100%" height="400">
- <el-table-column prop="name" :show-overflow-tooltip="true" label="鍚嶇О">
+ <el-table
+ :data="fileListto"
+ @row-click="downFile"
+ style="width: 100%"
+ height="400"
+ >
+ <el-table-column
+ prop="name"
+ :show-overflow-tooltip="true"
+ label="鍚嶇О"
+ >
<template slot-scope="scope">
<i style="color:#409EFF" class=" el-icon-s-order" />{{
scope.row.name
@@ -585,30 +1083,55 @@
</template>
</el-table-column>
- <el-table-column prop="name" width="180" :show-overflow-tooltip="true" label="鍔熻兘">
+ <el-table-column
+ prop="name"
+ width="180"
+ :show-overflow-tooltip="true"
+ label="鍔熻兘"
+ >
<template slot-scope="scope">
- <el-button type="danger" size="mini"
- @click.native.prevent.stop="deletedowfile(scope.row)">鍒犻櫎</el-button>
- <el-button type="primary" size="mini"
- @click.native.prevent.stop="moveupdowfile(scope.row)">涓婄Щ</el-button>
+ <el-button
+ type="danger"
+ size="mini"
+ @click.native.prevent.stop="deletedowfile(scope.row)"
+ >鍒犻櫎</el-button
+ >
+ <el-button
+ type="primary"
+ size="mini"
+ @click.native.prevent.stop="moveupdowfile(scope.row)"
+ >涓婄Щ</el-button
+ >
</template>
</el-table-column>
</el-table>
</div>
</div>
- <div v-if="this.previewpdf && pdfimgsrcList.length" class="pdfimgmin">
+ <div
+ v-if="this.previewpdf && pdfimgsrcList.length"
+ class="pdfimgmin"
+ >
<!-- <img :src="pdfimg" /> -->
<!-- <el-image
style="width: 95%; height: 90%"
:src="pdfimg"
- :preview-src-list="pdfimgsrcList" -->
+ :preview-src-list="pdfimgsrcList"
+ > -->
+ <el-image
+ ref="imagePreview"
+ style="width: 95%; height: 90%"
+ :src="pdfimg"
+ @click="handleImageClick(initialIndex)"
>
- <el-image ref="imagePreview" style="width: 95%; height: 90%" :src="pdfimg"
- @click="handleImageClick(initialIndex)">
</el-image>
- <custom-image-viewer :url-list="pdfimgsrcList" :initial-index="currentIndex" :visible="viewerVisible"
- @update:visible="viewerVisible = $event" @close="handleViewerClose" />
+ <custom-image-viewer
+ :url-list="pdfimgsrcList"
+ :initial-index="currentIndex"
+ :visible="viewerVisible"
+ @update:visible="viewerVisible = $event"
+ @close="handleViewerClose"
+ />
<!-- <div slot="error" class="image-slot">
<i class="el-icon-picture-outline"></i>
</div> -->
@@ -621,20 +1144,49 @@
<div class="pdfimg">
<div class="box-pdf">
<div>
- <el-upload size="mini" class="upload-demo" :action="uploadFileUrl" :file-list="invoicefileList"
- :show-file-list="false" multiple drag :headers="headers" :on-success="(response, file, fileList) =>
- uploadSccess(response, file, fileList)
- " :on-preview="downFile" :disabled="operationType == 'detail'" :on-error="handleUploadError"
- :on-remove="remove" accept="image/*,.pdf">
+ <el-upload
+ size="mini"
+ class="upload-demo"
+ :action="uploadFileUrl"
+ :file-list="invoicefileList"
+ :show-file-list="false"
+ multiple
+ drag
+ :headers="headers"
+ :on-success="
+ (response, file, fileList) =>
+ uploadSccess(response, file, fileList)
+ "
+ :on-preview="downFile"
+ :disabled="operationType == 'detail'"
+ :on-error="handleUploadError"
+ :on-remove="remove"
+ accept="image/*,.pdf"
+ >
<i class="el-icon-upload"></i>
<div class="el-upload__text">
灏嗗彂绁ㄦ枃浠舵嫋鍒版澶勶紝鎴�
- <em><el-button :disabled="operationType == 'detail'" size="small"
- type="primary">鐐瑰嚮涓婁紶</el-button></em>
+ <em
+ ><el-button
+ :disabled="operationType == 'detail'"
+ size="small"
+ type="primary"
+ >鐐瑰嚮涓婁紶</el-button
+ ></em
+ >
</div>
</el-upload>
- <el-table :data="invoicefileListto" @row-click="downFile" style="width: 100%" height="400">
- <el-table-column prop="name" :show-overflow-tooltip="true" label="鍚嶇О">
+ <el-table
+ :data="invoicefileListto"
+ @row-click="downFile"
+ style="width: 100%"
+ height="400"
+ >
+ <el-table-column
+ prop="name"
+ :show-overflow-tooltip="true"
+ label="鍚嶇О"
+ >
<template slot-scope="scope">
<i style="color:#409EFF" class=" el-icon-s-order" />{{
scope.row.name
@@ -642,26 +1194,49 @@
</template>
</el-table-column>
- <el-table-column prop="name" width="180" :show-overflow-tooltip="true" label="鍔熻兘">
+ <el-table-column
+ prop="name"
+ width="180"
+ :show-overflow-tooltip="true"
+ label="鍔熻兘"
+ >
<template slot-scope="scope">
- <el-button type="primary" size="mini"
- @click.native.prevent.stop="deletedowfile(scope.row)">鍒犻櫎</el-button>
- <el-button type="primary" size="mini"
- @click.native.prevent.stop="moveupdowfile(scope.row)">涓婄Щ</el-button>
+ <el-button
+ type="primary"
+ size="mini"
+ @click.native.prevent.stop="deletedowfile(scope.row)"
+ >鍒犻櫎</el-button
+ >
+ <el-button
+ type="primary"
+ size="mini"
+ @click.native.prevent.stop="moveupdowfile(scope.row)"
+ >涓婄Щ</el-button
+ >
</template>
</el-table-column>
</el-table>
</div>
</div>
- <div v-if="this.previewpdf && invoicepdfimgsrcList.length" class="pdfimgmin">
+ <div
+ v-if="this.previewpdf && invoicepdfimgsrcList.length"
+ class="pdfimgmin"
+ >
<!-- <img :src="pdfimg" /> -->
- <el-image style="width: 95%; height: 90%" :src="invoicepdfimg"
- @click="invoicehandleImageClick(initialIndex)">
+ <el-image
+ style="width: 95%; height: 90%"
+ :src="invoicepdfimg"
+ @click="invoicehandleImageClick(initialIndex)"
+ >
</el-image>
- <custom-image-viewer :url-list="invoicepdfimgsrcList" :initial-index="invoicecurrentIndex"
- :visible="invoiceviewerVisible" @update:visible="invoiceviewerVisible = $event"
- @close="invoicehandleViewerClose" />
+ <custom-image-viewer
+ :url-list="invoicepdfimgsrcList"
+ :initial-index="invoicecurrentIndex"
+ :visible="invoiceviewerVisible"
+ @update:visible="invoiceviewerVisible = $event"
+ @close="invoicehandleViewerClose"
+ />
</div>
<div v-else class="pdfimgmins">{{ hintitle }}</div>
</div>
@@ -669,10 +1244,14 @@
</el-tabs>
</el-dialog>
<el-dialog title="鎻愮ず" :visible.sync="Savereminder" width="30%">
- <el-alert :title="'鎮ㄥ凡娣诲姞' +
- totalquantity +
- '鏉℃暟鎹紝涓洪槻姝㈡暟鎹涪澶辨槸鍚︽彁浜や繚瀛樺啀缁х画娣诲姞銆�'
- " type="warning">
+ <el-alert
+ :title="
+ '鎮ㄥ凡娣诲姞' +
+ totalquantity +
+ '鏉℃暟鎹紝涓洪槻姝㈡暟鎹涪澶辨槸鍚︽彁浜や繚瀛樺啀缁х画娣诲姞銆�'
+ "
+ type="warning"
+ >
</el-alert>
<span slot="footer" class="dialog-footer">
<el-button @click="unsave">鍙� 娑�</el-button>
@@ -741,7 +1320,8 @@
"sys_recordstatus",
"sys_travelexpensebelong",
"sys_traffictype",
- "sys_area_name"
+ "sys_area_name",
+ "sys_DonationStatus"
],
data() {
return {
@@ -864,15 +1444,15 @@
baselisttages: [
{
id: 1,
- name: "寰呯敵璇锋潗鏂�"
+ name: "寰呯敵璇�"
},
{
id: 2,
- name: "瀹℃牳閫氳繃绛夊緟閭瘎绾歌川鏉愭枡"
+ name: "棰勫閫氳繃绛夊緟绾歌川鏉愭枡"
},
{
id: 3,
- name: "宸叉敹鍒版姤閿�鏉愭枡"
+ name: "宸叉敹鍒扮焊璐ㄦ潗鏂�"
}
],
baselist: [],
@@ -1127,6 +1707,15 @@
name: file.name,
url: URL.createObjectURL(blob)
});
+ // console.log(file.response.url);
+ // console.log(file);
+
+ this.pdfimgsrcList.push(file.response.url);
+ this.fileListto.push({
+ name: file.response.fileName,
+ url: file.response.url
+ });
+ console.log(URL.createObjectURL(blob), "ur杞崲");
})
.catch(error => {
console.error("Error loading image", error);
@@ -1678,10 +2267,22 @@
if (item.id == this.form.infoid) {
this.form.donorno = item.donorno;
this.form.donorname = item.name;
+
+ // 鏂板锛氬皢鎹愮尞鑰呯殑 recordstate 璧嬪�煎埌 invoicecount
+ if (item.recordstate !== undefined && item.recordstate !== null) {
+ this.form.invoicecount = item.recordstate.toString();
+ } else {
+ this.form.invoicecount = ""; // 濡傛灉 recordstate 涓虹┖锛屾竻绌哄瓧娈�
+ }
}
});
},
-
+ // 娣诲姞娓呴櫎鏂规硶
+ clearDonatorInfo() {
+ this.form.donorno = "";
+ this.form.donorname = "";
+ this.form.invoicecount = ""; // 娓呯┖ invoicecount
+ },
onpick(e) {
// console.log(e,this.value1)
},
@@ -2083,7 +2684,7 @@
this.$refs["form"].validate(valid => {
if (valid) {
//绁ㄦ嵁鏂囦欢澶勭悊
- // const addnumber = new Decimal(this.rbPayees.reduce((amount, item) => amount + Number(item.amount), 0 ));
+ // const addnumber = new Decimal(this.rbPayees.reduce((amount, item) => amount + Number(item.amount), 0 ));
// console.log(this.form.amountrequested,addnumber);
// //鏍¢獙璇锋閲戦鍚堣鏄惁绛変簬鎶ラ攢鍗曢噾棰�
// if (this.form.amountrequested != addnumber) {
@@ -2163,12 +2764,12 @@
//淇濆瓨鏄庣粏
for (let i = 0; i < rbDetails.length; i++) {
if (rbDetails[i].rbid != null) {
- if (rbDetails[i].persontype == "瀹跺睘") {
+ if (rbDetails[i].persontype == "瀹跺睘"||rbDetails[i].persontype == "涓撳") {
if (this.form.infoid) {
updateReimbursementdetail(rbDetails[i]);
} else {
return this.$message.error(
- `鍥犲灞炲垎閰嶈姹傦紝璇烽�夋嫨鎹愮尞鑰呬俊鎭痐
+ "鍥犺储鍔℃牳绠楃殑瑕佹眰锛屽灞炴垨涓撳鐨勬姤閿�锛岄渶瑕侀�夋嫨瀵瑰簲鐨勬崘鐚�咃紒"
);
}
} else {
@@ -2182,7 +2783,7 @@
addReimbursementdetail(rbDetails[i]);
} else {
return this.$message.error(
- `鍥犲灞炲垎閰嶈姹傦紝璇烽�夋嫨鎹愮尞鑰呬俊鎭痐
+ "鍥犺储鍔℃牳绠楃殑瑕佹眰锛屽灞炴垨涓撳鐨勬姤閿�锛岄渶瑕侀�夋嫨瀵瑰簲鐨勬崘鐚�咃紒"
);
}
} else {
--
Gitblit v1.9.3