浏览代码

fix:完善发票

Tang 3 年之前
父节点
当前提交
33ff523537
共有 2 个文件被更改,包括 328 次插入70 次删除
  1. 3 0
      src/components/tableList.vue
  2. 325 70
      src/views/Marketing/order/bill/index.vue

+ 3 - 0
src/components/tableList.vue

@@ -1112,6 +1112,9 @@
           <span v-else-if="item.scope === 'InfoMore'"
             >{{ scope.row[item.prop1] }} - {{ scope.row[item.prop2] }}
           </span>
+          <div v-else-if="item.scope === 'realAndIdcard'">
+            {{ scope.row[item.prop1] }}<br />{{ scope.row[item.prop2] }}
+          </div>
           <el-button
             v-else-if="item.scope === 'aboutTrees'"
             slot="reference"

+ 325 - 70
src/views/Marketing/order/bill/index.vue

@@ -21,13 +21,26 @@
         <el-button type="text" @click="addClick(props.scope.row, 2)"
           >审核</el-button
         >
-        <el-button type="text" @click="addClick(props.scope.row, 3)"
+        <el-button
+          v-if="
+            props.scope.row.periodStatus === 3 && props.scope.row.type === 1
+          "
+          type="text"
+          @click="addClick(props.scope.row, 3)"
           >上传发票</el-button
         >
-        <el-button type="text" @click="addClick(props.scope.row, 4)"
+        <el-button
+          v-if="
+            props.scope.row.periodStatus === 3 && props.scope.row.type === 2
+          "
+          type="text"
+          @click="addClick(props.scope.row, 4)"
           >邮寄发票</el-button
         >
-        <el-button type="text" @click="addClick(props.scope.row, 5)"
+        <el-button
+          v-if="props.scope.row.periodStatus === 3"
+          type="text"
+          @click="addClick(props.scope.row, 5)"
           >发票标记</el-button
         >
       </template>
@@ -62,30 +75,74 @@
             :key="index"
             style="margin-bottom: 6px; font-size: 12px"
           >
-            {{ item.label }}:xxx
+            <div v-if="item.scope === 'orderList'" style="display: flex">
+              <span style="flex-shrink: 0">{{ item.label }}:</span>
+              <div style="display: flex; flex-direction: column">
+                <ul
+                  v-for="(items, indexs) in auditData[item.prop]"
+                  :key="indexs"
+                  class="ulStys"
+                  style="margin-bottom: 10px"
+                >
+                  <li>商品名称:{{ items.goodsName }}</li>
+                  <li>订单编号:{{ items.orderSn }}</li>
+                  <li>订单价格:{{ items.goodsRealPrice }}</li>
+                </ul>
+              </div>
+            </div>
+            <span v-else-if="item.scope === 'time'"
+              >{{ item.label }}:{{
+                $methodsTools.onlyForma(auditData[item.prop])
+              }}</span
+            >
+            <div v-else-if="item.scope === 'isOptions'">
+              {{ item.label }}:
+              <template v-for="(itemt, indext) in item.options">
+                <span
+                  :key="indext"
+                  v-if="itemt.value === auditData[item.prop]"
+                  :style="itemt.style ? itemt.style : ''"
+                  >{{ itemt.label }}</span
+                >
+              </template>
+            </div>
+            <span v-else>{{ item.label }}:{{ auditData[item.prop] }}</span>
           </li>
         </ul>
         <el-form :model="auditData" ref="auditData" label-width="100px">
           <el-form-item
             label="审核结果"
-            prop="radio"
+            prop="periodStatus"
             :rules="[
               { required: true, message: '请选择审核结果', trigger: 'change' },
             ]"
           >
-            <el-radio-group v-model="auditData.radio">
+            <el-radio-group
+              v-model="auditData.periodStatus"
+              :disabled="
+                copyData.periodStatus === 2 ||
+                (copyData.periodStatus === 3 &&
+                  [-1, 2].includes(copyData.invoiceStatus))
+              "
+            >
               <el-radio :label="1">待审核</el-radio>
-              <el-radio :label="2">通过</el-radio>
-              <el-radio :label="3">驳回</el-radio>
+              <el-radio :label="3">通过</el-radio>
+              <el-radio :label="2" :disabled="copyData.periodStatus === 3"
+                >驳回</el-radio
+              >
             </el-radio-group>
           </el-form-item>
           <el-form-item label="审核反馈">
-            <el-input type="textarea" v-model="auditData.desc"></el-input>
+            <el-input
+              type="textarea"
+              v-model="auditData.periodReason"
+            ></el-input>
           </el-form-item>
         </el-form>
       </div>
       <span slot="footer" class="dialog-footer">
         <el-button @click="auditStatus = false">取 消</el-button>
+        <el-button @click="submitAuditForm">确 定</el-button>
       </span>
     </el-dialog>
     <el-dialog
@@ -114,7 +171,17 @@
       </div>
       <div>
         <el-form :model="billSendData" ref="billSendData" label-width="100px">
-          <el-form-item label="电子发票">
+          <el-form-item
+            label="电子发票"
+            prop="invoiceImg"
+            :rules="[
+              {
+                required: true,
+                message: '请选择电子发票',
+                trigger: ['change', 'blur'],
+              },
+            ]"
+          >
             <div>
               <label for="uplose">
                 <i
@@ -136,15 +203,15 @@
                 >上传文件必须为(png/jpg/jpeg)文件</span
               >
               <el-button
-                v-if="billSendData.coverUrl"
+                v-if="billSendData.invoiceImg"
                 type="danger"
                 size="mini"
-                @click="billSendData.coverUrl = ''"
+                @click="billSendData.invoiceImg = ''"
                 >删除图片</el-button
               >
             </div>
           </el-form-item>
-          <div v-if="billSendData.coverUrl" style="text-align: center">
+          <div v-if="billSendData.invoiceImg" style="text-align: center">
             <el-image
               style="
                 max-width: 100%;
@@ -152,18 +219,21 @@
                 max-height: 400px;
                 overflow: auto;
               "
-              :src="$methodsTools.splitImgHost(billSendData.coverUrl)"
+              :src="$methodsTools.splitImgHost(billSendData.invoiceImg)"
               :preview-src-list="[
-                $methodsTools.splitImgHost(billSendData.coverUrl),
+                $methodsTools.splitImgHost(billSendData.invoiceImg),
               ]"
             >
             </el-image>
           </div>
           <el-form-item label="发票代码">
-            <el-input size="small" v-model="billSendData.desc"></el-input>
+            <el-input
+              size="small"
+              v-model="billSendData.invoiceCode"
+            ></el-input>
           </el-form-item>
           <el-form-item label="发票号码">
-            <el-input size="small" v-model="billSendData.desc"></el-input>
+            <el-input size="small" v-model="billSendData.invoiceNum"></el-input>
           </el-form-item>
           <div
             v-if="statusPops === 2"
@@ -172,7 +242,7 @@
           <div v-if="statusPops === 2">
             <el-form-item
               label="是否邮寄"
-              prop="radio"
+              prop="sendInvoice"
               :rules="[
                 {
                   required: true,
@@ -181,19 +251,23 @@
                 },
               ]"
             >
-              <el-radio-group v-model="billSendData.radio">
+              <el-radio-group v-model="billSendData.sendInvoice">
                 <el-radio :label="1">是</el-radio>
                 <el-radio :label="0">否</el-radio>
               </el-radio-group>
             </el-form-item>
             <el-form-item label="快递号">
-              <el-input size="small" v-model="billSendData.desc"></el-input>
+              <el-input
+                size="small"
+                v-model="billSendData.trackingNum"
+              ></el-input>
             </el-form-item>
           </div>
         </el-form>
       </div>
       <span slot="footer" class="dialog-footer">
         <el-button @click="billSendStatus = false">取 消</el-button>
+        <el-button @click="billSendForm('billSendData')">确 定</el-button>
       </span>
     </el-dialog>
     <el-dialog
@@ -220,31 +294,32 @@
         >
           <el-form-item
             label="发票状态"
-            prop="radio"
+            prop="invoiceStatus"
             :rules="[
               { required: true, message: '请选择发票状态', trigger: 'change' },
             ]"
           >
-            <el-radio-group v-model="billStatusData.radio">
+            <el-radio-group v-model="billStatusData.invoiceStatus">
               <el-radio :label="1">未开票</el-radio>
               <el-radio :label="2">已开票</el-radio>
-              <el-radio :label="3">已退票</el-radio>
+              <el-radio :label="-1">已退票</el-radio>
             </el-radio-group>
           </el-form-item>
         </el-form>
       </div>
       <span slot="footer" class="dialog-footer">
         <el-button @click="billStatusBox = false">取 消</el-button>
+        <el-button @click="billStatusForm">确 定</el-button>
       </span>
     </el-dialog>
     <el-dialog
       :visible.sync="detailsStatus"
-      width="860px"
+      width="960px"
       :show-close="false"
       :close-on-click-modal="false"
     >
       <div slot="title" class="hearders">
-        <div class="leftTitle">发票状态标记</div>
+        <div class="leftTitle">发票详情</div>
         <div class="rightBoxs">
           <img
             src="@/assets/images/Close@2x.png"
@@ -262,7 +337,38 @@
               :key="index"
               style="margin-bottom: 6px; font-size: 12px"
             >
-              {{ item.label }}:xxx
+              <div v-if="item.scope === 'orderList'" style="display: flex">
+                <span style="flex-shrink: 0">{{ item.label }}:</span>
+                <div style="display: flex; flex-direction: column">
+                  <ul
+                    v-for="(items, indexs) in auditData[item.prop]"
+                    :key="indexs"
+                    class="ulStys"
+                    style="margin-bottom: 10px"
+                  >
+                    <li>商品名称:{{ items.goodsName }}</li>
+                    <li>订单编号:{{ items.orderSn }}</li>
+                    <li>订单价格:{{ items.goodsRealPrice }}</li>
+                  </ul>
+                </div>
+              </div>
+              <span v-else-if="item.scope === 'time'"
+                >{{ item.label }}:{{
+                  $methodsTools.onlyForma(auditData[item.prop])
+                }}</span
+              >
+              <div v-else-if="item.scope === 'isOptions'">
+                {{ item.label }}:
+                <template v-for="(itemt, indext) in item.options">
+                  <span
+                    :key="indext"
+                    v-if="itemt.value === auditData[item.prop]"
+                    :style="itemt.style ? itemt.style : ''"
+                    >{{ itemt.label }}</span
+                  >
+                </template>
+              </div>
+              <span v-else>{{ item.label }}:{{ auditData[item.prop] }}</span>
             </li>
           </ul>
         </el-col>
@@ -274,7 +380,35 @@
               :key="index"
               style="margin-bottom: 6px; font-size: 12px"
             >
-              {{ item.label }}:xxx
+              <span v-if="item.scope === 'time'"
+                >{{ item.label }}:{{
+                  $methodsTools.onlyForma(auditData[item.prop])
+                }}</span
+              >
+              <div v-else-if="item.scope === 'img'">
+                {{ item.label }}:
+                <el-image
+                  style="max-width: 100%; vertical-align: top"
+                  :src="$methodsTools.splitImgHost(auditData[item.prop])"
+                  :preview-src-list="[
+                    $methodsTools.splitImgHost(auditData[item.prop]),
+                  ]"
+                >
+                </el-image>
+              </div>
+
+              <div v-else-if="item.scope === 'isOptions'">
+                {{ item.label }}:
+                <template v-for="(itemt, indext) in item.options">
+                  <span
+                    :key="indext"
+                    v-if="itemt.value === auditData[item.prop]"
+                    style="color: red"
+                    >{{ itemt.label }}</span
+                  >
+                </template>
+              </div>
+              <span v-else>{{ item.label }}:{{ auditData[item.prop] }}</span>
             </li>
           </ul>
         </el-col>
@@ -303,8 +437,8 @@ export default {
         num: false,
         border: true,
         choice: true,
-        addHide: false,
-        changeWidth: "300px",
+        addHide: true,
+        changeWidth: "240px",
         backFatherBtn: {
           status: false,
           title: "未定义",
@@ -381,14 +515,15 @@ export default {
           ],
         },
         {
-          prop1: "validityStartTime",
-          prop2: "validityEndTime",
+          prop1: "applyStartTime",
+          prop2: "applyEndTime",
           placeholder1: "开始时间",
           placeholder2: "结束时间",
           scope: "moreDataPicker",
+          Diszing: true,
         },
         {
-          prop: "invoiceCode",
+          prop: "searchKey",
           placeholder: "请输入发票代码/发票号码",
         },
       ],
@@ -456,14 +591,18 @@ export default {
         },
         {
           label: "发票代码/发票号码",
-          prop: "invoiceCode",
+          prop1: "invoiceCode",
+          prop2: "invoiceNum",
           hidden: true,
+          scope: "peopleNums",
+        },
+        {
+          label: "学员信息",
+          prop1: "realname",
+          prop2: "idCard",
+          hidden: true,
+          scope:"realAndIdcard"
         },
-        // {
-        //   label: "学员信息",
-        //   prop: "classHours",
-        //   hidden: true,
-        // },
         {
           label: "申请主体",
           prop: "subject",
@@ -554,74 +693,148 @@ export default {
       auditList: [
         {
           label: "申请时间",
-          prop: "",
+          prop: "applyTime",
+          scope: "time",
         },
         {
           label: "发票类型",
-          prop: "",
+          prop: "type",
+          scope: "isOptions",
+          options: [
+            {
+              label: "普通发票",
+              value: 1,
+            },
+            {
+              label: "增值税专用发票",
+              value: 2,
+            },
+          ],
         },
         {
           label: "申请主体",
-          prop: "",
+          prop: "subject",
+          scope: "isOptions",
+          options: [
+            {
+              label: "个人",
+              value: 1,
+            },
+            {
+              label: "企业",
+              value: 2,
+            },
+          ],
         },
         {
           label: "发票抬头",
-          prop: "",
+          prop: "invoiceTitle",
         },
         {
           label: "单位地址",
-          prop: "",
+          prop: "companyAddress",
         },
         {
           label: "电话号码",
-          prop: "",
+          prop: "phone",
         },
         {
           label: "开户银行",
-          prop: "",
+          prop: "bankName",
         },
         {
           label: "银行账号",
-          prop: "",
+          prop: "bankAccount",
         },
         {
           label: "收件地址",
-          prop: "",
+          prop: "receivingAddress",
         },
         {
           label: "收件人",
-          prop: "",
+          prop: "receivingName",
         },
         {
           label: "收件手机",
-          prop: "",
+          prop: "receivingTel",
         },
         {
           label: "开票订单",
-          prop: "",
+          prop: "orderList",
+          scope: "orderList",
         },
         {
           label: "本次申请开票全额(人民币)",
-          prop: "",
+          prop: "amount",
         },
       ], //审核字段
       auditData: {},
+      copyData: {}, //拷贝
       billSendStatus: false, //上传发票邮寄发票
       billSendData: {
-        coverUrl: "",
+        invoiceImg: "",
       }, //发票数据
       billStatusBox: false, //发票标识
       billStatusData: {}, //发票标识数据
       statusPops: "", //1上传发票2邮寄发票
-      billStatus: "", //发票状态
       billList: [
-        { label: "审核时间", prop: "" },
-        { label: "审核结果", prop: "" },
-        { label: "审核反馈", prop: "" },
-        { label: "发票状态", prop: "" },
-        { label: "发票预览", prop: "" },
-        { label: "机构发票邮寄状态", prop: "" },
-        { label: "快递号", prop: "" },
+        { label: "审核时间", prop: "periodTime", scope: "time" },
+        {
+          label: "审核结果",
+          prop: "periodStatus",
+          scope: "isOptions",
+          options: [
+            {
+              label: "待审核",
+              value: 1,
+            },
+            {
+              label: "驳回",
+              value: 2,
+            },
+            {
+              label: "通过",
+              value: 3,
+            },
+          ],
+        },
+        { label: "审核反馈", prop: "periodReason" },
+        {
+          label: "发票状态",
+          prop: "invoiceStatus",
+          scope: "isOptions",
+          options: [
+            {
+              label: "未开票",
+              value: 1,
+            },
+            {
+              label: "已开票",
+              value: 2,
+            },
+            {
+              label: "已退票",
+              value: -1,
+            },
+          ],
+        },
+        { label: "发票预览", prop: "invoiceImg", scope: "img" },
+        {
+          label: "机构发票邮寄状态",
+          prop: "sendInvoice",
+          scope: "isOptions",
+          options: [
+            {
+              label: "否",
+              value: 0,
+            },
+            {
+              label: "是",
+              value: 1,
+            },
+          ],
+        },
+        { label: "快递号", prop: "trackingNum" },
       ],
     };
   },
@@ -632,6 +845,38 @@ export default {
     this.search();
   },
   methods: {
+    submitAuditForm() {
+      let data = JSON.parse(JSON.stringify(this.auditData));
+      this.$api.editorderInvoice(data).then((res) => {
+        this.$message.success("提交成功");
+        this.auditStatus = false;
+        this.search();
+      });
+    },
+    billStatusForm() {
+      let data = JSON.parse(JSON.stringify(this.billStatusData));
+      this.$api.editorderInvoice(data).then((res) => {
+        this.$message.success("提交成功");
+        this.billStatusBox = false;
+        this.search();
+      });
+    },
+    billSendForm(formName) {
+      var self = this;
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          let data = JSON.parse(JSON.stringify(self.billSendData));
+          self.$api.editorderInvoice(data).then((res) => {
+            self.$message.success("提交成功");
+            self.billSendStatus = false;
+            self.search();
+          });
+        } else {
+          console.log("error submit!!");
+          return false;
+        }
+      });
+    },
     search(int) {
       //   this.loading = true;
       if (int === 1) {
@@ -647,11 +892,11 @@ export default {
         this.formData.pageNum = 1;
       }
       var data = JSON.parse(JSON.stringify(this.formData));
-      if (this.formData.validityStartTime) {
-        data.validityStartTime = data.validityStartTime / 1000;
+      if (this.formData.applyStartTime) {
+        data.applyStartTime = data.applyStartTime / 1000;
       }
-      if (this.formData.validityEndTime) {
-        data.validityEndTime = data.validityEndTime / 1000;
+      if (this.formData.applyEndTime) {
+        data.applyEndTime = data.applyEndTime / 1000;
       }
       this.$api
         .inquireorderInvoiceList(data)
@@ -700,24 +945,26 @@ export default {
     addClick(v, int) {
       switch (int) {
         case 1:
-          /**
-           * 调用API 成功则打开 失败提示
-           */
+          this.auditData = JSON.parse(JSON.stringify(v));
           this.detailsStatus = true;
           break;
         case 2:
+          this.copyData = JSON.parse(JSON.stringify(v));
+          this.auditData = JSON.parse(JSON.stringify(v));
           this.auditStatus = true;
           break;
         case 3:
+          this.billSendData = JSON.parse(JSON.stringify(v));
           this.statusPops = 1; //1上传发票2邮寄发票
           this.billSendStatus = true;
           break;
         case 4:
+          this.billSendData = JSON.parse(JSON.stringify(v));
           this.statusPops = 2; //1上传发票2邮寄发票
           this.billSendStatus = true;
           break;
         case 5:
-          this.billStatus = "";
+          this.billStatusData = JSON.parse(JSON.stringify(v));
           this.billStatusBox = true;
           break;
 
@@ -729,7 +976,7 @@ export default {
       var self = this;
       var file = self.$refs.file.files[0];
       if (file === undefined) {
-        self.$set(self.billSendData, "coverUrl", "");
+        self.$set(self.billSendData, "invoiceImg", "");
         return;
       }
       if (file.size > 0.3 * 1024 * 1024) {
@@ -745,7 +992,8 @@ export default {
       this.$upload
         .upload(file, 5)
         .then((res) => {
-          self.billSendData.coverUrl = res;
+          self.billSendData.invoiceImg = res;
+          self.$refs["billSendData"].validateField("invoiceImg");
         })
         .finally(() => {
           self.$refs.file.value = "";
@@ -765,6 +1013,13 @@ export default {
 </script>
 
 <style lang="less" scoped>
+.ulStys {
+  display: inline-block;
+  border-radius: 4px;
+  border: 1px solid #999;
+  background-color: #fff;
+  padding: 6px 10px;
+}
 .titleSty {
   display: inline-block;
   padding: 4px 6px;