<template> <div class="app-container"> <el-card> <div slot="header" class="card-title">{{ $t('请款单') }} {{id ? `-${form.paymentNo}` :''}}</div> <el-form ref="form" :model="form" label-width="120px" label-position="left" > <div class="list_item"> <el-form-item :label="$t('供应商')" required style="width:400px" prop="supplierId" :rules="{ required: true, trigger: ['blur', 'change'],message:$t('供应商不能为空') }" :error="$t('供应商不能为空')" > <!-- <customer-selector v-model="form.supplierId" @change="consignor = $event" /> --> <el-select v-model="form.supplierId" :placeholder="$t('请选择供应商')" @change="selectChange" > <el-option v-for="supplier in allSupplier" :key="supplier.id" :label="supplier.companyZh" :value="supplier.id" ></el-option> </el-select> </el-form-item> <el-form-item :label="$t('部门')" style="width:400px" prop="departmentId" :rules="{required:true,message:$t('部门不能为空')}" :error="$t('部门不能为空')" > <el-select v-model="form.departmentId" style="max-width: 300px" :placeholder="$t('请选择部门')" > <el-option @click.native="selslectVal('departmentName', item.name)" v-for="item in deptData" :key="item.id" :label="item.name" :value="parseInt(item.id)" /> </el-select> </el-form-item> <el-form-item :label="$t('业务员')" style="width:400px" prop="salesmanName" :rules="{required:true,message:$t('业务员不能为空')}" :error="$t('业务员不能为空')" > <el-select v-model="form.salesmanName" :placeholder="$t('请选择业务员')"> <el-option v-for="item in creatorData" :key="item.id" :label="item.nickname" :value="item.nickname" @click.native="selslectVal('salesmanId',item.id)" /> </el-select> </el-form-item> <el-form-item :label="$t('申请日期')" style="width:400px" prop="applicationAt" :rules="{required:true,message:$t('申请日期不能为空')}" :error="$t('申请日期不能为空')" > <el-date-picker clearable v-model="form.applicationAt" value-format="yyyy-MM-dd" format="yyyy-MM-dd" type="date" :placeholder="$t('选择申请日期')" /> </el-form-item> </div> <div class="list_item"> <el-form-item :label="$t('供应商银行账号')" style="width:400px" prop="supplierBankAccount" > <el-select v-model="form.supplierBankAccount" @change="selectChangeBank" :placeholder="$t('请选择收款账户')"> <el-option v-for="item in bankData" :key="item.id" :label="item.bankName + '(' + item.bankAccount+ ')'" :value="item.bankAccount" /> </el-select> </el-form-item> <el-form-item :label="$t('实际付款日期')" style="width:400px" prop="sjfkdate" :rules="{required:true,message:$t('实际付款日期')}" :error="$t('实际付款日期')" > <el-date-picker clearable v-model="form.sjfkdate" value-format="yyyy-MM-dd" format="yyyy-MM-dd" type="date" :placeholder="$t('选择实际付款日期')" /> </el-form-item> </div> <div class="list_item"> <el-form-item :label="$t('最后付款日期')" style="width:400px" prop="latestPayAt" :rules="{required:true,message:$t('最后付款不能为空')}" :error="$t('最后付款日期不能为空')" > <el-date-picker clearable v-model="form.latestPayAt" value-format="yyyy-MM-dd" format="yyyy-MM-dd" type="date" :placeholder="$t('选择最后付款日期')" /> </el-form-item> <el-form-item :label="$t('结算方式')" style="width:400px" :rules="{required:true,message:$t('结算方式不能为空')}" :error="$t('选择结算方式')" prop="settlementType" > <dict-selector :type="DICT_TYPE.CUSTOMER_BALANCE" v-model="form.settlementType" /> </el-form-item> </div> </el-form> </el-card> <el-card class="card"> <div slot="header" class="card-title">{{ $t('费用信息') }}</div> <el-col :span="1.5"> <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" style="padding: 10px; margin-bottom: 10px" >{{ $t('添加未付供应商款项') }}</el-button > </el-col> <el-table v-loading="loadings" :data="list" border :show-summary="!!list.length" :summary-method="getSummaries"> <el-table-column :label="$t('自编号')" align="center" prop="payableNo" /> <el-table-column :label="$t('费用类型')" align="center" prop="feeType"> <template slot-scope="scope"> <dict-tag :type="DICT_TYPE.FEE_TYPE" :value="scope.row.feeType" ></dict-tag> </template> </el-table-column> <el-table-column :label="$t('发票号码')" align="center" prop="invoiceNumber"> <template slot-scope="scope"> <el-input v-model="scope.row.invoiceNumber"></el-input> </template> </el-table-column> <el-table-column :label="$t('应付金额')" align="center" prop="totalAmount" /> <el-table-column :label="$t('币种')" align="center" prop="currencyId"> <template slot-scope="scope"> {{getCurrencyLabel(scope.row.currencyId)}} <!-- <dict-tag :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="scope.row.currencyId" /> --> </template> </el-table-column> <el-table-column :label="$t('汇率')" align="center" prop="exchangeRate"> <template slot-scope="scope"> <el-input v-model="scope.row.exchangeRate"></el-input> </template> </el-table-column> <el-table-column :label="$t('税率')+'%'" align="center" prop="taxRate" > <template slot-scope="scope"> <el-input v-model="scope.row.taxRate" @keyup.native="scope.row.taxRate = oninput(scope.row.taxRate)"></el-input> </template> </el-table-column> <el-table-column :label="$t('价税合计(RMB)')" align="center" prop="total" > <template slot-scope="scope"> <span>{{ scope.row.total = ((scope.row.totalAmount * scope.row.exchangeRate) + (scope.row.totalAmount * scope.row.exchangeRate) * (scope.row.taxRate/100)).toFixed(2) }}</span> <!-- <span>{{scope.row.total}}</span> --> </template> </el-table-column> </el-table> <el-form ref="forms" :model="form" label-width="120px" label-position="left" style="width: 50%" > <el-form-item :label="$t('账单号')" style="margin:20px 0" prop="accountNumber" :rules="[ { required: true, message:$t('账单号不能为空'), trigger: 'blur' }, ]" > <el-input v-model="form.accountNumber" :placeholder="$t('请输入账单号')" ></el-input> </el-form-item> <el-form-item :label="$t('发票')" style="margin-bottom: 0" prop="invoiceStatus" required :error="$t('请选择是否开票')" > <el-select v-model="form.invoiceStatus" :placeholder="$t('请选择是否开票')" > <el-option :label="$t('未开票')" value="0" /> <el-option :label="$t('已开票')" value="1" /> </el-select> </el-form-item> <!--lanbm 2024-05-30 添加备注信息和附件上传功能--> <el-form-item :label="$t('备注')" style="margin:20px 0" prop="editreason" > <el-input v-model="form.editreason" :placeholder="$t('请输入备注信息')" ></el-input> </el-form-item> <el-form-item :label="$t('附件')" style="margin:20px 0" prop="filelist" > <el-upload v-if="!isView" class="upload-demo" :action="uploadFileUrl" :headers="headers" :on-success="handleUploadSuccess" :before-upload="handleBeforeUpload" :on-error="handleUploadError" :before-remove="beforeRemove" :file-list="form.filelist" multiple > <!--filelist 是保存在数据库中的文件字符串信息--> <el-button size="small" type="primary">{{ $t("上传附件") }}</el-button> </el-upload> <div v-else> <!--编辑对话款此部分不显示--> <div v-for="(v, i) in form.filelist" :key="i"> <el-link :href="v.url" type="primary" target="_blank">{{ v.name }}</el-link> </div> </div> </el-form-item> </el-form> </el-card> <div slot="header" class="bpm-title">{{ $t('审核流程') }}</div> <work-flow xmlkey="merge_order" v-model="form.copyUserList"></work-flow> <div slot="footer" style="margin: 20px 0"> <el-button v-if="id==0||form.state==0" type="primary" @click="submitForm(1)">{{$t('提交申请')}}</el-button> <el-button v-if="id==0||form.state==0" type="primary" @click="submitForm(0)">{{ $t('保存草稿') }}</el-button> <el-button v-if="form.state==1" type="primary" @click="$router.push(`/bpm/process-instance/detail?id=`+bpmId)">{{$t('审核中')}}</el-button> <el-button plain type="primary" @click="$store.dispatch('tagsView/delCurrentView')">{{$t('返回')}}</el-button> </div> <el-dialog :title="$t('提示')" :visible.sync="dialogVisible" width="30%"> <span class="cancel_notice">{{$t('付款单申请正在审核中,你确定取消付款单申请吗?')}}</span> <div class="cancel_content"> <span>{{$t('取消原因:')}}</span> <el-input v-model="reason" :placeholder="$t('请输入取消原因')"></el-input> </div> <span slot="footer" class="dialog-footer"> <el-button @click="dialogVisible = false">{{$t('取消')}}</el-button> <el-button type="primary" @click="cancelApproval">{{$t('确定')}}</el-button> </span> </el-dialog> <el-dialog :visible.sync="open" :title="$t('添加未付供应商款项')" width="80%" append-to-body @open="openDialog" > <div> <!-- <div slot="header" class="card-title">{{ $t('添加未收客户款项') }}</div> --> <!-- 搜索工作栏 --> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="80px" > <!-- <el-row> --> <el-form-item :label="$t('供应商')"> <customer-selector v-model="queryParams.supplierId" @change="consignor = $event" /> </el-form-item> <el-form-item :label="$t('始发仓')"> <el-select v-model="queryParams.departureId" :placeholder="$t('请选择始发仓')" clearable > <el-option v-for="item in exportWarehouseList" :label="$l(item, 'title')" :value="item.id" :key="item.id" ></el-option> </el-select> </el-form-item> <el-form-item :label="$t('目的仓')"> <el-select v-model="queryParams.objectiveId" :placeholder="$t('请选择目的仓')" clearable > <el-option v-for="item in importWarehouseList" :label="$l(item, 'title')" :value="item.id" :key="item.id" ></el-option> </el-select> </el-form-item> <el-form-item :label="$t('运输方式')"> <dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model="queryParams.transportId" formatter="number" /> </el-form-item> <!-- </el-row> --> <el-form-item :label="$t('出货渠道')"> <el-select v-model="queryParams.channelId" :placeholder="$t('请选择出货渠道')" > <el-option v-for="item in channelList" :label="item.nameZh" :value="item.channelId" :key="item.channelId" ></el-option> </el-select> </el-form-item> </el-row> <!-- <el-row> --> <!-- <el-form-item :label="$t('报关方式')"> <dict-selector :type="DICT_TYPE.ECW_CUSTOMS_TYPE" v-model="queryParams.customsType" /> </el-form-item> <el-form-item :label="$t('控货')"> <dict-selector :type="DICT_TYPE.INFRA_BOOLEAN_STRING" v-model="queryParams.control" /> </el-form-item> <el-form-item :label="$t('客户名称')"> <customer-selector v-model="queryParams.consignorId" @change="consignor = $event" /> </el-form-item> </el-row> --> <el-form-item :label="$t('订单号')" prop="orderNo"> <el-input v-model="queryParams.orderNo" :placeholder="$t('请输入订单号')" clearable /> </el-form-item> <el-form-item :label="$t('业务编号')" prop="selfNo"> <el-input v-model="queryParams.selfNo" :placeholder="$t('请输入业务编号')" clearable @blur="handleQuery" /> </el-form-item> <el-form-item> <el-button type="primary" icon="el-icon-search" @click="handleQuery" >{{ $t('查询') }}</el-button > </el-form-item> </el-form> <el-table ref="multipleTable" v-loading="loading" :data="orderData" border @selection-change="handleSelectionChange" row-key="id" > <el-table-column type="selection" width="55" :reserve-selection="true"> </el-table-column> <el-table-column :label="$t('业务编号')" align="center" prop="payableNo" /> <el-table-column :label="$t('货柜号')" align="center" prop="containerNo" /> <el-table-column :label="$t('供应商')" align="center" prop="supplierName" /> <el-table-column :label="$t('费用类型')" align="center" prop="feeType"> <template slot-scope="scope"> <dict-tag :type="DICT_TYPE.FEE_TYPE" :value="scope.row.feeType" ></dict-tag> </template> </el-table-column> <el-table-column :label="$t('金额')" align="center" prop="totalAmount"> <template slot-scope="scope"> <span>{{ scope.row.totalAmount }}{{getCurrencyLabel(scope.row.currencyId)}}</span> <!-- <dict-tag :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="scope.row.currencyId" /> --> </template> </el-table-column> </el-table> <pagination v-show="total > 0" :total="total" :page.sync="queryParams.page" :limit.sync="queryParams.rows" @pagination="getList" /> <!-- </el-card> --> <div slot="footer" style="margin: 20px 0; text-align: center;"> <el-button type="primary" @click="saveSelectList">{{ $t('确认添加') }}</el-button> <el-button @click="hiddenDialog">{{ $t('取消') }}</el-button> </div> </div> </el-dialog> </div> </template> <script> import { listSimpleUsers, getUserProfile } from "@/api/system/user"; import { DICT_TYPE } from "@/utils/dict"; import { getToken } from "@/utils/auth"; import { getChannelList } from "@/api/ecw/channel"; import CustomerSelector from "@/components/CustomerSelector"; import { listSimpleDepts } from "@/api/system/dept"; import { getTradeCityList } from "@/api/ecw/region"; import { getSupplierPage, getSupplier } from "@/api/ecw/supplier"; import { getPayableList, getPayableInfoByIds, createPayment, getPaymentInfoByIds, getPaymentItem, updatePayment, } from "@/api/ecw/financial"; import { getCurrencyPage } from "@/api/ecw/currency"; import NP from "number-precision"; import { getWarehouseList } from "@/api/ecw/warehouse"; import WorkFlow from "@/components/WorkFlow/"; import { getExchangeRatePage } from "@/api/ecw/exchangeRate"; export default { name: "EcwFinancialCreatpayment", components: { CustomerSelector, WorkFlow, }, data() { return { //上传文件所需要的参数 lanbm 2024-05-31 add uploadFileUrl: process.env.VUE_APP_BASE_API + "/app-api/file/upload", //上传的图片服务器地址 headers: { Authorization: "Bearer " + getToken(), }, id: 0, payableId: 0, orderData: [], total: 0, loadings: false, open: false, //附件是展示还是编辑 lanbm 2024-05-31 add isView: false, form: {}, creatorData: [], list: [], defaultList: [], channelList: [], loading: "", bankData: [], reason: "", params: { page: 1, rows: 20, }, deptData: [], deptArr: [], queryParams: { page: 1, rows: 20, }, multipleSelection: [], tradeCityList: [], allSupplier: [], currencyList: [], warehouseList: [], selectedUsers: [], dialogVisible: false, rateList: [], userInfo: null, // 用户导入参数 upload: { open: false, // 是否显示弹出层 title: "", // 弹出层标题 isUploading: false, // 是否禁用上传 url: process.env.VUE_APP_BASE_API + "/admin-api/infra/file/upload", // 请求地址 headers: { Authorization: "Bearer " + getToken() }, // 设置上传的请求头部 data: {}, // 上传的额外数据,用于文件名 }, }; }, async activated() { let that = this; await getUserProfile().then((res) => (that.userInfo = res.data)); if (this.$route.query.payableId && this.$route.query.payableId != 0) { this.payableId = this.$route.query.payableId; getPayableInfoByIds({ id: this.payableId }).then((res) => { this.handleSelectionChange([res.data]); this.list = this.multipleSelection; this.$set(this.form, "supplierId", res.data.supplierId); this.selectChange(this.form.supplierId); }); this.$set(this.form, "departmentId", parseInt(this.userInfo.deptId)); this.$set(this.form, "salesmanId", this.userInfo.id); that.$set(that.form, "salesmanName", that.userInfo.nickname); that.$set(that.form, "departmentName", that.userInfo.dept.name); } if (this.$route.query.id && this.$route.query.id !== "0") { this.id = this.$route.query.id; getPaymentInfoByIds({ id: this.id }).then((res) => { this.form = { ...res.data, latestPayAt: this.parseTime(res.data.latestPayAt, "{y}-{m}-{d}"), applicationAt: res.data.applicationAt ? this.parseTime(res.data.applicationAt, "{y}-{m}-{d}") : this.getYmd(), invoiceStatus: String(res.data.invoiceStatus), }; this.$set( this.form, "supplierBankAccount", res.data.supplierBankAccount ); console.log(this.form); }); getPaymentItem({ id: this.id }).then((res) => { this.list = [...res.data]; this.defaultList = [...res.data]; }); } else { if (!this.form.applicationAt) this.$set(this.form, "applicationAt", this.getYmd()); } }, async created() { let that = this; await getUserProfile().then((res) => (that.userInfo = res.data)); await getCurrencyPage(this.params).then( (res) => (this.currencyList = res.data.list) ); await getExchangeRatePage({ page: 1, rows: 100 }).then( (res) => (this.rateList = res.data.list) ); getWarehouseList().then((res) => (this.warehouseList = res.data)); if (that.$route.query.payableId && that.$route.query.payableId != 0) { this.payableId = this.$route.query.payableId; getPayableInfoByIds({ id: this.payableId }).then((res) => { this.handleSelectionChange([res.data]); this.list = this.multipleSelection; this.$set(this.form, "supplierId", res.data.supplierId); this.selectChange(this.form.supplierId); }); this.$set(this.form, "departmentId", parseInt(this.userInfo.deptId)); this.$set(this.form, "salesmanId", this.userInfo.id); that.$set(that.form, "salesmanName", that.userInfo.nickname); that.$set(that.form, "departmentName", that.userInfo.dept.name); } if (that.$route.query.id && that.$route.query.id !== "0") { this.id = this.$route.query.id; getPaymentInfoByIds({ id: this.id }).then((res) => { this.form = { ...res.data, latestPayAt: this.parseTime(res.data.latestPayAt, "{y}-{m}-{d}"), applicationAt: res.data.applicationAt ? this.parseTime(res.data.applicationAt, "{y}-{m}-{d}") : this.getYmd(), invoiceStatus: String(res.data.invoiceStatus), }; this.$set( this.form, "supplierBankAccount", res.data.supplierBankAccount ); console.log(this.form); }); getPaymentItem({ id: this.id }).then((res) => { this.list = [...res.data]; this.defaultList = [...res.data]; }); } else { if (!this.form.applicationAt) this.$set(this.form, "applicationAt", this.getYmd()); } listSimpleUsers().then((res) => (that.creatorData = res.data)); getChannelList().then((res) => (that.channelList = res.data)); getTradeCityList().then((res) => (that.tradeCityList = res.data)); getSupplierPage({ pageNo: "1", pageSize: "10000" }).then((res) => { const { data } = res; this.allSupplier = data.list; this.selectChange(this.form.supplierId); }); listSimpleDepts().then((res) => { that.deptData = res.data; }); }, computed: { expoerCityList() { return this.tradeCityList.filter((item) => item.type == 2); }, importCityList() { return this.tradeCityList.filter((item) => item.type == 1); }, exportWarehouseList() { /* tradeType 1 进口,2出口,3进出口 */ return this.warehouseList.filter( (item) => item.tradeType == 2 || item.tradeType == 3 ); }, importWarehouseList() { return this.warehouseList.filter( (item) => item.tradeType == 1 || item.tradeType == 3 ); }, }, methods: { selslectVal(key, value) { this.form[key] = value; }, getCurrencyLabel(id) { var label = this.currencyList.filter((item) => item.id == id); if (label.length > 0) return this.$i18n.locale == "zh_CN" ? label[0].titleZh : label[0].titleEn; return ""; }, getList() { this.loading = true; // 处理查询参数 let params = { ...this.queryParams }; this.addBeginAndEndTime(params, this.dateRangeCreateTime, "createTime"); // 执行查询 getPayableList(params).then((response) => { this.orderData = response.data.list; this.total = response.data.total; this.loading = false; this.$nextTick(() => { this.list.forEach((itm) => { const t = this.orderData.find((v) => v.id == itm.id); t && this.$refs.multipleTable.toggleRowSelection(t, true); }); }); }); }, getSummaries(param) { console.log(param); const { columns, data } = param; const sums = new Array(columns.length).map((v) => ""); const index = sums.length - 1; sums[index - 1] = this.$t("价税合计大写"); const t = data .map((v) => v.total) .reduce((prev, curr) => { return parseFloat(prev) + parseFloat(curr); }, 0); sums[index] = this.convertCurrency(t); return sums; }, /** 新增按钮操作 */ handleAdd() { this.open = true; }, submitForm(addType) { this.$refs.form.validate((valid) => { if (valid) { this.$refs.forms.validate((val) => { if (val) { const params = { ...this.form }; params.addType = addType; if (this.list && this.list.length > 0) { params.payableReqVOList = [...this.list]; } else { this.$modal.msgError(this.$t("请选择供应商未付款项")); return; } //只保存文件的路径 //params.filepath=params.filepath.map((v) => v.url).join(","); /*if(!params.supplierBankAccount){ this.$modal.msgError(this.$t('请选择供应商银行账号')); return }*/ if (this.id && this.id !== "0") { updatePayment(params).then((res) => { this.$modal.msgSuccess(this.$t("申请成功")); this.$router.back(); }); } else { createPayment(params).then((res) => { this.$modal.msgSuccess(this.$t("新增成功")); this.$router.back(); }); } } }); } }); }, submitDraft() { this.$refs.form.validate((valid) => { if (valid) { const params = { ...this.form }; if (this.list && this.list.length > 0) { params.payableReqVOList = [...this.list]; } else { this.$modal.msgError(this.$t("请选择供应商未付款项")); return; } if (!params.supplierBankAccount) { this.$modal.msgError(this.$t("请选择供应商银行账号")); return; } if (this.id && this.id !== "0") { updatePayment(params).then((res) => { this.$modal.msgSuccess(this.$t("修改成功")); this.$router.back(); }); } else { createPayment(params).then((res) => { this.$modal.msgSuccess(this.$t("新增成功")); this.$router.back(); }); } // console.log(params, '-----params---------') } }); }, selectChangeBank(val) { this.$forceUpdate(); let bank = this.bankData.find( (item) => item.bankAccount == this.form.supplierBankAccount ); this.form.supplierBank = bank.bankName; this.form.supplierBankAccountName = bank.accountName; }, selectChange(val) { this.bankData = []; // this.form.supplierBankAccount='' if (val) { getSupplier(val).then((res) => { this.bankData = res.data.bankList; let bank = this.bankData.find( (item) => item.bankAccount == this.form.supplierBankAccount ); if (!bank) this.form.supplierBankAccount = ""; if (!bank && this.bankData.length > 0) this.form.supplierBankAccount = this.bankData[0]["bankAccount"]; }); } const t = this.allSupplier.find((v) => v.id == val); t && (this.form.supplierName = t.companyZh); // t && (this.bankData = t.bankList) }, handleQuery() { this.queryParams.page = 1; this.getList(); }, UStoRMB() { return NP.divide( this.currencyList.find((v) => v.titleEn === "USD").huilv, 100 ).toFixed(6); }, NANtoRMB() { return NP.divide( this.currencyList.find((v) => v.titleEn === "NGN").huilv, 100 ).toFixed(6); }, handleSelectionChange(val) { this.multipleSelection = val.map((v) => { // var rate = NP.divide(this.currencyList.find(vs => vs.id === v.currencyId).huilv, 100).toFixed(6) var rate = this.getRate(v.currencyId); return Object.assign(v, { exchangeRate: rate }); }); }, //获取汇率 getRate(sourceCurrencyId) { var targetCurrencyId = this.currencyList.find( (vs) => vs.titleEn == "RMB" ).id; var rate = this.rateList.find( (v) => v.sourceCurrencyId === sourceCurrencyId && v.targetCurrencyId === targetCurrencyId ); if (rate) return rate.currencyRate; return ""; }, hiddenDialog() { this.open = false; }, saveSelectList() { if (this.id && this.id !== "0") { this.list = [...this.defaultList, ...this.multipleSelection]; } else { this.list = this.multipleSelection; } this.open = false; }, cancelApproval() {}, convertCurrency(money) { //汉字的数字 var cnNums = new Array( "零", this.$t("壹"), this.$t("贰"), this.$t("叁"), this.$t("肆"), this.$t("伍"), this.$t("陆"), this.$t("柒"), this.$t("捌"), "玖" ); //基本单位 var cnIntRadice = new Array("", this.$t("拾"), this.$t("佰"), "仟"); //对应整数部分扩展单位 var cnIntUnits = new Array("", this.$t("万"), this.$t("亿"), "兆"); //对应小数部分单位 var cnDecUnits = new Array("角", this.$t("分"), this.$t("毫"), "厘"); //整数金额时后面跟的字符 var cnInteger = this.$t("整"); //整型完以后的单位 var cnIntLast = this.$t("元"); //最大处理的数字 var maxNum = 999999999999999.9999; //金额整数部分 var integerNum; //金额小数部分 var decimalNum; //输出的中文金额字符串 var chineseStr = ""; //分离金额后用的数组,预定义 var parts; // 传入的参数为空情况 if (money === "") { return ""; } money = parseFloat(money); if (money >= maxNum) { return ""; } // 传入的参数为0情况 if (money === 0) { chineseStr = cnNums[0] + cnIntLast + cnInteger; return chineseStr; } // 转为字符串 money = money.toString(); // indexOf 检测某字符在字符串中首次出现的位置 返回索引值(从0 开始) -1 代表无 if (money.indexOf(".") == -1) { integerNum = money; decimalNum = ""; } else { parts = money.split("."); integerNum = parts[0]; decimalNum = parts[1].substr(0, 4); } //转换整数部分 if (parseInt(integerNum, 10) > 0) { let zeroCount = 0; let IntLen = integerNum.length; for (let i = 0; i < IntLen; i++) { let n = integerNum.substr(i, 1); let p = IntLen - i - 1; let q = p / 4; let m = p % 4; if (n == "0") { zeroCount++; } else { if (zeroCount > 0) { chineseStr += cnNums[0]; } zeroCount = 0; chineseStr += cnNums[parseInt(n)] + cnIntRadice[m]; } if (m == 0 && zeroCount < 4) { chineseStr += cnIntUnits[q]; } } // 最后+ 元 chineseStr += cnIntLast; } // 转换小数部分 if (decimalNum != "") { let decLen = decimalNum.length; for (let i = 0; i < decLen; i++) { let n = decimalNum.substr(i, 1); if (n != "0") { chineseStr += cnNums[Number(n)] + cnDecUnits[i]; } } } if (chineseStr == "") { chineseStr += cnNums[0] + cnIntLast + cnInteger; } else if (decimalNum == "") { chineseStr += cnInteger; } return chineseStr; }, openDialog() { this.getList(); }, oninput(num) { let str = num; let len1 = str.substr(0, 1); let len2 = str.substr(1, 1); //如果第一位是0,第二位不是点,就用数字把点替换掉 if (str.length > 1 && len1 == 0 && len2 != ".") { str = str.substr(1, 1); } //第一位不能是. if (len1 == ".") { str = ""; } //限制只能输入一个小数点 if (str.indexOf(".") != -1) { let str_ = str.substr(str.indexOf(".") + 1); if (str_.indexOf(".") != -1) { str = str.substr(0, str.indexOf(".") + str_.indexOf(".") + 1); } else { // if (str_.length > 2) { // str = str.substr(0, str.indexOf('.') + 1) + str_.substr(0, 2) // } } } //正则替换 str = str.replace(/[^\d^\.]+/g, ""); // 保留数字和小数点 // str = str.replace(/\.\d\d\d$/,'') // 小数点后只能输两位 return str; }, getYmd() { let today = new Date(); let year = today.getFullYear(); //获取年份 let month = today.getMonth() + 1; //获取月份 let day = today.getDate(); //获取日期 return year + "-" + month + "-" + day; }, //附件上传相关方法 lanbm 2024-05-31 add handleUploadSuccess(res, file, fileList) { let arr = []; setTimeout(() => { fileList.forEach((item) => { arr.push({ name: item.name, url: item.response ? item.response.data : item.url, }); }); this.form.filelist = arr; }, 300); this.loading2.close(); }, handleBeforeUpload() { this.loading2 = this.$loading({ lock: true, text: this.$t("上传中"), background: "rgba(0, 0, 0, 0.7)", }); }, handleUploadError() { this.$message({ type: "error", message: this.$t("上传失败"), }); this.loading2.close(); }, beforeRemove(file, fileList) { return this.$confirm(this.$t("确定移除") + "?").then((res) => { setTimeout(() => { this.form.filelist = fileList.map((v) => ({ name: v.name, url: v.response ? v.response.data : v.url, })); }, 300); }); }, //end 附件上传相关方法 lanbm 2024-05-31 add }, }; </script> <style scoped> .card { margin-top: 20px; } .dialog-footer { padding: 40px; } .card-title { font-size: 18px; font-weight: bold; } .bpm-title { font-size: 20px; font-weight: bold; color: #666; margin: 20px 0; } .list_item { display: flex; align-items: center; justify-content: start; margin-bottom: 20px; flex-wrap: wrap; } </style>