|
|
@@ -0,0 +1,560 @@
|
|
|
+<template>
|
|
|
+ <div class="app-container">
|
|
|
+
|
|
|
+ <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="90px">
|
|
|
+ <el-form-item label="回款状态" prop="returnStatus">
|
|
|
+ <el-select v-model="queryParams.returnStatus" placeholder="请选择回款状态" clearable size="small" style="width:140px;">
|
|
|
+ <el-option label="未回款" :value="0" />
|
|
|
+ <el-option label="已回款" :value="1" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="所属部门" prop="deptId">
|
|
|
+ <treeselect style="width:220px" v-model="queryParams.deptId" :options="deptOptions" :show-count="true" placeholder="请选择所属部门" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="订单编号" prop="orderCode">
|
|
|
+ <el-input v-model="queryParams.orderCode" placeholder="请输入订单编号" clearable size="small" @keyup.enter.native="handleQuery" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="订单日期" prop="createTime">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="createTime"
|
|
|
+ size="small"
|
|
|
+ style="width: 220px"
|
|
|
+ value-format="yyyy-MM-dd"
|
|
|
+ type="daterange"
|
|
|
+ range-separator="-"
|
|
|
+ start-placeholder="开始日期"
|
|
|
+ end-placeholder="结束日期"
|
|
|
+ @change="handleCreateTimeChange"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="回款日期" prop="returnTime">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="returnTime"
|
|
|
+ size="small"
|
|
|
+ style="width: 220px"
|
|
|
+ value-format="yyyy-MM-dd"
|
|
|
+ type="daterange"
|
|
|
+ range-separator="-"
|
|
|
+ start-placeholder="开始日期"
|
|
|
+ end-placeholder="结束日期"
|
|
|
+ @change="handleReturnTimeChange"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="回款人" prop="returnUser">
|
|
|
+ <el-input v-model="queryParams.returnUser" placeholder="请输入回款人" clearable size="small" @keyup.enter.native="handleQuery" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="会员姓名" prop="userName">
|
|
|
+ <el-input v-model="queryParams.userName" placeholder="请输入会员姓名" clearable size="small" @keyup.enter.native="handleQuery" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="收件人电话" prop="receiverPhone">
|
|
|
+ <el-input v-model="queryParams.receiverPhone" placeholder="请输入收件人电话" clearable size="small" @keyup.enter.native="handleQuery" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="快递公司" prop="deliveryName">
|
|
|
+ <el-input v-model="queryParams.deliveryName" placeholder="请输入快递公司" clearable size="small" @keyup.enter.native="handleQuery" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="快递单号" prop="deliverySn">
|
|
|
+ <el-input v-model="queryParams.deliverySn" placeholder="请输入快递单号" clearable size="small" @keyup.enter.native="handleQuery" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="订单金额" prop="totalPrice">
|
|
|
+ <el-input-number v-model="queryParams.totalPrice" :precision="2" :min="0" placeholder="请输入订单金额" size="small" style="width:200px" controls-position="right" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="代收金额" prop="collectionPrice">
|
|
|
+ <el-input-number v-model="queryParams.collectionPrice" :precision="2" :min="0" placeholder="请输入代收金额" size="small" style="width:200px" controls-position="right" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="订购产品" prop="productName">
|
|
|
+ <el-input v-model="queryParams.productName" placeholder="请输入产品名称" clearable size="small" @keyup.enter.native="handleQuery" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="备注" prop="remark">
|
|
|
+ <el-input v-model="queryParams.remark" placeholder="请输入备注" clearable size="small" @keyup.enter.native="handleQuery" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="销售姓名" prop="companyUserName">
|
|
|
+ <el-input v-model="queryParams.companyUserName" placeholder="请输入销售姓名" clearable size="small" @keyup.enter.native="handleQuery" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="付款方式" prop="payType">
|
|
|
+ <el-select v-model="queryParams.payType" placeholder="请选择付款方式" clearable size="small" style="width:140px;">
|
|
|
+ <el-option
|
|
|
+ v-for="item in payTypeOptions"
|
|
|
+ :key="item.dictValue"
|
|
|
+ :label="item.dictLabel"
|
|
|
+ :value="Number(item.dictValue)"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="发货时间" prop="deliveryTime">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="deliveryTime"
|
|
|
+ size="small"
|
|
|
+ style="width: 220px"
|
|
|
+ value-format="yyyy-MM-dd"
|
|
|
+ type="daterange"
|
|
|
+ range-separator="-"
|
|
|
+ start-placeholder="开始日期"
|
|
|
+ end-placeholder="结束日期"
|
|
|
+ @change="handleDeliveryTimeChange"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item>
|
|
|
+ <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
|
|
+ <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+
|
|
|
+ <el-row :gutter="10" class="mb8">
|
|
|
+ <el-col :span="1.5">
|
|
|
+ <el-button
|
|
|
+ type="warning"
|
|
|
+ plain
|
|
|
+ icon="el-icon-download"
|
|
|
+ size="mini"
|
|
|
+ :loading="exportLoading"
|
|
|
+ @click="handleExport"
|
|
|
+ v-hasPermi="['store:storeFinanceOrder:export']"
|
|
|
+ >导出</el-button>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="1.5">
|
|
|
+ <el-button
|
|
|
+ type="primary"
|
|
|
+ icon="el-icon-upload"
|
|
|
+ size="mini"
|
|
|
+ @click="handleImport"
|
|
|
+ v-hasPermi="['store:storeFinanceOrder:import']"
|
|
|
+ >导入</el-button>
|
|
|
+ </el-col>
|
|
|
+ <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
|
|
+ </el-row>
|
|
|
+
|
|
|
+ <el-table v-loading="loading" border :data="orderList" style="width:100%" show-summary :summary-method="getSummaries" @filter-change="handleFilterChange">
|
|
|
+ <el-table-column label="订单编号" align="center" prop="orderCode" width="170" fixed="left" column-key="orderCode" :filters="getFilters('orderCode')" :filtered-value="columnFilters.orderCode" />
|
|
|
+ <el-table-column label="订单日期" align="center" prop="externalCreateTime" width="160" column-key="externalCreateTime" :filters="getFilters('externalCreateTime')" :filtered-value="columnFilters.externalCreateTime">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span>{{ parseTime(scope.row.externalCreateTime) }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="回款日期" align="center" prop="returnTime" width="160" column-key="returnTime" :filters="getFilters('returnTime')" :filtered-value="columnFilters.returnTime">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span>{{ scope.row.returnTime ? parseTime(scope.row.returnTime) : '-' }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="回款人" align="center" prop="returnUser" width="100" column-key="returnUser" :filters="getFilters('returnUser')" :filtered-value="columnFilters.returnUser">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span>{{ scope.row.returnUser || '-' }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="会员姓名" align="center" prop="userName" width="90" column-key="userName" :filters="getFilters('userName')" :filtered-value="columnFilters.userName" />
|
|
|
+ <el-table-column label="快递公司" align="center" prop="deliveryName" width="100" column-key="deliveryName" :filters="getFilters('deliveryName')" :filtered-value="columnFilters.deliveryName" />
|
|
|
+ <el-table-column label="运单号" align="center" prop="deliverySn" width="150" show-overflow-tooltip column-key="deliverySn" :filters="getFilters('deliverySn')" :filtered-value="columnFilters.deliverySn" />
|
|
|
+ <el-table-column label="订单金额" align="center" prop="totalPrice" width="100" column-key="totalPrice" :filters="getFilters('totalPrice', null, true)" :filtered-value="columnFilters.totalPrice" />
|
|
|
+ <el-table-column label="代收金额" align="center" prop="collectionPrice" width="100" column-key="collectionPrice" :filters="getFilters('collectionPrice', null, true)" :filtered-value="columnFilters.collectionPrice" />
|
|
|
+ <el-table-column label="回款金额" align="center" prop="returnPrice" width="100" column-key="returnPrice" :filters="getFilters('returnPrice', null, true)" :filtered-value="columnFilters.returnPrice" />
|
|
|
+ <el-table-column label="收件人电话" align="center" prop="receiverPhone" width="130" show-overflow-tooltip column-key="receiverPhone" :filters="getFilters('receiverPhone')" :filtered-value="columnFilters.receiverPhone" />
|
|
|
+ <el-table-column label="订购产品" align="center" prop="productNames" width="180" show-overflow-tooltip column-key="productNames" :filters="getFilters('productNames')" :filtered-value="columnFilters.productNames" />
|
|
|
+ <el-table-column label="付款方式" align="center" prop="payType" width="90" column-key="payType" :filters="payTypeFilters" :filtered-value="columnFilters.payType">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <dict-tag :options="payTypeOptions" :value="scope.row.payType" />
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="回款状态" align="center" prop="returnStatus" width="90" column-key="returnStatus" :filters="returnStatusFilters" :filtered-value="columnFilters.returnStatus">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-tag :type="scope.row.returnStatus == 1 ? 'success' : 'info'">
|
|
|
+ {{ scope.row.returnStatus == 1 ? '已回款' : '未回款' }}
|
|
|
+ </el-tag>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="备注" align="center" prop="remark" width="150" show-overflow-tooltip column-key="remark" :filters="getFilters('remark')" :filtered-value="columnFilters.remark" />
|
|
|
+ <el-table-column label="发货日期" align="center" prop="deliveryTime" width="160" column-key="deliveryTime" :filters="getFilters('deliveryTime')" :filtered-value="columnFilters.deliveryTime">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span>{{ scope.row.deliveryTime ? parseTime(scope.row.deliveryTime) : '-' }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="销售姓名" align="center" prop="companyUserName" width="100" column-key="companyUserName" :filters="getFilters('companyUserName')" :filtered-value="columnFilters.companyUserName" />
|
|
|
+ <el-table-column label="公司" align="center" prop="companyName" width="120" show-overflow-tooltip column-key="companyName" :filters="getFilters('companyName')" :filtered-value="columnFilters.companyName" />
|
|
|
+ <el-table-column label="部门" align="center" prop="deptName" width="100" show-overflow-tooltip column-key="deptName" :filters="getFilters('deptName')" :filtered-value="columnFilters.deptName" />
|
|
|
+ <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="100">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-button
|
|
|
+ size="mini"
|
|
|
+ type="text"
|
|
|
+ icon="el-icon-edit"
|
|
|
+ @click="handleEdit(scope.row)"
|
|
|
+ v-hasPermi="['store:storeFinanceOrder:edit']"
|
|
|
+ v-if="scope.row.returnStatus == 1"
|
|
|
+ >修改</el-button>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+
|
|
|
+ <pagination
|
|
|
+ v-show="total > 0"
|
|
|
+ :total="total"
|
|
|
+ :page.sync="queryParams.pageNum"
|
|
|
+ :limit.sync="queryParams.pageSize"
|
|
|
+ @pagination="getList"
|
|
|
+ />
|
|
|
+
|
|
|
+ <el-dialog :title="editTitle" :visible.sync="editOpen" width="450px" append-to-body>
|
|
|
+ <el-form ref="editForm" :model="editForm" :rules="editRules" label-width="100px">
|
|
|
+ <el-form-item label="订单编号">
|
|
|
+ <span>{{ editForm.orderCode }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="订单金额">
|
|
|
+ <span>{{ editForm.totalPrice }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="代收金额">
|
|
|
+ <span>{{ editForm.collectionPrice }}</span>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="回款金额" prop="returnPrice">
|
|
|
+ <el-input v-model="editForm.returnPrice" placeholder="请输入回款金额" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <div slot="footer" class="dialog-footer">
|
|
|
+ <el-button type="primary" @click="submitEdit">确 定</el-button>
|
|
|
+ <el-button @click="editOpen = false">取 消</el-button>
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
+
|
|
|
+ <!-- 导入对话框 -->
|
|
|
+ <el-dialog title="导入回款数据" :visible.sync="importOpen" width="450px" append-to-body>
|
|
|
+ <el-form label-width="80px">
|
|
|
+ <el-form-item label="选择文件">
|
|
|
+ <el-upload
|
|
|
+ ref="upload"
|
|
|
+ :action="importAction"
|
|
|
+ :headers="importHeaders"
|
|
|
+ :auto-upload="false"
|
|
|
+ :limit="1"
|
|
|
+ accept=".xls,.xlsx"
|
|
|
+ :on-change="handleImportFileChange"
|
|
|
+ :on-remove="handleImportFileRemove"
|
|
|
+ >
|
|
|
+ <el-button size="small" type="primary">选择文件</el-button>
|
|
|
+ <div slot="tip" class="el-upload__tip">仅支持 .xls/.xlsx 文件</div>
|
|
|
+ </el-upload>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <div slot="footer" class="dialog-footer">
|
|
|
+ <el-button type="success" icon="el-icon-download" size="mini" @click="downloadImportTemplate">模板下载</el-button>
|
|
|
+ <el-button type="primary" @click="submitImport" :loading="importLoading" :disabled="importDisableUpload">开 始</el-button>
|
|
|
+ <el-button @click="importOpen = false">关 闭</el-button>
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import { listStoreFinanceOrder, editStoreFinanceOrder, exportStoreFinanceOrder, downloadStoreFinanceImportTemplate, importStoreFinanceOrder } from '@/api/store/storeFinanceOrder'
|
|
|
+import { treeselect } from '@/api/company/companyDept'
|
|
|
+import Treeselect from '@riophae/vue-treeselect'
|
|
|
+import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
|
|
+import { getToken } from '@/utils/auth'
|
|
|
+
|
|
|
+export default {
|
|
|
+ name: 'StoreFinanceOrder',
|
|
|
+ components: { Treeselect },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ loading: false,
|
|
|
+ exportLoading: false,
|
|
|
+ showSearch: true,
|
|
|
+ total: 0,
|
|
|
+ orderList: [],
|
|
|
+ deliveryTime: null,
|
|
|
+ createTime: null,
|
|
|
+ returnTime: null,
|
|
|
+ queryParams: {
|
|
|
+ pageNum: 1,
|
|
|
+ pageSize: 10,
|
|
|
+ deptId: null,
|
|
|
+ orderCode: null,
|
|
|
+ userName: null,
|
|
|
+ deliverySn: null,
|
|
|
+ deliveryName: null,
|
|
|
+ returnUser: null,
|
|
|
+ totalPrice: null,
|
|
|
+ collectionPrice: null,
|
|
|
+ receiverPhone: null,
|
|
|
+ productName: null,
|
|
|
+ remark: null,
|
|
|
+ companyUserName: null,
|
|
|
+ payType: null,
|
|
|
+ returnStatus: null,
|
|
|
+ sTime: null,
|
|
|
+ eTime: null,
|
|
|
+ returnTimeStart: null,
|
|
|
+ returnTimeEnd: null,
|
|
|
+ deliveryStartTime: null,
|
|
|
+ deliveryEndTime: null
|
|
|
+ },
|
|
|
+ payTypeOptions: [],
|
|
|
+ deptOptions: [],
|
|
|
+ editOpen: false,
|
|
|
+ editTitle: '',
|
|
|
+ editForm: {
|
|
|
+ orderId: null,
|
|
|
+ orderCode: null,
|
|
|
+ totalPrice: null,
|
|
|
+ collectionPrice: null,
|
|
|
+ returnPrice: null
|
|
|
+ },
|
|
|
+ editRules: {
|
|
|
+ returnPrice: [
|
|
|
+ { required: true, message: '回款金额不能为空', trigger: 'blur' }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ columnFilters: {
|
|
|
+ orderCode: [], externalCreateTime: [], returnTime: [], returnUser: [],
|
|
|
+ userName: [], deliveryName: [], deliverySn: [], totalPrice: [],
|
|
|
+ collectionPrice: [], returnPrice: [], receiverPhone: [], productNames: [],
|
|
|
+ payType: [], returnStatus: [], remark: [], deliveryTime: [],
|
|
|
+ companyUserName: [], companyName: [], deptName: []
|
|
|
+ },
|
|
|
+ importOpen: false,
|
|
|
+ importLoading: false,
|
|
|
+ importAction: process.env.VUE_APP_BASE_API + '/store/storeFinanceOrder/importData',
|
|
|
+ importHeaders: { Authorization: 'Bearer ' + getToken() },
|
|
|
+ importDisableUpload: true
|
|
|
+ }
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ payTypeFilters() {
|
|
|
+ return (this.payTypeOptions || []).map(d => ({ text: d.dictLabel, value: Number(d.dictValue) }));
|
|
|
+ },
|
|
|
+ returnStatusFilters() {
|
|
|
+ return [{ text: '未回款', value: 0 }, { text: '已回款', value: 1 }];
|
|
|
+ }
|
|
|
+ },
|
|
|
+ created() {
|
|
|
+ this.getList()
|
|
|
+ this.getDicts('sys_package_pay_type').then(response => {
|
|
|
+ this.payTypeOptions = response.data
|
|
|
+ })
|
|
|
+ this.getTreeselect()
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ getTreeselect() {
|
|
|
+ treeselect().then((response) => {
|
|
|
+ this.deptOptions = response.data
|
|
|
+ })
|
|
|
+ },
|
|
|
+ getList() {
|
|
|
+ this.loading = true
|
|
|
+ const params = { ...this.queryParams }
|
|
|
+ if (params.totalPrice === 0) params.totalPrice = null
|
|
|
+ if (params.collectionPrice === 0) params.collectionPrice = null
|
|
|
+ if (params.returnStatus === '' || params.returnStatus === null || params.returnStatus === undefined) delete params.returnStatus
|
|
|
+ listStoreFinanceOrder(params).then(response => {
|
|
|
+ this.orderList = response.rows || []
|
|
|
+ this.total = response.total || 0
|
|
|
+ this.loading = false
|
|
|
+ }).catch(() => {
|
|
|
+ this.loading = false
|
|
|
+ })
|
|
|
+ },
|
|
|
+ getFilters(prop, labelMap = null, sort = false) {
|
|
|
+ if (!this.orderList || this.orderList.length === 0) return [];
|
|
|
+ const seen = new Map();
|
|
|
+ this.orderList.forEach(item => {
|
|
|
+ const v = item[prop];
|
|
|
+ if (v === null || v === undefined || v === '') return;
|
|
|
+ if (!seen.has(v)) seen.set(v, true);
|
|
|
+ });
|
|
|
+ let keys = Array.from(seen.keys());
|
|
|
+ if (sort) {
|
|
|
+ keys.sort((a, b) => Number(a) - Number(b));
|
|
|
+ }
|
|
|
+ return keys.map(v => ({
|
|
|
+ text: labelMap ? (labelMap[v] || String(v)) : String(v),
|
|
|
+ value: v
|
|
|
+ }));
|
|
|
+ },
|
|
|
+ handleFilterChange(filters) {
|
|
|
+ const timeRangeMap = {
|
|
|
+ externalCreateTime: ['sTime', 'eTime'],
|
|
|
+ returnTime: ['returnTimeStart', 'returnTimeEnd'],
|
|
|
+ deliveryTime: ['deliveryStartTime', 'deliveryEndTime']
|
|
|
+ };
|
|
|
+ const fieldMap = {
|
|
|
+ productNames: 'productName'
|
|
|
+ };
|
|
|
+ Object.keys(filters).forEach(key => {
|
|
|
+ const vals = filters[key] || [];
|
|
|
+ const last = vals.length > 0 ? vals[vals.length - 1] : null;
|
|
|
+ this.$set(this.columnFilters, key, last != null ? [last] : []);
|
|
|
+ if (timeRangeMap[key]) {
|
|
|
+ const [startField, endField] = timeRangeMap[key];
|
|
|
+ if (last != null && String(last).length >= 10) {
|
|
|
+ const day = String(last).substring(0, 10);
|
|
|
+ this.queryParams[startField] = day + ' 00:00:00';
|
|
|
+ this.queryParams[endField] = day + ' 23:59:59';
|
|
|
+ } else {
|
|
|
+ this.queryParams[startField] = null;
|
|
|
+ this.queryParams[endField] = null;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ const fieldName = fieldMap[key] || key;
|
|
|
+ this.queryParams[fieldName] = last;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ this.handleQuery();
|
|
|
+ },
|
|
|
+ resetColumnFilters() {
|
|
|
+ Object.keys(this.columnFilters).forEach(key => {
|
|
|
+ this.columnFilters[key] = [];
|
|
|
+ });
|
|
|
+ },
|
|
|
+ getSummaries({ columns, data }) {
|
|
|
+ const sums = [];
|
|
|
+ const sumProps = ['totalPrice', 'collectionPrice', 'returnPrice'];
|
|
|
+ columns.forEach((column, index) => {
|
|
|
+ if (index === 0) {
|
|
|
+ sums[index] = '总计';
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (sumProps.includes(column.property)) {
|
|
|
+ const total = data.reduce((sum, row) => {
|
|
|
+ const v = Number(row[column.property]);
|
|
|
+ return isNaN(v) ? sum : sum + v;
|
|
|
+ }, 0);
|
|
|
+ sums[index] = total.toFixed(2);
|
|
|
+ } else {
|
|
|
+ sums[index] = '';
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return sums;
|
|
|
+ },
|
|
|
+ handleDeliveryTimeChange(val) {
|
|
|
+ if (val) {
|
|
|
+ this.queryParams.deliveryStartTime = val[0]
|
|
|
+ this.queryParams.deliveryEndTime = val[1] + ' 23:59:59'
|
|
|
+ } else {
|
|
|
+ this.queryParams.deliveryStartTime = null
|
|
|
+ this.queryParams.deliveryEndTime = null
|
|
|
+ }
|
|
|
+ },
|
|
|
+ handleCreateTimeChange(val) {
|
|
|
+ if (val) {
|
|
|
+ this.queryParams.sTime = val[0]
|
|
|
+ this.queryParams.eTime = val[1] + ' 23:59:59'
|
|
|
+ } else {
|
|
|
+ this.queryParams.sTime = null
|
|
|
+ this.queryParams.eTime = null
|
|
|
+ }
|
|
|
+ },
|
|
|
+ handleReturnTimeChange(val) {
|
|
|
+ if (val) {
|
|
|
+ this.queryParams.returnTimeStart = val[0]
|
|
|
+ this.queryParams.returnTimeEnd = val[1] + ' 23:59:59'
|
|
|
+ } else {
|
|
|
+ this.queryParams.returnTimeStart = null
|
|
|
+ this.queryParams.returnTimeEnd = null
|
|
|
+ }
|
|
|
+ },
|
|
|
+ handleQuery() {
|
|
|
+ this.queryParams.pageNum = 1
|
|
|
+ this.getList()
|
|
|
+ },
|
|
|
+ resetQuery() {
|
|
|
+ this.resetForm('queryForm')
|
|
|
+ this.deliveryTime = null
|
|
|
+ this.createTime = null
|
|
|
+ this.returnTime = null
|
|
|
+ this.queryParams.sTime = null
|
|
|
+ this.queryParams.eTime = null
|
|
|
+ this.queryParams.deliveryStartTime = null
|
|
|
+ this.queryParams.deliveryEndTime = null
|
|
|
+ this.queryParams.returnTimeStart = null
|
|
|
+ this.queryParams.returnTimeEnd = null
|
|
|
+ this.resetColumnFilters()
|
|
|
+ this.handleQuery()
|
|
|
+ },
|
|
|
+ handleExport() {
|
|
|
+ this.$confirm('是否确认导出财务店铺订单数据?', '警告', {
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning'
|
|
|
+ }).then(() => {
|
|
|
+ this.exportLoading = true
|
|
|
+ return exportStoreFinanceOrder(this.queryParams)
|
|
|
+ }).then(response => {
|
|
|
+ this.download(response.msg)
|
|
|
+ this.exportLoading = false
|
|
|
+ }).catch(() => {
|
|
|
+ this.exportLoading = false
|
|
|
+ })
|
|
|
+ },
|
|
|
+ handleEdit(row) {
|
|
|
+ this.resetForm('editForm')
|
|
|
+ this.editForm = {
|
|
|
+ orderId: row.orderId,
|
|
|
+ orderCode: row.orderCode,
|
|
|
+ totalPrice: row.totalPrice,
|
|
|
+ collectionPrice: row.collectionPrice,
|
|
|
+ returnPrice: row.returnPrice
|
|
|
+ }
|
|
|
+ this.editTitle = '修改回款金额 - ' + row.orderCode
|
|
|
+ this.editOpen = true
|
|
|
+ },
|
|
|
+ submitEdit() {
|
|
|
+ this.$refs.editForm.validate(valid => {
|
|
|
+ if (!valid) return
|
|
|
+ editStoreFinanceOrder(this.editForm).then(response => {
|
|
|
+ if (response.code === 200) {
|
|
|
+ this.msgSuccess('修改成功')
|
|
|
+ this.editOpen = false
|
|
|
+ this.getList()
|
|
|
+ }
|
|
|
+ })
|
|
|
+ })
|
|
|
+ },
|
|
|
+ handleImport() {
|
|
|
+ this.importDisableUpload = true
|
|
|
+ this.importOpen = true
|
|
|
+ this.$nextTick(() => {
|
|
|
+ this.$refs.upload && this.$refs.upload.clearFiles()
|
|
|
+ })
|
|
|
+ },
|
|
|
+ downloadImportTemplate() {
|
|
|
+ downloadStoreFinanceImportTemplate().then(response => {
|
|
|
+ this.download(response.msg)
|
|
|
+ })
|
|
|
+ },
|
|
|
+ handleImportFileChange(file) {
|
|
|
+ this.importDisableUpload = false
|
|
|
+ },
|
|
|
+ handleImportFileRemove() {
|
|
|
+ this.importDisableUpload = true
|
|
|
+ },
|
|
|
+ submitImport() {
|
|
|
+ const uploadFiles = this.$refs.upload.uploadFiles
|
|
|
+ if (!uploadFiles || uploadFiles.length === 0) {
|
|
|
+ this.msgError('请选择文件')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ const formData = new FormData()
|
|
|
+ formData.append('file', uploadFiles[0].raw)
|
|
|
+ this.importLoading = true
|
|
|
+ importStoreFinanceOrder(formData).then(response => {
|
|
|
+ this.$refs.upload.clearFiles()
|
|
|
+ this.importDisableUpload = true
|
|
|
+ this.importLoading = false
|
|
|
+ this.importOpen = false
|
|
|
+ const hasFail = response.msg && response.msg.indexOf('失败') !== -1
|
|
|
+ const failFile = response.data
|
|
|
+ if (hasFail && failFile) {
|
|
|
+ this.$confirm(response.msg + ',是否下载失败记录?', '提示', {
|
|
|
+ confirmButtonText: '下载',
|
|
|
+ cancelButtonText: '关闭',
|
|
|
+ type: 'warning'
|
|
|
+ }).then(() => {
|
|
|
+ this.download(failFile)
|
|
|
+ }).catch(() => {})
|
|
|
+ } else {
|
|
|
+ this.msgSuccess(response.msg)
|
|
|
+ }
|
|
|
+ this.getList()
|
|
|
+ }).catch(() => {
|
|
|
+ this.importLoading = false
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</script>
|