hurx 1 день тому
батько
коміт
308b487a40

+ 11 - 0
src/api/bill/statementInvoice/index.ts

@@ -73,3 +73,14 @@ export function changeStatus(id: string | number, invoiceStatus: string) {
     data: data
   });
 }
+
+/**
+ * 申请开票
+ */
+export function applyForInvoice(data: any) {
+  return request({
+    url: '/bill/statementInvoice/insertByBo',
+    method: 'post',
+    data: data
+  });
+}

+ 23 - 1
src/api/bill/statementOrder/index.ts

@@ -10,7 +10,7 @@ import { StatementOrderVO, StatementOrderForm, StatementOrderQuery } from '@/api
 
 export const listStatementOrder = (query?: StatementOrderQuery): AxiosPromise<StatementOrderVO[]> => {
   return request({
-    url: '/bill/statementOrder/list',
+    url: '/bill/statementOrder/bpStatementOrderList',
     method: 'get',
     params: query
   });
@@ -108,3 +108,25 @@ export function getStatementProductList(items: { statementOrderId: number | stri
     data: items // 发送 JSON 数组
   });
 }
+
+/**
+ * 确认对账单
+ */
+export function confirmStatement(data: { id: number; remark?: string }) {
+  return request({
+    url: '/bill/statementOrder/confirm',
+    method: 'put',
+    data: data
+  });
+}
+
+/**
+ * 驳回对账单
+ */
+export function rejectStatement(data: { id: number; rejectRemark?: string }) {
+  return request({
+    url: '/bill/statementOrder/reject',
+    method: 'put',
+    data: data
+  });
+}

+ 20 - 0
src/api/bill/statementOrder/types.ts

@@ -85,6 +85,16 @@ export interface StatementOrderVO {
    * 商品清单列表
    */
   productList?: any[];
+
+  /**
+   * 对账单目标类型( 1-客户, 2-伙伴商)
+   */
+  statementType: string;
+
+  /**
+   * 对账单ID
+   */
+  statementOrderIds: string | number | Array<string | number>;
 }
 
 export interface StatementOrderForm extends BaseEntity {
@@ -165,6 +175,16 @@ export interface StatementOrderForm extends BaseEntity {
    */
   remark?: string;
 
+  /**
+   * 对账单目标类型( 1-客户, 2-伙伴商)
+   */
+  statementType: string;
+
+  /**
+   * 对账单ID
+   */
+  statementOrderIds?: string | number | Array<string | number>;
+
   detailList?: any[];
 
   productList?: any[];

+ 2 - 2
src/views/bill/statementInvoice/detailDrawer.vue

@@ -63,8 +63,8 @@
           <el-table-column prop="orderNo" label="订单编号" min-width="150" align="center" />
           <el-table-column prop="orderAmount" label="金额" min-width="120" align="center" />
           <el-table-column prop="orderTime" label="下单日期" min-width="120" align="center" />
-          <el-table-column prop="userName" label="下单人" min-width="100" align="center" />
-          <el-table-column prop="userDept" label="部门" min-width="120" align="center" />
+          <!-- <el-table-column prop="userName" label="下单人" min-width="100" align="center" />
+          <el-table-column prop="userDept" label="部门" min-width="120" align="center" /> -->
         </el-table>
 
         <!-- 商品清单 -->

+ 11 - 11
src/views/bill/statementInvoice/index.vue

@@ -56,11 +56,11 @@
 
     <el-card shadow="never">
       <template #header>
-        <el-row :gutter="10" class="mb8">
-          <el-col :span="22"> 销售发票信息列表 </el-col>
-          <el-col :span="1.5">
+        <el-row :gutter="10" class="mb8" type="flex" justify="space-between" align="middle">
+          <span style="font-size: 16px; font-weight: 500">销售发票信息列表</span>
+          <div style="display: flex; flex-wrap: nowrap; gap: 10px">
             <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['bill:statementInvoice:add']">新增</el-button>
-          </el-col>
+          </div>
         </el-row>
       </template>
 
@@ -319,19 +319,19 @@ const buttonConfigMap: Record<number, ActionButton[]> = {
   [InvoiceStatus.DRAFT]: [
     { action: 'detail', label: '查看', handler: handleDetail, permission: 'bill:statementInvoice:edit' },
     { action: 'edit', label: '编辑', handler: handleUpdate, permission: 'bill:statementInvoice:edit' },
-    { action: 'send', label: '发送开票信息', handler: handleSend, permission: 'bill:statementInvoice:edit' },
+    // { action: 'send', label: '发送开票信息', handler: handleSend, permission: 'bill:statementInvoice:edit' },
     { action: 'withdraw', label: '撤回', handler: handleWithdraw, permission: 'bill:statementInvoice:edit' },
     { action: 'obsolete', label: '作废', handler: handleObsolete, permission: 'bill:statementInvoice:remove' }
   ],
   [InvoiceStatus.PENDING]: [
-    { action: 'detail', label: '查看', handler: handleDetail, permission: 'bill:statementInvoice:edit' },
-    { action: 'edit', label: '编辑', handler: handleUpdate, permission: 'bill:statementInvoice:edit' },
-    { action: 'withdraw', label: '撤回', handler: handleWithdraw, permission: 'bill:statementInvoice:edit' },
-    { action: 'obsolete', label: '作废', handler: handleObsolete, permission: 'bill:statementInvoice:remove' }
+    { action: 'detail', label: '查看', handler: handleDetail, permission: 'bill:statementInvoice:edit' }
+    // { action: 'edit', label: '编辑', handler: handleUpdate, permission: 'bill:statementInvoice:edit' },
+    // { action: 'withdraw', label: '撤回', handler: handleWithdraw, permission: 'bill:statementInvoice:edit' },
+    // { action: 'obsolete', label: '作废', handler: handleObsolete, permission: 'bill:statementInvoice:remove' }
   ],
   [InvoiceStatus.CONFIRMED]: [
-    { action: 'detail', label: '查看', handler: handleDetail, permission: 'bill:statementInvoice:edit' },
-    { action: 'obsolete', label: '作废', handler: handleObsolete, permission: 'bill:statementInvoice:remove' }
+    { action: 'detail', label: '查看', handler: handleDetail, permission: 'bill:statementInvoice:edit' }
+    // { action: 'obsolete', label: '作废', handler: handleObsolete, permission: 'bill:statementInvoice:remove' }
   ],
   [InvoiceStatus.OBSOLETE]: [{ action: 'detail', label: '查看', handler: handleDetail, permission: 'bill:statementInvoice:edit' }]
 };

+ 79 - 25
src/views/bill/statementOrder/index.vue

@@ -17,7 +17,7 @@
                 value-format="YYYY-MM-DD"
               />
             </el-form-item>
-            <el-form-item label="客户名称" prop="customerName">
+            <el-form-item label="供应商名称" prop="customerName">
               <el-input v-model="queryParams.customerName" placeholder="请输入客户名称" clearable @keyup.enter="handleQuery" />
             </el-form-item>
             <!-- <el-form-item label="订单编号" prop="orderNo">
@@ -45,11 +45,12 @@
 
     <el-card shadow="never">
       <template #header>
-        <el-row :gutter="10" class="mb8">
-          <el-col :span="22"> 对账管理信息列表 </el-col>
-          <el-col :span="1.5">
-            <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['bill:statementOrder:add']">新增</el-button>
-          </el-col>
+        <el-row :gutter="10" class="mb8" type="flex" justify="space-between" align="middle">
+          <span style="font-size: 16px; font-weight: 500">对账管理信息列表</span>
+          <div style="display: flex; flex-wrap: nowrap; gap: 10px">
+            <!-- <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['bill:statementOrder:add']">新增</el-button> -->
+            <el-button type="primary" plain icon="Plus" @click="handleApplyInvoice" :disabled="!selectedRows.length">申请开票</el-button>
+          </div>
         </el-row>
       </template>
 
@@ -62,8 +63,8 @@
           </template>
         </el-table-column>
         <el-table-column label="对账金额" align="center" prop="amount" />
-        <el-table-column label="客户编号" align="center" prop="customerNo" />
-        <el-table-column label="客户名称" align="center" prop="customerName" />
+        <el-table-column label="供应商编号" align="center" prop="customerNo" />
+        <el-table-column label="供应商名称" align="center" prop="customerName" />
         <el-table-column label="对账状态" align="center" prop="statementStatus">
           <template #default="scope">
             <dict-tag :options="statement_status" :value="scope.row.statementStatus" />
@@ -101,11 +102,11 @@
 </template>
 
 <script setup name="StatementOrder" lang="ts">
-import { listStatementOrder, getStatementOrder, changeStatus } from '@/api/bill/statementOrder';
+import { listStatementOrder, getStatementOrder, changeStatus, confirmStatement } from '@/api/bill/statementOrder';
 import { StatementOrderVO, StatementOrderQuery, StatementOrderForm } from '@/api/bill/statementOrder/types';
 import AddDrawer from './addDrawer.vue';
 import DetailDrawer from './detailDrawer.vue';
-
+import { applyForInvoice } from '@/api/bill/statementInvoice';
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const { statement_status, statement_order_type, invoice_issuance_status, payment_status } = toRefs<any>(
   proxy?.useDict('statement_status', 'statement_order_type', 'invoice_issuance_status', 'payment_status')
@@ -145,6 +146,8 @@ const initFormData: StatementOrderForm = {
   annexAddress: undefined,
   rejectRemark: undefined,
   remark: undefined,
+  statementOrderIds: [],
+  statementType: '2',
   detailList: [],
   productList: []
 };
@@ -182,6 +185,7 @@ enum StatementStatus {
   REJECTED = 3, // 已驳回
   OBSOLETE = 4 // 已作废
 }
+const selectedRows = ref<any[]>([]);
 
 // 按钮配置类型
 interface ActionButton {
@@ -200,6 +204,26 @@ const getList = async () => {
   loading.value = false;
 };
 
+const handleConfirm = async (row: any) => {
+  try {
+    await ElMessageBox.confirm(`确定要确认对账单"${row.billNo}"吗?`, '提示', {
+      confirmButtonText: '确定',
+      cancelButtonText: '取消',
+      type: 'warning'
+    });
+
+    await confirmStatement({ id: row.id });
+    row.billStatus = '2';
+    ElMessage.success('确认成功');
+    getList();
+  } catch (error) {
+    if (error !== 'cancel') {
+      console.error('确认对账单失败:', error);
+      ElMessage.error('确认对账单失败');
+    }
+  }
+};
+
 /** 表单重置 */
 const reset = () => {
   form.value = { ...initFormData };
@@ -222,8 +246,10 @@ const resetQuery = () => {
 /** 多选框选中数据 */
 const handleSelectionChange = (selection: StatementOrderVO[]) => {
   ids.value = selection.map((item) => item.id);
+
   single.value = selection.length != 1;
   multiple.value = !selection.length;
+  selectedRows.value = selection.filter((row) => row.statementStatus === '2');
 };
 
 /** 新增按钮操作 */
@@ -254,15 +280,15 @@ const handleSend = async (row?: StatementOrderVO) => {
   const _no = row?.statementOrderNo;
   const _ids = row?.id;
   const oldValue = row.statementStatus; // 保存旧值
-  await proxy?.$modal.confirm('是否发送当前账单编号【' + _no + '】吗?').finally(() => (loading.value = false));
+  await proxy?.$modal.confirm('是否确认对账当前账单编号【' + _no + '】吗?').finally(() => (loading.value = false));
   //todo 发送
   try {
-    await changeStatus(_ids, '1'); // 传新值 1 待确认
+    await changeStatus(_ids, '2'); // 传新值 2确认
   } catch (e) {
     // 恢复旧值
     row.statementStatus = oldValue;
   }
-  proxy?.$modal.msgSuccess('发送成功');
+  proxy?.$modal.msgSuccess('确认成功');
   await getList();
 };
 
@@ -293,6 +319,32 @@ const handleObsolete = async (row?: StatementOrderVO) => {
   await getList();
 };
 
+const handleApplyInvoice = async () => {
+  try {
+    form.value.statementOrderIds = selectedRows.value.map((row) => row.id);
+    if (!form.value.statementOrderIds) {
+      ElMessage.warning('请选择要申请的对账单');
+      return;
+    }
+    const billNos = selectedRows.value.map((row) => row.statementOrderNo).join('、');
+    await ElMessageBox.confirm(`确定要为以下对账单申请开票吗?\n${billNos}`, '提示', {
+      confirmButtonText: '确定',
+      cancelButtonText: '取消',
+      type: 'warning'
+    });
+    form.value.statementType = '2';
+    // TODO: 调用申请开票接口
+    await applyForInvoice(form.value);
+    ElMessage.success('申请开票成功');
+    getList();
+  } catch (error) {
+    if (error !== 'cancel') {
+      console.error('申请开票失败:', error);
+      ElMessage.error('申请开票失败');
+    }
+  }
+};
+
 /** 导出按钮操作 */
 const handleExport = () => {
   proxy?.download(
@@ -308,26 +360,28 @@ const handleExport = () => {
 const buttonConfigMap: Record<number, ActionButton[]> = {
   [StatementStatus.DRAFT]: [
     { action: 'detail', label: '查看', handler: handleDetail, permission: 'bill:statementOrder:edit' },
-    { action: 'edit', label: '编辑', handler: handleUpdate, permission: 'bill:statementOrder:edit' },
-    { action: 'send', label: '发送对账单', handler: handleSend, permission: 'bill:statementOrder:edit' },
-    { action: 'withdraw', label: '撤回', handler: handleWithdraw, permission: 'bill:statementOrder:edit' },
-    { action: 'obsolete', label: '作废', handler: handleObsolete, permission: 'bill:statementOrder:remove' }
+    // { action: 'edit', label: '编辑', handler: handleUpdate, permission: 'bill:statementOrder:edit' },
+    { action: 'send', label: '确认', handler: handleSend, permission: 'bill:statementOrder:edit' }
+    // { action: 'withdraw', label: '撤回', handler: handleWithdraw, permission: 'bill:statementOrder:edit' },
+    // { action: 'obsolete', label: '作废', handler: handleObsolete, permission: 'bill:statementOrder:remove' }
   ],
   [StatementStatus.PENDING]: [
     { action: 'detail', label: '查看', handler: handleDetail, permission: 'bill:statementOrder:edit' },
-    { action: 'edit', label: '编辑', handler: handleUpdate, permission: 'bill:statementOrder:edit' },
-    { action: 'withdraw', label: '撤回', handler: handleWithdraw, permission: 'bill:statementOrder:edit' },
-    { action: 'obsolete', label: '作废', handler: handleObsolete, permission: 'bill:statementOrder:remove' }
+    // { action: 'edit', label: '编辑', handler: handleUpdate, permission: 'bill:statementOrder:edit' },
+    // { action: 'withdraw', label: '撤回', handler: handleWithdraw, permission: 'bill:statementOrder:edit' },
+    { action: 'send', label: '确认', handler: handleSend, permission: 'bill:statementOrder:edit' }
+
+    // { action: 'obsolete', label: '作废', handler: handleObsolete, permission: 'bill:statementOrder:remove' }
   ],
   [StatementStatus.CONFIRMED]: [
-    { action: 'detail', label: '查看', handler: handleDetail, permission: 'bill:statementOrder:edit' },
-    { action: 'obsolete', label: '作废', handler: handleObsolete, permission: 'bill:statementOrder:remove' }
+    { action: 'detail', label: '查看', handler: handleDetail, permission: 'bill:statementOrder:edit' }
+    // { action: 'obsolete', label: '作废', handler: handleObsolete, permission: 'bill:statementOrder:remove' }
   ],
   [StatementStatus.REJECTED]: [
     { action: 'detail', label: '查看', handler: handleDetail, permission: 'bill:statementOrder:edit' },
-    { action: 'edit', label: '编辑', handler: handleUpdate, permission: 'bill:statementOrder:edit' },
-    { action: 'send', label: '发送对账单', handler: handleSend, permission: 'bill:statementOrder:edit' },
-    { action: 'obsolete', label: '作废', handler: handleObsolete, permission: 'bill:statementOrder:remove' }
+    // { action: 'edit', label: '编辑', handler: handleUpdate, permission: 'bill:statementOrder:edit' },
+    { action: 'send', label: '确认', handler: handleSend, permission: 'bill:statementOrder:edit' }
+    // { action: 'obsolete', label: '作废', handler: handleObsolete, permission: 'bill:statementOrder:remove' }
   ],
   [StatementStatus.OBSOLETE]: [{ action: 'detail', label: '查看', handler: handleDetail, permission: 'bill:statementOrder:edit' }]
 };