Browse Source

feat:台账单 流程设置

snow 2 years ago
parent
commit
d5141ad475
26 changed files with 567 additions and 277 deletions
  1. 1 1
      src/api/InvoiceSales/invoiceApply/index.ts
  2. 6 20
      src/api/InvoiceSales/sheetOrderPool/index.ts
  3. 128 0
      src/utils/details/inv-open.ts
  4. 1 1
      src/utils/details/inv-return.ts
  5. 118 6
      src/utils/details/sale.ts
  6. 27 21
      src/views/InvoiceSales/capitalPool/detail.vue
  7. 12 4
      src/views/InvoiceSales/invoiceApply/components/addEditForm.vue
  8. 3 1
      src/views/InvoiceSales/invoiceApply/components/edit-order.vue
  9. 1 0
      src/views/InvoiceSales/invoiceApply/index.vue
  10. 24 18
      src/views/InvoiceSales/refund/detail.vue
  11. 12 59
      src/views/InvoiceSales/returnTicket/components/approval-process/approval-pending.vue
  12. 1 1
      src/views/InvoiceSales/returnTicket/components/approval-process/index.ts
  13. 2 2
      src/views/InvoiceSales/returnTicket/components/refund-detail/index.vue
  14. 45 45
      src/views/InvoiceSales/returnTicket/config/content.config.ts
  15. 64 20
      src/views/InvoiceSales/returnTicket/detail.vue
  16. 9 10
      src/views/InvoiceSales/sheetOrderPool/config/content.config.ts
  17. 1 1
      src/views/InvoiceSales/sheetOrderPool/index.vue
  18. 1 1
      src/views/parameter/setActionProcess/components/process-list.vue
  19. 7 5
      src/views/search/standBook/components/anchor.vue
  20. 1 1
      src/views/search/standBook/components/search-modal.vue
  21. 4 1
      src/views/search/standBook/config/detail.ts
  22. 9 2
      src/views/search/standBook/config/query.ts
  23. 11 8
      src/views/search/standBook/detail.vue
  24. 20 0
      src/views/search/standBook/details/inv-open.vue
  25. 2 2
      src/views/search/standBook/details/trade.vue
  26. 57 47
      src/views/search/standBook/index.vue

+ 1 - 1
src/api/InvoiceSales/invoiceApply/index.ts

@@ -18,7 +18,7 @@ export const httpList = (data: object): ResponseType => {
 };
 // 详情
 export const httpDetail = (data: object): ResponseType => {
-  return http.request("post", `${yewuApi}tradeQuery`, { data });
+  return http.request("post", `${yewuApi}orderinvinfo`, { data });
 };
 // 更新
 export const httpUpdate = (data: object): ResponseType => {

+ 6 - 20
src/api/InvoiceSales/sheetOrderPool/index.ts

@@ -8,27 +8,13 @@ interface ResponseType extends Promise<any> {
   code?: number;
   msg?: string;
 }
-// 添加
-export const httpAdd = (data: object): ResponseType => {
-  return http.request("post", `${yewuApi}orderpayadd`, { data });
+
+//销售单列表
+export const httpList = (data: any): any => {
+  return http.request("post", `${yewuApi}orderlist`, { 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}saleinfo`, { data });
 };
-// 更新
-export const httpUpdate = (data: object): ResponseType => {
-  return http.request("post", `${yewuApi}menusave`, { data });
-};
-// 状态
-export const httpStatus = (data: object): ResponseType => {
-  return http.request("post", `${yewuApi}orderpaystatus`, { data });
-};
-// 删除
-export const httpDelete = (data: object): ResponseType => {
-  return http.request("post", `${yewuApi}menudel`, { data });
-};

+ 128 - 0
src/utils/details/inv-open.ts

@@ -0,0 +1,128 @@
+import { DescriptionColumns } from "/@/components/BasicDescriptions";
+
+export const inv_open_columns: DescriptionColumns = [
+  {
+    field: "invNo",
+    label: "发票编号"
+  },
+  {
+    field: "inv_value",
+    label: "发票金额"
+  },
+  {
+    field: "inv_out",
+    label: "开票业务公司"
+  },
+  {
+    field: "inv_in",
+    label: "客户公司"
+  },
+  {
+    field: "apply_name",
+    label: "申请人"
+  },
+  {
+    field: "inv_type",
+    label: "发票类型"
+  },
+  {
+    field: "open_type",
+    label: "开票方式"
+  },
+  {
+    field: "is_ticket",
+    label: "是否支持金税"
+  },
+  {
+    field: "exam_remark",
+    label: "审核备注"
+  },
+  {
+    field: "remark",
+    label: "备注"
+  },
+  {
+    field: "email",
+    label: "电子邮箱"
+  },
+  {
+    field: "winv_fee",
+    label: "未开票"
+  },
+  {
+    field: "ainv_fee",
+    label: "已开票"
+  },
+  {
+    field: "post_fee",
+    label: "快递费"
+  },
+  {
+    field: "post_code",
+    label: "快递编号"
+  },
+  {
+    field: "post_company",
+    label: "快递公司"
+  },
+  {
+    field: "buyer_title",
+    label: "买方抬头"
+  },
+  {
+    field: "buyer_code",
+    label: "买方纳税识别号"
+  },
+  {
+    field: "buyer_addr",
+    label: "买方注册地址"
+  },
+  {
+    field: "buyer_mobile",
+    label: "买方联系方式"
+  },
+  {
+    field: "buyer_bank",
+    label: "买方银行"
+  },
+  {
+    field: "seller_title",
+    label: "销售方抬头"
+  },
+  {
+    field: "seller_code",
+    label: "销售方纳税识别号"
+  },
+  {
+    field: "seller_addr",
+    label: "销售方地址"
+  },
+  {
+    field: "seller_mobile",
+    label: "销售方联系方式"
+  },
+  {
+    field: "seller_bank",
+    label: "销售方银行"
+  },
+  {
+    field: "seller_bankNo",
+    label: "销售方账户"
+  },
+  {
+    field: "voider",
+    label: "作废人"
+  },
+  {
+    field: "payee",
+    label: "收款人"
+  },
+  {
+    field: "drawer",
+    label: "开票人"
+  },
+  {
+    field: "ownerPlace",
+    label: "复核人"
+  }
+];

+ 1 - 1
src/utils/details/inv-return.ts

@@ -9,7 +9,7 @@ const return_type = [
   },
   {
     value: "2",
-    label: "金税"
+    label: "线下"
   }
 ];
 

+ 118 - 6
src/utils/details/sale.ts

@@ -66,15 +66,127 @@ export const sale_detail_columns: DescriptionColumns = [
     label: "三级分类"
   },
   {
-    field: "sequenceNo",
-    label: "销售单编号"
+    field: "goodMaterial",
+    label: "材质"
   },
   {
-    field: "sequenceNo",
-    label: "销售单编号"
+    field: "goodType",
+    label: "商品类型"
   },
   {
-    field: "sequenceNo",
-    label: "销售单编号"
+    field: "goodModel",
+    label: "型号"
+  },
+  {
+    field: "isStock",
+    label: "是否库存"
+  },
+  {
+    field: "metalsType",
+    label: "贵金属种类"
+  },
+  {
+    field: "weight",
+    label: "重量"
+  },
+  {
+    field: "goldPrice",
+    label: "金价"
+  },
+  {
+    field: "workDay",
+    label: "工期"
+  },
+  {
+    field: "tax",
+    label: "税率"
+  },
+  {
+    field: "goodNum",
+    label: "商品数量"
+  },
+  {
+    field: "goodPrice",
+    label: "商品单价"
+  },
+  {
+    field: "totalPrice",
+    label: "总金额"
+  },
+  {
+    field: "sendNum",
+    label: "发货数量"
+  },
+  {
+    field: "wsendNum",
+    label: "未发货数量"
+  },
+  {
+    field: "apay_fee",
+    label: "已付金额"
+  },
+  {
+    field: "pay_fee",
+    label: "付款中"
+  },
+  {
+    field: "inv_fee",
+    label: "开票中"
+  },
+  {
+    field: "ainv_fee",
+    label: "已开票"
+  },
+  {
+    field: "sendType",
+    label: "发货方式"
+  },
+  {
+    field: "pay_status",
+    label: "发货方式"
+  },
+  {
+    field: "inv_status",
+    label: "开票状态"
+  },
+  {
+    field: "pay_status",
+    label: "付款状态"
+  },
+  {
+    field: "paytime",
+    label: "付款时间"
+  },
+  {
+    field: "diff_weight",
+    label: "工差重量"
+  },
+  {
+    field: "diff_fee",
+    label: "工差金额"
+  },
+  {
+    field: "branch",
+    label: "公司属性"
+  },
+  {
+    field: "sendType",
+    label: "分公司"
+  },
+  {
+    field: "cgdNo",
+    label: "采购单号"
+  },
+  {
+    field: "thNum",
+    label: "退货数量"
+  },
+  {
+    field: "sendType",
+    label: "退货金额"
+  },
+  {
+    field: "th_fee",
+    label: "发货方式"
   }
 ];

+ 27 - 21
src/views/InvoiceSales/capitalPool/detail.vue

@@ -60,28 +60,34 @@ onMounted(() => initalData());
 
 <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>
+    <ElTabs>
+      <ElTabPane label="详情">
+        <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>
+          <!-- 审核 -->
+          <ElCollapseItem
+            name="2"
+            v-if="currentProcess"
+            :title="currentProcess.title"
+          >
+            <component
+              :is="currentProcess.component"
+              @change-status="requesetCapitalStatus"
+            />
+          </ElCollapseItem>
+        </ElCollapse>
+      </ElTabPane>
+
+      <ElTabPane label="审批记录" />
+    </ElTabs>
   </div>
 </template>
 

+ 12 - 4
src/views/InvoiceSales/invoiceApply/components/addEditForm.vue

@@ -19,6 +19,7 @@ const TYPE = ref<FROM_TYPE>(FROM_TYPE.order);
 const modelRef = ref<InstanceType<typeof OrderDialog>>(null);
 const editOrderRef = ref<InstanceType<typeof EditOrder>>(null);
 const formRef = ref<InstanceType<typeof ElForm>>(null);
+const mapSequenceNoToInvfee = ref<Record<string, string>>({});
 const loading = ref(false);
 const orderList = ref([]);
 
@@ -103,9 +104,7 @@ function handleShowEditModal(index, row: any) {
   });
 }
 
-function handleEdit({ index, data }) {
-  console.log(index, data);
-  const { inv_fee } = data;
+function handleEdit({ index, inv_fee }) {
   orderList.value[index].inv_fee = inv_fee;
 }
 
@@ -130,6 +129,11 @@ async function companyNo_change(buy: boolean) {
 
 function handleAddOrder(list) {
   orderList.value = list;
+
+  list.forEach(({ sequenceNo, inv_fee }) => {
+    mapSequenceNoToInvfee.value[sequenceNo] = inv_fee;
+    console.log(sequenceNo, inv_fee);
+  });
 }
 </script>
 
@@ -234,7 +238,11 @@ function handleAddOrder(list) {
               label="购买方公司名称"
               width="160"
             />
-            <el-table-column prop="inv_fee" label="开票金额" width="110" />
+            <el-table-column label="开票金额" width="110">
+              <template #="{ row }">{{
+                mapSequenceNoToInvfee[row.sequenceNo]
+              }}</template>
+            </el-table-column>
 
             <el-table-column>
               <template #header>

+ 3 - 1
src/views/InvoiceSales/invoiceApply/components/edit-order.vue

@@ -13,9 +13,11 @@ const inv_fee = ref("");
 
 function handleSave() {
   emit("save-btn-click", {
-    inv_fee: unref(data),
+    data: unref(data),
     index: edit_idx
   });
+
+  visible.value = false;
 }
 
 defineExpose({

+ 1 - 0
src/views/InvoiceSales/invoiceApply/index.vue

@@ -11,6 +11,7 @@ import { useRouter } from "vue-router";
 import { responseHandle } from "/@/utils/responseHandle";
 import IntervalTime from "/@/components/IntervalTime";
 import { useUserStoreHook } from "/@/store/modules/user";
+import NoAuth from "/@/components/NoAuth/NoAuth.vue";
 const { logout } = useNav();
 defineOptions({
   name: "invoiceApply"

+ 24 - 18
src/views/InvoiceSales/refund/detail.vue

@@ -60,25 +60,31 @@ onMounted(() => initalData());
     <!-- 创建退款单 -->
     <CreateRefund v-if="isCreate" />
 
-    <!-- 详情 -->
-    <ElCollapse v-else v-model="collapses">
-      <!-- 退款单详情 -->
-      <ElCollapseItem title="退款单详情" name="1">
-        <RefundDetail :detail="refundDetail" />
-      </ElCollapseItem>
+    <ElTabs v-else>
+      <ElTabPane label="详情">
+        <!-- 详情 -->
+        <ElCollapse v-model="collapses">
+          <!-- 退款单详情 -->
+          <ElCollapseItem title="退款单详情" name="1">
+            <RefundDetail :detail="refundDetail" />
+          </ElCollapseItem>
 
-      <!-- 审核 -->
-      <ElCollapseItem
-        name="2"
-        v-if="currentProcess"
-        :title="currentProcess.title"
-      >
-        <component
-          :is="currentProcess.component"
-          @change-status="requesetRefundStatus"
-        />
-      </ElCollapseItem>
-    </ElCollapse>
+          <!-- 审核 -->
+          <ElCollapseItem
+            name="2"
+            v-if="currentProcess"
+            :title="currentProcess.title"
+          >
+            <component
+              :is="currentProcess.component"
+              @change-status="requesetRefundStatus"
+            />
+          </ElCollapseItem>
+        </ElCollapse>
+      </ElTabPane>
+
+      <ElTabPane label="审批记录" />
+    </ElTabs>
   </div>
 </template>
 

+ 12 - 59
src/views/InvoiceSales/returnTicket/components/approval-process/approval-pending.vue

@@ -1,26 +1,21 @@
 <script setup lang="ts">
-import { ElForm, ElMessage, UploadProps } from "element-plus";
+import { ElForm } from "element-plus";
 import { reactive, ref, watchEffect } from "vue";
-import { httpImageUpload, baseUrl } from "/@/api/other";
-import { useResponseHandle } from "/@/hooks";
-import { useUserStore } from "/@/store/modules/user";
 
 const emit = defineEmits(["changeStatus"]);
 
 const formData = reactive({
-  return_img: "",
+  return_type: "",
   status: "",
   remark: ""
 });
 
-const types = ["image/png", "image/jpg", "image/bmp", "image/jpeg"];
-
 const rules = reactive({
-  return_img: [
+  return_type: [
     {
       required: true,
       trigger: "change",
-      message: "请上传退款回执"
+      message: "退票方式"
     }
   ],
   status: [
@@ -40,36 +35,6 @@ const rules = reactive({
 });
 
 const formRef = ref<InstanceType<typeof ElForm>>(null);
-const responseHandle = useResponseHandle();
-const userStore = useUserStore();
-
-const onBeforeReturnImageUpload: UploadProps["beforeUpload"] = ({
-  type,
-  size
-}) => {
-  if (!types.includes(type)) {
-    ElMessage.error("请上传jpg.png.bmp.jpeg类型图片");
-    return false;
-  }
-
-  if (size / 1024 / 1024 > 1) {
-    ElMessage.error("图片大小超过1M");
-    return false;
-  }
-};
-
-const handleRequeset: UploadProps["httpRequest"] = async ({ file }) => {
-  const _formData = new FormData();
-  _formData.append("img", file);
-  _formData.append("token", userStore.token);
-  const { message, code, data } = await httpImageUpload(_formData);
-
-  responseHandle({
-    message,
-    code,
-    handler: () => (formData.return_img = baseUrl + "/" + data[0].url)
-  });
-};
 
 const handlePaymentReceipt = () => {
   formRef.value.validate(isValid => isValid && emit("changeStatus", formData));
@@ -90,32 +55,20 @@ watchEffect(() => {
   >
     <el-form-item label="审批状态" prop="status" w-400px>
       <el-select w-400px v-model="formData.status">
-        <el-option label="通过" value="2" />
+        <el-option label="通过" value="1" />
         <el-option label="不通过" value="3" />
       </el-select>
     </el-form-item>
 
-    <el-form-item label="备注" prop="remark" w-400px>
-      <el-input type="textarea" v-model="formData.remark" />
+    <el-form-item label="退票方式" prop="return_type">
+      <el-select w-300px v-model="formData.return_type">
+        <el-option value="1" label="金税" />
+        <el-option value="2" label="线下" />
+      </el-select>
     </el-form-item>
 
-    <el-form-item label="退款回执" prop="return_img">
-      <div>
-        <el-upload
-          class="upload"
-          :before-upload="onBeforeReturnImageUpload"
-          :http-request="handleRequeset"
-          :show-file-list="false"
-        >
-          <img
-            class="avatar"
-            v-if="formData.return_img"
-            :src="formData.return_img"
-          />
-          <div class="text" v-else>点击上传</div>
-        </el-upload>
-        <span text-sm>大小:小于1M; 尺寸:100*100; 类型:jpg.png.bmp.jpeg</span>
-      </div>
+    <el-form-item label="备注" prop="remark" w-400px>
+      <el-input type="textarea" v-model="formData.remark" />
     </el-form-item>
 
     <el-form-item w-full flex justify-end>

+ 1 - 1
src/views/InvoiceSales/returnTicket/components/approval-process/index.ts

@@ -2,7 +2,7 @@ import ApprovalPending from "./approval-pending.vue";
 
 export const approval_process = {
   "0": {
-    title: "待审批",
+    title: "待财务审核",
     component: ApprovalPending
   }
 };

+ 2 - 2
src/views/InvoiceSales/returnTicket/components/refund-detail/index.vue

@@ -1,6 +1,6 @@
 <script setup lang="ts">
 import BasicDescriptions from "/@/components/BasicDescriptions";
-import { refund_detail_columns } from "../../config/configs";
+import { inv_return_columns } from "/@/utils/details/inv-return";
 
 defineProps<{
   detail: any;
@@ -10,6 +10,6 @@ defineProps<{
   <BasicDescriptions
     :data="detail"
     :col-number="3"
-    :columns="refund_detail_columns"
+    :columns="inv_return_columns"
   />
 </template>

+ 45 - 45
src/views/InvoiceSales/returnTicket/config/content.config.ts

@@ -65,51 +65,51 @@ const contentConfig: ContentConfig = {
   title: "退票申请管理",
   powers: ["001", "002", "003", "004", "005", "006", "007", "008"],
   columns,
-  // mockData: [
-  //   {
-  //     buyer_title: "泰康人寿保险有限责任公司大连分公司",
-  //     buyer_code: "91210200736420120U",
-  //     buyer_addr: "辽宁省大连市中山区五五路4A号上方港景A座32层",
-  //     buyer_mobile: "0411-82800287",
-  //     buyer_bank: "中国建设银行大连人民路支行",
-  //     buyer_bankNo: "21201500250053000712",
-  //     seller_title: "北京万宇恒通国际科贸有限公司",
-  //     seller_code: "91110113MA004JNJ28",
-  //     seller_addr: "北京市顺义区信中街12号院8号楼-1至4层101内三层309室",
-  //     seller_mobile: "010-69464815",
-  //     seller_bank: "中国农业银行股份有限公司北京空港支行",
-  //     seller_bankNo: "11120901040013561",
-  //     voider: " ",
-  //     payee: " ",
-  //     drawer: " ",
-  //     reviewer: " ",
-  //     ownerPlace: " ",
-  //     inv_value: "650.00",
-  //     inv_out: "GS2203161855277894",
-  //     inv_in: "KH2206091605154719",
-  //     inv_type: 1,
-  //     open_type: 2,
-  //     is_ticket: 0,
-  //     email: "",
-  //     winv_fee: "650.00",
-  //     ainv_fee: "0.00",
-  //     post_fee: "26.00",
-  //     post_company: "顺丰快递",
-  //     post_code: "SF12321321312312",
-  //     id: 1,
-  //     returnCode: "RIN2207271638256857",
-  //     invNo: "INV2207271542474795",
-  //     return_reason: "开多票",
-  //     return_type: 1,
-  //     remark: "退票",
-  //     status: 2,
-  //     red_inv: "hc1213213321",
-  //     apply_id: 44,
-  //     apply_name: "吴广广",
-  //     addtime: "2022-07-27 16:38:25",
-  //     updatetime: "2022-07-27 16:47:31"
-  //   }
-  // ],
+  mockData: [
+    {
+      buyer_title: "泰康人寿保险有限责任公司大连分公司",
+      buyer_code: "91210200736420120U",
+      buyer_addr: "辽宁省大连市中山区五五路4A号上方港景A座32层",
+      buyer_mobile: "0411-82800287",
+      buyer_bank: "中国建设银行大连人民路支行",
+      buyer_bankNo: "21201500250053000712",
+      seller_title: "北京万宇恒通国际科贸有限公司",
+      seller_code: "91110113MA004JNJ28",
+      seller_addr: "北京市顺义区信中街12号院8号楼-1至4层101内三层309室",
+      seller_mobile: "010-69464815",
+      seller_bank: "中国农业银行股份有限公司北京空港支行",
+      seller_bankNo: "11120901040013561",
+      voider: " ",
+      payee: " ",
+      drawer: " ",
+      reviewer: " ",
+      ownerPlace: " ",
+      inv_value: "650.00",
+      inv_out: "GS2203161855277894",
+      inv_in: "KH2206091605154719",
+      inv_type: 1,
+      open_type: 2,
+      is_ticket: 0,
+      email: "",
+      winv_fee: "650.00",
+      ainv_fee: "0.00",
+      post_fee: "26.00",
+      post_company: "顺丰快递",
+      post_code: "SF12321321312312",
+      id: 1,
+      returnCode: "RIN2207271638256857",
+      invNo: "INV2207271542474795",
+      return_reason: "开多票",
+      return_type: 1,
+      remark: "退票",
+      status: 2,
+      red_inv: "hc1213213321",
+      apply_id: 44,
+      apply_name: "吴广广",
+      addtime: "2022-07-27 16:38:25",
+      updatetime: "2022-07-27 16:47:31"
+    }
+  ],
   apis: {
     httpList,
     httpAdd

+ 64 - 20
src/views/InvoiceSales/returnTicket/detail.vue

@@ -13,7 +13,45 @@ const collapses = ref(["1", "2"]);
 const returnCode = computed(() => query.id);
 
 const isCreate = computed(() => !returnCode.value);
-const refundDetail = ref<Record<string, string>>({});
+
+//TODO:delete
+const refundDetail = ref<Record<string, string>>({
+  id: 1,
+  returnCode: "RIN2207271638256857",
+  invNo: "INV2207271542474795",
+  return_reason: "开多票",
+  return_type: "1",
+  remark: "退票",
+  status: "0",
+  red_inv: "hc1213213321",
+  apply_id: 44,
+  apply_name: "吴广广",
+  addtime: "2022-07-27 16:38:25",
+  updatetime: "2022-07-27 16:47:31",
+  inv_out: "GS2203161855277894",
+  inv_value: "650.00",
+  inv_apply_id: 44,
+  inv_apply_name: "吴广广",
+  inv_type: "1",
+  open_type: "2",
+  is_ticket: "0",
+  email: "",
+  post_code: "SF12321321312312",
+  post_company: "顺丰快递",
+  buyer_title: "泰康人寿保险有限责任公司大连分公司",
+  buyer_code: "91210200736420120U",
+  buyer_addr: "辽宁省大连市中山区五五路4A号上方港景A座32层",
+  buyer_mobile: "0411-82800287",
+  buyer_bank: "中国建设银行大连人民路支行",
+  buyer_bankNo: "21201500250053000712",
+  seller_title: "北京万宇恒通国际科贸有限公司",
+  seller_addr: "北京市顺义区信中街12号院8号楼-1至4层101内三层309室",
+  seller_code: "91110113MA004JNJ28",
+  seller_mobile: "010-69464815",
+  seller_bank: "中国农业银行股份有限公司北京空港支行",
+  seller_bankNo: "11120901040013561"
+});
+
 const responseHandle = useResponseHandle();
 
 //映射当前审批流程
@@ -51,32 +89,38 @@ async function requesetRetrunTicketStatus(otherParmas) {
 
 function initalData() {
   if (isCreate.value) return;
-  requesetRefundDetail();
+  // requesetRefundDetail();
 }
 
 onMounted(() => initalData());
 </script>
 <template>
   <div class="refund__content" bg-white>
-    <!-- 详情 -->
-    <ElCollapse v-model="collapses">
-      <!-- 退票单详情 -->
-      <ElCollapseItem title="退票单详情" name="1">
-        <RefundDetail :detail="refundDetail" />
-      </ElCollapseItem>
+    <ElTabs>
+      <ElTabPane label="详情">
+        <!-- 详情 -->
+        <ElCollapse v-model="collapses">
+          <!-- 退票单详情 -->
+          <ElCollapseItem title="退票单详情" name="1">
+            <RefundDetail :detail="refundDetail" />
+          </ElCollapseItem>
+
+          <!-- 审核 -->
+          <ElCollapseItem
+            name="2"
+            v-if="currentProcess"
+            :title="currentProcess.title"
+          >
+            <component
+              :is="currentProcess.component"
+              @change-status="requesetRetrunTicketStatus"
+            />
+          </ElCollapseItem>
+        </ElCollapse>
+      </ElTabPane>
 
-      <!-- 审核 -->
-      <ElCollapseItem
-        name="2"
-        v-if="currentProcess"
-        :title="currentProcess.title"
-      >
-        <component
-          :is="currentProcess.component"
-          @change-status="requesetRetrunTicketStatus"
-        />
-      </ElCollapseItem>
-    </ElCollapse>
+      <ElTabPane label="审批记录" />
+    </ElTabs>
   </div>
 </template>
 

+ 9 - 10
src/views/InvoiceSales/sheetOrderPool/config/content.config.ts

@@ -1,5 +1,5 @@
 import { ContentConfig } from "/@/components/PageContent";
-import { httpList } from "/@/api/parameter/clients";
+import { httpList } from "/@/api/InvoiceSales/sheetOrderPool";
 
 import dayjs from "dayjs";
 
@@ -16,20 +16,20 @@ const columns = [
     hide: ({ checkList }) => !checkList.includes("序号列")
   },
   {
-    label: "客户编号",
-    prop: "companyNo"
+    label: "确认单编号",
+    prop: "sequenceNo"
   },
   {
-    label: "客户名称",
-    prop: "companyName"
+    label: "确认单名称",
+    prop: "name"
   },
   {
-    label: "归属集团",
-    prop: "parent"
+    label: "销售员",
+    prop: "ownerName"
   },
   {
-    label: "联系人",
-    prop: "contactor"
+    label: "平台名称",
+    prop: "department"
   },
   {
     label: "创建时间",
@@ -48,7 +48,6 @@ const columns = [
 const contentConfig: ContentConfig = {
   title: "确认单公海池",
   powers: ["001", "002", "003", "004", "005", "006", "007", "008"],
-  notReuqiredInit: true,
   columns,
   apis: {
     httpList

+ 1 - 1
src/views/InvoiceSales/sheetOrderPool/index.vue

@@ -44,7 +44,7 @@ const {
 
 onMounted(
   () =>
-    (contentConfig.powers = useUserStoreHook().getMenuActions("returnTicket"))
+    (contentConfig.powers = useUserStoreHook().getMenuActions("sheetOrderPool"))
 );
 </script>
 

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

@@ -32,7 +32,7 @@ onMounted(() => requesetProcessList());
     <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="px-1 hover:bg-#f7f7f7 hover:color-blue cursor-pointer duration-200 rounded"
       :class="{ 'is-active': currentProcess.id === item.id }"
       @click="() => handleChangeProcess(item)"
       :key="item.name"

+ 7 - 5
src/views/search/standBook/components/anchor.vue

@@ -34,9 +34,12 @@ function isActive(title: string) {
     if (isPrev) prevTop = top;
   });
 
+  if (currentIndex === 0)
+    return scrollTop.value >= 0 && scrollTop.value < nextTop;
+
   return (
-    scrollTop.value >= prevTop &&
-    scrollTop.value <= nextTop &&
+    scrollTop.value > prevTop &&
+    scrollTop.value < nextTop &&
     scrollTop.value >= currentTop
   );
 }
@@ -45,9 +48,7 @@ function isActive(title: string) {
 <template>
   <ul fixed p-5 text-sm font-bold>
     <li
-      hover:text-blue
-      cursor-pointer
-      duration-200ms
+      class="hover:text-blue hover:bg-#f7f7f7 cursor-pointer duration-200ms p-1.5 m-1 rounded"
       :class="{ 'is-active': isActive(title) }"
       v-for="([title], index) in map.entries()"
       @click="() => toDetailPosition(title)"
@@ -61,5 +62,6 @@ function isActive(title: string) {
 <style lang="scss" scoped>
 .is-active {
   color: rgba(96, 165, 250, 0.9);
+  background-color: #f7f7f7;
 }
 </style>

+ 1 - 1
src/views/search/standBook/components/search-modal.vue

@@ -31,7 +31,7 @@ defineExpose({
 
 <template>
   <el-dialog v-model="visible" title="筛选条件汇总" center width="1100px">
-    <div flex flex-wrap justify-start gap-5>
+    <div class="flex flex-wrap justify-between gap-3">
       <div v-for="key in Object.keys(QUERY_MAP)" :key="key">
         <el-input
           v-model="data[key]"

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

@@ -14,6 +14,7 @@ export function useDetail(props: DetailProps) {
   const data = ref<Record<string, string>>({});
   const responseHandle = useResponseHandle();
   const defaultRef = ref<InstanceType<typeof BasicDescriptions>>(null);
+  const hidden = ref(false);
   const emit = getCurrentInstance().emit;
 
   const getOffsetTop = () => {
@@ -50,12 +51,14 @@ export function useDetail(props: DetailProps) {
           top: getOffsetTop() - 134,
           title: props.title
         };
+
         nextTick(() => emit("map-offset-top", mapOffsetTop));
-      }, 200)
+      }, 100)
   );
 
   return {
     defaultRef,
+    hidden,
     data
   };
 }

+ 9 - 2
src/views/search/standBook/config/query.ts

@@ -30,10 +30,14 @@ 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";
 
+//开票申请
+import { httpDetail as httpInvOpenInfo } from "/@/api/InvoiceSales/invoiceApply";
+import InvOpen from "../details/inv-open.vue";
+
 export const QUERY_MAP = {
   qrdNo: {
     query: "销售订单单号",
@@ -110,7 +114,10 @@ export const QUERY_MAP = {
   invNo: {
     query: "开票申请编号",
     detail: "开票申请详情",
-    api: ""
+    component: InvOpen,
+    responseKey: "invNo",
+    requesetProp: "invNo",
+    api: httpInvOpenInfo
   },
   companyNo: {
     query: "业务公司编号",

+ 11 - 8
src/views/search/standBook/detail.vue

@@ -64,12 +64,21 @@ async function initalPageData() {
   });
 }
 
+function handleSetMapDetailToTop(top, title) {
+  const detail = mapDetailToTop.value.get(title);
+
+  mapDetailToTop.value.set(title, {
+    ...detail,
+    top
+  });
+}
+
 onMounted(() => initalPageData());
 </script>
 
 <template>
   <div class="main flex h-full">
-    <div bg-white w-230px>
+    <div bg-white min-w-230px>
       <Anchor :map="mapDetailToTop" />
     </div>
 
@@ -88,13 +97,7 @@ onMounted(() => initalPageData());
             :value="detail.value"
             :title="detail.title"
             @map-offset-top="
-              ({ top, title }) => {
-                const detail = mapDetailToTop.get(title);
-                mapDetailToTop.set(title, {
-                  ...detail,
-                  top
-                });
-              }
+              ({ top, title }) => handleSetMapDetailToTop(top, title)
             "
           />
         </ElCollapseItem>

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

@@ -0,0 +1,20 @@
+<script setup lang="ts">
+import { useDetail } from "../config/detail";
+import { detailProps } from "../types";
+import { inv_open_columns } from "/@/utils/details/inv-open";
+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_open_columns"
+    :col-number="3"
+  />
+</template>

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

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

+ 57 - 47
src/views/search/standBook/index.vue

@@ -9,6 +9,8 @@ import { DEAFULT_QUERY_FORM, DEFAULT_QUERY_PAGE } from "./config/query";
 import { useRouter } from "vue-router";
 import { useResponseHandle } from "/@/hooks";
 import SearchModal from "./components/search-modal.vue";
+import { useUserStoreHook } from "/@/store/modules/user";
+import PagePower from "/@/components/PagePower/PagePower.vue";
 
 defineOptions({
   name: "standBook"
@@ -22,6 +24,7 @@ const searchModalRef = ref<InstanceType<typeof SearchModal>>(null);
 
 const loading = ref(false);
 const dataList = ref<Array<Record<string, string>>>([]);
+const powers = ref<Array<string>>([]);
 
 const formData = ref({ ...DEAFULT_QUERY_FORM });
 const pagination = reactive<PaginationProps>({ ...DEFAULT_QUERY_PAGE });
@@ -76,57 +79,64 @@ async function onSearch() {
   loading.value = false;
 }
 
-onMounted(() => onSearch());
+onMounted(() => {
+  const p = useUserStoreHook().getMenuActions("standBook");
+  powers.value = p;
+  if (p.some(i => i === "001")) onSearch();
+});
 </script>
 
 <template>
   <div class="main">
-    <TableProBar
-      title="发票申请管理"
-      :loading="loading"
-      :dataList="dataList"
-      @refresh="onSearch"
-    >
-      <template #buttons>
-        <el-button
-          type="primary"
-          :icon="useRenderIcon('add')"
-          @click="() => searchModalRef.onDisplay()"
-        >
-          添加搜索条件
-        </el-button>
-
-        <el-button @click="handleResetQuery">重置查询条件</el-button>
-      </template>
-      <template v-slot="{ size, checkList }">
-        <PureTable
-          border
-          align="left"
-          showOverflowTooltip
-          table-layout="auto"
-          :size="size"
-          :data="dataList"
-          :columns="columns"
-          :checkList="checkList"
-          :pagination="pagination"
-          :paginationSmall="size === 'small' ? true : false"
-          :header-cell-style="{ background: '#fafafa', color: '#606266' }"
-          @size-change="handleSizeChange"
-          @current-change="handleCurrentChange"
-        >
-          <template #operation="{ row }">
-            <el-button
-              class="reset-margin"
-              link
-              type="primary"
-              :size="size"
-              @click="() => toDetail(row.id)"
-              :icon="useRenderIcon('eye-view')"
-            />
-          </template>
-        </PureTable>
-      </template>
-    </TableProBar>
+    <PagePower :is-show="powers.some(i => i === '001')">
+      <TableProBar
+        title="发票申请管理"
+        :loading="loading"
+        :dataList="dataList"
+        @refresh="onSearch"
+      >
+        <template #buttons>
+          <el-button
+            type="primary"
+            :icon="useRenderIcon('add')"
+            @click="() => searchModalRef.onDisplay()"
+          >
+            添加搜索条件
+          </el-button>
+
+          <el-button @click="handleResetQuery">重置查询条件</el-button>
+        </template>
+        <template v-slot="{ size, checkList }">
+          <PureTable
+            border
+            align="left"
+            showOverflowTooltip
+            table-layout="auto"
+            :size="size"
+            :data="dataList"
+            :columns="columns"
+            :checkList="checkList"
+            :pagination="pagination"
+            :paginationSmall="size === 'small' ? true : false"
+            :header-cell-style="{ background: '#fafafa', color: '#606266' }"
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+          >
+            <template #operation="{ row }">
+              <el-button
+                v-if="powers.some(i => i === '007')"
+                class="reset-margin"
+                link
+                type="primary"
+                :size="size"
+                @click="() => toDetail(row.id)"
+                :icon="useRenderIcon('eye-view')"
+              />
+            </template>
+          </PureTable>
+        </template>
+      </TableProBar>
+    </PagePower>
 
     <SearchModal ref="searchModalRef" @confirm-btn-click="handleQueryChange" />
   </div>