Procházet zdrojové kódy

fix:订单对账未付款字段

snow před 2 roky
rodič
revize
75085de154
23 změnil soubory, kde provedl 336 přidání a 131 odebrání
  1. 0 5
      src/api/InvoiceSales/capitalClaim/index.ts
  2. 5 16
      src/api/InvoiceSales/capitalPool/index.ts
  3. 5 0
      src/components/BasicDescriptions/index.ts
  4. 25 0
      src/components/BasicDescriptions/src/basic-descriptions.tsx
  5. 23 0
      src/components/BasicDescriptions/src/types.ts
  6. 11 4
      src/hooks/process/use-review-process.ts
  7. 3 0
      src/views/InvoiceSales/capitalClaim/components/basic-claim/related-order.vue
  8. 4 0
      src/views/InvoiceSales/capitalClaim/config/configs.ts
  9. 8 9
      src/views/InvoiceSales/capitalClaim/config/content.config.ts
  10. 1 18
      src/views/InvoiceSales/capitalClaim/detail.vue
  11. 1 34
      src/views/InvoiceSales/capitalClaim/index.vue
  12. 2 2
      src/views/InvoiceSales/capitalPool/components/approval-process/approval-pending.vue
  13. 8 0
      src/views/InvoiceSales/capitalPool/components/approval-process/index.ts
  14. 72 0
      src/views/InvoiceSales/capitalPool/config/configs.ts
  15. 15 12
      src/views/InvoiceSales/capitalPool/config/content.config.ts
  16. 8 6
      src/views/InvoiceSales/capitalPool/config/search.config.ts
  17. 92 0
      src/views/InvoiceSales/capitalPool/detail.vue
  18. 13 21
      src/views/InvoiceSales/capitalPool/index.vue
  19. 23 0
      src/views/InvoiceSales/capitalPool/types.ts
  20. 1 1
      src/views/purchase/inputInvoice/config/content.config.ts
  21. 7 1
      src/views/purchase/orderRecord/config/content.config.ts
  22. 7 1
      src/views/purchase/ticketReturn/components/create-ticket-dialog/index.vue
  23. 2 1
      src/views/purchase/ticketReturn/config/content.config.ts

+ 0 - 5
src/api/InvoiceSales/capitalClaim/index.ts

@@ -42,8 +42,3 @@ export const httpPayAdd = (data: any): any => {
 export const httpSaleList = (data: any): any => {
   return http.request("post", `${yewuApi}orderlist`, { data });
 };
-
-//审核状态
-export const httpStatus = (data: any): any => {
-  return http.request("post", `${yewuApi}orderpaystatus`, { data });
-};

+ 5 - 16
src/api/InvoiceSales/capitalPool/index.ts

@@ -6,29 +6,18 @@ const yewuApi = VITE_PROXY_USER_REAL + "/admin/";
 interface ResponseType extends Promise<any> {
   data?: object;
   code?: number;
-  msg?: string;
+  message?: string;
 }
-// 添加
-export const httpAdd = (data: object): ResponseType => {
-  return http.request("post", `${yewuApi}orderpayadd`, { data });
-};
+
 // 列表
 export const httpList = (data: object): ResponseType => {
   return http.request("post", `${yewuApi}tradeList`, { data });
 };
 // 详情
 export const httpDetail = (data: object): ResponseType => {
-  return http.request("post", `${yewuApi}tradeQuery`, { data });
-};
-// 更新
-export const httpUpdate = (data: object): ResponseType => {
-  return http.request("post", `${yewuApi}menusave`, { data });
+  return http.request("post", `${yewuApi}tradeloginfo`, { data });
 };
-// 状态
-export const httpStatus = (data: object): ResponseType => {
+//审核状态
+export const httpStatus = (data: any): any => {
   return http.request("post", `${yewuApi}orderpaystatus`, { data });
 };
-// 删除
-export const httpDelete = (data: object): ResponseType => {
-  return http.request("post", `${yewuApi}menudel`, { data });
-};

+ 5 - 0
src/components/BasicDescriptions/index.ts

@@ -0,0 +1,5 @@
+import BasicDescriptions from "./src/basic-descriptions";
+
+export * from "./src/types";
+
+export default BasicDescriptions;

+ 25 - 0
src/components/BasicDescriptions/src/basic-descriptions.tsx

@@ -0,0 +1,25 @@
+import { ElDescriptions, ElDescriptionsItem } from "element-plus";
+import { defineComponent } from "vue";
+import { basicDescriptionsProps } from "./types";
+
+const BasicDescriptions = defineComponent({
+  name: "BasicDescriptions",
+  props: basicDescriptionsProps,
+  setup(props) {
+    return () => {
+      const { title, colNumber, columns, data } = props;
+
+      return (
+        <ElDescriptions title={title} columns={colNumber} border size="small">
+          {columns.map(col => (
+            <ElDescriptionsItem label={col.label} key={col.field}>
+              {col.render ? col.render(data[col.field]) : data[col.field]}
+            </ElDescriptionsItem>
+          ))}
+        </ElDescriptions>
+      );
+    };
+  }
+});
+
+export default BasicDescriptions;

+ 23 - 0
src/components/BasicDescriptions/src/types.ts

@@ -0,0 +1,23 @@
+import { VNode } from "vue";
+export const basicDescriptionsProps = {
+  title: {
+    type: String
+  },
+  colNumber: {
+    type: Number
+  },
+  columns: {
+    type: Array as PropType<Array<DescriptionColumn>>
+  },
+  data: {
+    type: Object as PropType<any>
+  }
+};
+
+export type DescriptionColumn = {
+  field: string;
+  label: string;
+  render?: (data: any) => VNode;
+};
+
+export type DescriptionColumns = Array<DescriptionColumn>;

+ 11 - 4
src/hooks/process/use-review-process.ts

@@ -4,9 +4,14 @@ import { ElForm, FormRules } from "element-plus";
 type Param = {
   callback: (...args: any[]) => any;
   failStatus: string;
+  requiredRemark?: boolean;
 };
 
-export function useReviewProcess({ callback, failStatus }: Param) {
+export function useReviewProcess({
+  callback,
+  failStatus,
+  requiredRemark
+}: Param) {
   const formRef = ref<InstanceType<typeof ElForm>>(null);
 
   const formData = reactive({
@@ -23,9 +28,11 @@ export function useReviewProcess({ callback, failStatus }: Param) {
     formRef.value.validate(isValid => isValid && callback());
 
   //不通过时备注为必填
-  watchEffect(
-    () => (formRules.remark[0].required = formData.status === failStatus)
-  );
+  if (!requiredRemark) {
+    watchEffect(
+      () => (formRules.remark[0].required = formData.status === failStatus)
+    );
+  }
 
   return {
     formRef,

+ 3 - 0
src/views/InvoiceSales/capitalClaim/components/basic-claim/related-order.vue

@@ -1,4 +1,5 @@
 <script setup lang="ts">
+import { ElMessage } from "element-plus";
 import { computed, ref } from "vue";
 import { order_columns, order_status } from "../../config/configs";
 import SalesModal from "./sales-modal.vue";
@@ -34,6 +35,8 @@ function handleCreate() {
     })
   );
 
+  if (!orderArr.length) return ElMessage.error("请添加关联订单");
+
   emit("create-btn-click", orderArr);
 }
 </script>

+ 4 - 0
src/views/InvoiceSales/capitalClaim/config/configs.ts

@@ -113,6 +113,10 @@ export const description_columns_out = [
   {
     label: "总金额",
     field: "total_fee"
+  },
+  {
+    label: "余额",
+    field: "balance"
   }
 ];
 

+ 8 - 9
src/views/InvoiceSales/capitalClaim/config/content.config.ts

@@ -26,18 +26,18 @@ const columns = [
   {
     label: "付款单位账号",
     prop: "trade_account",
-    width: 120
+    width: 180
   },
   {
-    label: "付款银行名称",
+    label: "付款银行单位名称",
     prop: "trade_out",
-    width: 120
+    width: 200
+  },
+  {
+    label: "付款银行名称",
+    prop: "trade_bank",
+    width: 180
   },
-  // {
-  //   label: "付款账号",
-  //   prop: "trade_account",
-  //   width: 120
-  // },
   {
     label: "汇款金额",
     prop: "total_fee",
@@ -100,7 +100,6 @@ const columns = [
 const contentConfig: ContentConfig = {
   title: "资金认领管理",
   columns,
-  notPreview: true,
   apis: {
     httpList
   },

+ 1 - 18
src/views/InvoiceSales/capitalClaim/detail.vue

@@ -6,11 +6,7 @@ import RelatedOrder from "./components/basic-claim/related-order.vue";
 
 import { useResponseHandle } from "/@/hooks";
 
-import {
-  httpInfo,
-  httpOrderList,
-  httpPayAdd
-} from "/@/api/InvoiceSales/capitalClaim";
+import { httpInfo, httpPayAdd } from "/@/api/InvoiceSales/capitalClaim";
 
 const { query } = useRoute();
 const { push } = useRouter();
@@ -33,18 +29,6 @@ async function requesetTradeDetail() {
   });
 }
 
-async function requesetTradeOrderList() {
-  const { code, message, data } = await httpOrderList({
-    tradNo: tradNo.value
-  });
-
-  responseHandle({
-    code,
-    message,
-    handler: () => (treadOrderList.value = data)
-  });
-}
-
 //新增销售单付款
 async function requesetCreateSalePay(orderArr: any = []) {
   const { code, message } = await httpPayAdd({
@@ -62,7 +46,6 @@ async function requesetCreateSalePay(orderArr: any = []) {
 function initalData() {
   if (!tradNo.value) return;
   requesetTradeDetail();
-  requesetTradeOrderList();
 }
 
 //传入id初始化详情

+ 1 - 34
src/views/InvoiceSales/capitalClaim/index.vue

@@ -3,13 +3,10 @@ import { ref } from "vue";
 import { utils, writeFile } from "xlsx";
 import { useRouter } from "vue-router";
 import { PageSearch, usePageSearch } from "/@/components/PageSearch";
-import { PageModal, usePageModal } from "/@/components/PageModal";
 import { PageContent } from "/@/components/PageContent";
 import ExeclUpload from "./components/execl-upload.vue";
 import searchFormConfig from "./config/search.config";
 import contentConfig from "./config/content.config";
-import modalConfig from "./config/modal.config";
-import { useRenderIcon } from "/@/components/ReIcon/src/hooks";
 
 defineOptions({
   name: "invoiceheader"
@@ -33,15 +30,6 @@ const { pageContentRef, handleResetClick, handleSearchClick } = usePageSearch(
   }
 );
 
-const {
-  pageModalRef,
-  handleUpdateData,
-  handleCreateData,
-  handlePreviewData,
-  handleConfrim,
-  defaultInfo
-} = usePageModal({ pageContentRef });
-
 //导出模板
 function onDownloadTemplate() {
   const { columns } = contentConfig;
@@ -91,28 +79,7 @@ function toFundClaim(tradNo) {
     <PageContent
       ref="pageContentRef"
       :content-config="contentConfig"
-      @create-btn-click="handleCreateData"
-      @update-btn-click="handleUpdateData"
-      @preview-btn-click="handlePreviewData"
-    >
-      <template #custom="{ tradNo }">
-        <el-tooltip content="资金认领" placement="top">
-          <el-button
-            class="reset-margin"
-            link
-            type="primary"
-            @click="toFundClaim(tradNo)"
-            :icon="useRenderIcon('eye-view')"
-          />
-        </el-tooltip>
-      </template>
-    </PageContent>
-
-    <PageModal
-      ref="pageModalRef"
-      :modal-config="modalConfig"
-      :default-info="defaultInfo"
-      @confirm-btn-click="handleConfrim"
+      @preview-btn-click="({ tradNo }) => toFundClaim(tradNo)"
     />
 
     <ExeclUpload ref="execlUploadRef" />

+ 2 - 2
src/views/InvoiceSales/capitalClaim/components/approval-process/approval-pending.vue → src/views/InvoiceSales/capitalPool/components/approval-process/approval-pending.vue

@@ -1,6 +1,5 @@
 <script setup lang="ts">
 import { useReviewProcess } from "/@/hooks";
-
 const status = {
   fail: "3",
   success: "2"
@@ -10,7 +9,8 @@ const emit = defineEmits(["changeStatus"]);
 
 const { formData, formRules, formRef, handleChangeStatus } = useReviewProcess({
   callback: () => emit("changeStatus", formData),
-  failStatus: status.fail
+  failStatus: status.fail,
+  requiredRemark: true
 });
 </script>
 

+ 8 - 0
src/views/InvoiceSales/capitalPool/components/approval-process/index.ts

@@ -0,0 +1,8 @@
+import ApprovalPending from "./approval-pending.vue";
+
+export const approval_process = {
+  "1": {
+    title: "待认领",
+    component: ApprovalPending
+  }
+};

+ 72 - 0
src/views/InvoiceSales/capitalPool/config/configs.ts

@@ -0,0 +1,72 @@
+import { ElTag } from "element-plus";
+import { h } from "vue";
+import { DescriptionColumns } from "/@/components/BasicDescriptions";
+
+//资金认领审核状态
+export const capital_status = [
+  {
+    value: "1",
+    label: "待审批"
+  },
+  {
+    value: "2",
+    label: "审批通过"
+  },
+  {
+    value: "3",
+    label: "审批驳回"
+  }
+];
+
+//认领详情描述列表
+export const capital_detail_columns: DescriptionColumns = [
+  {
+    field: "tradNo",
+    label: "资金编号"
+  },
+  {
+    field: "logNo",
+    label: "认领编号"
+  },
+  {
+    field: "trade_time",
+    label: "交易时间"
+  },
+  {
+    field: "total_fee",
+    label: "总金额"
+  },
+  {
+    field: "status",
+    label: "资金认领审核状态",
+    render(status) {
+      return h(ElTag, null, {
+        default: () => capital_status.find(s => s.value === status)?.label
+      });
+    }
+  },
+  {
+    field: "addtime",
+    label: "认领时间"
+  },
+  {
+    field: "trade_out",
+    label: "付款公司"
+  },
+  {
+    field: "trade_in",
+    label: "银行"
+  },
+  {
+    field: "balance",
+    label: "资金余额"
+  },
+  {
+    field: "used_fee",
+    label: "资金使用金额"
+  },
+  {
+    field: "remark",
+    label: "备注"
+  }
+];

+ 15 - 12
src/views/InvoiceSales/capitalPool/config/content.config.ts

@@ -16,26 +16,29 @@ const columns = [
     hide: ({ checkList }) => !checkList.includes("序号列")
   },
   {
-    label: "客户编号",
-    prop: "companyNo"
+    label: "资金编号",
+    prop: "tradNo"
   },
   {
-    label: "客户名称",
-    prop: "companyName"
+    label: "资金认领编号",
+    prop: "logNo"
   },
   {
-    label: "归属集团",
-    prop: "parent"
+    label: "交易时间",
+    prop: "trade_time"
   },
   {
-    label: "联系人",
-    prop: "contactor"
+    label: "认领资金总金额",
+    prop: "total_fee"
   },
   {
-    label: "创建时间",
-    prop: "createTime",
-    formatter: ({ createTime }) =>
-      dayjs(createTime).format("YYYY-MM-DD HH:mm:ss")
+    label: "申请人",
+    prop: "apply_name"
+  },
+  {
+    label: "认领时间",
+    prop: "addtime",
+    formatter: ({ addtime }) => dayjs(addtime).format("YYYY-MM-DD HH:mm:ss")
   },
   {
     label: "操作",

+ 8 - 6
src/views/InvoiceSales/capitalPool/config/search.config.ts

@@ -1,12 +1,13 @@
+import { capital_status } from "../../capitalClaim/config/configs";
 import { FormConfig } from "/@/components/PageSearch";
 
 const searchFormConfig: FormConfig = {
   formItems: [
-    {
-      field: "company",
-      type: "select",
-      placeholder: "请选择资金状态"
-    },
+    // {
+    //   field: "company",
+    //   type: "select",
+    //   placeholder: "请选择资金状态"
+    // },
     {
       field: "bank",
       type: "input",
@@ -33,7 +34,8 @@ const searchFormConfig: FormConfig = {
     {
       field: "status",
       type: "select",
-      placeholder: "请选择关联确认单状态"
+      placeholder: "请选择认领状态",
+      options: capital_status
     },
     {
       field: "timer",

+ 92 - 0
src/views/InvoiceSales/capitalPool/detail.vue

@@ -0,0 +1,92 @@
+<script setup lang="ts">
+import { computed, onMounted, ref } from "vue";
+import { useRoute, useRouter } from "vue-router";
+import { useResponseHandle } from "/@/hooks";
+import { CapitalDetailType } from "./types";
+import { httpDetail, httpStatus } from "/@/api/InvoiceSales/capitalPool";
+import { capital_detail_columns } from "./config/configs";
+import BasicDescriptions from "/@/components/BasicDescriptions";
+import { approval_process } from "./components/approval-process";
+
+const { query } = useRoute();
+const { push } = useRouter();
+const responseHandle = useResponseHandle();
+const capitalDetail = ref<CapitalDetailType>({});
+const collapses = ref(["1", "2"]);
+
+const logNo = computed(() => query.id);
+
+//当前的审核流程
+const currentProcess = computed(() => {
+  const { status } = capitalDetail.value;
+  return approval_process[status];
+});
+
+//资金认领详情
+async function requesetCapitalDetail() {
+  const { code, message, data } = await httpDetail({
+    logNo: logNo.value
+  });
+
+  responseHandle({
+    code,
+    message,
+    handler: () => (capitalDetail.value = data)
+  });
+}
+
+//资金认证状态
+async function requesetCapitalStatus(otherParams) {
+  const { code, message } = await httpStatus({
+    logNo: logNo.value,
+    ...otherParams
+  });
+
+  responseHandle({
+    code,
+    message,
+    handler: () => push("/InvoiceSales/capitalPool")
+  });
+}
+
+//初始化数据
+function initalData() {
+  if (!logNo.value) return;
+  requesetCapitalDetail();
+}
+
+onMounted(() => initalData());
+</script>
+
+<template>
+  <div class="capital__content" bg-white>
+    <ElCollapse v-model="collapses">
+      <!-- 详情 -->
+      <ElCollapseItem title="订单对账详情" name="1">
+        <BasicDescriptions
+          :columns="capital_detail_columns"
+          :data="capitalDetail"
+          :col-number="2"
+        />
+      </ElCollapseItem>
+
+      <!-- 审核 -->
+      <ElCollapseItem
+        name="2"
+        v-if="currentProcess"
+        :title="currentProcess.title"
+      >
+        <component
+          :is="currentProcess.component"
+          @change-status="requesetCapitalStatus"
+        />
+      </ElCollapseItem>
+    </ElCollapse>
+  </div>
+</template>
+
+<style lang="scss" scoped>
+.capital__content {
+  padding: 20px !important;
+}
+</style>

+ 13 - 21
src/views/InvoiceSales/capitalPool/index.vue

@@ -1,15 +1,16 @@
 <script setup lang="ts">
 import { PageSearch, usePageSearch } from "/@/components/PageSearch";
-import { PageModal, usePageModal } from "/@/components/PageModal";
 import { PageContent } from "/@/components/PageContent";
 import searchFormConfig from "./config/search.config";
 import contentConfig from "./config/content.config";
-import modalConfig from "./config/modal.config";
+import { useRouter } from "vue-router";
 
 defineOptions({
-  name: "invoiceheader"
+  name: "capitalPool"
 });
 
+const { push } = useRouter();
+
 function searchCallback({ timer }) {
   const [start, end] = timer;
 
@@ -27,14 +28,14 @@ function searchCallback({ timer }) {
 const { pageContentRef, handleResetClick, handleSearchClick } =
   usePageSearch(searchCallback);
 
-const {
-  pageModalRef,
-  handleUpdateData,
-  handleCreateData,
-  handlePreviewData,
-  handleConfrim,
-  defaultInfo
-} = usePageModal({ pageContentRef });
+function toDetail(logNo: string) {
+  push({
+    path: "/InvoiceSales/capitalPoolDetail",
+    query: {
+      id: logNo
+    }
+  });
+}
 </script>
 
 <template>
@@ -47,16 +48,7 @@ const {
     <PageContent
       ref="pageContentRef"
       :content-config="contentConfig"
-      @create-btn-click="handleCreateData"
-      @update-btn-click="handleUpdateData"
-      @preview-btn-click="handlePreviewData"
-    />
-    <PageModal
-      ref="pageModalRef"
-      prview-description
-      :modal-config="modalConfig"
-      :default-info="defaultInfo"
-      @confirm-btn-click="handleConfrim"
+      @preview-btn-click="({ logNo }) => toDetail(logNo)"
     />
   </div>
 </template>

+ 23 - 0
src/views/InvoiceSales/capitalPool/types.ts

@@ -0,0 +1,23 @@
+const capitalDetailDemo = {
+  id: "326",
+  tradNo: "Sfrrg220610163212",
+  logNo: "TRC2208011415289039",
+  trade_time: "2022-06-09 00:00:00",
+  total_fee: "1986.50",
+  remark: "7",
+  is_del: "0",
+  status: "5",
+  apply_name: "吴广广",
+  apply_id: "44",
+  addtime: "2022-08-01 14:15:28",
+  updatetime: "2022-08-03 11:20:31",
+  trade_out: "泰康人寿保险有限责任公司",
+  trade_in: "",
+  trade_bank: "兴业银行总行",
+  customerNo: "",
+  companyNo: "",
+  balance: "1986.50",
+  used_fee: "0.00"
+};
+
+export type CapitalDetailType = Partial<typeof capitalDetailDemo>;

+ 1 - 1
src/views/purchase/inputInvoice/config/content.config.ts

@@ -45,7 +45,7 @@ const columns = [
     prop: "apply_name"
   },
   {
-    label: "发票状态",
+    label: "状态",
     prop: "status",
     cellRenderer: ({ row, props }) =>
       h(

+ 7 - 1
src/views/purchase/orderRecord/config/content.config.ts

@@ -57,11 +57,17 @@ const columns = [
     align: "left"
   },
   {
-    label: "付款金额",
+    label: "付款金额",
     prop: "pay_fee",
     minWidth: 180,
     align: "left"
   },
+  {
+    label: "未付款金额",
+    prop: "wpay_fee",
+    minWidth: 180,
+    align: "left"
+  },
   {
     label: "已回票金额",
     prop: "ainv_fee",

+ 7 - 1
src/views/purchase/ticketReturn/components/create-ticket-dialog/index.vue

@@ -24,7 +24,13 @@ defineExpose({
 </script>
 
 <template>
-  <el-dialog v-model="visible" title="新建采购回票" center destroy-on-close>
+  <el-dialog
+    v-model="visible"
+    title="新建采购回票"
+    width="70%"
+    center
+    destroy-on-close
+  >
     <PaymentTable @add-btn-click="handleAdd" />
 
     <CreateTicketDialog @reload="handleReload" ref="ticketDialogRef" />

+ 2 - 1
src/views/purchase/ticketReturn/config/content.config.ts

@@ -29,7 +29,7 @@ const columns = [
     width: 180
   },
   {
-    label: "申请人名称",
+    label: "申请人",
     prop: "apply_name"
   },
   {
@@ -61,6 +61,7 @@ const columns = [
     cellRenderer: ({ row }) =>
       h(ElImage, {
         src: row.inv_img,
+        style: { height: "20px" },
         previewSrcList: [row.inv_img],
         previewTeleported: true
       })