snow 2 lat temu
rodzic
commit
4c1266d9da

+ 1 - 2
src/router/utils.ts

@@ -15,7 +15,6 @@ import { usePermissionStoreHook } from "/@/store/modules/permission";
 const Layout = () => import("/@/layout/index.vue");
 const IFrame = () => import("/@/layout/frameView.vue");
 import { useUserStoreHook } from "/@/store/modules/user";
-import { getRelaComNo } from "../utils/auth";
 // https://cn.vitejs.dev/guide/features.html#glob-import
 const modulesRoutes = import.meta.glob("/src/views/**/*.{vue,tsx}");
 
@@ -282,7 +281,7 @@ function addAsyncRoutes(arrRoutes: Array<RouteRecordRaw>) {
       // 对后端传component组件路径和不传做兼容(如果后端传component组件路径,那么path可以随便写,如果不传,component组件路径会根path保持一致)
       const index = v?.component
         ? // @ts-expect-error
-        modulesRoutesKeys.findIndex(ev => ev.includes(v.component))
+          modulesRoutesKeys.findIndex(ev => ev.includes(v.component))
         : modulesRoutesKeys.findIndex(ev => ev.includes(v.path));
       v.component = modulesRoutes[modulesRoutesKeys[index]];
     }

+ 56 - 0
src/utils/status.ts

@@ -141,6 +141,62 @@ export const invoiceTypeList = [
   }
 ];
 
+export const cg_inv_type_list = [
+  {
+    label: "增值税专用发票",
+    value: "special",
+    scanValue: "01"
+  },
+  {
+    label: "增值税普通发票",
+    value: "normal",
+    scanValue: "04"
+  },
+  {
+    label: "增值税电子专用发票",
+    value: "special_electronic",
+    scanValue: "20"
+  },
+  {
+    label: "增值税电子普通发票",
+    value: "electronic",
+    scanValue: "10"
+  },
+  {
+    label: "电子发票(增值税专用发票)",
+    value: "fully_digitalized_special_electronic",
+    scanValue: "31"
+  },
+  {
+    label: "电子发票(增值税普通发票)",
+    value: "fully_digitalized_normal_electronic",
+    scanValue: ""
+  }
+];
+
+export const xs_inv_type_list = [
+  {
+    label: "增值税专用发票",
+    value: "special",
+    scanValue: "01"
+  },
+  {
+    label: "增值税普通发票",
+    value: "normal",
+    scanValue: "04"
+  },
+  {
+    label: "增值税电子专用发票",
+    value: "special_electronic",
+    scanValue: "20"
+  },
+  {
+    label: "增值税电子普通发票",
+    value: "electronic",
+    scanValue: "10"
+  }
+];
+
 const send_status_list = [
   {
     value: "1",

+ 1 - 0
src/views/InvoiceSales/invoiceApply/components/add-edit-form/add-edit-form.vue

@@ -188,6 +188,7 @@ function handleInvoiceTitle(
     denomination.value = Number(_denomination) * 10000;
     const chunks = invoiceType.split(",");
     ruleForm.value.invtype = "";
+
     invoiceTypes.value = mapInvoiceType.filter(({ map_value }) =>
       chunks.includes(map_value)
     );

+ 62 - 29
src/views/InvoiceSales/invoiceApply/components/execl-files-upload/index.vue

@@ -6,6 +6,7 @@ import { ElMessage } from "element-plus";
 import { responseHandle } from "/@/utils/responseHandle";
 import { useNav } from "/@/layout/hooks/nav";
 import { execlUpload } from "/@/components/execlUpload";
+import { xs_inv_type_list } from "/@/utils/status";
 const visible = ref(false);
 const loading = ref(false);
 const tableData = ref([]);
@@ -13,15 +14,24 @@ const columnsConfig = columns();
 const { logout } = useNav();
 const emit = defineEmits(["onSuccess"]);
 
+const All_INV_TYPE = xs_inv_type_list.map(({ label }) => label);
+
+const row = ref(1);
+
+const createInvErrorMessage = (row: number) =>
+  `导入数据第 ${row} 行 发票类型格式不正确,发票类型必须为${All_INV_TYPE.join(
+    ","
+  )}`;
+
 const Uploadsuccess = ({ results, header }) => {
   loading.value = true;
-  console.log(results);
-  console.log(header);
+
   if (results.length === 0) {
     ElMessage.error("表格无有效数据!");
     loading.value = false;
     return;
   }
+
   let headok = true;
   if (header.length !== initheaders.length) {
     headok = false;
@@ -32,27 +42,36 @@ const Uploadsuccess = ({ results, header }) => {
       }
     });
   }
+
   if (!headok) {
     ElMessage.error("表头与导入模板不匹配!");
     loading.value = false;
     return;
   }
+
   tableData.value = [];
 
-  try {
-    results.forEach(v1 => {
-      const b = Object.values(v1);
-      let model = {};
-      b.forEach((si, sii) => {
-        model["value" + sii] = si + "";
-      });
-      tableData.value.push(model);
+  for (const v1 of results) {
+    const b = Object.values(v1);
+    let model = {};
+    b.forEach((si, sii) => {
+      model["value" + sii] = si + "";
     });
-    loading.value = false;
-  } catch (e) {
-    ElMessage.error("导入数据拼接有误!");
-    loading.value = false;
+
+    const type = model["value1"].trim();
+
+    if (!All_INV_TYPE.includes(type)) {
+      ElMessage.error(createInvErrorMessage(row.value));
+      row.value = 1;
+      tableData.value = [];
+      break;
+    }
+
+    tableData.value.push(model);
+    row.value += 1;
   }
+
+  loading.value = false;
 };
 //提交
 const handleSubmit = async () => {
@@ -73,8 +92,16 @@ const handleSubmit = async () => {
 
   let checked = true;
 
-  data.forEach(({ inv_type, check_code }) => {
-    if (inv_type.indexOf("电子") >= 0 && !check_code) checked = false;
+  data.forEach(item => {
+    const { inv_type } = item;
+
+    const invType = xs_inv_type_list.find(
+      ({ label }) => label === inv_type.trim()
+    );
+
+    item.inv_type = invType.value;
+
+    if (item.inv_type.indexOf("电子") >= 0 && !item.check_code) checked = false;
   });
 
   if (!checked) {
@@ -83,21 +110,23 @@ const handleSubmit = async () => {
     return;
   }
 
-  // const { code, message } = await httpUpload({ data });
-  // loading.value = false;
-  // responseHandle({
-  //   code,
-  //   message,
-  //   logout,
-  //   handler: () => {
-  //     ElMessage.success("数据导入成功!");
-  //     emit("onSuccess");
-  //     visible.value = false;
-  //   }
-  // });
+  const { code, message } = await httpUpload({ data });
+  loading.value = false;
+  responseHandle({
+    code,
+    message,
+    logout,
+    handler: () => {
+      ElMessage.success("数据导入成功!");
+      emit("onSuccess");
+      visible.value = false;
+      row.value = 1;
+    }
+  });
 };
 const cancel = () => {
   tableData.value = [];
+  row.value = 1;
 };
 defineExpose({
   onDisplay: () => ((visible.value = true), (tableData.value = []))
@@ -148,4 +177,8 @@ defineExpose({
   </el-dialog>
 </template>
 
-<style lang="scss" scoped></style>
+<style lang="scss" scoped>
+:deep(.el-upload-list__item) {
+  display: none !important;
+}
+</style>

+ 0 - 7
src/views/InvoiceSales/invoiceApply/detail.vue

@@ -41,15 +41,8 @@ const {
   run: invoiceDetailRun
 } = useAsync<Record<string, string>>({
   initalData: {}
-  // success: ({ inv_out: companyNo }) =>
-  //   runCompany(httpSupplierall({ companyNo }))
 });
 
-// const { run: runCompany, data: company } = useAsync({
-//   isList: true
-// success: () => console.log(company.value[0])
-// });
-
 const { data: list, run: listRun } = useAsync<Array<Record<string, string>>>({
   isList: true,
   initalData: []

+ 37 - 43
src/views/supply/ticketReturn/components/execl-files-upload/index.vue

@@ -1,6 +1,6 @@
 <script setup lang="ts">
 import { ref } from "vue";
-import { ElMessage } from "element-plus";
+import { ElMessage, ElMessageBox } from "element-plus";
 import { execlUpload } from "/@/components/execlUpload";
 import { httpBatchAdd } from "/@/api/purchase/ticketReturn";
 import { useResponseHandle } from "/@/hooks";
@@ -12,7 +12,7 @@ import {
   mapProp,
   requireHeaders
 } from "./columns-config";
-import { result } from "lodash-unified";
+import { cg_inv_type_list } from "/@/utils/status";
 
 const visible = ref(false);
 const loading = ref(false);
@@ -20,16 +20,12 @@ const tableData = ref([]);
 const columnsConfig = columns();
 const emit = defineEmits(["onSuccess"]);
 
-const mapTypes = {
-  增值税专用发票: "special",
-  增值税普通发票: "normal",
-  "增值税普通发票(卷式)": "roll",
-  增值税电子专用发票: "special_electronic",
-  增值税电子普通发票: "electronic",
-  "增值税电子普通发票(通行费)": "toll",
-  全电专用发票: "fully_digitalized_special_electronic",
-  全电普通发票: "fully_digitalized_normal_electronic"
-};
+const allTypes = cg_inv_type_list.map(({ label }) => label);
+
+const row = ref(1);
+
+const createInvErrorMessage = (row: number) =>
+  `导入数据第 ${row} 行 发票类型格式不正确,发票类型必须为${allTypes.join(",")}`;
 
 const { currentCompany } = useCompany();
 
@@ -62,20 +58,31 @@ const Uploadsuccess = ({ results, header }) => {
   }
   tableData.value = [];
 
-  try {
-    results.forEach(v1 => {
-      const b = Object.values(v1);
-      let model = {};
-      b.forEach((si, sii) => {
-        model["value" + sii] = si + "";
-      });
-      tableData.value.push(model);
+  for (const v1 of results) {
+    const b = Object.values(v1);
+    let model = {};
+    b.forEach((si, sii) => {
+      model["value" + sii] = si + "";
     });
-    loading.value = false;
-    console.log(result);
-  } catch (err) {
-    return err;
+
+    const type = model["value2"];
+
+    if (!allTypes.includes(type.trim())) {
+      ElMessage({
+        type: "error",
+        message: createInvErrorMessage(row.value)
+      });
+
+      tableData.value = [];
+      return;
+    }
+
+    tableData.value.push(model);
+
+    row.value = row.value + 1;
   }
+
+  loading.value = false;
 };
 //提交
 const handleSubmit = async () => {
@@ -83,7 +90,6 @@ const handleSubmit = async () => {
   loading.value = true;
 
   const data = [];
-  const errorInvTypes = [];
 
   tableData.value.forEach((key, index) => {
     const obj: Record<string, string> = {};
@@ -91,28 +97,16 @@ const handleSubmit = async () => {
     for (let i in key) {
       const prop = mapProp[i];
       const value = key[i];
-
-      if (prop === "invoiceType") {
-        const invs = Object.keys(mapTypes);
-        if (!invs.includes(value)) {
-          errorInvTypes.push(index + 1);
-        }
-
-        obj[prop] = mapTypes[value];
-      } else {
-        obj[prop] = value;
-      }
+      obj[prop] = value;
     }
     data.push(obj);
   });
 
-  if (errorInvTypes.length > 0) {
-    return ElMessage.error(
-      `第 ${errorInvTypes.join(",")} 行 发票类型格式不正确,必须在${Object.keys(
-        mapTypes
-      ).join(",")}中`
-    );
-  }
+  data.forEach(row => {
+    const source = row.invoiceType.trim();
+    const target = cg_inv_type_list.find(({ label }) => label === source);
+    row.invoiceType = target.value;
+  });
 
   const { code, message } = await httpBatchAdd({
     list: data,

+ 3 - 5
src/views/supply/ticketReturn/components/invoice-form.vue

@@ -6,7 +6,7 @@ import { httpImageUpload, baseUrl } from "/@/api/other";
 import { useUserStore } from "/@/store/modules/user";
 import { ticketFormItems } from "../config/_details";
 import { INPUT_MAX_LENGTH } from "/@/utils/global";
-import { inv_type_list } from "/@/utils/status";
+import { cg_inv_type_list, inv_type_list } from "/@/utils/status";
 import { invoceRules } from "../config/_rules";
 
 const emit = defineEmits(["change"]);
@@ -221,13 +221,11 @@ electronicsHiddens;
               w-750px
             >
               <el-option
-                v-for="(type, index) in inv_type_list"
+                v-for="(type, index) in cg_inv_type_list"
                 :label="type.label"
-                :value="type.hwy_value"
+                :value="type.scanValue"
                 :key="index"
               />
-              <el-option label="电子发票(增值税专用发票)" value="31" />
-              <el-option label="电子发票(增值税普通发票)" value="32" />
             </el-select>
           </template>
 

+ 12 - 1
src/views/supply/ticketReturn/components/return-form.vue

@@ -5,6 +5,7 @@ import { ElForm } from "element-plus";
 import ChooseModal from "./choose-modal.vue";
 import InvoiceTable from "./invoice-table.vue";
 import { createRules } from "../config/_rules";
+import { cg_inv_type_list } from "/@/utils/status";
 
 const emit = defineEmits(["create"]);
 
@@ -25,7 +26,17 @@ function handleCreate() {
   formRef.value.validate(isValid => isValid && emit("create", unref(formData)));
 }
 
-const handleChange = invArr => (formData.value.invArr = invArr);
+const handleChange = invArr => {
+  invArr.forEach(inv => {
+    const origin = inv.invoiceType;
+    const target = cg_inv_type_list.find(
+      ({ scanValue }) => scanValue === origin
+    );
+    inv.invoiceType = target.value;
+  });
+
+  formData.value.invArr = invArr;
+};
 </script>
 
 <template>

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

@@ -28,20 +28,7 @@ const { run: create } = useAsync({
 });
 
 const requesetDetail = () => detail(httpDetail({ hpNo: id.value }));
-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));
-};
+const handleCreate = data => create(httpAdd(data));
 if (isDetail.value) requesetDetail();
 </script>
 

+ 7 - 5
src/views/system/finance/components/finance-modal.vue

@@ -10,6 +10,7 @@ import { httpList } from "/@/api/parameter/supplierPay";
 import { useUserInfo } from "/@/hooks/core/useUser";
 import Super from "/@/layout/components/company/super.vue";
 import { httpAdd, httpUpdate } from "/@/api/parameter/finance";
+import { xs_inv_type_list } from "/@/utils/status";
 const emit = defineEmits(["finance-save"]);
 
 const visible = ref(false);
@@ -301,11 +302,12 @@ defineExpose({
 
           <ElFormItem label="支持发票类型" prop="invoiceType">
             <ElCheckboxGroup v-model="formData.invoiceType">
-              <ElCheckbox label="04">增值税专用发票</ElCheckbox> <br />
-              <ElCheckbox label="07">增值税普通发票</ElCheckbox> <br />
-              <ElCheckbox label="27">增值税电子专用发票</ElCheckbox>
-              <br />
-              <ElCheckbox label="26">增值税电子普通发票</ElCheckbox>
+              <ElCheckbox
+                v-for="inv in xs_inv_type_list"
+                :key="inv.value"
+                :label="inv.value"
+                >{{ inv.label }} <br
+              /></ElCheckbox>
             </ElCheckboxGroup>
           </ElFormItem>
         </ElCol>