Kaynağa Gözat

fix:退票 金税

snow 2 yıl önce
ebeveyn
işleme
43c65085a7

+ 24 - 11
src/views/InvoiceSaleSettings/basic-settings.vue

@@ -1,6 +1,6 @@
 <script setup lang="ts">
-import { computed, reactive, ref, watchEffect } from "vue";
 import { ElForm } from "element-plus";
+import { computed, reactive, ref, watchEffect, nextTick } from "vue";
 import { cost_rules, inv_tag, add_tax } from "./commodityCost/config/configs";
 import RemoteSelect from "/@/components/RemoteSelect";
 import { useResponseHandle } from "/@/hooks";
@@ -13,8 +13,6 @@ import BasicDescriptions, {
 import { httpCatlist, httpAdd } from "/@/api/InvoiceSaleSettings/commodityCost";
 const remoteSelectRef = ref<InstanceType<typeof RemoteSelect>>(null);
 
-let cachecode = "";
-
 const props = defineProps<{
   title: string;
   detail: any;
@@ -49,8 +47,7 @@ function handleSave() {
 
     const { code, message } = await httpAdd({
       spuCode: spuCode.value,
-      ...formData,
-      cat_code: formData.cat_name ? formData.cat_code : cachecode
+      ...formData
     });
 
     responseHandle({
@@ -62,7 +59,6 @@ function handleSave() {
 }
 
 function handleSelectCategory(category) {
-  console.log(category);
   if (!category) {
     formData.tax = "";
     formData.cat_name = "";
@@ -94,15 +90,32 @@ watchEffect(() => {
 
 watchEffect(() => {
   if (!props.detail) return;
-  const { good_name, inv_good_name, inv_tax, inv_cat_code } = props.detail;
+
+  const {
+    good_name,
+    inv_good_name,
+    inv_tax,
+    inv_cat_code,
+    is_discount,
+    inv_tag,
+    addTax
+  } = props.detail;
 
   formData.inv_good_name = inv_good_name ? inv_good_name : good_name;
   formData.tax = inv_tax ? inv_tax * 100 + "%" : "";
+  formData.is_discount = String(is_discount);
 
-  remoteSelectRef.value &&
-    (remoteSelectRef.value as any).initalData({
-      cat_code: inv_cat_code
-    });
+  nextTick(() => {
+    formData.inv_tag = String(inv_tag);
+    formData.addTax = addTax;
+  });
+
+  if (inv_cat_code) {
+    remoteSelectRef.value &&
+      (remoteSelectRef.value as any).initalData({
+        cat_code: inv_cat_code
+      });
+  }
 });
 </script>
 

+ 2 - 2
src/views/InvoiceSaleSettings/commodityCost/config/configs.ts

@@ -51,7 +51,7 @@ export const good_detail_columns = [
     label: "是否库存",
     render(stock) {
       return h(ElTag, null, {
-        default: () => stock_type.find(s => s.value === stock)?.label
+        default: () => stock_type.find(s => s.value === String(stock))?.label
       });
     }
   },
@@ -90,7 +90,7 @@ export const good_detail_columns = [
     label: "是否关联开票类目",
     render(status) {
       return h(ElTag, null, {
-        default: () => good_type.find(s => s.value === status)?.label
+        default: () => good_type.find(s => s.value === String(status))?.label
       });
     }
   },

+ 2 - 2
src/views/InvoiceSaleSettings/consultingCost/config/configs.ts

@@ -54,7 +54,7 @@ export const good_detail_columns = [
     label: "是否库存",
     render(stock) {
       return h(ElTag, null, {
-        default: () => stock_type.find(s => s.value === stock)?.label
+        default: () => stock_type.find(s => s.value === String(stock))?.label
       });
     }
   },
@@ -95,7 +95,7 @@ export const good_detail_columns = [
     label: "是否关联开票类目",
     render(status) {
       return h(ElTag, null, {
-        default: () => good_type.find(s => s.value === status)?.label
+        default: () => good_type.find(s => s.value === String(status))?.label
       });
     }
   },

+ 1 - 0
src/views/InvoiceSales/returnTicket/components/approval-pending.vue

@@ -134,6 +134,7 @@ const handlePaymentReceipt = () => {
           v-model="formData.return_type"
           placeholder="请选择退票方式"
         >
+          <el-option value="1" label="金税" />
           <el-option value="2" label="线下" />
         </el-select>
       </el-form-item>

+ 74 - 75
src/views/supply/ticketReturn/components/invoice-form.vue

@@ -1,13 +1,13 @@
 <script setup lang="ts">
 import { computed, ref, watch } from "vue";
 import { dayjs, ElForm, ElInput, ElMessage, UploadProps } from "element-plus";
-import { ticketFormItems } from "../config/_details";
-import { invoceRules, invoceRules_Electronics } from "../config/_rules";
 import { useResponseHandle } from "/@/hooks/core/useAsync";
 import { httpImageUpload, baseUrl } from "/@/api/other";
 import { useUserStore } from "/@/store/modules/user";
-import { inv_type_list } from "/@/utils/status";
+import { ticketFormItems } from "../config/_details";
 import { INPUT_MAX_LENGTH } from "/@/utils/global";
+import { inv_type_list } from "/@/utils/status";
+import { invoceRules } from "../config/_rules";
 
 const emit = defineEmits(["change"]);
 
@@ -23,21 +23,14 @@ const rules = ref({ ...invoceRules });
 const formRef = ref<InstanceType<typeof ElForm>>(null);
 const showScanInput = computed(() => invType.value === "1");
 const scanInputValue = ref("");
-
 const formData = ref<Record<string, string>>({
   currentValue: ""
 });
 
 const userStore = useUserStore();
 const responseHandle = useResponseHandle();
-
-const formItems = computed(() => {
-  if (is_Electronics.value) {
-    return ticketFormItems["electronics"] || [];
-  }
-
-  return ticketFormItems[invType.value] || [];
-});
+const electronicsHiddens = ["invCode", "checkNumber"];
+const formItems = computed(() => ticketFormItems[invType.value] || []);
 
 //图片上传前判断类型大小尺寸
 const onBeforeReturnImageUpload: UploadProps["beforeUpload"] = ({
@@ -101,11 +94,8 @@ function handleScanKeydown(evt: KeyboardEvent) {
   let [_, invoiceType, ...chunks] = scanInputValue.value.split(",");
   const [invCode, invNumber, subtotal_amount, open_time, checkNumber] = chunks;
 
-  const allInvState = ["01", "04", "20", "10"];
-  const is_Electronics = !allInvState.includes(invoiceType);
-
-  rules.value = is_Electronics ? invoceRules_Electronics : invoceRules;
-  invoiceType = is_Electronics ? "electronics" : invoiceType;
+  // rules.value = is_Electronics ? invoceRules_Electronics : invoceRules;
+  // invoiceType = is_Electronics ? "electronics" : invoiceType;
 
   let _open_time = "";
   if (open_time) {
@@ -166,11 +156,9 @@ watch(
   newVal => {
     const newFormData: Record<string, string> = {};
     newFormData.payNo = formData.value.payNo;
-
     newVal.forEach(item => {
       if (item.prop !== "payNo") newFormData[item.prop] = "";
     });
-
     formData.value = newFormData;
   }
 );
@@ -182,6 +170,8 @@ const disabledDate = time => {
 defineExpose({
   onDisplay: () => (visible.value = true)
 });
+
+electronicsHiddens;
 </script>
 
 <template>
@@ -211,63 +201,72 @@ defineExpose({
         />
       </el-form-item>
 
-      <el-form-item
-        v-for="(item, index) in formItems"
-        :label="item.label"
-        :prop="item.prop"
-        :key="index"
-      >
-        <template v-if="item.prop === 'invoiceType'">
-          <el-select
-            v-model="formData[item.prop]"
-            placeholder="请选择发票类型"
-            w-750px
-          >
-            <el-option
-              v-for="(type, index) in inv_type_list"
-              :label="type.label"
-              :value="type.hwy_value"
-              :key="index"
-            />
-
-            <el-option label="电子发票(增值税专用发票)" value="31" />
-            <el-option label="电子发票(增值税普通发票)" value="32" />
-          </el-select>
-        </template>
-
-        <template v-else-if="item.prop === 'inv_img'">
-          <div w-full>
-            <el-upload
-              class="upload-demo"
-              v-model:file-list="fileList"
-              :before-upload="onBeforeReturnImageUpload"
-              :before-remove="handleRemove"
-              :http-request="handleRequeset"
-              multiple
-            >
-              <el-button type="primary">上传图片</el-button>
-            </el-upload>
-          </div>
-        </template>
-
-        <template v-else-if="item.prop === 'open_time'">
-          <el-date-picker
-            v-model="formData[item.prop]"
-            :disabled-date="disabledDate"
-            value-format="YYYY-MM-DD HH:mm:ss"
-            placeholder="请输入开票日期"
-          />
-        </template>
-
-        <template v-else>
-          <el-input v-model="formData[item.prop]" v-bind="INPUT_MAX_LENGTH" />
-        </template>
-      </el-form-item>
-
-      <el-form-item class="justify-end flex w-full">
-        <el-button type="primary" :loading="loading" @click="handleSave"
-          >保存</el-button
+      <template v-for="(item, index) in formItems" :key="index">
+        <el-form-item
+          v-if="
+            !is_Electronics ||
+            (is_Electronics && !electronicsHiddens.includes(item.prop))
+          "
+          :label="
+            is_Electronics && item.prop === 'subtotal_amount'
+              ? '税后金额'
+              : item.label
+          "
+          :prop="item.prop"
         >
+          <template v-if="item.prop === 'invoiceType'">
+            <el-select
+              v-model="formData[item.prop]"
+              placeholder="请选择发票类型"
+              w-750px
+            >
+              <el-option
+                v-for="(type, index) in inv_type_list"
+                :label="type.label"
+                :value="type.hwy_value"
+                :key="index"
+              />
+              <el-option label="电子发票(增值税专用发票)" value="31" />
+              <el-option label="电子发票(增值税普通发票)" value="32" />
+            </el-select>
+          </template>
+
+          <template v-else-if="item.prop === 'inv_img'">
+            <div w-full>
+              <el-upload
+                class="upload-demo"
+                v-model:file-list="fileList"
+                :before-upload="onBeforeReturnImageUpload"
+                :before-remove="handleRemove"
+                :http-request="handleRequeset"
+                multiple
+              >
+                <el-button type="primary">上传图片</el-button>
+              </el-upload>
+            </div>
+          </template>
+
+          <template v-else-if="item.prop === 'open_time'">
+            <el-date-picker
+              v-model="formData[item.prop]"
+              :disabled-date="disabledDate"
+              value-format="YYYY-MM-DD HH:mm:ss"
+              placeholder="请输入开票日期"
+            />
+          </template>
+
+          <template v-else>
+            <el-input v-model="formData[item.prop]" v-bind="INPUT_MAX_LENGTH" />
+          </template>
+        </el-form-item>
+      </template>
+
+      <el-form-item>
+        <div class="justify-end flex w-full">
+          <el-button type="primary" :loading="loading" @click="handleSave"
+            >保存</el-button
+          >
+        </div>
       </el-form-item>
     </el-form>
   </el-dialog>

+ 19 - 1
src/views/supply/ticketReturn/components/invoice-table.vue

@@ -50,7 +50,25 @@ function handleDelete({ $index }) {
         />
       </template>
     </el-table-column>
-    <el-table-column label="税前金额" prop="subtotal_amount" />
+    <el-table-column label="税前金额" prop="subtotal_amount">
+      <template #="{ row }">
+        <span
+          v-if="
+            String(row.invoiceType) !== '31' && String(row.invoiceType) !== '32'
+          "
+          >{{ row.subtotal_amount }}</span
+        >
+        <span v-else />
+      </template>
+    </el-table-column>
+    <el-table-column label="税后金额" prop="subtotal_amount">
+      <template #="{ row }">
+        <span v-if="row.invoiceType === '31' || row.invoiceType === '32'">{{
+          row.subtotal_amount
+        }}</span>
+        <span v-else />
+      </template>
+    </el-table-column>
 
     <el-table-column label="开票日期" prop="open_time" show-overflow-tooltip />
 

+ 4 - 0
src/views/supply/ticketReturn/config/_details.ts

@@ -330,6 +330,10 @@ export const ticketFormItems = {
       label: "发票号码",
       prop: "invNumber"
     },
+    {
+      label: "税前金额",
+      prop: "subtotal_amount"
+    },
     {
       label: "开票日期",
       prop: "open_time"

+ 2 - 2
src/views/supply/ticketReturn/config/_rules.ts

@@ -40,14 +40,14 @@ export const invoceRules: FormRules = {
   invNumber: [
     {
       trigger: "blur",
-      message: "请输入发票码",
+      message: "请输入发票码",
       required: true
     }
   ],
   invCode: [
     {
       trigger: "blur",
-      message: "请选择发票码",
+      message: "请选择发票码",
       required: true
     }
   ],

+ 14 - 1
src/views/supply/ticketReturn/detail.vue

@@ -28,7 +28,20 @@ const { run: create } = useAsync({
 });
 
 const requesetDetail = () => detail(httpDetail({ hpNo: id.value }));
-const handleCreate = data => create(httpAdd(data));
+const handleCreate = data => {
+  data.invArr.forEach(item => {
+    item.invoiceType =
+      item.invoiceType === "31"
+        ? "21"
+        : item.invoiceType === "32"
+        ? "22"
+        : item.invoiceType;
+  });
+
+  console.log(data);
+  // return;
+  create(httpAdd(data));
+};
 if (isDetail.value) requesetDetail();
 </script>