123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- <script setup lang="ts">
- import { reactive, ref, shallowRef, unref } from "vue";
- import { httpBatchOrderList } from "/@/api/InvoiceSales/invoiceApply";
- import { responseHandle } from "/@/utils/responseHandle";
- import { useNav } from "/@/layout/hooks/nav";
- import { ElMessage } from "element-plus";
- import { useColumns } from "./columns";
- import { useTypeOptions } from "/@/utils/status";
- const emit = defineEmits(["reload", "confirm"]);
- const { columns } = useColumns();
- columns.value = columns.value.slice(1);
- const { logout } = useNav();
- const loading = ref(false);
- const selected = ref([]);
- const tableRef = ref();
- const pagination = reactive({
- total: 0,
- pageSize: 15,
- currentPage: 1,
- background: true,
- pageSizes: [15, 50, 100]
- });
- const props = defineProps<{
- payload: object;
- }>();
- const sourceText = shallowRef("");
- //列表展示
- async function onSearch(sequenceNo = []) {
- loading.value = true;
- const { currentPage: page, pageSize: size } = pagination;
- const { code, data, message } = await httpBatchOrderList({
- ...props.payload,
- cxCode: sequenceNo.join(","),
- is_comon: "0",
- inv_is: "1",
- cat_status: "2",
- inv_status: "0",
- status: '3',
- page,
- size
- });
- responseHandle({
- code,
- message,
- logout,
- handler: () => {
- // const { li } = data ?? {};
- selected.value = data ?? [];
- // pagination.total = count ?? 0;
- sourceText.value = "";
- }
- });
- loading.value = false;
- }
- const $space = " ";
- const $wrap = "\n";
- const replaceTextWrapAndSpace = function (text = "") {
- if (!text) return "";
- let _text = text;
- const hasSpace = _text.includes($space);
- const hasWrap = _text.includes($wrap);
- if (hasSpace) _text = _text.split($space).join("");
- if (hasWrap) _text = _text.split($wrap).join("");
- return _text;
- };
- function handleEnter() {
- const text = replaceTextWrapAndSpace(sourceText.value);
- /* 去掉回车和空格 **/
- if (text.length === 0) {
- ElMessage.warning("不能解析空文本");
- sourceText.value = text;
- return;
- }
- /* 统一替换字符 **/
- const parserText = text.replace(/[,。;、; .]/g, ",");
- const sequenceNo = parserText.split(",");
- onSearch(sequenceNo);
- }
- function handleConfirm() {
- if (selected.value.length === 0) {
- return ElMessage.error("至少添加一个销售订单!");
- }
- //商品数量或开票金额为空
- const noConfirm = selected.value.filter(o => o.winv_fee === "0.00");
- const noInvNum = selected.value.filter(o => String(o.winv_num) === "0");
- if (noConfirm.length !== 0) {
- return ElMessage.error(`销售订单 ${noConfirm[0].sequenceNo} 开票金额为零`);
- }
- if (noInvNum.length !== 0) {
- return ElMessage.error(`销售订单 ${noInvNum[0].sequenceNo} 开票数量为零`);
- }
- emit("confirm", unref(selected));
- }
- </script>
- <template>
- <div relative>
- <ElInput
- :rows="4"
- v-model="sourceText"
- style="margin-bottom: 10px"
- placeholder="输入销售订单主编号(小于100条),系统支持的分割符为逗号(,)、句号(.)、分号(;)、顿号(、),回车后开始解析。"
- type="textarea"
- @keydown.enter="handleEnter"
- />
- <div v-loading="loading">
- <PureTable
- ref="tableRef"
- border
- align="left"
- row-key="id"
- table-layout="auto"
- :size="'small'"
- :data="selected"
- :columns="columns"
- max-height="560px"
- :header-cell-style="{ background: '#fafafa', color: '#606266' }"
- >
- <template #platform_type="scope">
- <el-tag>{{
- useTypeOptions.find(
- ({ value }) => value === scope.row.platform_type
- )?.label || "--"
- }}</el-tag>
- </template>
- </PureTable>
- </div>
- <div class="flex justify-end mt-10px">
- <el-button type="primary" @click="handleConfirm" size="small"
- >保存</el-button
- >
- </div>
- </div>
- </template>
- <style lang="scss" scoped>
- :deep(.el-pagination) {
- justify-content: flex-start !important;
- }
- .search {
- padding: 0px !important;
- }
- </style>
|