gaoluyang
3 天以前 6472e7cb3babd991e0e10e8de6bafee4dafdf76e
1.销售出库页面联调
已修改3个文件
189 ■■■■ 文件已修改
src/api/salesOutbound/index.js 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/salesOutbound/components/formDia.vue 117 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/salesOutbound/index.vue 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/salesOutbound/index.js
@@ -24,4 +24,20 @@
        method: 'get',
        params: query
    })
}
// 查询煤种
export function officialList(query) {
    return request({
        url: '/officialInventory/officialList',
        method: 'get',
        params: query
    })
}
// 查询煤种
export function delSalesRecord(query) {
    return request({
        url: '/salesRecord/delSalesRecord',
        method: 'delete',
        data: query
    })
}
src/views/salesOutbound/components/formDia.vue
@@ -1,6 +1,6 @@
<template>
  <div>
    <el-dialog :title="operationType === 'add' ? '新增出库' : '编辑出库'"
    <el-dialog :title="operationType === 'add' ? '新增销售出库' : '编辑销售出库'"
               v-model="dialogVisitable" width="800px" @close="cancel">
      <el-form :model="form" :rules="rules" ref="formRef" label-width="120px">
        <el-row>
@@ -22,9 +22,9 @@
              <el-select v-model="form.customerId" placeholder="请选择客户">
                <el-option
                    v-for="item in customerOptions"
                    :key="item.value"
                    :label="item.label"
                    :value="item.value"
                    :key="item.id"
                    :label="item.customerName"
                    :value="item.id"
                />
              </el-select>
            </el-form-item>
@@ -33,12 +33,12 @@
        <el-row>
          <el-col :span="12">
            <el-form-item label="煤种" prop="coalId">
              <el-select v-model="form.coalId" placeholder="请选择煤种">
              <el-select v-model="form.coalId" placeholder="请选择煤种" @change="setInfo">
                <el-option
                    v-for="item in typeOptions"
                    :key="item.value"
                    :label="item.label"
                    :value="item.value"
                    v-for="item in coalOptions"
                    :key="item.id"
                    :label="item.coal"
                    :value="item.id"
                />
              </el-select>
            </el-form-item>
@@ -68,8 +68,20 @@
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="销售单价(含税)" prop="salePrice">
            <el-form-item label="销售单价(含税)" prop="salePrice" @change="mathProfit">
              <el-input v-model="form.salePrice" placeholder="请输入销售单价(含税)" maxlength="30" type="number" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="销售总价(含税)" prop="totalAmount">
              <el-input v-model="form.totalAmount" placeholder="请输入销售总价(含税)" maxlength="30" type="number" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="运费" prop="freight">
              <el-input v-model="form.freight" placeholder="请输入销售总价(含税)" maxlength="30" type="number" />
            </el-form-item>
          </el-col>
        </el-row>
@@ -109,15 +121,17 @@
</template>
<script setup>
import {ref, reactive} from "vue";
import {addOrEditSalesRecord, customerList} from "../../../api/salesOutbound/index.js";
import {reactive, ref} from "vue";
import {addOrEditSalesRecord, customerList, officialList} from "../../../api/salesOutbound/index.js";
import useUserStore from '@/store/modules/user'
const { proxy } = getCurrentInstance()
const emit = defineEmits()
const userStore = useUserStore()
const dialogVisitable = ref(false);
const operationType = ref('add');
const customerOptions = ref([]) // 客户下拉框
const typeOptions = ref([]) // 煤种下拉框
const coalOptions = ref([]) // 煤种下拉框
const data = reactive({
  form: {
    saleDate: '',
@@ -127,6 +141,7 @@
    saleQuantity: '',
    salePrice: '',
    totalAmount: '',
    freight: '',
    taxCoal: '',
    taxTrans: '',
    grossProfit: '',
@@ -142,13 +157,81 @@
const { form, rules } = toRefs(data)
// 打开弹框
const openDialog = (type, row) => {
  console.log('openDialog', type, row)
const openDialog = async (type, row) => {
  dialogVisitable.value = true
  form.value.saleDate = proxy.getCurrentDate()
  customerList().then((res) => {
    console.log(res)
    customerOptions.value = res.data
  })
  officialList().then((res) => {
    coalOptions.value = res.data
  })
  let res = await userStore.getInfo()
  form.value.registrantId = res.user.userId
  form.value.taxCoal = 13
  form.value.taxTrans = 9
  form.value.freight = 20
  if (type === 'edit') {
    form.value = {...row}
  }
}
// 复制煤种相关信息
const setInfo = (val) => {
  const index = coalOptions.value.findIndex(item => item.id === val)
  if (index > -1) {
    form.value.inventoryQuantity = coalOptions.value[index].inventoryQuantity
    form.value.priceIncludingTax = coalOptions.value[index].priceIncludingTax
    form.value.unit = coalOptions.value[index].unit
  }
  if (!val) {
    form.value.inventoryQuantity = ''
    form.value.priceIncludingTax = ''
    form.value.unit = ''
  }
}
// 计算
const mathProfit = () => {
  form.value.totalAmount = form.value.saleQuantity * form.value.salePrice
  // 输入数据
  const purchaseTons = form.value.inventoryQuantity;     // 库存数量
  const saleTons = form.value.saleQuantity;          // 销售数量
  const purchasePricePerTon = form.value.priceIncludingTax; // 含税单价
  const transportPricePerTon = form.value.freight; // 运费
  const salePricePerTon = form.value.salePrice;   // 销售单价(元/吨)
  const coalTaxRate = form.value.taxCoal / 100;      // 购销煤税率(13%)
  const transportTaxRate = form.value.taxTrans / 100; // 运输税率(9%)
  const surchargeRate = 0.12;    // 增值税附加税率(12%)
  const stampDutyRate = 3 / 10000; // 印花税税率(0.03%)
  const waterFundRate = 5 / 10000; // 水利基金费率(0.05%)
// 计算不含税价格及进项/销项税额
  const A = purchasePricePerTon / (1 + coalTaxRate); // 购煤不含税单价
  const B = A * coalTaxRate * purchaseTons;          // 购煤进项税额
  const C = transportPricePerTon / (1 + transportTaxRate); // 运费不含税单价
  const D = C * transportTaxRate * purchaseTons;     // 运费进项税额
  const E = salePricePerTon / (1 + coalTaxRate);     // 销售不含税单价
  const F = E * coalTaxRate * saleTons;              // 销项税额
// 毛利润 = 销售收入 - 成本成本(购煤+运费)的成本部分
  const G = E * saleTons - A * saleTons - C * saleTons;
  form.value.grossProfit = G.toFixed(2);
// 应缴纳增值税 = 销项税 - 可抵扣进项税(按销售量比例计算)
  const H = F - (A * coalTaxRate * saleTons) - (C * transportTaxRate * saleTons);
// 增值税附加税
  const K = H * surchargeRate;
// 印花税:购、运、销三方金额合计 × 税率
  const M = (purchasePricePerTon * saleTons +
      transportPricePerTon * saleTons +
      salePricePerTon * saleTons) * stampDutyRate;
// 水利建设基金:销售收入 × 费率
  const P = E * saleTons * waterFundRate;
// 净利润 = 毛利润 - 各类税费(附加税、印花税、水利基金)
  form.value.netProfit = (G - K - M - P).toFixed(2);
}
// 提交合并表单
const submitForm = () => {
src/views/salesOutbound/index.vue
@@ -1,33 +1,27 @@
<template>
  <div class="app-container">
    <el-form :inline="true" :model="queryParams" class="search-form">
      <el-form-item label="搜索">
        <el-input
            v-model="queryParams.searchText"
            placeholder="请输入关键词"
      <el-form-item label="销售日期">
        <el-date-picker
            v-model="queryParams.saleDate"
            type="date"
            placeholder="请选择"
            value-format="YYYY-MM-DD"
            format="YYYY-MM-DD"
            clearable
            :style="{ width: '100%' }"
        />
      </el-form-item>
      <el-form-item label="供应商名称">
      <el-form-item label="客户">
        <el-input
            v-model="queryParams.supplierName"
            v-model="queryParams.customer"
            placeholder="请输入"
            clearable
            :style="{ width: '100%' }"
        />
      </el-form-item>
      <el-form-item label="统一人识别号">
      <el-form-item label="煤种">
        <el-input
            v-model="queryParams.identifyNumber"
            placeholder="请输入"
            clearable
            :style="{ width: '100%' }"
        />
      </el-form-item>
      <el-form-item label="经营地址">
        <el-input
            v-model="queryParams.address"
            v-model="queryParams.coal"
            placeholder="请输入"
            clearable
            :style="{ width: '100%' }"
@@ -50,7 +44,7 @@
      </el-tabs>
      <!-- 操作按钮区 -->
      <el-space>
        <el-button type="primary" :icon="Plus" @click="openDia('add')">新建</el-button>
        <el-button type="primary" :icon="Plus" @click="openDia()">新建</el-button>
        <el-button type="danger" :icon="Delete" @click="handleDelete">删除</el-button>
        <el-button type="info" plain :icon="Download" @click="handleExport">导出</el-button>
      </el-space>
@@ -85,7 +79,7 @@
import ETable from "@/components/Table/ETable.vue";
import Pagination from "@/components/Pagination/index.vue";
import FormDia from "@/views/salesOutbound/components/formDia.vue";
import {salesRecordList} from "../../api/salesOutbound/index.js";
import {delSalesRecord, salesRecordList} from "../../api/salesOutbound/index.js";
const formDia = ref()
const activeTab = ref("out");
@@ -106,6 +100,7 @@
  { prop: "saleQuantity", label: "销售数量", minWidth: 120 },
  { prop: "salePrice", label: "销售单价(含税)", minWidth: 150 },
  { prop: "totalAmount", label: "销售总价(含税)", minWidth: 120 },
  { prop: "freight", label: "运费", minWidth: 90 },
  { prop: "taxCoal", label: "购销煤税率(%)", minWidth: 120 },
  { prop: "taxTrans", label: "运输税率(%)", minWidth: 120 },
  { prop: "grossProfit", label: "毛利润", minWidth: 90 },
@@ -119,10 +114,9 @@
const pageSize = ref(10);
// 查询参数
const queryParams = reactive({
  searchText: "",
  supplierName: "",
  identifyNumber: "",
  address: "",
  saleDate: "",
  customer: "",
  coal: "",
})
onMounted(() => {
  handleQuery()
@@ -151,14 +145,26 @@
  handleQuery();
};
// 新增出库
const openDia = (type, row) => {
const openDia = (row) => {
  console.log(row)
  const type = row === undefined ? 'add' : 'edit'
  nextTick(() => {
    formDia.value?.openDialog(type, row)
  })
};
// 删除出库
const handleDelete = () => {
  if (selectedRows.value.length === 0) {
    proxy.$modal.msgWarning("请选择要删除的数据");
    return;
  }
  const deleteIds = selectedRows.value.map(item => item.id);
  proxy.$modal.confirm('是否确认删除所选数据项?').then(function() {
    return delSalesRecord(deleteIds)
  }).then(() => {
    handleQuery()
    proxy.$modal.msgSuccess("删除成功")
  }).catch(() => {})
};
// 导出出库
const handleExport = () => {