Browse Source

fix:采购模块状态

snow 2 years ago
parent
commit
247360a08f

+ 4 - 4
src/utils/details/purchPay.ts

@@ -34,10 +34,10 @@ export const STATUS_OPTIONS = [
 ];
 
 export const PAYMENT_STATUS = [
-  {
-    label: "待发起",
-    value: "0"
-  },
+  // {
+  //   label: "待发起",
+  //   value: "0"
+  // },
   {
     label: "待业务审核",
     value: "1"

+ 4 - 4
src/utils/details/reconciliation.ts

@@ -111,10 +111,10 @@ export const RECONCILIATION_COLUMNS: DescriptionColumns = [
 ];
 
 export const statusOptions = [
-  {
-    label: "待发起流程",
-    value: "0"
-  },
+  // {
+  //   label: "待发起流程",
+  //   value: "0"
+  // },
   {
     label: "待采购审核",
     value: "1"

+ 17 - 14
src/utils/details/refund.ts

@@ -60,6 +60,10 @@ export const REFOUD_COLUMNS: DescriptionColumns = [
     label: "申请人",
     field: "apply_name"
   },
+  {
+    label: "认领申请人",
+    field: "log_apply"
+  },
   {
     label: "退款原因",
     field: "return_reason"
@@ -72,18 +76,6 @@ export const REFOUD_COLUMNS: DescriptionColumns = [
     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",
@@ -126,7 +118,18 @@ export const REFOUD_COLUMNS: DescriptionColumns = [
     field: "log_total_fee"
   },
   {
-    label: "认领申请人",
-    field: "log_apply_id"
+    label: "退款回执",
+    field: "return_img",
+    render(img_url) {
+      const imgs = img_url ? img_url.split(",") : [];
+      return imgs.map(url => {
+        return h(ElImage, {
+          src: url,
+          style: { height: "20px" },
+          previewSrcList: [url],
+          previewTeleported: true
+        });
+      });
+    }
   }
 ];

+ 4 - 4
src/utils/details/ticket-return.ts

@@ -47,10 +47,10 @@ export const STATUS_OPTIONS = [
     label: "回票完成",
     value: "5"
   },
-  {
-    label: "认证成功待确认完成",
-    value: "6"
-  },
+  // {
+  //   label: "认证成功待确认完成",
+  //   value: "6"
+  // },
   {
     label: "识别失败",
     value: "7"

+ 4 - 6
src/views/InvoiceSales/invoiceApply/components/add-edit-form/order-dialog.vue

@@ -99,14 +99,12 @@ function handleConfirm() {
   if (selectList.length === 0) return ElMessage.error("至少选择一个销售订单!");
 
   //商品数量或开票金额为空
-  const noConfirm = selectList.filter(
-    o => o.goodNum === "0" || o.winv_fee === "0.00"
-  );
+  const noConfirm = selectList.filter(o => o.winv_fee === "0.00");
+
+  console.log(noConfirm);
 
   if (noConfirm.length !== 0) {
-    return ElMessage.error(
-      `销售单 ${noConfirm[0].SequenceNo} 开票金额或数量为空`
-    );
+    return ElMessage.error(`销售单 ${noConfirm[0].sequenceNo} 开票金额为零`);
   }
 
   emit("save-btn-click", selectList);

+ 61 - 29
src/views/InvoiceSales/invoiceApply/components/approval-process/src/upload-invoice.vue

@@ -4,6 +4,10 @@ import { computed, reactive, ref } from "vue";
 import { upload_invoice_rules } from "../../../config/configs";
 import { input_type_list, open_type_list } from "../../../status";
 
+const props = defineProps<{
+  iSelectronic: boolean;
+}>();
+
 const emit = defineEmits(["changeStatus"]);
 const rules = reactive({ ...upload_invoice_rules });
 
@@ -26,18 +30,37 @@ const formData = reactive({
 });
 
 function handleSaveStatus() {
-  const { input_type: _, subtotal_fee, total_fee, ...otherParams } = formData;
-
-  emit(
-    "changeStatus",
-    formData.status === "4"
-      ? { status: "4", remark: formData.remark }
-      : {
-          ...otherParams,
-          subtotal_fee: subtotal_fee.toFixed(2),
-          total_fee: total_fee.toFixed(2)
-        }
-  );
+  const {
+    input_type: _,
+    status,
+    remark,
+    subtotal_fee,
+    total_fee,
+    ...otherParams
+  } = formData;
+  let params: Record<string, string> | null = null;
+
+  /***
+   * 线下开票 & 电子发票 -》 开票完成
+   * 线下开票 & 纸质发票 -》 填写物流
+   * 金税开票 -》 财务审核
+   */
+
+  switch (status) {
+    case "4":
+      params = { status: "4", remark: formData.remark };
+      break;
+    default:
+      if (formData.open_type === "1") {
+        //金税开票 -> 财务审核
+        params = { status: "2", remark };
+      } else {
+        //线下开票
+        params = { status: props.iSelectronic ? "5" : "4" };
+      }
+
+      break;
+  }
 }
 
 function handleScanKeydown(evt: KeyboardEvent) {
@@ -71,10 +94,10 @@ function handleScanKeydown(evt: KeyboardEvent) {
 </script>
 
 <template>
+  <!-- :rules="rules"  -->
   <el-form
     ref="formRef"
     :model="formData"
-    :rules="rules"
     label-width="90px"
     class="demo-ruleForm"
     size="small"
@@ -100,8 +123,9 @@ function handleScanKeydown(evt: KeyboardEvent) {
               :label="si.label"
               :value="si.value"
             />
-          </el-select> </el-form-item
-      ></el-col>
+          </el-select>
+        </el-form-item>
+      </el-col>
 
       <el-col :span="16">
         <el-form-item label="审核备注" prop="remark">
@@ -111,8 +135,9 @@ function handleScanKeydown(evt: KeyboardEvent) {
             type="textarea"
             maxlength="2000"
             placeholder="申请备注"
-          /> </el-form-item
-      ></el-col>
+          />
+        </el-form-item>
+      </el-col>
     </el-row>
     <el-row v-show="formData.open_type !== '1'" v-if="!noPass">
       <el-col :span="8">
@@ -127,8 +152,10 @@ function handleScanKeydown(evt: KeyboardEvent) {
               :key="'type' + si.value + sii"
               :label="si.label"
               :value="si.value"
-            /> </el-select></el-form-item
-      ></el-col>
+            />
+          </el-select>
+        </el-form-item>
+      </el-col>
       <el-col
         :span="16"
         style="padding: 0 0 0 16px"
@@ -151,24 +178,27 @@ function handleScanKeydown(evt: KeyboardEvent) {
             v-model="formData.invCode"
             placeholder="发票号码"
             :disabled="disabled"
-          /> </el-form-item
-      ></el-col>
+          />
+        </el-form-item>
+      </el-col>
       <el-col :span="8">
         <el-form-item label="发票代码" prop="invNum">
           <el-input
             v-model="formData.invNum"
             placeholder="发票代码"
             :disabled="disabled"
-          /> </el-form-item
-      ></el-col>
+          />
+        </el-form-item>
+      </el-col>
       <el-col :span="8">
         <el-form-item label="开票日期" prop="open_date">
           <el-date-picker
             value-format="YYYY-MM-DD HH:mm:ss"
             v-model="formData.open_date"
             :disabled="disabled"
-          /> </el-form-item
-      ></el-col>
+          />
+        </el-form-item>
+      </el-col>
       <el-col :span="8">
         <el-form-item label="税前金额" prop="subtotal_fee">
           <el-input-number
@@ -178,8 +208,9 @@ function handleScanKeydown(evt: KeyboardEvent) {
             :min="0"
             :max="999999"
             :disabled="disabled"
-          /> </el-form-item
-      ></el-col>
+          />
+        </el-form-item>
+      </el-col>
       <el-col :span="8">
         <el-form-item label="税后金额" prop="total_fee">
           <el-input-number
@@ -189,8 +220,9 @@ function handleScanKeydown(evt: KeyboardEvent) {
             :min="0"
             :max="999999"
             :disabled="disabled"
-          /> </el-form-item
-      ></el-col>
+          />
+        </el-form-item>
+      </el-col>
     </el-row>
     <div class="flex justify-end">
       <el-button type="primary" @click="handleSaveStatus">保存</el-button>

+ 18 - 58
src/views/InvoiceSales/refund/components/approval-process/approval-pending.vue

@@ -1,14 +1,12 @@
 <script setup lang="ts">
-import { reactive, ref, watchEffect } from "vue";
-import { ElForm, ElMessage, UploadProps } from "element-plus";
-import { httpImageUpload, baseUrl } from "/@/api/other";
-import { useResponseHandle } from "/@/hooks";
-import { useUserStore } from "/@/store/modules/user";
+import { reactive, ref, watchEffect, computed } from "vue";
+import UploadImage from "./img-upload.vue";
+import { ElForm } from "element-plus";
 
 const emit = defineEmits(["changeStatus"]);
 
 const props = defineProps<{
-  hiddenRerturnImg: boolean;
+  returnType: string;
 }>();
 
 const formData = reactive({
@@ -17,8 +15,6 @@ const formData = reactive({
   remark: ""
 });
 
-const types = ["image/png", "image/jpg", "image/bmp", "image/jpeg"];
-
 const rules = reactive({
   return_img: [
     {
@@ -36,44 +32,18 @@ const rules = reactive({
   ],
   remark: [
     {
-      required: !props.hiddenRerturnImg,
+      required: true,
       trigger: "change",
       message: "请输入备注"
     }
   ]
 });
 
-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 showHiddenUploadImage = computed(() => {
+  return props.returnType !== "2";
+});
 
-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 formRef = ref<InstanceType<typeof ElForm>>(null);
 
 const handlePaymentReceipt = () => {
   formRef.value.validate(isValid => isValid && emit("changeStatus", formData));
@@ -99,27 +69,17 @@ watchEffect(() => {
       </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_img"
+      w-480px
+      v-if="showHiddenUploadImage"
+    >
+      <UploadImage @change="imgs => (formData.return_img = imgs)" />
     </el-form-item>
 
-    <el-form-item label="退款回执" prop="return_img" v-if="!hiddenRerturnImg">
-      <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>

+ 71 - 0
src/views/InvoiceSales/refund/components/approval-process/img-upload.vue

@@ -0,0 +1,71 @@
+<script lang="ts" setup>
+import { ref } from "vue";
+import { type UploadUserFile, type UploadProps, ElMessage } from "element-plus";
+import { useUserStore } from "/@/store/modules/user";
+import { useResponseHandle } from "/@/hooks";
+import { httpImageUpload, baseUrl } from "/@/api/other";
+
+const emit = defineEmits(["change"]);
+
+const types = ["image/png", "image/jpg", "image/bmp", "image/jpeg"];
+
+const fileList = ref<UploadUserFile[]>([]);
+const imgs = ref<Array<string>>([]);
+const userStore = useUserStore();
+const responseHandle = useResponseHandle();
+
+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: () => {
+      imgs.value.push(baseUrl + "/" + data[0].url);
+      emit("change", imgs.value.join(","));
+    }
+  });
+};
+
+const handleRemove: UploadProps["beforeRemove"] = uploadFile => {
+  const delIndex = fileList.value.findIndex(
+    ({ uid }) => uid === uploadFile.uid
+  );
+  imgs.value.splice(delIndex, 1);
+  emit("change", imgs.value.join(","));
+  return true;
+};
+</script>
+
+<template>
+  <el-upload
+    v-model:file-list="fileList"
+    :before-upload="onBeforeReturnImageUpload"
+    :http-request="handleRequeset"
+    :before-remove="handleRemove"
+    list-type="picture"
+  >
+    <el-button type="primary">上传图片</el-button>
+    <template #tip>
+      <div class="el-upload__tip">请上传jpg.png.bmp.jpeg类型图片</div>
+    </template>
+  </el-upload>
+</template>

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

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

+ 9 - 20
src/views/InvoiceSales/refund/components/create-refund/index.vue

@@ -1,13 +1,14 @@
 <script setup lang="ts">
 import { reactive, ref } from "vue";
-import CapitalModal from "./capital-modal.vue";
-import BasicDescriptions from "/@/components/BasicDescriptions";
-import { httpTradeDetail } from "/@/api/InvoiceSales/refund";
-import { httpAdd } from "/@/api/InvoiceSales/refund";
-import { useResponseHandle } from "/@/hooks";
 import { ElForm } from "element-plus";
 import { useRouter } from "vue-router";
 import { CAPITAL_COLUMNS } from "/@/utils/details/tragelog";
+import { httpTradeDetail } from "/@/api/InvoiceSales/refund";
+import { httpAdd } from "/@/api/InvoiceSales/refund";
+import { useResponseHandle } from "/@/hooks";
+import CapitalModal from "./capital-modal.vue";
+import BasicDescriptions from "/@/components/BasicDescriptions";
+import { rules } from "./rules";
 
 const capitalModalRef = ref<InstanceType<typeof CapitalModal>>(null);
 const capitalDetail = ref<Record<string, string | null>>(null);
@@ -19,18 +20,10 @@ const loading = ref(false);
 const formData = reactive({
   logNo: "",
   type: "",
-  return_reason: "",
-  remark: ""
+  return_reason: ""
 });
 
-const rules = {
-  logNo: [{ required: true, trigger: "change", message: "请选择一笔资金" }],
-  type: [{ required: true, trigger: "change", message: "请选择申请类型" }],
-  return_reason: [
-    { required: true, trigger: "change", message: "请输入退款原因" }
-  ],
-  remark: [{ required: true, trigger: "change", message: "请输入备注" }]
-};
+const formRules = reactive({ ...rules });
 
 async function requesetCapitalDetail(logNo) {
   loading.value = true;
@@ -68,7 +61,7 @@ function handleCreate() {
   <h1 text-xl font-bold mb-2>创建退款申请</h1>
 
   <el-form
-    :rules="rules"
+    :rules="formRules"
     :model="formData"
     ref="formRef"
     size="small"
@@ -105,10 +98,6 @@ function handleCreate() {
       <el-input v-model="formData.return_reason" placeholder="请输入退款原因" />
     </el-form-item>
 
-    <el-form-item label="备注" prop="remark" w-480px>
-      <el-input v-model="formData.remark" placeholder="请输入备注" />
-    </el-form-item>
-
     <div flex w-full justify-end>
       <el-button type="primary" @click="handleCreate">保存</el-button>
     </div>

+ 4 - 0
src/views/InvoiceSales/refund/components/create-refund/rules.ts

@@ -0,0 +1,4 @@
+export const rules = {
+  logNo: [{ required: true, trigger: "change", message: "请选择一笔资金" }],
+  type: [{ required: true, trigger: "change", message: "请选择申请类型" }]
+};

+ 2 - 20
src/views/InvoiceSales/refund/config/content.config.ts

@@ -1,9 +1,9 @@
 import { ContentConfig } from "/@/components/PageContent";
 import { httpList, httpAdd } from "/@/api/InvoiceSales/refund";
 
-import dayjs from "dayjs";
-import { ElTag, ElImage } from "element-plus";
 import { h } from "vue";
+import dayjs from "dayjs";
+import { ElTag } from "element-plus";
 import { RETRUN_STATUS } from "/@/utils/details/refund";
 import { refund_type } from "./search.config";
 import { xs_order_source_options } from "/@/utils/status";
@@ -83,24 +83,6 @@ const columns = [
     prop: "goodName",
     width: "120px"
   },
-  {
-    label: "退款回执",
-    prop: "return_img",
-    width: "120px",
-    cellRenderer: ({ row }) => {
-      return h(ElImage, {
-        src: row.return_img,
-        style: { height: "20px" },
-        previewSrcList: [row.return_img],
-        previewTeleported: true
-      });
-    }
-  },
-  {
-    label: "退款原因",
-    width: "120px",
-    prop: "return_reason"
-  },
   {
     label: "申请人",
     prop: "apply_name"

+ 1 - 0
src/views/InvoiceSales/refund/detail.vue

@@ -79,6 +79,7 @@ onMounted(() => initalData());
           >
             <component
               :hiddenRerturnImg="hiddenRerturnImg"
+              :return-type="refundDetail.type"
               :is="currentProcess.component"
               @change-status="requesetRefundStatus"
             />

+ 4 - 5
src/views/purchase/ticketReturn/components/approval-process/index.ts

@@ -1,6 +1,5 @@
 import Authentication from "./src/authentication.vue";
 import FinancialAudit from "./src/financial-audit.vue";
-import Confirm from "./src/confirm.vue";
 
 export const approvalProcess = {
   "3": {
@@ -10,9 +9,9 @@ export const approvalProcess = {
   "4": {
     title: "待认证",
     component: Authentication
-  },
-  "5": {
-    title: "待确认完成",
-    component: Confirm
   }
+  // "5": {
+  //   title: "待确认完成",
+  //   component: Confirm
+  // }
 };