Explorar o código

feat:业务参数(流程设置,节点设置)--静态

snow %!s(int64=2) %!d(string=hai) anos
pai
achega
d6fa67986a
Modificáronse 49 ficheiros con 1847 adicións e 480 borrados
  1. 26 0
      src/api/parameter/setProcess/index.ts
  2. 122 0
      src/utils/details/inv-return.ts
  3. 134 0
      src/utils/details/purchPay.ts
  4. 129 0
      src/utils/details/refund.ts
  5. 176 0
      src/utils/details/ticket-return.ts
  6. 56 0
      src/utils/details/trage.ts
  7. 72 0
      src/utils/details/tragelog.ts
  8. 29 18
      src/views/InvoiceSales/capitalClaim/index.vue
  9. 22 10
      src/views/InvoiceSales/capitalPool/index.vue
  10. 24 12
      src/views/InvoiceSales/invoicePool/index.vue
  11. 27 17
      src/views/InvoiceSales/refund/index.vue
  12. 30 18
      src/views/InvoiceSales/returnTicket/index.vue
  13. 24 12
      src/views/InvoiceSales/sheetOrderPool/index.vue
  14. 52 0
      src/views/parameter/setActionProcess/components/process-list.vue
  15. 228 0
      src/views/parameter/setActionProcess/config/content.config.ts
  16. 63 0
      src/views/parameter/setActionProcess/config/modal.config.ts
  17. 17 0
      src/views/parameter/setActionProcess/config/search.config.ts
  18. 86 0
      src/views/parameter/setActionProcess/index.vue
  19. 14 0
      src/views/parameter/setActionProcess/types.ts
  20. 0 0
      src/views/parameter/setActionProcess/流程节点设置
  21. 95 0
      src/views/parameter/setProcess/config/content.config.ts
  22. 37 0
      src/views/parameter/setProcess/config/modal.config.ts
  23. 31 0
      src/views/parameter/setProcess/config/search.config.ts
  24. 63 0
      src/views/parameter/setProcess/index.vue
  25. 14 0
      src/views/parameter/setProcess/types.ts
  26. 0 0
      src/views/parameter/setProcess/流程设置
  27. 23 13
      src/views/purchase/inputInvoice/index.vue
  28. 0 1
      src/views/purchase/orderRecord/index.vue
  29. 2 2
      src/views/purchase/purchPay/component/payment-detail/index.vue
  30. 0 117
      src/views/purchase/purchPay/config/configs.ts
  31. 1 1
      src/views/purchase/purchPay/config/content.config.ts
  32. 1 1
      src/views/purchase/purchPay/config/search.config.ts
  33. 28 15
      src/views/purchase/purchPay/index.vue
  34. 6 2
      src/views/purchase/ticketReturn/components/ticket-detail/index.vue
  35. 0 182
      src/views/purchase/ticketReturn/config/configs.ts
  36. 1 1
      src/views/purchase/ticketReturn/config/content.config.ts
  37. 1 1
      src/views/purchase/ticketReturn/config/search.config.ts
  38. 31 20
      src/views/purchase/ticketReturn/index.vue
  39. 3 3
      src/views/search/standBook/components/anchor.vue
  40. 1 1
      src/views/search/standBook/config/detail.ts
  41. 66 25
      src/views/search/standBook/config/query.ts
  42. 9 5
      src/views/search/standBook/detail.vue
  43. 20 0
      src/views/search/standBook/details/inv-return.vue
  44. 2 2
      src/views/search/standBook/details/payment.vue
  45. 20 0
      src/views/search/standBook/details/refund.vue
  46. 20 0
      src/views/search/standBook/details/ticket-return.vue
  47. 20 0
      src/views/search/standBook/details/trade.vue
  48. 20 0
      src/views/search/standBook/details/tradelog.vue
  49. 1 1
      src/views/search/standBook/types.ts

+ 26 - 0
src/api/parameter/setProcess/index.ts

@@ -0,0 +1,26 @@
+import { http } from "/@/utils/http";
+import { loadEnv } from "@build/index";
+const { VITE_PROXY_DOMAIN_REAL, VITE_PROXY_USER_REAL } = loadEnv();
+const userAPi = VITE_PROXY_DOMAIN_REAL;
+const yewuApi = VITE_PROXY_USER_REAL + "/admin/";
+
+export const httpList = (data: object): any => {
+  return http.request("post", `${yewuApi}involist`, { data });
+};
+
+export const httpDelete = (data: object): any => {
+  return http.request("post", `${yewuApi}invoicedel`, { data });
+};
+
+export const httpAdd = (data: Record<string, any>): any => {
+  return http.request("post", `${yewuApi}invoiceadd`, { data });
+};
+
+export const httpUpdate = (data: Record<string, any>): any => {
+  return http.request("post", `${yewuApi}invoicesave`, { data });
+};
+
+export const httpStatus = (data: Record<string, any>): any => {
+  return http.request("post", `${yewuApi}invoicesave`, { data });
+};
+

+ 122 - 0
src/utils/details/inv-return.ts

@@ -0,0 +1,122 @@
+import { ElTag } from "element-plus";
+import { h } from "vue";
+import { DescriptionColumns } from "/@/components/BasicDescriptions";
+
+const return_type = [
+  {
+    value: "1",
+    label: "金税"
+  },
+  {
+    value: "2",
+    label: "金税"
+  }
+];
+
+const return_status = [
+  {
+    value: "0",
+    label: "待财务审核"
+  },
+  {
+    value: "1",
+    label: "待退票"
+  },
+  {
+    value: "2",
+    label: "退票完成"
+  },
+  {
+    value: "3",
+    label: "审核驳回"
+  },
+  {
+    value: "4",
+    label: "退票失败"
+  }
+];
+
+const open_type = [
+  {
+    value: "0",
+    label: "金税开票"
+  },
+  {
+    value: "1",
+    label: "金税线下"
+  },
+  {
+    value: "2",
+    label: "纯线下"
+  }
+];
+
+export const inv_return_columns: DescriptionColumns = [
+  {
+    field: "returnCode",
+    label: "退票编号"
+  },
+  {
+    field: "invNo",
+    label: "开票申请编号"
+  },
+  {
+    field: "return_reason",
+    label: "退票原因"
+  },
+  {
+    field: "return_type",
+    label: "退票方式",
+    render(data) {
+      return h(ElTag, null, {
+        default: () => return_type.find(t => t.value === data)?.label
+      });
+    }
+  },
+  {
+    field: "remark",
+    label: "备注"
+  },
+  {
+    field: "status",
+    label: "退票状态",
+    render(data) {
+      return h(ElTag, null, {
+        default: () => return_status.find(t => t.value === data)?.label
+      });
+    }
+  },
+  {
+    field: "red_inv",
+    label: "红冲发票信息"
+  },
+  {
+    field: "apply_name",
+    label: "申请人"
+  },
+  {
+    field: "inv_out",
+    label: "开票业务公司"
+  },
+  {
+    field: "inv_value",
+    label: "发票总额"
+  },
+  {
+    field: "open_type",
+    label: "开票类型",
+    render(data) {
+      return h(ElTag, null, {
+        default: () => open_type.find(t => t.value === data)?.label
+      });
+    }
+  },
+  {
+    field: "email",
+    label: "电子邮箱"
+  },
+  {
+    field: "post_code",
+    label: "物流编号"
+  }
+];

+ 134 - 0
src/utils/details/purchPay.ts

@@ -0,0 +1,134 @@
+import { ElImage, ElTag } from "element-plus";
+import { h } from "vue";
+import { DescriptionColumns } from "/@/components/BasicDescriptions";
+
+export const statusOptions = [
+  {
+    label: "待发起流程",
+    value: "0"
+  },
+  {
+    label: "待采购审核",
+    value: "1"
+  },
+  {
+    label: "待财务审核",
+    value: "2"
+  },
+  {
+    label: "审核成功",
+    value: "3"
+  },
+  {
+    label: "采购驳回",
+    value: "4"
+  },
+  {
+    label: "财务驳回",
+    value: "5"
+  }
+];
+
+export const paymentOptions = [
+  {
+    label: "待发起",
+    value: "0"
+  },
+  {
+    label: "待业务审核",
+    value: "1"
+  },
+  {
+    label: "待财务审核",
+    value: "2"
+  },
+  {
+    label: "待付款回执",
+    value: "3"
+  },
+  {
+    label: "付款回执",
+    value: "4"
+  },
+  {
+    label: "业务驳回",
+    value: "5"
+  },
+  {
+    label: "财务驳回",
+    value: "6"
+  }
+];
+
+export const purchpay_columns: DescriptionColumns = [
+  {
+    field: "payNo",
+    label: "对账申请编号"
+  },
+  {
+    field: "dzNo",
+    label: "付款申请编号"
+  },
+  {
+    field: "apply_name",
+    label: "申请人"
+  },
+  {
+    field: "pay_fee",
+    label: "申请付款额度"
+  },
+  {
+    field: "return_img",
+    label: "付款回执",
+    render(src) {
+      return h(ElImage, {
+        src,
+        previewSrcList: [src],
+        style: {
+          height: "20px"
+        }
+      });
+    }
+  },
+  {
+    field: "return_time",
+    label: "付款回执时间"
+  },
+  {
+    field: "status",
+    label: "状态",
+    render(status) {
+      return h(ElTag, null, {
+        default: () => statusOptions.find(s => status === s.value)?.label
+      });
+    }
+  },
+  {
+    field: "pay_apply_name",
+    label: "对账申请人"
+  },
+  {
+    field: "supplierNo",
+    label: "供应商编号"
+  },
+  {
+    field: "supplierName",
+    label: "供应商"
+  },
+  {
+    field: "companyNo",
+    label: "业务公司编号"
+  },
+  {
+    field: "companyName",
+    label: "业务公司"
+  },
+  {
+    field: "total_fee",
+    label: "对账总额"
+  },
+  {
+    field: "remark",
+    label: "备注"
+  }
+];

+ 129 - 0
src/utils/details/refund.ts

@@ -0,0 +1,129 @@
+import { ElImage, ElTag } from "element-plus";
+import { h } from "vue";
+import { DescriptionColumns } from "/@/components/BasicDescriptions";
+
+//资金退款列数据
+export const refund_detail_columns: DescriptionColumns = [
+  {
+    label: "退款编号",
+    field: "returnCode"
+  },
+  {
+    label: "资金认领编号",
+    field: "logNo"
+  },
+  {
+    label: "资金编号",
+    field: "tradNo"
+  },
+  {
+    label: "退款类型",
+    field: "type",
+    render(type) {
+      return h(ElTag, null, {
+        default: () => return_type.find(t => t.value === type)?.label
+      });
+    }
+  },
+  {
+    label: "申请人",
+    field: "apply_name"
+  },
+  {
+    label: "退款原因",
+    field: "return_reason"
+  },
+  {
+    label: "付款公司",
+    field: "trade_out"
+  },
+  {
+    label: "备注",
+    field: "remark"
+  },
+  {
+    label: "退款截图凭证",
+    field: "return_img",
+    render(img_url) {
+      return h(ElImage, {
+        src: img_url,
+        style: { height: "20px" },
+        previewSrcList: [img_url],
+        previewTeleported: true
+      });
+    }
+  },
+  {
+    label: "退款状态",
+    field: "status",
+    render(status) {
+      return h(ElTag, null, {
+        default: () => return_status.find(s => s.value === status)?.label
+      });
+    }
+  },
+  {
+    label: "退款时间",
+    field: "addtime"
+  },
+  {
+    label: "交易公司",
+    field: "trade_out"
+  },
+  {
+    label: "收款公司",
+    field: "trade_in"
+  },
+  {
+    label: "交易银行",
+    field: "trade_bank"
+  },
+  {
+    label: "总金额",
+    field: "total_fee"
+  },
+  {
+    label: "余额",
+    field: "balance"
+  },
+  {
+    label: "已认领金额",
+    field: "used_fee"
+  },
+  {
+    label: "认领金额",
+    field: "log_total_fee"
+  },
+  {
+    label: "认领申请人",
+    field: "log_apply_id"
+  }
+];
+
+//退款类型
+export const return_type = [
+  {
+    value: "1",
+    label: "退款"
+  },
+  {
+    value: "2",
+    label: "资金认领解除"
+  }
+];
+
+//退款状态
+export const return_status = [
+  {
+    value: "0",
+    label: "待审核"
+  },
+  {
+    value: "1",
+    label: "财务审核"
+  },
+  {
+    value: "2",
+    label: "财务驳回"
+  }
+];

+ 176 - 0
src/utils/details/ticket-return.ts

@@ -0,0 +1,176 @@
+import { ElImage, ElTag } from "element-plus";
+import { h } from "vue";
+import { DescriptionColumns } from "/@/components/BasicDescriptions";
+
+export const ticket_return_columns: DescriptionColumns = [
+  {
+    field: "payNo",
+    label: "对账编号"
+  },
+  {
+    field: "hpNo",
+    label: "回票申请编号"
+  },
+  {
+    field: "apply_name",
+    label: "申请人名称"
+  },
+  {
+    field: "invType",
+    label: "发票申请类型",
+    render(data) {
+      return h(ElTag, null, {
+        default: () => inv_type.find(s => s.value === data)?.label
+      });
+    }
+  },
+  {
+    field: "invoiceType",
+    label: "发票类型"
+  },
+  {
+    field: "invName",
+    label: "发票名称"
+  },
+  {
+    field: "invName",
+    label: "发票名称"
+  },
+  {
+    field: "inv_img",
+    label: "发票图片",
+    render(src) {
+      return h(ElImage, {
+        src,
+        previewSrcList: [src],
+        style: {
+          height: "20px"
+        }
+      });
+    }
+  },
+  {
+    field: "inv_fee",
+    label: "发票金额"
+  },
+  {
+    field: "status",
+    label: "状态",
+    render(data) {
+      return h(ElTag, null, {
+        default: () => status_options.find(s => s.value === data)?.label
+      });
+    }
+  },
+  {
+    field: "open_time",
+    label: "开票时间"
+  },
+  {
+    field: "invoiceNumber",
+    label: "发票号码"
+  },
+  {
+    field: "invoiceCode",
+    label: "发票代码"
+  },
+  {
+    field: "checkNumber",
+    label: "校验码"
+  },
+  {
+    field: "pay_apply_name",
+    label: "对账申请人"
+  },
+  {
+    field: "supplierNo",
+    label: "供应商编号"
+  },
+  {
+    field: "supplierName",
+    label: "供应商名称"
+  },
+  {
+    field: "companyNo",
+    label: "业务企业编号"
+  },
+  {
+    field: "companyName",
+    label: "业务企业名称"
+  },
+  {
+    field: "total_fee",
+    label: "对账申请总额"
+  }
+];
+
+export const inv_type = [
+  {
+    label: "手工开票",
+    value: "1"
+  },
+  {
+    label: "ocr识别",
+    value: "2"
+  },
+  {
+    label: "金税",
+    value: "3"
+  }
+];
+
+//发票状态的options
+export const status_options = [
+  {
+    label: "上传发票",
+    value: "0"
+  },
+  {
+    label: "待识别验证",
+    value: "1"
+  },
+  {
+    label: "待校验识别",
+    value: "2"
+  },
+  {
+    label: "待财务审核",
+    value: "3"
+  },
+  {
+    label: "待认证",
+    value: "4"
+  },
+  {
+    label: "认证成功待确认",
+    value: "5"
+  },
+  {
+    label: "回票完成",
+    value: "6"
+  },
+  {
+    label: "识别失败",
+    value: "7"
+  },
+  {
+    label: "验证失败",
+    value: "8"
+  },
+  {
+    label: "财务驳回",
+    value: "9"
+  },
+  {
+    label: "认证失败",
+    value: "10"
+  },
+  {
+    label: "校验超过次数第二天校验",
+    value: "11"
+  },
+  {
+    label: "回票申请废弃已结束",
+    value: "12"
+  }
+];

+ 56 - 0
src/utils/details/trage.ts

@@ -0,0 +1,56 @@
+import { DescriptionColumns } from "/@/components/BasicDescriptions";
+
+export const trage_columns: DescriptionColumns = [
+  {
+    field: "tradNo",
+    label: "资金编号"
+  },
+  {
+    field: "trade_bank",
+    label: "交易银行"
+  },
+  {
+    field: "trade_account",
+    label: "交易账户"
+  },
+  {
+    field: "trade_used",
+    label: "用途"
+  },
+  {
+    field: "trade_out",
+    label: "交易公司"
+  },
+  {
+    field: "trade_in",
+    label: "收款公司"
+  },
+  {
+    field: "total_fee",
+    label: "总金额"
+  },
+  {
+    field: "used_fee",
+    label: "已认领金额"
+  },
+  {
+    field: "balance",
+    label: "余额"
+  },
+  {
+    field: "tradNo",
+    label: "客户编号"
+  },
+  {
+    field: "customerNo",
+    label: "资金编号"
+  },
+  {
+    field: "companyNo",
+    label: "业务编号"
+  },
+  {
+    field: "trade_in_account",
+    label: "收款账户"
+  }
+];

+ 72 - 0
src/utils/details/tragelog.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: "备注"
+  }
+];

+ 29 - 18
src/views/InvoiceSales/capitalClaim/index.vue

@@ -1,5 +1,5 @@
 <script setup lang="ts">
-import { ref } from "vue";
+import { ref, onMounted } from "vue";
 import { utils, writeFile } from "xlsx";
 import { useRouter } from "vue-router";
 import { PageSearch, usePageSearch } from "/@/components/PageSearch";
@@ -7,6 +7,8 @@ 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 { useUserStoreHook } from "/@/store/modules/user";
+import PagePower from "/@/components/PagePower/PagePower.vue";
 
 defineOptions({
   name: "invoiceheader"
@@ -59,28 +61,37 @@ function toFundClaim(tradNo) {
     }
   });
 }
+
+onMounted(
+  () =>
+    (contentConfig.powers = useUserStoreHook().getMenuActions("capitalClaim"))
+);
 </script>
 
 <template>
   <div class="main role">
-    <PageSearch
-      :form-config="searchFormConfig"
-      @search-btn-click="handleSearchClick"
-      @reset-btn-click="handleResetClick"
-    >
-      <template #action>
-        <el-button @click="onDownloadTemplate">下载模板</el-button>
-        <el-button type="primary" @click="() => execlUploadRef.onDisplay()"
-          >导入数据</el-button
+    <PagePower :is-show="contentConfig.powers.some(i => i === '001')">
+      <div w-full>
+        <PageSearch
+          :form-config="searchFormConfig"
+          @search-btn-click="handleSearchClick"
+          @reset-btn-click="handleResetClick"
         >
-      </template>
-    </PageSearch>
-
-    <PageContent
-      ref="pageContentRef"
-      :content-config="contentConfig"
-      @preview-btn-click="({ tradNo }) => toFundClaim(tradNo)"
-    />
+          <template #action>
+            <el-button @click="onDownloadTemplate">下载模板</el-button>
+            <el-button type="primary" @click="() => execlUploadRef.onDisplay()"
+              >导入数据</el-button
+            >
+          </template>
+        </PageSearch>
+
+        <PageContent
+          ref="pageContentRef"
+          :content-config="contentConfig"
+          @preview-btn-click="({ tradNo }) => toFundClaim(tradNo)"
+        />
+      </div>
+    </PagePower>
 
     <ExeclUpload ref="execlUploadRef" />
   </div>

+ 22 - 10
src/views/InvoiceSales/capitalPool/index.vue

@@ -4,6 +4,9 @@ import { PageContent } from "/@/components/PageContent";
 import searchFormConfig from "./config/search.config";
 import contentConfig from "./config/content.config";
 import { useRouter } from "vue-router";
+import PagePower from "/@/components/PagePower/PagePower.vue";
+import { onMounted } from "vue";
+import { useUserStoreHook } from "/@/store/modules/user";
 
 defineOptions({
   name: "capitalPool"
@@ -36,20 +39,29 @@ function toDetail(logNo: string) {
     }
   });
 }
+
+onMounted(
+  () =>
+    (contentConfig.powers = useUserStoreHook().getMenuActions("capitalPool"))
+);
 </script>
 
 <template>
   <div class="main role">
-    <PageSearch
-      :form-config="searchFormConfig"
-      @search-btn-click="handleSearchClick"
-      @reset-btn-click="handleResetClick"
-    />
-    <PageContent
-      ref="pageContentRef"
-      :content-config="contentConfig"
-      @preview-btn-click="({ logNo }) => toDetail(logNo)"
-    />
+    <PagePower :is-show="contentConfig.powers.some(i => i === '001')">
+      <div w-full>
+        <PageSearch
+          :form-config="searchFormConfig"
+          @search-btn-click="handleSearchClick"
+          @reset-btn-click="handleResetClick"
+        />
+        <PageContent
+          ref="pageContentRef"
+          :content-config="contentConfig"
+          @preview-btn-click="({ logNo }) => toDetail(logNo)"
+        />
+      </div>
+    </PagePower>
   </div>
 </template>
 

+ 24 - 12
src/views/InvoiceSales/invoicePool/index.vue

@@ -5,6 +5,9 @@ import { PageContent } from "/@/components/PageContent";
 import searchFormConfig from "./config/search.config";
 import contentConfig from "./config/content.config";
 import modalConfig from "./config/modal.config";
+import { onMounted } from "vue";
+import { useUserStoreHook } from "/@/store/modules/user";
+import PagePower from "/@/components/PagePower/PagePower.vue";
 
 defineOptions({
   name: "invoiceheader"
@@ -38,22 +41,31 @@ const {
   handleConfrim,
   defaultInfo
 } = usePageModal({ pageContentRef });
+
+onMounted(
+  () =>
+    (contentConfig.powers = useUserStoreHook().getMenuActions("invoicePool"))
+);
 </script>
 
 <template>
   <div class="main role">
-    <PageSearch
-      :form-config="searchFormConfig"
-      @search-btn-click="handleSearchClick"
-      @reset-btn-click="handleResetClick"
-    />
-    <PageContent
-      ref="pageContentRef"
-      :content-config="contentConfig"
-      @create-btn-click="handleCreateData"
-      @update-btn-click="handleUpdateData"
-      @preview-btn-click="handlePreviewData"
-    />
+    <PagePower :is-show="contentConfig.powers.some(i => i === '001')">
+      <div w-full>
+        <PageSearch
+          :form-config="searchFormConfig"
+          @search-btn-click="handleSearchClick"
+          @reset-btn-click="handleResetClick"
+        />
+        <PageContent
+          ref="pageContentRef"
+          :content-config="contentConfig"
+          @create-btn-click="handleCreateData"
+          @update-btn-click="handleUpdateData"
+          @preview-btn-click="handlePreviewData"
+        />
+      </div>
+    </PagePower>
     <PageModal
       ref="pageModalRef"
       prview-description

+ 27 - 17
src/views/InvoiceSales/refund/index.vue

@@ -4,6 +4,8 @@ import { PageContent } from "/@/components/PageContent";
 import searchFormConfig from "./config/search.config";
 import contentConfig from "./config/content.config";
 import { useRouter } from "vue-router";
+import { onMounted } from "vue";
+import { useUserStoreHook } from "/@/store/modules/user";
 
 defineOptions({
   name: "invoiceheader"
@@ -20,29 +22,37 @@ function toDetail(returnCode) {
     }
   });
 }
+
+onMounted(
+  () => (contentConfig.powers = useUserStoreHook().getMenuActions("refund"))
+);
 </script>
 
 <template>
   <div class="main role">
-    <PageSearch
-      :form-config="searchFormConfig"
-      @search-btn-click="handleSearchClick"
-      @reset-btn-click="handleResetClick"
-    />
+    <PagePower :is-show="contentConfig.powers.some(i => i === '001')">
+      <div w-full>
+        <PageSearch
+          :form-config="searchFormConfig"
+          @search-btn-click="handleSearchClick"
+          @reset-btn-click="handleResetClick"
+        />
 
-    <PageContent
-      ref="pageContentRef"
-      :content-config="contentConfig"
-      @preview-btn-click="({ returnCode }) => toDetail(returnCode)"
-    >
-      <template #create>
-        <el-button
-          type="primary"
-          @click="() => push('/InvoiceSales/refundDetail')"
-          >创建</el-button
+        <PageContent
+          ref="pageContentRef"
+          :content-config="contentConfig"
+          @preview-btn-click="({ returnCode }) => toDetail(returnCode)"
         >
-      </template>
-    </PageContent>
+          <template #create>
+            <el-button
+              type="primary"
+              @click="() => push('/InvoiceSales/refundDetail')"
+              >创建</el-button
+            >
+          </template>
+        </PageContent>
+      </div>
+    </PagePower>
   </div>
 </template>
 

+ 30 - 18
src/views/InvoiceSales/returnTicket/index.vue

@@ -6,6 +6,9 @@ import searchFormConfig from "./config/search.config";
 import modalConfig from "./config/modal.config";
 import contentConfig from "./config/content.config";
 import { useRouter } from "vue-router";
+import { onMounted } from "vue";
+import { useUserStoreHook } from "/@/store/modules/user";
+import PagePower from "/@/components/PagePower/PagePower.vue";
 
 defineOptions({
   name: "invoiceheader"
@@ -26,28 +29,37 @@ function toDetail(returnCode) {
     }
   });
 }
+
+onMounted(
+  () =>
+    (contentConfig.powers = useUserStoreHook().getMenuActions("returnTicket"))
+);
 </script>
 
 <template>
   <div class="main role">
-    <PageSearch
-      :form-config="searchFormConfig"
-      @search-btn-click="handleSearchClick"
-      @reset-btn-click="handleResetClick"
-    />
-
-    <PageContent
-      ref="pageContentRef"
-      :content-config="contentConfig"
-      @preview-btn-click="({ returnCode }) => toDetail(returnCode)"
-      @create-btn-click="handleCreateData"
-    />
-
-    <PageModal
-      ref="pageModalRef"
-      :modalConfig="modalConfig"
-      @confirm-btn-click="handleConfrim"
-    />
+    <PagePower :is-show="contentConfig.powers.some(i => i === '001')">
+      <div w-full>
+        <PageSearch
+          :form-config="searchFormConfig"
+          @search-btn-click="handleSearchClick"
+          @reset-btn-click="handleResetClick"
+        />
+
+        <PageContent
+          ref="pageContentRef"
+          :content-config="contentConfig"
+          @preview-btn-click="({ returnCode }) => toDetail(returnCode)"
+          @create-btn-click="handleCreateData"
+        />
+      </div>
+
+      <PageModal
+        ref="pageModalRef"
+        :modalConfig="modalConfig"
+        @confirm-btn-click="handleConfrim"
+      />
+    </PagePower>
   </div>
 </template>
 

+ 24 - 12
src/views/InvoiceSales/sheetOrderPool/index.vue

@@ -5,6 +5,9 @@ import { PageContent } from "/@/components/PageContent";
 import searchFormConfig from "./config/search.config";
 import contentConfig from "./config/content.config";
 import modalConfig from "./config/modal.config";
+import { onMounted } from "vue";
+import { useUserStoreHook } from "/@/store/modules/user";
+import PagePower from "/@/components/PagePower/PagePower.vue";
 
 defineOptions({
   name: "invoiceheader"
@@ -38,22 +41,31 @@ const {
   handleConfrim,
   defaultInfo
 } = usePageModal({ pageContentRef });
+
+onMounted(
+  () =>
+    (contentConfig.powers = useUserStoreHook().getMenuActions("returnTicket"))
+);
 </script>
 
 <template>
   <div class="main role">
-    <PageSearch
-      :form-config="searchFormConfig"
-      @search-btn-click="handleSearchClick"
-      @reset-btn-click="handleResetClick"
-    />
-    <PageContent
-      ref="pageContentRef"
-      :content-config="contentConfig"
-      @create-btn-click="handleCreateData"
-      @update-btn-click="handleUpdateData"
-      @preview-btn-click="handlePreviewData"
-    />
+    <PagePower :is-show="contentConfig.powers.some(i => i === '001')">
+      <div w-full>
+        <PageSearch
+          :form-config="searchFormConfig"
+          @search-btn-click="handleSearchClick"
+          @reset-btn-click="handleResetClick"
+        />
+        <PageContent
+          ref="pageContentRef"
+          :content-config="contentConfig"
+          @create-btn-click="handleCreateData"
+          @update-btn-click="handleUpdateData"
+          @preview-btn-click="handlePreviewData"
+        />
+      </div>
+    </PagePower>
     <PageModal
       ref="pageModalRef"
       prview-description

+ 52 - 0
src/views/parameter/setActionProcess/components/process-list.vue

@@ -0,0 +1,52 @@
+<script setup lang="ts">
+import { onMounted, ref } from "vue";
+
+defineProps<{
+  currentProcess: Record<string, string>;
+}>();
+
+const list = ref<Array<Record<string, string>>>([]);
+const emit = defineEmits(["change-btn-click"]);
+
+//todo:请求拉取流程列表
+function requesetProcessList() {
+  list.value = Array(100)
+    .fill(0)
+    .map((_, index) => ({
+      id: String(index),
+      name: "流程节点" + Number(index)
+    }));
+
+  emit("change-btn-click", list.value[0]);
+}
+
+function handleChangeProcess(item) {
+  emit("change-btn-click", item);
+}
+
+onMounted(() => requesetProcessList());
+</script>
+
+<template>
+  <el-scrollbar h-full px-5 class="processs-list__content">
+    <h1 font-bold py-2>流程列表</h1>
+    <p
+      v-for="item in list"
+      class="px-1 hover:bg-#f7f7f7 hover:color-#409EFF cursor-pointer duration-200 rounded"
+      :class="{ 'is-active': currentProcess.id === item.id }"
+      @click="() => handleChangeProcess(item)"
+      :key="item.name"
+    >
+      {{ item.name }}
+    </p>
+  </el-scrollbar>
+</template>
+
+<style lang="scss" scoped>
+.processs-list__content {
+  .is-active {
+    background-color: #f7f7f7;
+    color: #409eff;
+  }
+}
+</style>

+ 228 - 0
src/views/parameter/setActionProcess/config/content.config.ts

@@ -0,0 +1,228 @@
+import { ContentConfig } from "/@/components/PageContent";
+
+import dayjs from "dayjs";
+import {
+  httpAdd,
+  httpList,
+  httpUpdate,
+  httpDelete,
+  httpStatus
+} from "/@/api/parameter/setProcess";
+import { h } from "vue";
+import { ElTag } from "element-plus";
+
+const columns = [
+  {
+    type: "selection",
+    width: 55,
+    hide: ({ checkList }) => !checkList.includes("勾选列")
+  },
+  {
+    label: "序号",
+    type: "index",
+    width: 70,
+    hide: ({ checkList }) => !checkList.includes("序号列")
+  },
+  {
+    label: "节点名称",
+    prop: "status_name"
+  },
+  {
+    label: "节点值",
+    prop: "order_process"
+  },
+  {
+    label: "节点类型",
+    prop: "status",
+    cellRenderer({ row }) {
+      return h(ElTag, null, {
+        default: () => "TODO"
+      });
+    }
+  },
+  {
+    label: "操作类型",
+    prop: "status",
+    cellRenderer({ row }) {
+      return h(ElTag, null, {
+        default: () => "TODO"
+      });
+    }
+  },
+  {
+    label: "状态",
+    prop: "status",
+    cellRenderer({ row }) {
+      return h(
+        ElTag,
+        {
+          type: row.status === "0" ? "danger" : "success"
+        },
+        {
+          default: () => (row.status === "0" ? "禁用" : "启用")
+        }
+      );
+    }
+  },
+  {
+    label: "下一节点",
+    prop: "status",
+    width: "200px",
+    cellRenderer({ row }) {
+      return h("div", null, {
+        default: () =>
+          row.next_actions.map(n =>
+            h(
+              ElTag,
+              {
+                style: {
+                  marginRight: "10px"
+                }
+              },
+              {
+                default: () => n
+              }
+            )
+          )
+      });
+    }
+  },
+  {
+    label: "创建人",
+    prop: "creater"
+  },
+  {
+    label: "创建时间",
+    prop: "addtime",
+    formatter: ({ createTime }) =>
+      dayjs(createTime).format("YYYY-MM-DD HH:mm:ss")
+  },
+  {
+    label: "操作",
+    fixed: "right",
+    width: 150,
+    slot: "operation"
+  }
+];
+
+const contentConfig: ContentConfig = {
+  title: "流程节点设置",
+  powers: ["001", "002", "003", "004", "005", "006", "007", "008"],
+  notReuqiredInit: true,
+  mockData: [
+    {
+      id: "116",
+      status_name: "取消订单",
+      order_process: "7",
+      status: "1",
+      action_type: "3",
+      operation_type: "2",
+      next_action_ids: "",
+      creater: "",
+      addtime: "2022-07-26 20:21:17",
+      remark: "",
+      next_actions: []
+    },
+    {
+      id: "115",
+      status_name: "成功转单",
+      order_process: "6",
+      status: "1",
+      action_type: "4",
+      operation_type: "2",
+      next_action_ids: "",
+      creater: "",
+      addtime: "2022-07-26 00:00:00",
+      remark: "",
+      next_actions: []
+    },
+    {
+      id: "114",
+      status_name: "财务驳回",
+      order_process: "5",
+      status: "1",
+      action_type: "4",
+      operation_type: "2",
+      next_action_ids: "",
+      creater: "",
+      addtime: "2022-07-26 00:00:00",
+      remark: "",
+      next_actions: []
+    },
+    {
+      id: "113",
+      status_name: "待财务审核",
+      order_process: "4",
+      status: "1",
+      action_type: "2",
+      operation_type: "1",
+      next_action_ids: "114,115",
+      creater: "",
+      addtime: "2022-07-26 00:00:00",
+      remark: "",
+      next_actions: ["财务驳回", "成功转单"]
+    },
+    {
+      id: "112",
+      status_name: "产品驳回",
+      order_process: "3",
+      status: "1",
+      action_type: "4",
+      operation_type: "2",
+      next_action_ids: "",
+      creater: "",
+      addtime: "2022-07-26 00:00:00",
+      remark: "",
+      next_actions: []
+    },
+    {
+      id: "111",
+      status_name: "待产品审核",
+      order_process: "2",
+      status: "1",
+      action_type: "2",
+      operation_type: "1",
+      next_action_ids: "112,113",
+      creater: "",
+      addtime: "2022-07-26 00:00:00",
+      remark: "",
+      next_actions: ["产品驳回", "待财务审核"]
+    },
+    {
+      id: "110",
+      status_name: "处理中",
+      order_process: "1",
+      status: "1",
+      action_type: "2",
+      operation_type: "2",
+      next_action_ids: "115,111",
+      creater: "",
+      addtime: "2022-07-26 00:00:00",
+      remark: "",
+      next_actions: ["成功转单", "待产品审核"]
+    },
+    {
+      id: "109",
+      status_name: "待系统处理",
+      order_process: "0",
+      status: "1",
+      action_type: "1",
+      operation_type: "2",
+      next_action_ids: "110",
+      creater: "",
+      addtime: "2022-07-26 00:00:00",
+      remark: "",
+      next_actions: ["处理中"]
+    }
+  ],
+  columns,
+  apis: {
+    httpAdd,
+    httpList,
+    httpUpdate,
+    httpDelete,
+    httpStatus
+  }
+};
+
+export default contentConfig;

+ 63 - 0
src/views/parameter/setActionProcess/config/modal.config.ts

@@ -0,0 +1,63 @@
+import { ModalConfig } from "../../../../components/PageModal/src/types";
+
+const modalConfig: ModalConfig = {
+  title: "流程",
+  itemStyle: {},
+  colLayout: { span: 24 },
+  formItems: [
+    {
+      field: "process_name",
+      type: "select",
+      label: "节点类型",
+      labelWidth: "120px",
+      rules: [
+        {
+          required: true,
+          message: "节点类型为必填项",
+          trigger: "change"
+        }
+      ]
+    },
+    {
+      field: "process_type",
+      type: "select",
+      labelWidth: "120px",
+      label: "操作类型",
+      rules: [
+        {
+          required: true,
+          message: "操作类型称为必填项",
+          trigger: "change"
+        }
+      ]
+    },
+    {
+      field: "process_type",
+      type: "input",
+      labelWidth: "120px",
+      label: "节点名称",
+      rules: [
+        {
+          required: true,
+          message: "节点名称为必填项",
+          trigger: "change"
+        }
+      ]
+    },
+    {
+      field: "process_type",
+      type: "input",
+      labelWidth: "120px",
+      label: "节点值",
+      rules: [
+        {
+          required: true,
+          message: "节点值为必填项",
+          trigger: "change"
+        }
+      ]
+    }
+  ]
+};
+
+export default modalConfig;

+ 17 - 0
src/views/parameter/setActionProcess/config/search.config.ts

@@ -0,0 +1,17 @@
+import { FormConfig } from "/@/components/PageSearch";
+const searchFormConfig: FormConfig = {
+  formItems: [
+    {
+      field: "status",
+      type: "select",
+      placeholder: "节点类型"
+    },
+    {
+      field: "status",
+      type: "select",
+      placeholder: "操作类型"
+    }
+  ]
+};
+
+export default searchFormConfig;

+ 86 - 0
src/views/parameter/setActionProcess/index.vue

@@ -0,0 +1,86 @@
+<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 { onMounted, ref } from "vue";
+import { useUserStoreHook } from "/@/store/modules/user";
+import PagePower from "/@/components/PagePower/PagePower.vue";
+import ProcessList from "./components/process-list.vue";
+
+defineOptions({
+  name: "invoiceheader"
+});
+
+const currentProcess = ref<Record<string, any>>({});
+
+const { pageContentRef, handleResetClick, handleSearchClick } = usePageSearch();
+
+const {
+  pageModalRef,
+  handleUpdateData,
+  handleCreateData,
+  handlePreviewData,
+  handleConfrim,
+  defaultInfo
+} = usePageModal({ pageContentRef });
+
+function handleProcessChange(process) {
+  currentProcess.value = process;
+  //重新请求
+}
+
+onMounted(
+  () =>
+    (contentConfig.powers =
+      useUserStoreHook().getMenuActions("setActionProcess"))
+);
+</script>
+
+<template>
+  <div class="main role bg-white">
+    <PagePower :is-show="contentConfig.powers.some(i => i === '001')">
+      <div w-full flex>
+        <div class="min-w-240px h-[calc(100vh-90px)] process-list__content">
+          <ProcessList
+            :current-process="currentProcess"
+            @change-btn-click="handleProcessChange"
+          />
+        </div>
+
+        <div flex-1>
+          <PageSearch
+            :form-config="searchFormConfig"
+            @search-btn-click="handleSearchClick"
+            @reset-btn-click="handleResetClick"
+          />
+          <PageContent
+            ref="pageContentRef"
+            :content-config="contentConfig"
+            @create-btn-click="handleCreateData"
+            @update-btn-click="handleUpdateData"
+            @preview-btn-click="handlePreviewData"
+          />
+        </div>
+      </div>
+    </PagePower>
+    <PageModal
+      ref="pageModalRef"
+      :modal-config="modalConfig"
+      :default-info="defaultInfo"
+      @confirm-btn-click="handleConfrim"
+    />
+  </div>
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+
+.processs-list__content {
+  border-right: 1px solid #dfe6ec;
+}
+</style>

+ 14 - 0
src/views/parameter/setActionProcess/types.ts

@@ -0,0 +1,14 @@
+export interface IClinetsDetail {
+  addtime: string;
+  ainv_fee: string;
+  area: string;
+  companyName: string;
+  companyNo: string;
+  contactor: string;
+  depart: string;
+  mobile: "";
+  parent: string;
+  total_fee: string;
+  updatetime: string;
+  winv_fee: string;
+}

+ 0 - 0
src/views/parameter/setActionProcess/流程节点设置


+ 95 - 0
src/views/parameter/setProcess/config/content.config.ts

@@ -0,0 +1,95 @@
+import { ContentConfig } from "/@/components/PageContent";
+
+import dayjs from "dayjs";
+import {
+  httpAdd,
+  httpList,
+  httpUpdate,
+  httpDelete,
+  httpStatus
+} from "/@/api/parameter/setProcess";
+import { h } from "vue";
+import { ElTag } from "element-plus";
+
+const columns = [
+  {
+    type: "selection",
+    width: 55,
+    hide: ({ checkList }) => !checkList.includes("勾选列")
+  },
+  {
+    label: "序号",
+    type: "index",
+    width: 70,
+    hide: ({ checkList }) => !checkList.includes("序号列")
+  },
+  {
+    label: "ID",
+    prop: "id"
+  },
+  {
+    label: "流程名称",
+    prop: "process_name"
+  },
+  {
+    label: "流程值",
+    prop: "process_type"
+  },
+  {
+    label: "状态",
+    prop: "status",
+    cellRenderer({ row }) {
+      return h(
+        ElTag,
+        {
+          type: row.status === "0" ? "danger" : "success"
+        },
+        {
+          default: () => (row.status === "0" ? "禁用" : "启用")
+        }
+      );
+    }
+  },
+  {
+    label: "创建人",
+    prop: "creater"
+  },
+  {
+    label: "创建时间",
+    prop: "addtime",
+    formatter: ({ createTime }) =>
+      dayjs(createTime).format("YYYY-MM-DD HH:mm:ss")
+  },
+  {
+    label: "操作",
+    fixed: "right",
+    width: 150,
+    slot: "operation"
+  }
+];
+
+const contentConfig: ContentConfig = {
+  title: "流程设置",
+  powers: ["001", "002", "003", "004", "005", "006", "007", "008"],
+  notReuqiredInit: true,
+  mockData: [
+    {
+      addtime: "2022-08-09 13:30:18",
+      creater: "",
+      id: "23",
+      process_name: "采购单退货流程",
+      process_type: "CGTHD",
+      status: "1"
+    }
+  ],
+  columns,
+  apis: {
+    httpAdd,
+    httpList,
+    httpUpdate,
+    httpDelete,
+    httpStatus
+  }
+};
+
+export default contentConfig;

+ 37 - 0
src/views/parameter/setProcess/config/modal.config.ts

@@ -0,0 +1,37 @@
+import { ModalConfig } from "../../../../components/PageModal/src/types";
+
+const modalConfig: ModalConfig = {
+  title: "流程",
+  itemStyle: {},
+  colLayout: { span: 24 },
+  formItems: [
+    {
+      field: "process_name",
+      type: "input",
+      label: "流程名称",
+      labelWidth: "120px",
+      rules: [
+        {
+          required: true,
+          message: "流程名称为必填项",
+          trigger: "change"
+        }
+      ]
+    },
+    {
+      field: "process_type",
+      type: "input",
+      labelWidth: "120px",
+      label: "流程值",
+      rules: [
+        {
+          required: true,
+          message: "流程值称为必填项",
+          trigger: "change"
+        }
+      ]
+    }
+  ]
+};
+
+export default modalConfig;

+ 31 - 0
src/views/parameter/setProcess/config/search.config.ts

@@ -0,0 +1,31 @@
+import { FormConfig } from "/@/components/PageSearch";
+const searchFormConfig: FormConfig = {
+  formItems: [
+    {
+      field: "status",
+      type: "select",
+      placeholder: "状态"
+    },
+    {
+      field: "addtime",
+      type: "date_picker",
+      otherOptions: {
+        type: "daterange",
+        startPlaceholder: "创建开始时间",
+        endPlaceholder: "创建结束时间"
+      }
+    },
+    {
+      field: "process_name",
+      type: "input",
+      placeholder: "流程名称"
+    },
+    {
+      field: "creater",
+      type: "input",
+      placeholder: "创建人"
+    }
+  ]
+};
+
+export default searchFormConfig;

+ 63 - 0
src/views/parameter/setProcess/index.vue

@@ -0,0 +1,63 @@
+<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 { onMounted } from "vue";
+import { useUserStoreHook } from "/@/store/modules/user";
+import PagePower from "/@/components/PagePower/PagePower.vue";
+
+defineOptions({
+  name: "invoiceheader"
+});
+
+const { pageContentRef, handleResetClick, handleSearchClick } = usePageSearch();
+
+const {
+  pageModalRef,
+  handleUpdateData,
+  handleCreateData,
+  handlePreviewData,
+  handleConfrim,
+  defaultInfo
+} = usePageModal({ pageContentRef });
+
+onMounted(
+  () => (contentConfig.powers = useUserStoreHook().getMenuActions("setProcess"))
+);
+</script>
+
+<template>
+  <div class="main role">
+    <PagePower :is-show="contentConfig.powers.some(i => i === '001')">
+      <div w-full>
+        <PageSearch
+          :form-config="searchFormConfig"
+          @search-btn-click="handleSearchClick"
+          @reset-btn-click="handleResetClick"
+        />
+        <PageContent
+          ref="pageContentRef"
+          :content-config="contentConfig"
+          @create-btn-click="handleCreateData"
+          @update-btn-click="handleUpdateData"
+          @preview-btn-click="handlePreviewData"
+        />
+      </div>
+    </PagePower>
+    <PageModal
+      ref="pageModalRef"
+      :modal-config="modalConfig"
+      :default-info="defaultInfo"
+      @confirm-btn-click="handleConfrim"
+    />
+  </div>
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+</style>

+ 14 - 0
src/views/parameter/setProcess/types.ts

@@ -0,0 +1,14 @@
+export interface IClinetsDetail {
+  addtime: string;
+  ainv_fee: string;
+  area: string;
+  companyName: string;
+  companyNo: string;
+  contactor: string;
+  depart: string;
+  mobile: "";
+  parent: string;
+  total_fee: string;
+  updatetime: string;
+  winv_fee: string;
+}

+ 0 - 0
src/views/parameter/setProcess/流程设置


+ 23 - 13
src/views/purchase/inputInvoice/index.vue

@@ -1,6 +1,7 @@
 <script setup lang="ts">
-import { ref } from "vue";
+import { computed, onMounted, ref } from "vue";
 import { PageSearch, usePageSearch } from "/@/components/PageSearch";
+import { useUserStoreHook } from "/@/store/modules/user";
 import { PageContent } from "/@/components/PageContent";
 import searchFormConfig from "./config/search.config";
 import contentConfig from "./config/content.config";
@@ -29,28 +30,37 @@ function searchCallback({ open_timer, start_timer }) {
   };
 }
 
+const contentConfigRef = computed(() => contentConfig);
+
 const { pageContentRef, handleResetClick, handleSearchClick } =
   usePageSearch(searchCallback);
 
 function handlePreviewInvoice(invoiceData) {
   invoiceDialogRef.value.onDisplay(invoiceData);
 }
+
+onMounted(() => {
+  contentConfig.powers = useUserStoreHook().getMenuActions("inputInvoice");
+});
 </script>
 
 <template>
   <div class="main role">
-    <PageSearch
-      :form-config="searchFormConfig"
-      @search-btn-click="handleSearchClick"
-      @reset-btn-click="handleResetClick"
-    />
-    <PageContent
-      ref="pageContentRef"
-      :content-config="contentConfig"
-      @preview-btn-click="handlePreviewInvoice"
-    />
-
-    <InvoiceDialog ref="invoiceDialogRef" />
+    <PagePower :isShow="contentConfig.powers.some(i => i === '001')">
+      <div w-full>
+        <PageSearch
+          :form-config="searchFormConfig"
+          @search-btn-click="handleSearchClick"
+          @reset-btn-click="handleResetClick"
+        />
+        <PageContent
+          ref="pageContentRef"
+          :content-config="contentConfigRef"
+          @preview-btn-click="handlePreviewInvoice"
+        />
+      </div>
+      <InvoiceDialog ref="invoiceDialogRef" />
+    </PagePower>
   </div>
 </template>
 

+ 0 - 1
src/views/purchase/orderRecord/index.vue

@@ -42,7 +42,6 @@ onMounted(() => {
   contentConfig.powers = [].concat(...arr);
   // if (powers.value.some(i => i == "001")) {
   //   actionTableRef.value.onSearch();F
-  // }
 });
 </script>
 

+ 2 - 2
src/views/purchase/purchPay/component/payment-detail/index.vue

@@ -1,5 +1,5 @@
 <script setup lang="ts">
-import { detailColumns, paymentOptions } from "../../config/configs";
+import { purchpay_columns, paymentOptions } from "/@/utils/details/purchPay";
 defineProps<{
   detail: Record<string, string>;
 }>();
@@ -8,7 +8,7 @@ defineProps<{
 <template>
   <el-descriptions :column="3" border size="small">
     <el-descriptions-item
-      v-for="(item, index) in detailColumns"
+      v-for="(item, index) in purchpay_columns"
       :label="item.label"
       :key="index"
     >

+ 0 - 117
src/views/purchase/purchPay/config/configs.ts

@@ -1,63 +1,5 @@
 import { FormRules } from "element-plus";
 
-export const statusOptions = [
-  {
-    label: "待发起流程",
-    value: "0"
-  },
-  {
-    label: "待采购审核",
-    value: "1"
-  },
-  {
-    label: "待财务审核",
-    value: "2"
-  },
-  {
-    label: "审核成功",
-    value: "3"
-  },
-  {
-    label: "采购驳回",
-    value: "4"
-  },
-  {
-    label: "财务驳回",
-    value: "5"
-  }
-];
-
-export const paymentOptions = [
-  {
-    label: "待发起",
-    value: "0"
-  },
-  {
-    label: "待业务审核",
-    value: "1"
-  },
-  {
-    label: "待财务审核",
-    value: "2"
-  },
-  {
-    label: "待付款回执",
-    value: "3"
-  },
-  {
-    label: "付款回执",
-    value: "4"
-  },
-  {
-    label: "业务驳回",
-    value: "5"
-  },
-  {
-    label: "财务驳回",
-    value: "6"
-  }
-];
-
 export const create_rules: FormRules = {
   pay_fee: [{ required: true, trigger: "change", message: "请输入付款金额" }],
   payNo: [{ required: true, trigger: "", message: "请选择付款订单" }]
@@ -126,62 +68,3 @@ export const columns = [
     align: "left"
   }
 ];
-
-export const detailColumns = [
-  {
-    field: "payNo",
-    label: "对账申请编号"
-  },
-  {
-    field: "dzNo",
-    label: "付款申请编号"
-  },
-  {
-    field: "apply_name",
-    label: "申请人"
-  },
-  {
-    field: "pay_fee",
-    label: "申请付款额度"
-  },
-  {
-    field: "return_img",
-    label: "付款回执"
-  },
-  {
-    field: "return_time",
-    label: "付款回执时间"
-  },
-  {
-    field: "status",
-    label: "状态"
-  },
-  {
-    field: "pay_apply_name",
-    label: "对账申请人"
-  },
-  {
-    field: "supplierNo",
-    label: "供应商编号"
-  },
-  {
-    field: "supplierName",
-    label: "供应商"
-  },
-  {
-    field: "companyNo",
-    label: "业务公司编号"
-  },
-  {
-    field: "companyName",
-    label: "业务公司"
-  },
-  {
-    field: "total_fee",
-    label: "对账总额"
-  },
-  {
-    field: "remark",
-    label: "备注"
-  }
-];

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

@@ -4,7 +4,7 @@ import { httpList, httpDelete } from "/@/api/purchase/orderPay";
 import dayjs from "dayjs";
 import { h } from "vue";
 import { ElTag } from "element-plus";
-import { paymentOptions } from "./configs";
+import { paymentOptions } from "/@/utils/details/purchPay";
 
 const columns = [
   {

+ 1 - 1
src/views/purchase/purchPay/config/search.config.ts

@@ -1,4 +1,4 @@
-import { statusOptions } from "./configs";
+import { statusOptions } from "/@/utils/details/purchPay";
 import { FormConfig } from "/@/components/PageSearch";
 
 const searchFormConfig: FormConfig = {

+ 28 - 15
src/views/purchase/purchPay/index.vue

@@ -4,6 +4,9 @@ import { PageSearch, usePageSearch } from "/@/components/PageSearch";
 import { useRouter } from "vue-router";
 import contentConfig from "./config/content.config";
 import searchFormConfig from "./config/search.config";
+import { useUserStoreHook } from "/@/store/modules/user";
+import { onMounted, computed } from "vue";
+import PagePower from "/@/components/PagePower/PagePower.vue";
 
 defineOptions({
   name: "purchPay"
@@ -11,6 +14,8 @@ defineOptions({
 
 const { pageContentRef, handleSearchClick, handleResetClick } = usePageSearch();
 
+const contentConfigRef = computed(() => contentConfig);
+
 const { push } = useRouter();
 
 function handleCreate() {
@@ -25,24 +30,32 @@ function handlePreview(item) {
     }
   });
 }
+
+onMounted(
+  () => (contentConfig.powers = useUserStoreHook().getMenuActions("purchPay"))
+);
 </script>
 
 <template>
   <div class="main role">
-    <PageSearch
-      ref="pageContentRef"
-      :form-config="searchFormConfig"
-      @search-btn-click="handleSearchClick"
-      @reset-btn-click="handleResetClick"
-    />
-    <PageContent
-      ref="pageContentRef"
-      :content-config="contentConfig"
-      @preview-btn-click="handlePreview"
-    >
-      <template #create>
-        <el-button type="primary" @click="handleCreate">新建</el-button>
-      </template>
-    </PageContent>
+    <PagePower :isShow="contentConfigRef.powers.some(i => i === '001')">
+      <div w-full>
+        <PageSearch
+          ref="pageContentRef"
+          :form-config="searchFormConfig"
+          @search-btn-click="handleSearchClick"
+          @reset-btn-click="handleResetClick"
+        />
+        <PageContent
+          ref="pageContentRef"
+          :content-config="contentConfigRef"
+          @preview-btn-click="handlePreview"
+        >
+          <template #create>
+            <el-button type="primary" @click="handleCreate">新建</el-button>
+          </template>
+        </PageContent>
+      </div>
+    </PagePower>
   </div>
 </template>

+ 6 - 2
src/views/purchase/ticketReturn/components/ticket-detail/index.vue

@@ -1,5 +1,9 @@
 <script setup lang="ts">
-import { status_options, detailColumns, inv_type } from "../../config/configs";
+import {
+  status_options,
+  inv_type,
+  ticket_return_columns
+} from "/@/utils/details/ticket-return";
 import { inv_type_list } from "/@/utils/status";
 
 defineProps<{
@@ -10,7 +14,7 @@ defineProps<{
 <template>
   <el-descriptions :column="3" border size="small">
     <el-descriptions-item
-      v-for="(item, index) in detailColumns"
+      v-for="(item, index) in ticket_return_columns"
       :label="item.label"
       :key="index"
     >

+ 0 - 182
src/views/purchase/ticketReturn/config/configs.ts

@@ -183,189 +183,7 @@ export const ticketAddRules: FormRules = {
   ]
 };
 
-//发票状态的options
-export const status_options = [
-  {
-    label: "上传发票",
-    value: "0"
-  },
-  {
-    label: "待识别验证",
-    value: "1"
-  },
-  {
-    label: "待校验识别",
-    value: "2"
-  },
-  {
-    label: "待财务审核",
-    value: "3"
-  },
-  {
-    label: "待认证",
-    value: "4"
-  },
-  {
-    label: "认证成功待确认",
-    value: "5"
-  },
-  {
-    label: "回票完成",
-    value: "6"
-  },
-  {
-    label: "识别失败",
-    value: "7"
-  },
-  {
-    label: "验证失败",
-    value: "8"
-  },
-  {
-    label: "财务驳回",
-    value: "9"
-  },
-  {
-    label: "认证失败",
-    value: "10"
-  },
-  {
-    label: "校验超过次数第二天校验",
-    value: "11"
-  },
-  {
-    label: "回票申请废弃已结束",
-    value: "12"
-  }
-];
-
 export const process_rules = {
   remark: [{ required: true, message: "请输入备注", trigger: "change" }],
   status: [{ required: true, message: "请选择状态", trigger: "change" }]
 };
-
-export const inv_type = [
-  {
-    label: "手工开票",
-    value: "1"
-  },
-  {
-    label: "ocr识别",
-    value: "2"
-  },
-  {
-    label: "金税",
-    value: "3"
-  }
-];
-
-//审核流程映射
-export const reviewProcessMap = [
-  {
-    title: "财务审核",
-    showStatus: "3",
-    reviewOptions: {
-      failStatus: "11",
-      successStatus: "6"
-    }
-  },
-  {
-    title: "认证",
-    showStatus: "6",
-    reviewOptions: {
-      failStatus: "12",
-      successStatus: "7"
-    }
-  },
-  {
-    title: "确认",
-    showStatus: "7",
-    reviewOptions: {
-      failStatus: "10",
-      successStatus: "8"
-    }
-  }
-];
-
-export const detailColumns = [
-  {
-    field: "payNo",
-    label: "对账编号"
-  },
-  {
-    field: "hpNo",
-    label: "回票申请编号"
-  },
-  {
-    field: "apply_name",
-    label: "申请人名称"
-  },
-  {
-    field: "invType",
-    label: "发票申请类型"
-  },
-  {
-    field: "invoiceType",
-    label: "发票类型"
-  },
-  {
-    field: "invName",
-    label: "发票名称"
-  },
-  {
-    field: "invName",
-    label: "发票名称"
-  },
-  {
-    field: "inv_img",
-    label: "发票图片"
-  },
-  {
-    field: "inv_fee",
-    label: "发票金额"
-  },
-  {
-    field: "status",
-    label: "状态"
-  },
-  {
-    field: "open_time",
-    label: "开票时间"
-  },
-  {
-    field: "invoiceNumber",
-    label: "发票号码"
-  },
-  {
-    field: "invoiceCode",
-    label: "发票代码"
-  },
-  {
-    field: "checkNumber",
-    label: "校验码"
-  },
-  {
-    field: "pay_apply_name",
-    label: "对账申请人"
-  },
-  {
-    field: "supplierNo",
-    label: "供应商编号"
-  },
-  {
-    field: "supplierName",
-    label: "供应商名称"
-  },
-  {
-    field: "companyNo",
-    label: "业务企业编号"
-  },
-  {
-    field: "companyName",
-    label: "业务企业名称"
-  },
-  {
-    field: "total_fee",
-    label: "对账申请总额"
-  }
-];

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

@@ -4,7 +4,7 @@ import { httpList } from "/@/api/purchase/ticketReturn";
 import dayjs from "dayjs";
 import { h } from "vue";
 import { ElImage, ElTag } from "element-plus";
-import { status_options } from "./configs";
+import { status_options } from "/@/utils/details/ticket-return";
 
 const columns = [
   {

+ 1 - 1
src/views/purchase/ticketReturn/config/search.config.ts

@@ -1,4 +1,4 @@
-import { status_options } from "./configs";
+import { status_options } from "/@/utils/details/ticket-return";
 import { FormConfig } from "/@/components/PageSearch";
 
 const searchFormConfig: FormConfig = {

+ 31 - 20
src/views/purchase/ticketReturn/index.vue

@@ -1,11 +1,13 @@
 <script setup lang="ts">
-import { ref } from "vue";
+import { onMounted, ref } from "vue";
 import { useRouter } from "vue-router";
 import searchFormConfig from "./config/search.config";
 import contentConfig from "./config/content.config";
 import { PageSearch, usePageSearch } from "/@/components/PageSearch";
 import { PageContent } from "/@/components/PageContent";
 import CreateTicketDialog from "./components/create-ticket-dialog/index.vue";
+import PagePower from "/@/components/PagePower/PagePower.vue";
+import { useUserStoreHook } from "/@/store/modules/user";
 
 defineOptions({
   name: "ticketReturn"
@@ -37,31 +39,40 @@ function toDetail({ hpNo }) {
     }
   });
 }
+
+onMounted(
+  () =>
+    (contentConfig.powers = useUserStoreHook().getMenuActions("ticketReturn"))
+);
 </script>
 
 <template>
   <div class="main role">
-    <PageSearch
-      :form-config="searchFormConfig"
-      @search-btn-click="handleSearchClick"
-      @reset-btn-click="handleResetClick"
-    />
+    <PagePower :isShow="contentConfig.powers.some(i => i === '001')">
+      <div w-full>
+        <PageSearch
+          :form-config="searchFormConfig"
+          @search-btn-click="handleSearchClick"
+          @reset-btn-click="handleResetClick"
+        />
 
-    <PageContent
-      ref="pageContentRef"
-      @preview-btn-click="toDetail"
-      :content-config="contentConfig"
-    >
-      <template #create>
-        <el-button type="primary" @click="handleCreate">新建</el-button>
-      </template>
-    </PageContent>
+        <PageContent
+          ref="pageContentRef"
+          @preview-btn-click="toDetail"
+          :content-config="contentConfig"
+        >
+          <template #create>
+            <el-button type="primary" @click="handleCreate">新建</el-button>
+          </template>
+        </PageContent>
+      </div>
 
-    <!-- 展示对账列表数据 根据对账列表payNo创建采购回单数据 -->
-    <CreateTicketDialog
-      @reload="() => pageContentRef.onSearch()"
-      ref="TicketDialog"
-    />
+      <!-- 展示对账列表数据 根据对账列表payNo创建采购回单数据 -->
+      <CreateTicketDialog
+        @reload="() => pageContentRef.onSearch()"
+        ref="TicketDialog"
+      />
+    </PagePower>
   </div>
 </template>
 

+ 3 - 3
src/views/search/standBook/components/anchor.vue

@@ -45,12 +45,12 @@ function isActive(title: string) {
 <template>
   <ul fixed p-5 text-sm font-bold>
     <li
-      :class="{ 'is-active': isActive(title) }"
-      v-for="([title], index) in map.entries()"
-      @click="() => toDetailPosition(title)"
       hover:text-blue
       cursor-pointer
       duration-200ms
+      :class="{ 'is-active': isActive(title) }"
+      v-for="([title], index) in map.entries()"
+      @click="() => toDetailPosition(title)"
       :key="index"
     >
       {{ title }}

+ 1 - 1
src/views/search/standBook/config/detail.ts

@@ -51,7 +51,7 @@ export function useDetail(props: DetailProps) {
           title: props.title
         };
         nextTick(() => emit("map-offset-top", mapOffsetTop));
-      }, 100)
+      }, 200)
   );
 
   return {

+ 66 - 25
src/views/search/standBook/config/query.ts

@@ -11,13 +11,35 @@ import { httpDetail as httpSaleInfo } from "/@/api/InvoiceSales/sheetOrderPool";
 import Sale from "./../details/sale.vue";
 
 //对账付款(采购付款)
+import { httpInfo as httpPaymentInfo } from "/@/api/purchase/orderPay";
 import Payment from "../details/payment.vue";
 
+//回票
+import { httpInfo as httpTicketReturnInfo } from "/@/api/purchase/ticketReturn";
+import TicketReturn from "../details/ticket-return.vue";
+
+//资金认领
+import { httpDetail as httpTradelogInfo } from "/@/api/InvoiceSales/capitalPool";
+import Tradelog from "../details/tradelog.vue";
+
+//资金
+import { httpInfo as httpTradeInfo } from "/@/api/InvoiceSales/capitalClaim";
+import Trade from "../details/trade.vue";
+
+//退款
+import { httpDetail as httpRefundInfo } from "/@/api/InvoiceSales/refund";
+import Refund from "../details/refund.vue";
+
+//退票
+import { httpDetail as httpInvReturnInfo } from "/@/api/InvoiceSales/returnTicket";
+import InvRerturn from "../details/inv-return.vue";
+
 export const QUERY_MAP = {
   qrdNo: {
     query: "销售订单单号",
     detail: "销售订单详情",
     requesetProp: "sequenceNo",
+    responseKey: "qrdNo",
     component: Sale,
     api: httpSaleInfo
   },
@@ -25,6 +47,7 @@ export const QUERY_MAP = {
     query: "采购单号",
     detail: "采购单详情",
     requesetProp: "sequenceNo",
+    responseKey: "cgdNo",
     component: Purchase,
     api: httpPurchaseInfo
   },
@@ -32,6 +55,7 @@ export const QUERY_MAP = {
     query: "对账编号",
     detail: "对账申请详情",
     requesetProp: "payNo",
+    responseKey: "payNo",
     component: Reconciliation,
     api: httpReconciliationInfo
   },
@@ -39,48 +63,65 @@ export const QUERY_MAP = {
     query: "对账付款申请编号",
     detail: "对账付款申请详情",
     component: Payment,
-    api: ""
-  },
-  companyNo: {
-    query: "业务公司编号",
-    api: ""
-  },
-  supplierNo: {
-    query: "供应商编号",
-    api: ""
-  },
-  customerNo: {
-    query: "客户企业编号",
-    api: ""
+    responseKey: "DzNo",
+    requesetProp: "DzNo",
+    api: httpPaymentInfo
   },
   hpNo: {
     query: "对账回票申请编号",
     detail: "对账回票申请详情",
-    api: ""
+    component: TicketReturn,
+    responseKey: "hpNo",
+    requesetProp: "hpNo",
+    api: httpTicketReturnInfo
   },
-  invNo: {
-    query: "开票申请编号",
-    detail: "开票申请详情",
-    api: ""
+  logNo: {
+    query: "资金认领编号",
+    detail: "资金认领详情",
+    component: Tradelog,
+    responseKey: "logNo",
+    requesetProp: "logNo",
+    api: httpTradelogInfo
   },
   tradNo: {
     query: "资金编号",
     detail: "资金详情",
-    api: ""
+    component: Trade,
+    responseKey: "tradNo",
+    requesetProp: "tradNo",
+    api: httpTradeInfo
   },
-  logNo: {
-    query: "资金认领编号",
+  returnTrad: {
+    query: "退款申请编号",
     detail: "资金认领详情",
-    api: ""
+    responseKey: "returnTrad",
+    requesetProp: "returnCode",
+    component: Refund,
+    api: httpRefundInfo
   },
   returnInv: {
     query: "退票申请编号",
     detail: "退票申请详情",
+    component: InvRerturn,
+    responseKey: "returnInv",
+    requesetProp: "returnCode",
+    api: httpInvReturnInfo
+  },
+  invNo: {
+    query: "开票申请编号",
+    detail: "开票申请详情",
     api: ""
   },
-  returnTrad: {
-    query: "退款申请编号",
-    detail: "资金认领详情",
+  companyNo: {
+    query: "业务公司编号",
+    api: ""
+  },
+  supplierNo: {
+    query: "供应商编号",
+    api: ""
+  },
+  customerNo: {
+    query: "客户企业编号",
     api: ""
   },
   seller_id: {

+ 9 - 5
src/views/search/standBook/detail.vue

@@ -1,5 +1,5 @@
 <script setup lang="ts">
-import { computed, onMounted, ref } from "vue";
+import { computed, onMounted, shallowRef, ref } from "vue";
 import { httpDetail } from "/@/api/srarch/standBook";
 import { useRoute } from "vue-router";
 import { QUERY_MAP } from "./config/query";
@@ -9,7 +9,7 @@ import Anchor from "./components/anchor.vue";
 const { query } = useRoute();
 const responseHandle = useResponseHandle();
 
-const details = ref<Array<any>>([]);
+const details = shallowRef<Array<any>>([]);
 const collapses = ref<Array<string>>([]);
 const mapDetailToTop = ref<Map<string, any>>(new Map());
 
@@ -17,9 +17,13 @@ const id = computed(() => query.id);
 
 //获取该台账单可以查询到的详情
 function getDetails(report_data) {
-  const isDetail = (key: string) => {
+  const isDetail = (queryKey: string) => {
+    const responseKey = QUERY_MAP[queryKey].responseKey;
+
     return (
-      report_data[key] && QUERY_MAP[key].detail && report_data[key].length !== 0
+      report_data[responseKey] &&
+      QUERY_MAP[queryKey]?.detail &&
+      report_data[responseKey].length !== 0
     );
   };
 
@@ -30,7 +34,7 @@ function getDetails(report_data) {
     prop: QUERY_MAP[key].requesetProp,
     title: QUERY_MAP[key].detail,
     api: QUERY_MAP[key].api,
-    value: report_data[key],
+    value: report_data[QUERY_MAP[key].responseKey],
     key
   }));
 }

+ 20 - 0
src/views/search/standBook/details/inv-return.vue

@@ -0,0 +1,20 @@
+<script setup lang="ts">
+import { useDetail } from "../config/detail";
+import { detailProps } from "../types";
+import { inv_return_columns } from "/@/utils/details/inv-return";
+import BasicDescriptions from "/@/components/BasicDescriptions";
+
+const props = defineProps(detailProps);
+defineEmits(["map-offset-top"]);
+
+const { data, defaultRef } = useDetail(props);
+</script>
+
+<template>
+  <BasicDescriptions
+    ref="defaultRef"
+    :data="data"
+    :columns="inv_return_columns"
+    :col-number="3"
+  />
+</template>

+ 2 - 2
src/views/search/standBook/details/payment.vue

@@ -1,7 +1,7 @@
 <script setup lang="ts">
 import { useDetail } from "../config/detail";
 import { detailProps } from "../types";
-import { purchase_columns } from "/@/utils/details/purchase";
+import { purchpay_columns } from "/@/utils/details/purchPay";
 import BasicDescriptions from "/@/components/BasicDescriptions";
 
 const props = defineProps(detailProps);
@@ -14,7 +14,7 @@ const { data, defaultRef } = useDetail(props);
   <BasicDescriptions
     ref="defaultRef"
     :data="data"
-    :columns="purchase_columns"
+    :columns="purchpay_columns"
     :col-number="3"
   />
 </template>

+ 20 - 0
src/views/search/standBook/details/refund.vue

@@ -0,0 +1,20 @@
+<script setup lang="ts">
+import { useDetail } from "../config/detail";
+import { detailProps } from "../types";
+import { sale_detail_columns } from "/@/utils/details/sale";
+import BasicDescriptions from "/@/components/BasicDescriptions";
+
+const props = defineProps(detailProps);
+defineEmits(["map-offset-top"]);
+
+const { data, defaultRef } = useDetail(props);
+</script>
+
+<template>
+  <BasicDescriptions
+    ref="defaultRef"
+    :data="data"
+    :columns="sale_detail_columns"
+    :col-number="3"
+  />
+</template>

+ 20 - 0
src/views/search/standBook/details/ticket-return.vue

@@ -0,0 +1,20 @@
+<script setup lang="ts">
+import { useDetail } from "../config/detail";
+import { detailProps } from "../types";
+import { ticket_return_columns } from "/@/utils/details/ticket-return";
+import BasicDescriptions from "/@/components/BasicDescriptions";
+
+const props = defineProps(detailProps);
+defineEmits(["map-offset-top"]);
+
+const { data, defaultRef } = useDetail(props);
+</script>
+
+<template>
+  <BasicDescriptions
+    ref="defaultRef"
+    :data="data"
+    :columns="ticket_return_columns"
+    :col-number="3"
+  />
+</template>

+ 20 - 0
src/views/search/standBook/details/trade.vue

@@ -0,0 +1,20 @@
+<script setup lang="ts">
+import { useDetail } from "../config/detail";
+import { refund_detail_columns } from "/@/utils/details/refund";
+import BasicDescriptions from "/@/components/BasicDescriptions";
+import { detailProps } from "../types";
+
+const props = defineProps(detailProps);
+defineEmits(["map-offset-top"]);
+
+const { data, defaultRef } = useDetail(props);
+</script>
+
+<template>
+  <BasicDescriptions
+    ref="defaultRef"
+    :data="data"
+    :columns="refund_detail_columns"
+    :col-number="3"
+  />
+</template>

+ 20 - 0
src/views/search/standBook/details/tradelog.vue

@@ -0,0 +1,20 @@
+<script setup lang="ts">
+import { useDetail } from "../config/detail";
+import { capital_detail_columns } from "/@/utils/details/tragelog";
+import BasicDescriptions from "/@/components/BasicDescriptions";
+import { detailProps } from "../types";
+
+const props = defineProps(detailProps);
+defineEmits(["map-offset-top"]);
+
+const { data, defaultRef } = useDetail(props);
+</script>
+
+<template>
+  <BasicDescriptions
+    ref="defaultRef"
+    :data="data"
+    :columns="capital_detail_columns"
+    :col-number="3"
+  />
+</template>

+ 1 - 1
src/views/search/standBook/types.ts

@@ -8,7 +8,7 @@ export const detailProps = {
     type: String
   },
   value: {
-    type: String
+    type: [String, Array] as PropType<any>
   },
   title: {
     type: String