浏览代码

style(KIP-7551): 发票申请页面

John-Hong 2 年之前
父节点
当前提交
1ee38a77c5

+ 418 - 0
src/pages/parkingFee/components/base/parkingReceipt/parkingApplication.vue

@@ -0,0 +1,418 @@
+<template>
+  <div class="scroll-Y" scroll-y>
+    <!--    <wx-points-commit ref='wxPointsCommit'></wx-points-commit>-->
+
+    <scroll-view class="push-box">
+      <div class="choose-invoice-header lines" @click="changeHeader">
+        <div class="invoice-header-info" v-if="headerInfo.invoiceTitleName">
+          <div
+            class="invoice-header-name"
+            :class="headerInfo.invoiceTitleType == 1 ? 'header-name' : ''"
+          >
+            <div>
+              {{ headerInfo.invoiceTitleName }}
+              <span class="isDefault" v-if="headerInfo.setDefault == 1"
+                >默认</span
+              >
+            </div>
+            <img
+              class="invoice-header-arrow"
+              :src="arrowIcon"
+              mode="widthFix"
+            />
+          </div>
+          <div v-if="headerInfo.invoiceTitleType == 0" class="duty-paragraph">
+            税号:{{ headerInfo.corporationTax }}
+          </div>
+        </div>
+        <div class="invoice-header-info" v-else>
+          <div class="invoice-header-name">
+            <div>请选择发票抬头</div>
+            <img
+              class="invoice-header-arrow"
+              :src="arrowIcon"
+              mode="widthFix"
+            />
+          </div>
+          <div class="duty-paragraph">未选择发票抬头</div>
+        </div>
+      </div>
+      <div class="tab-header" v-if="headerInfo.invoiceTitleName">发票详情</div>
+      <div class="part" v-if="headerInfo.invoiceTitleName">
+        <div class="invoice-header">
+          <!-- <div class="part-item">
+          			<span class="part-item-key">开票订单号</span>
+          			<span class="part-item-value">{{ orderInfo.orderNo }}</span>
+          		</div> -->
+          <div class="part-item">
+            <span class="part-item-key">发票类型</span>
+            <span class="part-item-value">增值税普通发票</span>
+          </div>
+          <div class="part-item">
+            <span class="part-item-key">抬头类型</span>
+            <span class="part-item-value">{{
+              headerInfo.invoiceTitleType === 0 ? '单位' : '个人/非企业单位'
+            }}</span>
+          </div>
+          <div
+            class="part-item"
+            :class="headerInfo.invoiceTitleType == 1 ? 'header-name' : ''"
+          >
+            <span class="part-item-key">抬头名称</span>
+            <span class="part-item-value">{{
+              headerInfo.invoiceTitleName
+            }}</span>
+          </div>
+          <div class="part-item lines" v-if="headerInfo.invoiceTitleType === 0">
+            <span class="part-item-key">公司税号</span>
+            <span class="part-item-value">{{ headerInfo.corporationTax }}</span>
+          </div>
+        </div>
+        <div class="invoice-more" v-if="headerInfo.invoiceTitleType === 0">
+          <div class="tab-title show-more" @click="changeShowMore">
+            <span class="c">更多信息</span>
+            <!--  :class="!isShowMore ? 'toBottom' : 'toRight'" -->
+            <div class="arrow-box">
+              <img :src="arrowIcon" mode="widthFix" />
+            </div>
+          </div>
+          <div class="is-show-more" v-if="isShow">
+            <div class="part-item">
+              <span class="part-item-key">公司地址</span>
+              <span class="part-item-value">{{
+                headerInfo.companyAddress
+              }}</span>
+            </div>
+            <div class="part-item">
+              <span class="part-item-key">公司电话</span>
+              <span class="part-item-value">{{ headerInfo.companyTel }}</span>
+            </div>
+            <div class="part-item">
+              <span class="part-item-key">开户银行</span>
+              <span class="part-item-value">{{ headerInfo.depositBank }}</span>
+            </div>
+            <div class="part-item top">
+              <span class="part-item-key">开户账户</span>
+              <span class="part-item-value">{{
+                headerInfo.accountNumber
+              }}</span>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div class="part middle">
+        <div class="part-item lines">
+          <span class="part-item-key">总金额</span>
+          <span class="part-item-value"
+            ><span class="purple">{{ invoiceAmount }} 元</span></span
+          >
+        </div>
+        <div class="part-item top" v-if="type == ''">
+          <span class="part-item-key"
+            >共<span class="purple">{{ orderQuantity }}笔</span>缴费记录</span
+          >
+          <div class="part-item-value" @click="gotoDetail">
+            <span>查看详情</span>
+            <img
+              class="invoice-header-arrow"
+              :src="arrowIcon"
+              mode="widthFix"
+            />
+          </div>
+        </div>
+      </div>
+      <div class="tab-header">接收方式</div>
+      <div class="part footer">
+        <div class="part-item lines">
+          <span class="part-item-key">电子邮箱</span>
+          <div class="part-item-value">
+            <!-- sota_xu@hafengkeji.com -->
+            <input
+              class="van-field__control"
+              style="white-space: nowrap"
+              type="text"
+              placeholder="请输入电子邮箱"
+              v-model="condition.mailbox"
+            />
+          </div>
+        </div>
+        <div class="part-item default-email top" @click="changeDefaultEMail">
+          <van-checkbox v-model="isDefaultEMail" icon-size="30PX"
+            ><span class="text">保存电子邮箱为默认邮箱</span></van-checkbox
+          >
+        </div>
+      </div>
+      <div class="tab-header">备注</div>
+      <div class="textarea-remark">
+        <textarea
+          rows="3"
+          placeholder-style="color:#999999"
+          placeholder="选填"
+          v-model="condition.remark"
+        ></textarea>
+      </div>
+    </scroll-view>
+    <div class="push-btn">
+      <div
+        v-if="headerInfo.invoiceTitleName"
+        :class="{
+          btn: true,
+          'push-again-btn': true,
+          'blue-push-again-btn': custTypeId === 1,
+          'green-push-again-btn': custTypeId === 2,
+        }"
+        @click="submit"
+      >
+        提交
+      </div>
+      <div v-else class="btn disable-btn" disabled>请选择发票抬头</div>
+    </div>
+  </div>
+</template>
+
+<script>
+import parkingApplicationJs from '../../../mixins/parkingReceipt/parkingApplication';
+
+export default {
+  mixins: [parkingApplicationJs],
+};
+</script>
+
+<style lang="less" scoped>
+//@import '../../../styles/common.less';
+.scroll-Y {
+  width: 100%;
+  display: flex;
+  flex-direction: column;
+  // height: 88vh;
+  background-color: #f1f1f1;
+  // padding: 30px 20px;
+  box-sizing: border-box;
+
+  .push-box {
+    padding: 30px 20px;
+    width: 750px;
+    box-sizing: border-box;
+    margin-bottom: 180px;
+  }
+
+  .choose-invoice-header {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    // padding: 20px 30px;
+    padding: 32px;
+    font-size: 28px;
+    background-color: #ffffff;
+    margin-bottom: 20px;
+    border-radius: 20px;
+
+    .invoice-header-info {
+      flex: 1;
+
+      .invoice-header-name {
+        color: #333333;
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        padding-bottom: 32px;
+        border-bottom: 1px solid #f8f8f8;
+
+        .isDefault {
+          color: #8cc63f;
+          border: 1px solid #8cc63f;
+          margin-left: 30px;
+          border-radius: 20px;
+          display: inline-block;
+          padding: 0 21px;
+        }
+      }
+
+      .duty-paragraph {
+        color: #999;
+        margin-top: 32px;
+      }
+    }
+  }
+
+  .tab-header {
+    color: #808080;
+    padding: 10px 20px 20px;
+  }
+
+  .part {
+    background-color: #ffffff;
+    // padding-left: 30px;
+    margin-bottom: 25px;
+    border-radius: 20px;
+    padding: 32px;
+
+    .part-item {
+      font-size: 28px;
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      padding-bottom: 32px;
+
+      .part-item-key {
+        color: #333333;
+        min-width: 146px;
+      }
+
+      .part-item-value {
+        color: #999;
+        text-align: right;
+        display: flex;
+        align-items: center;
+      }
+    }
+
+    .is-show-more {
+      .part-item {
+        padding-top: 32px;
+      }
+    }
+
+    .tab-title {
+      color: #676767;
+      padding-top: 30px;
+    }
+
+    .show-more {
+      display: flex;
+      justify-content: space-between;
+      align-content: center;
+      // padding-right: 30px;
+
+      .arrow-box {
+        // transform: rotate(90deg);
+        // transition-duration:0.1s;
+        > img {
+          width: 30px;
+        }
+      }
+    }
+
+    .default-email {
+      justify-content: flex-start;
+      color: #999999;
+    }
+  }
+
+  .top {
+    padding-top: 32px;
+    padding-bottom: 0 !important;
+  }
+
+  .middle {
+    // padding: 20px 0;
+
+    > .part-item {
+      background-color: #ffffff;
+      // padding-left: 30px;
+    }
+
+    .purple {
+      color: #ed1c24;
+    }
+  }
+
+  .footer {
+    // padding-top: 20px;
+    border-radius: 20px;
+  }
+
+  .textarea-remark {
+    margin-bottom: 20px;
+
+    > textarea {
+      background-color: #ffffff;
+      width: 100%;
+      padding: 32px;
+      // padding: 10px 20px;
+      border-radius: 4px;
+      box-sizing: border-box;
+
+      border-color: #d8dae0;
+    }
+  }
+
+  .push-btn {
+    width: 100%;
+    height: 170px;
+    background-color: #fff;
+    // padding: 0 41px;
+    position: fixed;
+    bottom: 0;
+    z-index: 999;
+    box-sizing: border-box;
+    padding-bottom: constant(safe-area-inset-bottom);
+    padding-bottom: env(safe-area-inset-bottom);
+    box-shadow: 0 0 10px 0 hsla(0, 6%, 58%, 0.6);
+    -webkit-box-shadow: 0 0 20px 0 hsla(0, 6%, 58%, 0.6);
+    -moz-box-shadow: 0 0 20px 0 hsla(0, 6%, 58%, 0.6);
+    // width: 100%;
+    // padding: 20px 0;
+    // position: fixed;
+    // bottom: 0px;
+    // height: 110px;
+    // padding-bottom: constant(safe-area-inset-bottom);
+    // padding-bottom: env(safe-area-inset-bottom);
+    // box-shadow: 0 0 10px 0 hsla(0, 6%, 58%, 0.6);
+    // -webkit-box-shadow: 0 0 20px 0 hsla(0, 6%, 58%, 0.6);
+    // -moz-box-shadow: 0 0 20px 0 hsla(0, 6%, 58%, 0.6);
+
+    .btn {
+      // margin: 20px 60px;
+      color: #ffffff;
+      border-radius: 50px;
+      text-align: center;
+      // padding: 20px 0;
+      height: 80px;
+      line-height: 80px;
+      width: 90%;
+      margin: 0 auto;
+      margin-top: 25px;
+    }
+
+    .push-again-btn {
+      background-image: linear-gradient(to right, #7d4ea1, #40397c);
+    }
+
+    .blue-push-again-btn {
+      .color-background-color('blue');
+    }
+
+    .green-push-again-btn {
+      .color-background-color('green');
+    }
+
+    .disable-btn {
+      background-color: #bdbdbd;
+    }
+  }
+
+  .invoice-header-arrow {
+    width: 30px;
+  }
+
+  .lines {
+    border-bottom: 2px solid #ececec;
+  }
+
+  .toBottom {
+    transform: rotate(90deg);
+    transition-duration: 0.1s;
+  }
+
+  .toRight {
+    transform: rotate(-90deg);
+    transition-duration: 0.1s;
+  }
+
+  .header-name {
+    padding: 0 !important;
+    border: unset !important;
+  }
+}
+</style>

+ 483 - 0
src/pages/parkingFee/components/officeBlue/parkingReceipt/parkingApplication.vue

@@ -0,0 +1,483 @@
+<template>
+  <div>
+    <scroll-view class="scroll-Y" scroll-y>
+      <div class="push-box">
+        <div class="choose-invoice-header lines" @click="changeHeader">
+          <div class="invoice-header-info" v-if="headerInfo.invoiceTitleName">
+            <div
+              class="invoice-header-name"
+              :class="headerInfo.invoiceTitleType == 1 ? 'header-name' : ''"
+            >
+              <div>
+                {{ headerInfo.invoiceTitleName }}
+                <span class="isDefault" v-if="headerInfo.setDefault == 1"
+                >默认</span
+                >
+              </div>
+              <img
+                class="invoice-header-arrow"
+                :src="arrowIcon"
+                mode="widthFix"
+              />
+            </div>
+            <div v-if="headerInfo.invoiceTitleType == 0" class="duty-paragraph">
+              税号:{{ headerInfo.corporationTax }}
+            </div>
+          </div>
+          <div class="invoice-header-info" v-else>
+            <div class="invoice-header-name">
+              <div>请选择发票抬头</div>
+              <img
+                class="invoice-header-arrow"
+                :src="arrowIcon"
+                mode="widthFix"
+              />
+            </div>
+            <div class="duty-paragraph">未选择发票抬头</div>
+          </div>
+        </div>
+        <div class="tab-header" v-if="headerInfo.invoiceTitleName">
+          发票详情
+        </div>
+        <div class="part" v-if="headerInfo.invoiceTitleName">
+          <div class="invoice-header">
+            <!-- <uni-view class="part-item">
+          			<span class="part-item-key">开票订单号</span>
+          			<span class="part-item-value">{{ orderInfo.orderNo }}</span>
+          		</uni-view> -->
+            <div class="part-item">
+              <span class="part-item-key">发票类型</span>
+              <span class="part-item-value">增值税普通发票</span>
+            </div>
+            <div class="part-item">
+              <span class="part-item-key">抬头类型</span>
+              <span class="part-item-value">{{
+                  headerInfo.invoiceTitleType === 0 ? '单位' : '个人/非企业单位'
+                }}</span>
+            </div>
+            <div
+              class="part-item"
+              :class="headerInfo.invoiceTitleType == 1 ? 'header-name' : ''"
+            >
+              <span class="part-item-key">抬头名称</span>
+              <span class="part-item-value">{{
+                  headerInfo.invoiceTitleName
+                }}</span>
+            </div>
+            <div
+              class="part-item lines"
+              v-if="headerInfo.invoiceTitleType === 0"
+            >
+              <span class="part-item-key">公司税号</span>
+              <span class="part-item-value">{{
+                  headerInfo.corporationTax
+                }}</span>
+            </div>
+          </div>
+          <div class="invoice-more" v-if="headerInfo.invoiceTitleType === 0">
+            <div class="tab-title show-more" @click="changeShowMore">
+              <span class="c">更多信息</span>
+              <!--  :class="!isShowMore ? 'toBottom' : 'toRight'" -->
+              <div class="arrow-box">
+                <img :src="arrowIcon" mode="widthFix" />
+              </div>
+            </div>
+            <div class="is-show-more" v-if="isShow">
+              <div class="part-item">
+                <span class="part-item-key">公司地址</span>
+                <span class="part-item-value">{{
+                    headerInfo.companyAddress
+                  }}</span>
+              </div>
+              <div class="part-item">
+                <span class="part-item-key">公司电话</span>
+                <span class="part-item-value">{{ headerInfo.companyTel }}</span>
+              </div>
+              <div class="part-item">
+                <span class="part-item-key">开户银行</span>
+                <span class="part-item-value">{{
+                    headerInfo.depositBank
+                  }}</span>
+              </div>
+              <div class="part-item top">
+                <span class="part-item-key">开户账户</span>
+                <span class="part-item-value">{{
+                    headerInfo.accountNumber
+                  }}</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="part middle">
+          <div class="part-item lines">
+            <span class="part-item-key">总金额</span>
+            <span class="part-item-value"
+            ><span class="purple">{{ invoiceAmount }} 元</span></span
+            >
+          </div>
+          <div class="part-item top" v-if="type == ''">
+            <span class="part-item-key"
+            >共<span class="purple">{{ orderQuantity }}笔</span>缴费记录</span
+            >
+            <div class="part-item-value" @click="gotoDetail">
+              <span>查看详情</span>
+              <img
+                class="invoice-header-arrow"
+                :src="arrowIcon"
+                mode="widthFix"
+              />
+            </div>
+          </div>
+        </div>
+        <div class="tab-header">接收方式</div>
+        <div class="part footer">
+          <div class="part-item lines">
+            <span
+              class="part-item-key"
+              style="min-width: 120px; white-space: nowrap"
+            >电子邮箱</span
+            >
+            <div class="part-item-value">
+              <!-- sota_xu@hafengkeji.com -->
+              <input
+                class="van-field__control"
+                style="white-space: nowrap"
+                type="text"
+                placeholder="请输入电子邮箱"
+                v-model="condition.mailbox"
+              />
+              <!-- <textarea
+                rows="1"
+                placeholder="请输入电子邮箱"
+                class="van-field__control"
+                v-model="condition.mailbox"
+              ></textarea> -->
+            </div>
+          </div>
+          <div class="part-item default-email">
+            <!-- @click="changeDefaultEMail" -->
+            <van-checkbox v-model="isDefaultEMail" icon-size="30PX"
+            ><span class="text">保存电子邮箱为默认邮箱</span></van-checkbox
+            >
+            <!-- <van-checkbox-group v-model="isDefaultEMail">
+            <van-checkbox name="a">保存电子邮箱为默认邮箱</van-checkbox>
+            <van-checkbox name="b">复选框 b</van-checkbox>
+          </van-checkbox-group> -->
+          </div>
+        </div>
+        <div class="tab-header">备注</div>
+        <div class="textarea-remark">
+          <!-- <spanarea placeholder-style="color:#999999" placeholder="选填" v-model="condition.remark" /> -->
+          <!-- <input type="text"> -->
+          <textarea
+            rows="3"
+            placeholder-style="color:#999999"
+            placeholder="选填"
+            v-model="condition.remark"
+          ></textarea>
+        </div>
+        <!-- 占位 -->
+        <div
+          style="
+            height: 120px;
+            background-color: transparent;
+            color: transparent;
+            position: relative;
+          "
+        >
+          占位
+        </div>
+      </div>
+    </scroll-view>
+    <div class="push-btn">
+      <div
+        v-if="headerInfo.invoiceTitleName || true"
+        :class="{
+          btn: true,
+          'push-again-btn': true,
+          'blue-push-again-btn': custTypeId === 1,
+          'green-push-again-btn': custTypeId === 2,
+        }"
+        @click="submit"
+      >
+        提交
+      </div>
+      <div v-else class="btn disable-btn" disabled>请选择发票抬头</div>
+    </div>
+  </div>
+</template>
+
+<script>
+import parkingApplicationJs from '../../../mixins/parkingReceipt/parkingApplication'
+export default {
+  mixins:[parkingApplicationJs]
+}
+</script>
+
+<style lang="less" scoped>
+//@import '../../../styles/common.less';
+
+.scroll-Y {
+  width: 100%;
+  display: flex;
+  flex-direction: column;
+  // height: 88vh;
+  background-color: #f4f7ff;
+  // padding: 30px 20px;
+  box-sizing: border-box;
+
+  .push-box {
+    padding: 30px 20px;
+    width: 750px;
+    box-sizing: border-box;
+    margin-bottom: 180px;
+  }
+
+  .choose-invoice-header {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    // padding: 20px 30px;
+    padding: 32px;
+    font-size: 28px;
+    background: #fafbff;
+    border: 1px solid #d8dae0;
+    margin-bottom: 24px;
+    border-radius: 4px;
+
+    .invoice-header-info {
+      flex: 1;
+
+      .invoice-header-name {
+        color: #333333;
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        padding-bottom: 32px;
+        border-bottom: 1px solid #d8dae0;
+
+        .isDefault {
+          color: #8cc63f;
+          border: 1px solid #8cc63f;
+          margin-left: 30px;
+          border-radius: 20px;
+          display: inline-block;
+          padding: 0 21px;
+        }
+      }
+
+      .duty-paragraph {
+        color: #999;
+        margin-top: 32px;
+      }
+    }
+  }
+
+  .tab-header {
+    color: #808080;
+    padding: 10px 20px 20px;
+  }
+
+  .part {
+    // background-color: #ffffff;
+
+    background: #fafbff;
+    // padding-left: 30px;
+    margin-bottom: 20px;
+    border-radius: 4px;
+    padding: 30px;
+    border: 1px solid #d8dae0;
+
+    .part-item {
+      font-size: 28px;
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      padding-bottom: 20px;
+
+      .part-item-key {
+        color: #333333;
+        min-width: 146px;
+      }
+
+      .part-item-value {
+        flex: 1;
+        color: #999;
+        text-align: right;
+        display: flex;
+        align-items: center;
+        .van-field__control {
+          text-align: right;
+        }
+      }
+    }
+
+    .is-show-more {
+      .part-item {
+        padding-top: 32px;
+      }
+    }
+
+    .tab-title {
+      color: #676767;
+      padding-top: 30px;
+    }
+
+    .show-more {
+      display: flex;
+      justify-content: space-between;
+      align-content: center;
+      // padding-right: 30px;
+
+      .arrow-box {
+        // transform: rotate(90deg);
+        // transition-duration:0.1s;
+        > img {
+          width: 30px;
+        }
+      }
+    }
+
+    .default-email {
+      justify-content: flex-start;
+      color: #999999;
+      margin-top: 20px;
+      // font-size: 28PX;
+      font-family: PingFangSC-Regular, PingFang SC;
+      font-weight: 400;
+      color: #999999;
+      padding-bottom: 0;
+      .text {
+        font-size: 28px;
+        font-weight: 400;
+        color: #999999;
+        line-height: 40px;
+      }
+      // line-height: 80PX;
+      // /deep/ .van-checkbox__icon {
+      //   font-size: 25PX;
+      // }
+      // /deep/ .van-checkbox__label {
+      //   line-height: 80PX;
+      // }
+    }
+  }
+
+  .top {
+    padding-top: 20px;
+    padding-bottom: 0 !important;
+  }
+
+  .middle {
+    // padding: 20px 0;
+
+    > .part-item {
+      // background-color: #ffffff;
+      // padding-left: 30px;
+    }
+
+    .purple {
+      color: #064c8a;
+    }
+  }
+
+  .footer {
+    // padding-top: 20px;
+    border-radius: 4px;
+  }
+
+  .textarea-remark {
+    margin-bottom: 20px;
+
+    > textarea {
+      background-color: #fafbff;
+      width: 100%;
+      padding: 32px;
+      // padding: 10px 20px;
+      border-radius: 4px;
+      box-sizing: border-box;
+
+      border-color: #d8dae0;
+    }
+  }
+
+  .invoice-header-arrow {
+    width: 30px;
+  }
+
+  .lines {
+    border-bottom: 1px solid #d8dae0;
+  }
+
+  .toBottom {
+    transform: rotate(90deg);
+    transition-duration: 0.1s;
+  }
+
+  .toRight {
+    transform: rotate(-90deg);
+    transition-duration: 0.1s;
+  }
+
+  .header-name {
+    padding: 0 !important;
+    border: unset !important;
+  }
+}
+.push-btn {
+  width: 100%;
+  height: 170px;
+  background-color: #fff;
+  // padding: 0 41px;
+  position: fixed;
+  bottom: 0;
+  z-index: 999;
+  box-sizing: border-box;
+  padding-bottom: constant(safe-area-inset-bottom);
+  padding-bottom: env(safe-area-inset-bottom);
+  box-shadow: 0 0 10px 0 hsla(0, 6%, 58%, 0.6);
+  -webkit-box-shadow: 0 0 20px 0 hsla(0, 6%, 58%, 0.6);
+  -moz-box-shadow: 0 0 20px 0 hsla(0, 6%, 58%, 0.6);
+  // width: 100%;
+  // padding: 20px 0;
+  // position: fixed;
+  // bottom: 0px;
+  // height: 110px;
+  // padding-bottom: constant(safe-area-inset-bottom);
+  // padding-bottom: env(safe-area-inset-bottom);
+  // box-shadow: 0 0 10px 0 hsla(0, 6%, 58%, 0.6);
+  // -webkit-box-shadow: 0 0 20px 0 hsla(0, 6%, 58%, 0.6);
+  // -moz-box-shadow: 0 0 20px 0 hsla(0, 6%, 58%, 0.6);
+
+  .btn {
+    // margin: 20px 60px;
+    color: #ffffff;
+    border-radius: 50px;
+    text-align: center;
+    // padding: 20px 0;
+    height: 80px;
+    line-height: 80px;
+    width: 90%;
+    margin: 0 auto;
+    margin-top: 25px;
+    border-radius: 45px;
+  }
+
+  .push-again-btn {
+    // background-image: linear-gradient(to right, #7d4ea1, #40397c);
+    background: #064c8a;
+  }
+
+  .blue-push-again-btn {
+    .color-background-color('blue');
+  }
+
+  .green-push-again-btn {
+    .color-background-color('green');
+  }
+
+  .disable-btn {
+    background-color: #bdbdbd;
+  }
+}
+</style>

+ 397 - 0
src/pages/parkingFee/mixins/parkingReceipt/parkingApplication.js

@@ -0,0 +1,397 @@
+
+  // const app = getApp()
+  const app = {};
+  import arrowIcon from '../../static/images/arrows.png';
+  import { mapState } from 'vuex';
+  // import MemberCacheTool from '@/utils/member-cache-tool.js';
+  import uni from '@/utils/uniHooks';
+  import { getUrlParams } from '@/utils/index.js';
+  import { Dialog, Toast } from 'vant';
+
+  export default {
+  data() {
+  return {
+  picUrl: this.$picUrl,
+  globalData: app.globalData,
+  arrowIcon: arrowIcon,
+  isShow: false,
+  isDefaultEMail: false,
+  ids: [],
+  condition: {
+  // openid: this.openid,
+  // groupId: this.groupId,
+  // vipcode: this.member?.vipcode,
+  invoiceName: '', // 否|发票名称
+  invoiceCategory: 0, // 发票类型 0:停车缴费  1:活动
+  invoiceType: 0, // 发票类型:0:增值税普通电子发票
+  remark: '',
+  invoiceTitleId: 0, // long|发票抬头id
+  ids: [], // 被选中的缴费记录id
+  isDefaultEmail: '1', // 是|邮箱是否默认 0:否 1:是
+  mailbox: '',
+},
+  headerInfo: {},
+  // 总金额,单位分
+  invoiceAmount: 0,
+  orderInfo: {},
+  type: '', // 当前是活动还是停车
+  isSubmitFlag: true, // 发票提交申请的flag,
+  pageOptions: null,
+  preUrl: '',
+  orderQuantity: 0,
+  parkingOrder: null,
+};
+},
+  created() {
+  // const options = this.$route.query;
+  // console.log('===>onLoad', options);
+  // this.pageOptions = options;
+  // 埋点本地化
+  this.preUrl = uni.getStorageSync('previousUrl');
+  uni.setStorageSync(
+  'previousUrl',
+  '/pages/parkingFee/parkingReceipt/parkingApplication.vue'
+  );
+},
+  mounted() {
+  // console.log(253, this.ids);
+  setTimeout(() => {
+  uni.setNavigationBarTitle({
+  title: '发票申请',
+});
+}, 300);
+  // console.clear();
+  const query = getUrlParams();
+  // console.log('是否重新回到改页面', this.pageOptions);
+  // console.log('是否重新回到改页面', query);
+  // console.log(260, this.$route.query);
+  this.pageOptions = query;
+  if (this.pageOptions) {
+  const options = this.pageOptions;
+  // console.log('===>onShow', options);
+  // console.log('===>onShow', options.ids);
+
+  if (options.type && options.money) {
+  this.type = options.type;
+  this.invoiceAmount = options.money;
+}
+  if (options.ids) {
+  const ids = options.ids;
+  if (ids.indexOf(',') > -1) {
+  this.ids = ids.split(',');
+} else {
+  this.ids =
+  typeof ids === 'string'
+  ? ids.indexOf('[') > -1
+  ? JSON.parse(ids)
+  : [ids]
+  : ids;
+}
+  this.orderQuantity = this.ids.length;
+  // console.log('获取订单信息');
+  this.getParkOrderInfo();
+  this.getInvoiceEmailInfo();
+}
+  if (options.header) {
+  if (typeof options.header == 'string') {
+  this.headerInfo = JSON.parse(options.header);
+} else if (typeof options.header == 'object') {
+  this.headerInfo = options.header;
+}
+} else {
+  this.getInvoiceTitle();
+}
+}
+},
+  computed: {
+  ...mapState({
+  custTypeId: (state) => state.custTypeId,
+  groupId: (state) => state.groupId,
+  openid: (state) => state.openid,
+  mallId: (state) => state.mallId,
+  kipUserId: (state) => state.kipUserId,
+  userInfo: (state) => state.userInfo,
+  member: (state) => state.member,
+}),
+},
+  methods: {
+  changeShowMore() {
+  this.isShow = !this.isShow;
+},
+  changeDefaultEMail() {
+  this.isDefaultEMail = !this.isDefaultEMail;
+},
+  changeHeader() {
+  this.$router.push({
+  path: 'parkingChooseHeader?ids=' + this.ids,
+});
+},
+  gotoDetail() {
+  this.$store.commit('setTempParkingOrder', this.parkingOrder);
+  this.$router.push({
+  path: 'parkingOrderDetail?useParkingOrderCache=true',
+});
+  // this.$router.push({
+  //   path:
+  //     '/pages/parkingFee/parkingFeeDetailSuccess?orderNo=' +
+  //     this.orderInfo.orderNo,
+  // })
+},
+  // 查询全部抬头列表信息
+  getInvoiceTitle() {
+  const self = this;
+  const params = {
+  vipcode: this.member?.vipcode,
+};
+  self.$md(params);
+  // console.log(265, '开票信息', params);
+  // console.log(
+  //   265,
+  //   '开票信息 path: ',
+  //   self.$baseURL + 'api/1.0/invoiceTitle/page'
+  // );
+  uni.request({
+  url: self.$baseURL + 'api/1.0/invoiceTitle/page',
+  method: 'GET',
+  data: params,
+  header: JSON.parse(uni.getStorageSync('handleUser')),
+  success: (res) => {
+  // console.log('开票信息', res.data);
+  if (res.data.code === 0) {
+  const list = res.data.data;
+  let currentIndex = 0;
+  list.map((item, index) => {
+  if (item.setDefault == 1) currentIndex = index;
+});
+  const headerInfo = list[currentIndex] || {};
+  self.headerInfo = headerInfo;
+  // console.log('发票抬头--', self.headerInfo);
+} else {
+  // uni.showToast({
+  //   title: res.data.msg,
+  //   duration: 2000,
+  //   icon: 'none',
+  // });
+  Toast({
+  message: res.data.msg,
+});
+}
+},
+  fail: () => {
+  Toast({
+  message: '服务器开小差了呢,请您稍后再试',
+});
+  /* uni.showToast({
+   title: '服务器开小差了呢,请您稍后再试',
+   icon: 'none',
+   }); */
+},
+});
+},
+  // 根据选中的停车缴费记录id获取详情信息
+  getParkOrderInfo() {
+  // 如果当前是活动开票的话,则不差详情
+  if (this.type) return;
+  const self = this;
+  // console.log('根据选中的停车缴费记录id获取详情信息', this.ids);
+  self.$md(this.ids);
+  // console.log(
+  //   'getParkOrderInfo',
+  //   self.$baseURL + 'api/1.0/invoice/myParkOrderListByIds'
+  // );
+  // return;
+  uni.request({
+  url: self.$baseURL + 'api/1.0/invoice/myParkOrderListByIds',
+  method: 'POST',
+  data: typeof this.ids === 'string' ? [this.ids] : this.ids,
+  header: JSON.parse(uni.getStorageSync('handleUser')),
+  success: (res) => {
+  if (res.data.code === 0) {
+  const datas = res.data.data;
+  console.log('387387387387387387387获取详情信息', datas);
+  self.parkingOrder = datas;
+  self.invoiceAmount = (datas.invoiceAmount / 100).toFixed(2);
+  self.orderInfo = datas.list[0];
+} else {
+  /* uni.showToast({
+   title: res.data.msg,
+   duration: 2000,
+   icon: 'none',
+   }); */
+  Toast({
+  message: res.data.msg,
+});
+}
+},
+  fail: () => {
+  /* uni.showToast({
+   title: '服务器开小差了呢,请您稍后再试',
+   icon: 'none',
+   }); */
+  Toast({
+  message: '服务器开小差了呢,请您稍后再试',
+});
+},
+});
+},
+  // 获取用户邮箱信息
+  getInvoiceEmailInfo() {
+  const self = this;
+  // const openId = MemberCacheTool.getOpenId(app);
+  var data = {
+  openid: this.openId,
+  groupId: this.groupId,
+  vipcode: this.member?.vipcode,
+};
+  self.$md(data);
+  // console.log(
+  //   '获取用户邮箱信息',
+  //   self.$baseURL + 'api/1.0/invoice/getInvoiceEmailInfo'
+  // );
+  // console.log(421, data);
+  uni.request({
+  url: self.$baseURL + 'api/1.0/invoice/getInvoiceEmailInfo',
+  method: 'POST',
+  data: data,
+  header: JSON.parse(uni.getStorageSync('handleUser')),
+  success: (res) => {
+  if (res.data.code === 0) {
+  console.log('获取用户邮箱信息', res.data);
+  if (res.data.data) {
+  this.isDefaultEMail = true;
+  this.condition.mailbox = res.data.data;
+} else {
+  this.isDefaultEMail = false;
+  this.condition.mailbox = '';
+}
+} else {
+  /* uni.showToast({
+   title: res.data.msg,
+   duration: 2000,
+   icon: 'none',
+   }); */
+  Toast({
+  message: res.data.msg,
+});
+}
+},
+  fail: () => {
+  Toast({
+  title: '服务器开小差了呢,请您稍后再试',
+});
+  /* uni.showToast({
+   title: '服务器开小差了呢,请您稍后再试',
+   icon: 'none',
+   }); */
+},
+});
+},
+  submit() {
+  const self = this;
+  if (!self.condition.mailbox) {
+  /* uni.showToast({
+   title: '请输入电子邮箱地址',
+   duration: 2000,
+   icon: 'none',
+   }); */
+  Toast({
+  message: '请输入电子邮箱地址',
+});
+  return false;
+}
+  // const re =
+  //   /^[A-Za-z\d]+([-_.][A-Za-z\d]+)*@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,4}$/;
+  // if (re.test(self.condition.mailbox)) {
+  //   uni.showToast({
+  //     title: '电子邮箱格式有误,请输入正确的电子邮箱',
+  //     duration: 2000,
+  //     icon: 'none',
+  //   });
+  //   return false;
+  // }
+  if (self.type && self.type == 'activity') {
+  self.condition.invoiceCategory = 1;
+}
+  const params = self.condition;
+  params.ids = self.ids;
+  params.isDefaultEmail = self.isDefaultEMail ? '1' : '0';
+  params.invoiceTitleId = self.headerInfo.id;
+
+  params.openid = this.openid;
+  params.groupId = this.groupId;
+  params.vipcode = this.member?.vipcode;
+  // console.log('提交发票请求的入参', params);
+  self.$md(params);
+  if (self.isSubmitFlag) {
+  // 勾选默认邮箱埋点
+  if (self.isDefaultEMail) {
+  self.sensorsClick('$SetDefaultEmail', {
+  redirect_path: '',
+  mailbox: self.condition.mailbox,
+});
+}
+  self.isSubmitFlag = false;
+  console.log(488, '前往开票', params);
+  uni.request({
+  url: self.$baseURL + 'api/1.0/invoice/addMyInvoiceInfo',
+  method: 'POST',
+  data: params,
+  header: JSON.parse(uni.getStorageSync('handleUser')),
+  success: (res) => {
+  console.log('提交发票请求', res.data);
+  if (res.data.code === 0) {
+  // 因为合并开票接口中无法判断是否是一个CO(一个发票id可以直接进发票详情)还是两个CO,所以统一返回到发票列表页面 ?
+  this.$router.replace({
+  path: 'parkingReceipt',
+});
+  // this.$router.replace({
+  //   path:
+  //     '/pages/parkingFee/parkingReceipt/parkingInvoiceApply?id=' +
+  //     res.data.data.id,
+  // })
+} else {
+  /* uni.showToast({
+   title: res.data.msg,
+   duration: 2000,
+   icon: 'none',
+   }); */
+  Toast({
+  message: res.data.msg,
+});
+}
+},
+  fail: () => {
+  self.isSubmitFlag = true;
+  /* uni.showToast({
+   title: '服务器开小差了呢,请您稍后再试',
+   icon: 'none',
+   }); */
+  oast({
+  message: '服务器开小差了呢,请您稍后再试',
+});
+},
+});
+}
+},
+  // 埋点方法
+  sensorsClick(eventName, params) {
+  let optionsQuery = uni.getStorageSync('options_query');
+  let fixedParams = {
+  cta_itemno: '',
+  cta_name: '',
+  previous_path: this.preUrl || '',
+  $location: uni.getStorageSync('mallid'),
+  $brand_id: uni.getStorageSync('groupId'),
+  $channel: optionsQuery.channel || '',
+  // $utm_lbs: this.optionsQuery.utm_lbs || '',
+  $utm_channel: optionsQuery.utm_channel || '',
+  $utm_method: optionsQuery.utm_method || '',
+  $utm_source: optionsQuery.utm_source || '',
+  $utm_function: optionsQuery.utm_function || '',
+  $utm_user: optionsQuery.utm_user || '',
+},
+  finalParams = Object.assign(fixedParams, params);
+  this.$sensors.track(eventName, finalParams);
+},
+},
+};

+ 0 - 932
src/pages/parkingFee/parkingFeeForm.vue

@@ -1,932 +0,0 @@
-<template>
-  <scroll-view scroll-y="true" class="scroll-Y">
-    <div class="wrap">
-      <div class="form">
-        <div class="form-item">
-          <span class="label">车牌</span>
-          <span>{{ parkOrderEntity.carno }}</span>
-        </div>
-        <div class="form-item">
-          <span class="label">入场时间</span>
-          <span>{{ parkOrderEntity.entertime }}</span>
-        </div>
-        <div class="form-item">
-          <span class="label">停车时长</span>
-          <span>{{ parkOrderEntity.servicehour }}小时</span>
-        </div>
-        <div class="form-item">
-          <span class="label"></span>
-          <span>订单金额:¥{{ parkOrderEntity.servicefee }}</span>
-        </div>
-      </div>
-      <div class="form">
-        <div
-          class="form-item"
-          @click="openPark"
-          v-if="parkInfoEntity.isuseticket == 1"
-        >
-          <span class="label">停车券</span>
-          <div>
-            <span>{{ parkingCouponName }}</span>
-            <uni-icons
-              type="arrowright"
-              size="20"
-              class="arrowright"
-            ></uni-icons>
-          </div>
-        </div>
-        <div class="form-item" v-if="couponfee">
-          <span class="label">停车券抵扣</span>
-          <span style="color: #ed1c24">¥{{ couponfee }}元</span>
-        </div>
-        <div
-          class="form-item"
-          @click="openIntegral"
-          v-if="parkInfoEntity.isuseintegral == 1"
-        >
-          <span class="label">积分抵扣</span>
-          <div>
-            <span>{{ integralName }}</span>
-            <uni-icons
-              type="arrowright"
-              size="20"
-              class="arrowright"
-            ></uni-icons>
-          </div>
-        </div>
-        <div class="form-item" v-if="bonusfee">
-          <span class="label">积分抵扣</span>
-          <span style="color: #ed1c24">¥{{ bonusfee }}元</span>
-        </div>
-      </div>
-      <!-- 福州 -->
-      <div class="tip" v-if="mallid === '000586'">
-        注:每次支付最多抵扣{{ parkInfoEntity.maxonetimediscount
-        }}<span>元</span>
-      </div>
-      <!-- 天津 -->
-      <div class="tip" v-if="mallid === '000719'">
-        注:每次支付最多抵扣{{ parkInfoEntity.maxonetimediscount
-        }}<span>元</span>
-      </div>
-      <!-- 慈溪 -->
-      <div class="tip" v-if="mallid === '00000914'">
-        注:周一每次支付最多抵扣50元,周二至周日每次支付最多抵扣6<span>元</span>
-      </div>
-      <div
-        class="tip"
-        v-if="
-          mallid !== '000586' && mallid !== '000719' && mallid !== '00000914'
-        "
-      >
-        注:卡券和积分每天累计最多抵扣<span
-          >{{ parkInfoEntity.maxonedaydiscount }}元</span
-        >,<span
-          >每次支付最多抵扣{{
-            parkInfoEntity.maxonetimediscount
-          }}元,今日已抵扣{{ todayDiscountMoney }}元</span
-        >
-      </div>
-    </div>
-    <!-- 底部导航 -->
-    <div class="submit_bar">
-      <div class="submit_text">
-        <div class="text_top">
-          <span>实付款:</span>
-          <span class="price">¥ {{ total }}</span>
-        </div>
-        <div
-          class="text_bottom"
-          v-if="parkingCouponName !== '' || integralName !== ''"
-        >
-          <span v-if="parkingCouponName && !integralName"
-            >已选择:{{ parkingCouponName }}</span
-          >
-          <span v-if="integralName && !parkingCouponName"
-            >已选择:{{ integralName }}</span
-          >
-          <span v-if="parkingCouponName && integralName"
-            >已选择:{{ parkingCouponName + '/' + integralName }}</span
-          >
-        </div>
-      </div>
-      <button class="mini-btn" type="warn" size="mini" @click="onSubmit">
-        立即支付
-      </button>
-    </div>
-    <!-- 停车券弹窗 -->
-    <div class="parking_pop popup">
-      <uni-popup
-        ref="parkingCoupon_popup"
-        type="bottom"
-        class="uni-popup"
-        style="z-index: 1000"
-      >
-        <div class="popup_wrap parkingCoupon_wrap">
-          <div class="popup_title">
-            <span>选择停车券</span>
-            <uni-icons
-              type="clear"
-              size="30"
-              color="#d4d4d4"
-              class="clear"
-              @click="closePark"
-            ></uni-icons>
-          </div>
-          <div class="popup_content">
-            <scroll-view scroll-y="true" style="height: 500px" class="scroll">
-              <div class="radio-group">
-                <div
-                  class="uni-list-cell uni-list-cell-pd"
-                  @click="parkChange(index, item)"
-                  v-for="(item, index) in memberTicketList"
-                  :key="index"
-                >
-                  <div style="color: #999; font-size: 28px">
-                    {{ item.ticketName }}
-                  </div>
-                  <img
-                    v-if="item.checked"
-                    :src="localimgPic + 'car-checked.png'"
-                    mode="widthFix"
-                  />
-                  <img
-                    v-else
-                    :src="localimgPic + 'pay-unchecked.png'"
-                    mode="widthFix"
-                  />
-                </div>
-              </div>
-            </scroll-view>
-            <div class="popup_button">
-              <span class="cancel_btn" @click="closePark">取消</span>
-              <span class="ok_btn" @click="doParkOK">确定</span>
-            </div>
-          </div>
-          <!-- <uni-view v-html="formText">{{formText}}</uni-view> -->
-        </div>
-      </uni-popup>
-    </div>
-    <!-- 积分抵扣弹窗 -->
-    <div class="integral_pop popup">
-      <uni-popup
-        ref="integral_popup"
-        type="bottom"
-        class="uni-popup"
-        style="z-index: 1000"
-      >
-        <div class="popup_wrap integral_wrap">
-          <div class="popup_title">
-            <div
-              style="
-                display: flex;
-                align-items: center;
-                justify-content: space-between;
-                flex: 1;
-              "
-            >
-              <span>选择积分抵扣</span>
-              <span style="color: #ed1c24"
-                >我的积分:{{ exintegral || 0 }}</span
-              >
-            </div>
-            <uni-icons
-              type="clear"
-              size="30"
-              color="#d4d4d4"
-              class="clear"
-              @click="closeIntegral"
-            >
-            </uni-icons>
-          </div>
-          <div class="popup_content">
-            <scroll-view scroll-y="true" style="height: 500px" class="scroll">
-              <radio-group class="radio-group" @change="integralChange">
-                <label
-                  class="uni-list-cell uni-list-cell-pd"
-                  v-for="(item, index) in parkIntegraltomoneyList"
-                  :key="index"
-                >
-                  <div style="color: #999; font-size: 28px">
-                    {{ item.name }}
-                  </div>
-                  <div>
-                    <radio :value="item.value" color="#ed1c24" />
-                  </div>
-                </label>
-              </radio-group>
-            </scroll-view>
-            <div class="popup_button">
-              <span class="cancel_btn" @click="closeIntegral">取消</span>
-              <span class="ok_btn" @click="doIntegralOK">确定</span>
-            </div>
-          </div>
-        </div>
-      </uni-popup>
-    </div>
-  </scroll-view>
-</template>
-
-<script>
-import uniPop from '@/components/uni-popup/uni-popup.vue'
-// const app = getApp()
-const app = {}
-export default {
-	components: {
-		uniPop
-	},
-	data() {
-		return {
-			parkOrderEntity: {}, // 停车信息
-			parkInfoEntity: {},
-			price: 0,
-			parkingCouponVal: '',
-			parkingCouponName: '',
-			integralVal: '',
-			integralName: '',
-			carno: '', // 车牌号
-			todayDiscountMoney: 0, // 今日抵扣金额
-			memberTicketList: [{
-				ticketValue: 0,
-				ticketName: '不使用'
-			}], //会员停车券
-			parkIntegraltomoneyList: [{
-				integral: 0,
-				name: '不使用',
-				value: 0
-			}], //积分抵现
-			bonus: '', // 积分
-			bonusfee: 0, // 积分抵钱
-			couponcode: '', // 停车券
-			couponfee: 0, // 停车抵钱
-			payfee: '', // 微信钱
-			ind: '', // 停车券索引
-			total: 0, // 实付款
-			localimgPic: '',
-			formText: '',
-       mallid: '',
-       exintegral: '' // 我的积分
-		}
-	},
-	// 分享好友
-	onShareAppMessage: function(res) {
-		return {
-			title: '停车缴费', // 分享标题
-			// desc: this.params.shareDescribe, // 分享描述
-			imageUrl: '', // 分享图标
-			path: `/pages/parkingFee/parkingFeeForm?carno=${this.carno}&mallid=${app.globalData.mallid}`
-		}
-	},
-	// 分享朋友圈
-	onShareTimeline: function(res) {
-		return {
-			title: '停车缴费', // 分享标题
-			// desc: this.params.shareDescribe, // 分享描述
-			imageUrl: '', // 分享图标
-			path: `/pages/parkingFee/parkingFeeForm?carno=${this.carno}&mallid=${app.globalData.mallid}`
-		}
-	},
-	onLoad(option) {
-		this.localimgPic = this.$staticPicUrl + '/wxminilocalimg/parkingFee/'
-		this.carno = option.carno
-     this.mallid = app.globalData.mallid
-		// #ifdef H5
-		app.globalData.member = JSON.parse(uni.getStorageSync('member'))
-		app.globalData.userInfo = JSON.parse(uni.getStorageSync('userinfo'))
-		app.globalData.openId = app.globalData.userInfo.openid
-     this.getTicket()
-		// #endif
-		// 场景二维码记录(是否扫码进入)
-		app.globalData.paramsScene = {}
-		this.$saveSceneQrcodeDetail('page', 'parkingFeeForm', '停车缴费', '', '', '', '')
-		this.createParkOrder()
-     this.getVoterBonus()
-	},
-	methods: {
-		// h5获取配置---公众号支付
-		getTicket: function() {
-			let self = this
-			var datas = {
-				groupId: app.globalData.groupId,
-				mallid: app.globalData.mallid,
-				url: window.location.href.split("#")[0]
-			}
-			self.$md(datas)
-			uni.request({
-				url: self.$baseURL + "api/1.0/login/getTicket",
-				method: 'POST',
-				data: datas,
-				header: JSON.parse(uni.getStorageSync('handleUser')),
-				success: (res) => {
-					if (res.data.code == 0) {
-						self.$wx.config({
-							debug: false, // 开启调试模式
-							appId: res.data.data.appId, // 必填,公众号的唯一标识
-							timestamp: res.data.data.timestamp, // 必填,生成签名的时间戳
-							nonceStr: res.data.data.nonceStr, // 必填,生成签名的随机串
-							signature: res.data.data.signature, // 必填,签名
-							jsApiList: ['chooseWXPay','scanQRCode','checkJsApi'] // 必填,需要使用的JS接口列表
-						});
-						self.$wx.ready(function() {
-							self.$wx.checkJsApi({
-								jsApiList: ['chooseWXPay'],
-								success: res => {
-									console.log('checked api:', res)
-								},
-								fail: err => {
-									console.log('check api fail:', err)
-								}
-							})
-						});
-						self.$wx.error(function(res) {
-							console.log('err', res)
-						});
-					} else {
-						uni.showToast({
-							title: res.data.msg,
-							duration: 2000,
-							icon: 'none'
-						})
-					}
-				}
-			});
-		},
-		// 获取积分
-		getVoterBonus: function() {
-			var params = {
-				groupId: app.globalData.groupId,
-				mallid: app.globalData.mallid,
-				mobile: app.globalData.member.mobile
-			}
-			this.$md(params)
-			this.$request({
-				method: "POST",
-				url: this.$baseURL + "api/1.0/member/getMemberInfo",
-				header: JSON.parse(uni.getStorageSync('handleUser')),
-				data: params,
-				}).then((r) => {
-					if (r.data.code == 0) {
-						var result = r.data.data;
-						this.exintegral = result.currnentintegral + '';
-					} else {
-						uni.showToast({
-							title: r.data.msg,
-							duration: 2000,
-							icon: 'none'
-						})
-					}
-				}).catch(err => {
-					console.log(err)
-			});
-		},
-     // 创建订单
-		createParkOrder: function() {
-       this.parkIntegraltomoneyList = []
-       this.memberTicketList = []
-			uni.showLoading({
-				title: '加载中'
-			});
-			let params = {
-				mallid: app.globalData.mallid,
-				vipcode: app.globalData.member.vipcode,
-				groupId: app.globalData.groupId,
-				carno: this.carno,
-				openId: app.globalData.openId
-			}
-			this.$md(params)
-			this.$request({
-				url: this.$baseURL + 'api/1.0/park/createParkOrder',
-				data: params,
-				method: 'POST',
-				header: JSON.parse(uni.getStorageSync('handleUser')),
-				}).then((res) => {
-					uni.hideLoading();
-					if (res.data.code === 0) {
-						const data = res.data.data
-						this.parkOrderEntity = data.parkOrderEntity
-						this.parkInfoEntity = data.parkInfoEntity
-             if (data.parkIntegraltomoneyList) {
-               this.parkIntegraltomoneyList.push(...data.parkIntegraltomoneyList)
-             }
-             console.log('积分', this.parkIntegraltomoneyList)
-             if (data.memberTicketList) {
-               this.memberTicketList.push(...data.memberTicketList)
-               this.memberTicketList.map(t => {
-               	t.checked = false
-               })
-             }
-						this.parkOrderEntity.servicefee = this.parkOrderEntity.servicefee / 100
-						this.total = this.parkOrderEntity.servicefee
-             this.bonus = 0
-             this.payfee = 0
-             this.couponfee = 0
-             this.bonusfee = 0
-             this.ind = 0
-						setTimeout(() => {
-							this.createParkOrder()
-						}, 180000)
-					} else {
-						uni.showToast({
-							title: res.data.msg,
-							duration: 2000,
-							icon: 'none'
-						})
-					}
-				}).catch(err => {
-					console.log(err)
-			});
-		},
-		// 打开停车券
-		openPark: function() {
-			this.$refs['parkingCoupon_popup'].open()
-		},
-		// 关闭停车券
-		closePark: function() {
-			this.$refs['parkingCoupon_popup'].close()
-		},
-		// 停车券选择
-		parkChange: function(index, item) {
-			item.checked = !item.checked
-			if (index === 0 && item.checked) {
-				this.memberTicketList.map(t => {
-					t.checked = false
-				})
-				this.memberTicketList[index].checked = true
-			} else {
-				this.memberTicketList[0].checked = false
-			}
-			this.ind = index
-			this.$forceUpdate()
-		},
-		// 确定停车券
-		doParkOK: function() {
-			const filter_data = this.memberTicketList.filter(t => t.checked == true && t.ticketValue !== 0)
-			if (this.todayDiscountMoney == this.parkInfoEntity.maxonedaydiscount) {
-				uni.showToast({
-					title: '今日抵扣金额上限',
-					icon: 'none'
-				})
-			} else {
-				let couponcode = ''
-				let couponfee = 0
-				if (filter_data.length === 0) { //不使用
-					this.couponfee = 0
-					this.couponcode = ''
-					let price = Math.round(this.bonusfee * 100 + this.couponfee * 100) / 100
-					this.total = Math.round((this.parkOrderEntity.servicefee - price) * 100) / 100
-					// console.log('停车券积分', this.couponcode)
-					// console.log('不使用停车券抵扣', this.couponfee)
-					// console.log('不使用停车券-价钱', this.total)
-					this.closePark()
-				} else { // 使用
-					filter_data.map(t => {
-						couponcode += t.couponCode + '#'
-						couponfee += t.ticketValue
-					})
-					this.couponfee = couponfee
-					this.couponcode = couponcode
-					let price = this.bonusfee + this.couponfee
-					if (price > this.parkInfoEntity.maxonetimediscount) {
-						uni.showToast({
-							title: '每次最多抵扣'+this.parkInfoEntity.maxonetimediscount+'元',
-							icon: 'none'
-						})
-						// 对选中不满足条件的进行删除
-						this.memberTicketList[this.ind].checked = false
-						this.couponfee = Math.round(this.couponfee - this.memberTicketList[this.ind].ticketValue)
-						let couponcodeSplit = this.couponcode.split('#')
-						couponcodeSplit.map((t, i) => {
-							if (t.couponcode === this.memberTicketList[this.ind].couponcode) {
-								couponcodeSplit.splice(i, 1)
-							}
-						})
-						this.couponcode = couponcodeSplit.join("#")
-						// console.log(this.couponcode)
-						// console.log(this.couponfee)
-					} else {
-						this.price = price
-						// 抵扣金额超出订单金额,实付款为0
-						if (this.price > this.parkOrderEntity.servicefee) {
-							this.total = 0
-						} else {
-							this.total = Math.round((this.parkOrderEntity.servicefee - price) * 100) / 100
-						}
-						// console.log('停车券积分', this.couponcode)
-						// console.log('停车券抵扣', this.couponfee)
-						// console.log('价钱', this.total)
-						this.closePark()
-					}
-				}
-			}
-		},
-		// 打开抵扣积分
-		openIntegral: function() {
-			this.$refs['integral_popup'].open()
-		},
-		// 关闭抵扣积分
-		closeIntegral: function() {
-			this.$refs['integral_popup'].close()
-		},
-		// 抵扣积分选择
-		integralChange: function(e) {
-			let val = e.detail.value
-			this.bonusfee = Number(val)
-			this.parkIntegraltomoneyList.map(t => {
-				if (t.value == val) {
-					this.bonus = t.integral
-				}
-			})
-		},
-		// 确定抵扣积分
-		doIntegralOK: function() {
-			let price = Math.round(this.bonusfee * 100 + this.couponfee * 100) / 100
-			if (this.todayDiscountMoney == this.parkInfoEntity.maxonedaydiscount) {
-				uni.showToast({
-					title: '今日抵扣金额上限',
-					icon: 'none'
-				})
-			} else {
-				if (price > this.parkInfoEntity.maxonetimediscount) {
-					uni.showToast({
-						title: '每次最多抵扣'+this.parkInfoEntity.maxonetimediscount+'元',
-						icon: 'none'
-					})
-				} else {
-					this.price = price
-					// 抵扣金额超出订单金额,实付款为0
-					if (this.price > this.parkOrderEntity.servicefee) {
-						this.total = 0
-					} else {
-						this.total = Math.round(this.parkOrderEntity.servicefee * 100 - price * 100) / 100
-					}
-					console.log('积分抵扣', this.bonusfee)
-					console.log('价钱', this.total)
-					this.closeIntegral()
-				}
-			}
-		},
-		// 支付
-		onSubmit: function() {
-			uni.showLoading({
-				title: '加载中'
-			});
-			let params = {
-				mallid: app.globalData.mallid,
-				groupId: app.globalData.groupId,
-				orderno: this.parkOrderEntity.orderno,
-				// #ifdef MP-WEIXIN
-				createuser: 'sys_miniprogram'
-				// #endif
-				// #ifdef H5
-				createuser: 'sys_gzh'
-				// #endif
-			}
-			let url = ''
-			// 是否微信支付
-			if (this.total !== 0) {
-				params.payfee = this.total * 100
-				url = 'api/1.0/park/weixinPay'
-				// 广福路
-				if (app.globalData.groupId === '1329609284362932225' && app.globalData.mallid === '000002') {
-					url = 'interfaceController/park/icbcPay'
-				}
-			} else {
-				url = 'api/1.0/park/notWeixinPay'
-			}
-			// 是否积分抵扣
-			if (this.bonus) {
-				params.bonus = this.bonus
-				params.bonusfee = this.bonusfee * 100
-			}
-			// 是否停车券抵扣
-			if (this.couponcode) {
-				params.couponcode = this.couponcode
-				params.couponfee = this.couponfee * 100
-			}
-			// 积分+卡券+微信
-			if (this.bonus && this.couponcode && this.total !== 0) {
-				params.paytype = 7
-			}
-			// 卡券+微信
-			if (!this.bonus && this.couponcode && this.total !== 0) {
-				params.paytype = 6
-			}
-			// 积分+微信
-			if (this.bonus && !this.couponcode && this.total !== 0) {
-				params.paytype = 5
-			}
-			// 积分+卡券
-			if (this.bonus && this.couponcode && this.total == 0) {
-				params.paytype = 4
-			}
-			// 微信
-			if (!this.bonus && !this.couponcode && this.total !== 0) {
-				params.paytype = 3
-			}
-			// 卡券
-			if (!this.bonus && this.couponcode && this.total == 0) {
-				params.paytype = 2
-			}
-			// 积分
-			if (this.bonus && !this.couponcode && this.total == 0) {
-				params.paytype = 1
-			}
-			console.log('支付', params)
-			this.$md(params)
-			const that = this
-			this.$request({
-				url: that.$baseURL + url,
-				data: params,
-				method: 'POST',
-				header: JSON.parse(uni.getStorageSync('handleUser')),
-				}).then((res) => {
-					uni.hideLoading();
-					if (res.data.code === 0) {
-						// 需要微信支付传参
-						if (that.total !== 0) {
-							// #ifdef MP-WEIXIN
-							var prepayJson = JSON.parse(res.data.data);
-							uni.requestPayment({
-								provider: 'wxpay',
-								timeStamp: prepayJson.timeStamp,
-								nonceStr: prepayJson.nonceStr,
-								package: prepayJson.package1,
-								signType: prepayJson.signType,
-								paySign: prepayJson.paySign,
-								success: function(res) {
-									console.log(that.parkOrderEntity.orderno)
-									this.$router.push({
-										path: './parkingFeeDetail?orderno=' + that
-											.parkOrderEntity.orderno
-									})
-								},
-								fail: function(err) {
-									uni.showToast({
-										title: '支付已取消!',
-										icon: 'none',
-										duration: 2000
-									})
-								}
-							});
-							// #endif
-							// #ifdef H5
-							if (app.globalData.groupId === '1329609284362932225' && app.globalData
-								.mallid === '000002') {
-								that.formText = res.data.data
-								that.$nextTick(() => {
-									document.querySelector('body').innerHTML = that.formText;
-									document.forms[0].submit()
-									// document.forms['alipaysubmit'].submit()
-									// console.log('idauto_submit_form', document.forms['alipaysubmit'])
-									// document.getElementByName('idauto_submit_form').submit()
-								})
-							} else {
-								var prepayJson = JSON.parse(res.data.data);
-								that.$wx.chooseWXPay({
-									timestamp: result.prepayId.timeStamp, // 支付签名时间戳
-									nonceStr: result.prepayId.nonceStr, // 支付签名随机串,不长于 32 位
-									package: result.prepayId
-									.package1, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)
-									signType: 'MD5', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
-									paySign: result.prepayId.paySign, // 支付签名
-									success(res) {
-										// 支付成功后的回调函数
-										console.log(that.parkOrderEntity.orderno)
-										this.$router.push({
-											path: './parkingFeeDetail?orderno=' + that
-												.parkOrderEntity.orderno
-										})
-										// cb(res);
-									},
-									fail(err) {
-										uni.showToast({
-											title: '支付已取消!',
-											icon: 'none',
-											duration: 2000
-										})
-									}
-								});
-							}
-							// #endif
-						} else {
-							this.$router.push({
-								path: './parkingFeeDetail?orderno=' + that.parkOrderEntity
-									.orderno
-							})
-						}
-					} else {
-						uni.showToast({
-							title: res.data.msg,
-							duration: 2000,
-							icon: 'none'
-						})
-					}
-				}).catch(err => {
-					console.log(err)
-			});
-		}
-	}
-}
-</script>
-
-<style lang="less" scoped>
-.scroll-Y {
-  width: 100%;
-  display: flex;
-  flex-direction: column;
-  height: 100vh;
-  background: #f2f2f2;
-}
-
-.wrap {
-  display: flex;
-  flex-direction: column;
-  width: 100%;
-
-  .form {
-    margin-top: 10px;
-    display: flex;
-    flex-direction: column;
-    background: #fff;
-
-    .form-item {
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
-      padding: 25px 35px;
-      box-sizing: border-box;
-      border-bottom: 1px solid #f2f2f2;
-
-      span {
-        font-size: 28px;
-        color: #999;
-      }
-
-      .label {
-        color: #000;
-      }
-
-      div {
-        display: flex;
-        align-items: center;
-      }
-    }
-  }
-
-  .tip {
-    padding: 17px 38px;
-    color: #999;
-    font-size: 28px;
-
-    span {
-      color: #999;
-      font-size: 28px;
-    }
-  }
-}
-
-// 底部导航
-.submit_bar {
-  position: fixed;
-  bottom: 0;
-  left: 0;
-  z-index: 99;
-  width: 100%;
-  padding-bottom: env(safe-area-inset-bottom);
-  background-color: #fff;
-  user-select: none;
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-
-  .submit_text {
-    padding: 0 40px;
-    box-sizing: border-box;
-    display: flex;
-    flex-direction: column;
-    flex: 1;
-
-    span {
-      font-size: 28px;
-      color: #999;
-    }
-
-    .text_top {
-      display: flex;
-      align-items: center;
-
-      span {
-        color: #000;
-      }
-
-      .price {
-        color: #ed1c24;
-        font-size: 30px;
-      }
-    }
-
-    .text_bottom {
-    }
-  }
-
-  button {
-    margin: 0;
-    padding: 0;
-    height: 100px;
-    background: linear-gradient(to right, #ff6034, #ee0a24);
-    width: 220px;
-    font-weight: 500;
-    border: none;
-    border-radius: 0;
-    line-height: 100px;
-    text-align: center;
-    transition: opacity 0.2s;
-  }
-}
-
-// 弹窗
-.popup {
-  .popup_wrap {
-    width: 100%;
-    display: flex;
-    flex-direction: column;
-    background: #fff;
-    border-radius: 20px 20px 0 0;
-
-    span {
-      color: #999;
-      font-size: 28px;
-    }
-  }
-
-  .popup_title {
-    width: 100%;
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    padding: 30px 42px;
-    box-sizing: border-box;
-    border-bottom: 1px solid #f2f2f2;
-  }
-
-  .popup_content {
-    width: 100%;
-    display: flex;
-    flex-direction: column;
-    flex: 1;
-
-    .radio-group {
-      display: flex;
-      flex-direction: column;
-      width: 100%;
-      padding: 0 42px;
-      box-sizing: border-box;
-
-      img {
-        width: 48px;
-        height: 48px;
-      }
-
-      .uni-list-cell-pd {
-        display: flex;
-        justify-content: space-between;
-        padding: 42px 0;
-        box-sizing: border-box;
-        align-items: center;
-        border-bottom: 1px solid #f2f2f2;
-        margin: 0;
-
-        .radio {
-          display: flex;
-          justify-content: space-between;
-          align-items: center;
-          width: 100%;
-        }
-      }
-    }
-  }
-
-  .popup_button {
-    width: 100%;
-    display: flex;
-    align-items: center;
-
-    span {
-      width: 50%;
-      height: 110px;
-      line-height: 110px;
-      text-align: center;
-    }
-
-    .cancel_btn {
-      background: #fff;
-      color: #ed1c24;
-    }
-
-    .ok_btn {
-      background: #ed1c24;
-      color: #fff;
-    }
-  }
-}
-</style>

+ 8 - 865
src/pages/parkingFee/parkingReceipt/parkingApplication.vue

@@ -1,875 +1,18 @@
 <template>
   <div>
-    <scroll-view class="scroll-Y" scroll-y>
-      <div class="push-box">
-        <div class="choose-invoice-header lines" @click="changeHeader">
-          <div class="invoice-header-info" v-if="headerInfo.invoiceTitleName">
-            <div
-              class="invoice-header-name"
-              :class="headerInfo.invoiceTitleType == 1 ? 'header-name' : ''"
-            >
-              <div>
-                {{ headerInfo.invoiceTitleName }}
-                <span class="isDefault" v-if="headerInfo.setDefault == 1"
-                  >默认</span
-                >
-              </div>
-              <img
-                class="invoice-header-arrow"
-                :src="arrowIcon"
-                mode="widthFix"
-              />
-            </div>
-            <div v-if="headerInfo.invoiceTitleType == 0" class="duty-paragraph">
-              税号:{{ headerInfo.corporationTax }}
-            </div>
-          </div>
-          <div class="invoice-header-info" v-else>
-            <div class="invoice-header-name">
-              <div>请选择发票抬头</div>
-              <img
-                class="invoice-header-arrow"
-                :src="arrowIcon"
-                mode="widthFix"
-              />
-            </div>
-            <div class="duty-paragraph">未选择发票抬头</div>
-          </div>
-        </div>
-        <div class="tab-header" v-if="headerInfo.invoiceTitleName">
-          发票详情
-        </div>
-        <div class="part" v-if="headerInfo.invoiceTitleName">
-          <div class="invoice-header">
-            <!-- <uni-view class="part-item">
-          			<span class="part-item-key">开票订单号</span>
-          			<span class="part-item-value">{{ orderInfo.orderNo }}</span>
-          		</uni-view> -->
-            <div class="part-item">
-              <span class="part-item-key">发票类型</span>
-              <span class="part-item-value">增值税普通发票</span>
-            </div>
-            <div class="part-item">
-              <span class="part-item-key">抬头类型</span>
-              <span class="part-item-value">{{
-                headerInfo.invoiceTitleType === 0 ? '单位' : '个人/非企业单位'
-              }}</span>
-            </div>
-            <div
-              class="part-item"
-              :class="headerInfo.invoiceTitleType == 1 ? 'header-name' : ''"
-            >
-              <span class="part-item-key">抬头名称</span>
-              <span class="part-item-value">{{
-                headerInfo.invoiceTitleName
-              }}</span>
-            </div>
-            <div
-              class="part-item lines"
-              v-if="headerInfo.invoiceTitleType === 0"
-            >
-              <span class="part-item-key">公司税号</span>
-              <span class="part-item-value">{{
-                headerInfo.corporationTax
-              }}</span>
-            </div>
-          </div>
-          <div class="invoice-more" v-if="headerInfo.invoiceTitleType === 0">
-            <div class="tab-title show-more" @click="changeShowMore">
-              <span class="c">更多信息</span>
-              <!--  :class="!isShowMore ? 'toBottom' : 'toRight'" -->
-              <div class="arrow-box">
-                <img :src="arrowIcon" mode="widthFix" />
-              </div>
-            </div>
-            <div class="is-show-more" v-if="isShow">
-              <div class="part-item">
-                <span class="part-item-key">公司地址</span>
-                <span class="part-item-value">{{
-                  headerInfo.companyAddress
-                }}</span>
-              </div>
-              <div class="part-item">
-                <span class="part-item-key">公司电话</span>
-                <span class="part-item-value">{{ headerInfo.companyTel }}</span>
-              </div>
-              <div class="part-item">
-                <span class="part-item-key">开户银行</span>
-                <span class="part-item-value">{{
-                  headerInfo.depositBank
-                }}</span>
-              </div>
-              <div class="part-item top">
-                <span class="part-item-key">开户账户</span>
-                <span class="part-item-value">{{
-                  headerInfo.accountNumber
-                }}</span>
-              </div>
-            </div>
-          </div>
-        </div>
-        <div class="part middle">
-          <div class="part-item lines">
-            <span class="part-item-key">总金额</span>
-            <span class="part-item-value"
-              ><span class="purple">{{ invoiceAmount }} 元</span></span
-            >
-          </div>
-          <div class="part-item top" v-if="type == ''">
-            <span class="part-item-key"
-              >共<span class="purple">{{ orderQuantity }}笔</span>缴费记录</span
-            >
-            <div class="part-item-value" @click="gotoDetail">
-              <span>查看详情</span>
-              <img
-                class="invoice-header-arrow"
-                :src="arrowIcon"
-                mode="widthFix"
-              />
-            </div>
-          </div>
-        </div>
-        <div class="tab-header">接收方式</div>
-        <div class="part footer">
-          <div class="part-item lines">
-            <span
-              class="part-item-key"
-              style="min-width: 120px; white-space: nowrap"
-              >电子邮箱</span
-            >
-            <div class="part-item-value">
-              <!-- sota_xu@hafengkeji.com -->
-              <input
-                class="van-field__control"
-                style="white-space: nowrap"
-                type="text"
-                placeholder="请输入电子邮箱"
-                v-model="condition.mailbox"
-              />
-              <!-- <textarea
-                rows="1"
-                placeholder="请输入电子邮箱"
-                class="van-field__control"
-                v-model="condition.mailbox"
-              ></textarea> -->
-            </div>
-          </div>
-          <div class="part-item default-email">
-            <!-- @click="changeDefaultEMail" -->
-            <van-checkbox v-model="isDefaultEMail" icon-size="30PX"
-              ><span class="text">保存电子邮箱为默认邮箱</span></van-checkbox
-            >
-            <!-- <van-checkbox-group v-model="isDefaultEMail">
-            <van-checkbox name="a">保存电子邮箱为默认邮箱</van-checkbox>
-            <van-checkbox name="b">复选框 b</van-checkbox>
-          </van-checkbox-group> -->
-          </div>
-        </div>
-        <div class="tab-header">备注</div>
-        <div class="textarea-remark">
-          <!-- <spanarea placeholder-style="color:#999999" placeholder="选填" v-model="condition.remark" /> -->
-          <!-- <input type="text"> -->
-          <textarea
-            rows="3"
-            placeholder-style="color:#999999"
-            placeholder="选填"
-            v-model="condition.remark"
-          ></textarea>
-        </div>
-        <!-- 占位 -->
-        <div
-          style="
-            height: 120px;
-            background-color: transparent;
-            color: transparent;
-            position: relative;
-          "
-        >
-          占位
-        </div>
-      </div>
-    </scroll-view>
-    <div class="push-btn">
-      <div
-        v-if="headerInfo.invoiceTitleName || true"
-        :class="{
-          btn: true,
-          'push-again-btn': true,
-          'blue-push-again-btn': custTypeId === 1,
-          'green-push-again-btn': custTypeId === 2,
-        }"
-        @click="submit"
-      >
-        提交
-      </div>
-      <div v-else class="btn disable-btn" disabled>请选择发票抬头</div>
-    </div>
+    <component :is="componentName"></component>
   </div>
 </template>
 
 <script>
-// const app = getApp()
-const app = {};
-import arrowIcon from '../static/images/arrows.png';
-import { mapState } from 'vuex';
-// import MemberCacheTool from '@/utils/member-cache-tool.js';
-import uni from '@/utils/uniHooks';
-import { getUrlParams } from '@/utils/index.js';
-import { Dialog, Toast } from 'vant';
-
+import officeBlueCom from '../components/officeBlue/parkingReceipt/parkingApplication.vue';
+import baseParkingFeeCom from '../components/base/parkingReceipt/parkingApplication.vue';
+import baseMixins from '../mixins/base'
 export default {
-  data() {
-    return {
-      picUrl: this.$picUrl,
-      globalData: app.globalData,
-      arrowIcon: arrowIcon,
-      isShow: false,
-      isDefaultEMail: false,
-      ids: [],
-      condition: {
-        // openid: this.openid,
-        // groupId: this.groupId,
-        // vipcode: this.member?.vipcode,
-        invoiceName: '', // 否|发票名称
-        invoiceCategory: 0, // 发票类型 0:停车缴费  1:活动
-        invoiceType: 0, // 发票类型:0:增值税普通电子发票
-        remark: '',
-        invoiceTitleId: 0, // long|发票抬头id
-        ids: [], // 被选中的缴费记录id
-        isDefaultEmail: '1', // 是|邮箱是否默认 0:否 1:是
-        mailbox: '',
-      },
-      headerInfo: {},
-      // 总金额,单位分
-      invoiceAmount: 0,
-      orderInfo: {},
-      type: '', // 当前是活动还是停车
-      isSubmitFlag: true, // 发票提交申请的flag,
-      pageOptions: null,
-      preUrl: '',
-      orderQuantity: 0,
-      parkingOrder: null,
-    };
-  },
-  created() {
-    // const options = this.$route.query;
-    // console.log('===>onLoad', options);
-    // this.pageOptions = options;
-    // 埋点本地化
-    this.preUrl = uni.getStorageSync('previousUrl');
-    uni.setStorageSync(
-      'previousUrl',
-      '/pages/parkingFee/parkingReceipt/parkingApplication.vue'
-    );
-  },
-  mounted() {
-    // console.log(253, this.ids);
-    setTimeout(() => {
-      uni.setNavigationBarTitle({
-        title: '发票申请',
-      });
-    }, 300);
-    // console.clear();
-    const query = getUrlParams();
-    // console.log('是否重新回到改页面', this.pageOptions);
-    // console.log('是否重新回到改页面', query);
-    // console.log(260, this.$route.query);
-    this.pageOptions = query;
-    if (this.pageOptions) {
-      const options = this.pageOptions;
-      // console.log('===>onShow', options);
-      // console.log('===>onShow', options.ids);
-
-      if (options.type && options.money) {
-        this.type = options.type;
-        this.invoiceAmount = options.money;
-      }
-      if (options.ids) {
-        const ids = options.ids;
-        if (ids.indexOf(',') > -1) {
-          this.ids = ids.split(',');
-        } else {
-          this.ids =
-            typeof ids === 'string'
-              ? ids.indexOf('[') > -1
-                ? JSON.parse(ids)
-                : [ids]
-              : ids;
-        }
-        this.orderQuantity = this.ids.length;
-        // console.log('获取订单信息');
-        this.getParkOrderInfo();
-        this.getInvoiceEmailInfo();
-      }
-      if (options.header) {
-        if (typeof options.header == 'string') {
-          this.headerInfo = JSON.parse(options.header);
-        } else if (typeof options.header == 'object') {
-          this.headerInfo = options.header;
-        }
-      } else {
-        this.getInvoiceTitle();
-      }
-    }
-  },
-  computed: {
-    ...mapState({
-      custTypeId: (state) => state.custTypeId,
-      groupId: (state) => state.groupId,
-      openid: (state) => state.openid,
-      mallId: (state) => state.mallId,
-      kipUserId: (state) => state.kipUserId,
-      userInfo: (state) => state.userInfo,
-      member: (state) => state.member,
-    }),
-  },
-  methods: {
-    changeShowMore() {
-      this.isShow = !this.isShow;
-    },
-    changeDefaultEMail() {
-      this.isDefaultEMail = !this.isDefaultEMail;
-    },
-    changeHeader() {
-      this.$router.push({
-        path: 'parkingChooseHeader?ids=' + this.ids,
-      });
-    },
-    gotoDetail() {
-      this.$store.commit('setTempParkingOrder', this.parkingOrder);
-      this.$router.push({
-        path: 'parkingOrderDetail?useParkingOrderCache=true',
-      });
-      // this.$router.push({
-      //   path:
-      //     '/pages/parkingFee/parkingFeeDetailSuccess?orderNo=' +
-      //     this.orderInfo.orderNo,
-      // })
-    },
-    // 查询全部抬头列表信息
-    getInvoiceTitle() {
-      const self = this;
-      const params = {
-        vipcode: this.member?.vipcode,
-      };
-      self.$md(params);
-      // console.log(265, '开票信息', params);
-      // console.log(
-      //   265,
-      //   '开票信息 path: ',
-      //   self.$baseURL + 'api/1.0/invoiceTitle/page'
-      // );
-      uni.request({
-        url: self.$baseURL + 'api/1.0/invoiceTitle/page',
-        method: 'GET',
-        data: params,
-        header: JSON.parse(uni.getStorageSync('handleUser')),
-        success: (res) => {
-          // console.log('开票信息', res.data);
-          if (res.data.code === 0) {
-            const list = res.data.data;
-            let currentIndex = 0;
-            list.map((item, index) => {
-              if (item.setDefault == 1) currentIndex = index;
-            });
-            const headerInfo = list[currentIndex] || {};
-            self.headerInfo = headerInfo;
-            // console.log('发票抬头--', self.headerInfo);
-          } else {
-            // uni.showToast({
-            //   title: res.data.msg,
-            //   duration: 2000,
-            //   icon: 'none',
-            // });
-            Toast({
-              message: res.data.msg,
-            });
-          }
-        },
-        fail: () => {
-          Toast({
-            message: '服务器开小差了呢,请您稍后再试',
-          });
-          /* uni.showToast({
-            title: '服务器开小差了呢,请您稍后再试',
-            icon: 'none',
-          }); */
-        },
-      });
-    },
-    // 根据选中的停车缴费记录id获取详情信息
-    getParkOrderInfo() {
-      // 如果当前是活动开票的话,则不差详情
-      if (this.type) return;
-      const self = this;
-      // console.log('根据选中的停车缴费记录id获取详情信息', this.ids);
-      self.$md(this.ids);
-      // console.log(
-      //   'getParkOrderInfo',
-      //   self.$baseURL + 'api/1.0/invoice/myParkOrderListByIds'
-      // );
-      // return;
-      uni.request({
-        url: self.$baseURL + 'api/1.0/invoice/myParkOrderListByIds',
-        method: 'POST',
-        data: typeof this.ids === 'string' ? [this.ids] : this.ids,
-        header: JSON.parse(uni.getStorageSync('handleUser')),
-        success: (res) => {
-          if (res.data.code === 0) {
-            const datas = res.data.data;
-            console.log('387387387387387387387获取详情信息', datas);
-            self.parkingOrder = datas;
-            self.invoiceAmount = (datas.invoiceAmount / 100).toFixed(2);
-            self.orderInfo = datas.list[0];
-          } else {
-            /* uni.showToast({
-              title: res.data.msg,
-              duration: 2000,
-              icon: 'none',
-            }); */
-            Toast({
-              message: res.data.msg,
-            });
-          }
-        },
-        fail: () => {
-          /* uni.showToast({
-            title: '服务器开小差了呢,请您稍后再试',
-            icon: 'none',
-          }); */
-          Toast({
-            message: '服务器开小差了呢,请您稍后再试',
-          });
-        },
-      });
-    },
-    // 获取用户邮箱信息
-    getInvoiceEmailInfo() {
-      const self = this;
-      // const openId = MemberCacheTool.getOpenId(app);
-      var data = {
-        openid: this.openId,
-        groupId: this.groupId,
-        vipcode: this.member?.vipcode,
-      };
-      self.$md(data);
-      // console.log(
-      //   '获取用户邮箱信息',
-      //   self.$baseURL + 'api/1.0/invoice/getInvoiceEmailInfo'
-      // );
-      // console.log(421, data);
-      uni.request({
-        url: self.$baseURL + 'api/1.0/invoice/getInvoiceEmailInfo',
-        method: 'POST',
-        data: data,
-        header: JSON.parse(uni.getStorageSync('handleUser')),
-        success: (res) => {
-          if (res.data.code === 0) {
-            console.log('获取用户邮箱信息', res.data);
-            if (res.data.data) {
-              this.isDefaultEMail = true;
-              this.condition.mailbox = res.data.data;
-            } else {
-              this.isDefaultEMail = false;
-              this.condition.mailbox = '';
-            }
-          } else {
-            /* uni.showToast({
-              title: res.data.msg,
-              duration: 2000,
-              icon: 'none',
-            }); */
-            Toast({
-              message: res.data.msg,
-            });
-          }
-        },
-        fail: () => {
-          Toast({
-            title: '服务器开小差了呢,请您稍后再试',
-          });
-          /* uni.showToast({
-            title: '服务器开小差了呢,请您稍后再试',
-            icon: 'none',
-          }); */
-        },
-      });
-    },
-    submit() {
-      const self = this;
-      if (!self.condition.mailbox) {
-        /* uni.showToast({
-          title: '请输入电子邮箱地址',
-          duration: 2000,
-          icon: 'none',
-        }); */
-        Toast({
-          message: '请输入电子邮箱地址',
-        });
-        return false;
-      }
-      // const re =
-      //   /^[A-Za-z\d]+([-_.][A-Za-z\d]+)*@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,4}$/;
-      // if (re.test(self.condition.mailbox)) {
-      //   uni.showToast({
-      //     title: '电子邮箱格式有误,请输入正确的电子邮箱',
-      //     duration: 2000,
-      //     icon: 'none',
-      //   });
-      //   return false;
-      // }
-      if (self.type && self.type == 'activity') {
-        self.condition.invoiceCategory = 1;
-      }
-      const params = self.condition;
-      params.ids = self.ids;
-      params.isDefaultEmail = self.isDefaultEMail ? '1' : '0';
-      params.invoiceTitleId = self.headerInfo.id;
-
-      params.openid = this.openid;
-      params.groupId = this.groupId;
-      params.vipcode = this.member?.vipcode;
-      // console.log('提交发票请求的入参', params);
-      self.$md(params);
-      if (self.isSubmitFlag) {
-        // 勾选默认邮箱埋点
-        if (self.isDefaultEMail) {
-          self.sensorsClick('$SetDefaultEmail', {
-            redirect_path: '',
-            mailbox: self.condition.mailbox,
-          });
-        }
-        self.isSubmitFlag = false;
-        console.log(488, '前往开票', params);
-        uni.request({
-          url: self.$baseURL + 'api/1.0/invoice/addMyInvoiceInfo',
-          method: 'POST',
-          data: params,
-          header: JSON.parse(uni.getStorageSync('handleUser')),
-          success: (res) => {
-            console.log('提交发票请求', res.data);
-            if (res.data.code === 0) {
-              // 因为合并开票接口中无法判断是否是一个CO(一个发票id可以直接进发票详情)还是两个CO,所以统一返回到发票列表页面 ?
-              this.$router.replace({
-                path: 'parkingReceipt',
-              });
-              // this.$router.replace({
-              //   path:
-              //     '/pages/parkingFee/parkingReceipt/parkingInvoiceApply?id=' +
-              //     res.data.data.id,
-              // })
-            } else {
-              /* uni.showToast({
-                title: res.data.msg,
-                duration: 2000,
-                icon: 'none',
-              }); */
-              Toast({
-                message: res.data.msg,
-              });
-            }
-          },
-          fail: () => {
-            self.isSubmitFlag = true;
-            /* uni.showToast({
-              title: '服务器开小差了呢,请您稍后再试',
-              icon: 'none',
-            }); */
-            oast({
-              message: '服务器开小差了呢,请您稍后再试',
-            });
-          },
-        });
-      }
-    },
-    // 埋点方法
-    sensorsClick(eventName, params) {
-      let optionsQuery = uni.getStorageSync('options_query');
-      let fixedParams = {
-          cta_itemno: '',
-          cta_name: '',
-          previous_path: this.preUrl || '',
-          $location: uni.getStorageSync('mallid'),
-          $brand_id: uni.getStorageSync('groupId'),
-          $channel: optionsQuery.channel || '',
-          // $utm_lbs: this.optionsQuery.utm_lbs || '',
-          $utm_channel: optionsQuery.utm_channel || '',
-          $utm_method: optionsQuery.utm_method || '',
-          $utm_source: optionsQuery.utm_source || '',
-          $utm_function: optionsQuery.utm_function || '',
-          $utm_user: optionsQuery.utm_user || '',
-        },
-        finalParams = Object.assign(fixedParams, params);
-      this.$sensors.track(eventName, finalParams);
-    },
+  mixins:[baseMixins],
+  components: {
+    officeBlueCom,
+    baseParkingFeeCom,
   },
 };
 </script>
-
-<style lang="less" scoped>
-@import '../../../styles/common.less';
-
-.scroll-Y {
-  width: 100%;
-  display: flex;
-  flex-direction: column;
-  // height: 88vh;
-  background-color: #f4f7ff;
-  // padding: 30px 20px;
-  box-sizing: border-box;
-
-  .push-box {
-    padding: 30px 20px;
-    width: 750px;
-    box-sizing: border-box;
-    margin-bottom: 180px;
-  }
-
-  .choose-invoice-header {
-    display: flex;
-    align-items: center;
-    justify-content: space-between;
-    // padding: 20px 30px;
-    padding: 32px;
-    font-size: 28px;
-    background: #fafbff;
-    border: 1px solid #d8dae0;
-    margin-bottom: 24px;
-    border-radius: 4px;
-
-    .invoice-header-info {
-      flex: 1;
-
-      .invoice-header-name {
-        color: #333333;
-        display: flex;
-        justify-content: space-between;
-        align-items: center;
-        padding-bottom: 32px;
-        border-bottom: 1px solid #d8dae0;
-
-        .isDefault {
-          color: #8cc63f;
-          border: 1px solid #8cc63f;
-          margin-left: 30px;
-          border-radius: 20px;
-          display: inline-block;
-          padding: 0 21px;
-        }
-      }
-
-      .duty-paragraph {
-        color: #999;
-        margin-top: 32px;
-      }
-    }
-  }
-
-  .tab-header {
-    color: #808080;
-    padding: 10px 20px 20px;
-  }
-
-  .part {
-    // background-color: #ffffff;
-
-    background: #fafbff;
-    // padding-left: 30px;
-    margin-bottom: 20px;
-    border-radius: 4px;
-    padding: 30px;
-    border: 1px solid #d8dae0;
-
-    .part-item {
-      font-size: 28px;
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
-      padding-bottom: 20px;
-
-      .part-item-key {
-        color: #333333;
-        min-width: 146px;
-      }
-
-      .part-item-value {
-        flex: 1;
-        color: #999;
-        text-align: right;
-        display: flex;
-        align-items: center;
-        .van-field__control {
-          text-align: right;
-        }
-      }
-    }
-
-    .is-show-more {
-      .part-item {
-        padding-top: 32px;
-      }
-    }
-
-    .tab-title {
-      color: #676767;
-      padding-top: 30px;
-    }
-
-    .show-more {
-      display: flex;
-      justify-content: space-between;
-      align-content: center;
-      // padding-right: 30px;
-
-      .arrow-box {
-        // transform: rotate(90deg);
-        // transition-duration:0.1s;
-        > img {
-          width: 30px;
-        }
-      }
-    }
-
-    .default-email {
-      justify-content: flex-start;
-      color: #999999;
-      margin-top: 20px;
-      // font-size: 28PX;
-      font-family: PingFangSC-Regular, PingFang SC;
-      font-weight: 400;
-      color: #999999;
-      padding-bottom: 0;
-      .text {
-        font-size: 28px;
-        font-weight: 400;
-        color: #999999;
-        line-height: 40px;
-      }
-      // line-height: 80PX;
-      // /deep/ .van-checkbox__icon {
-      //   font-size: 25PX;
-      // }
-      // /deep/ .van-checkbox__label {
-      //   line-height: 80PX;
-      // }
-    }
-  }
-
-  .top {
-    padding-top: 20px;
-    padding-bottom: 0 !important;
-  }
-
-  .middle {
-    // padding: 20px 0;
-
-    > .part-item {
-      // background-color: #ffffff;
-      // padding-left: 30px;
-    }
-
-    .purple {
-      color: #064c8a;
-    }
-  }
-
-  .footer {
-    // padding-top: 20px;
-    border-radius: 4px;
-  }
-
-  .textarea-remark {
-    margin-bottom: 20px;
-
-    > textarea {
-      background-color: #fafbff;
-      width: 100%;
-      padding: 32px;
-      // padding: 10px 20px;
-      border-radius: 4px;
-      box-sizing: border-box;
-
-      border-color: #d8dae0;
-    }
-  }
-
-  .invoice-header-arrow {
-    width: 30px;
-  }
-
-  .lines {
-    border-bottom: 1px solid #d8dae0;
-  }
-
-  .toBottom {
-    transform: rotate(90deg);
-    transition-duration: 0.1s;
-  }
-
-  .toRight {
-    transform: rotate(-90deg);
-    transition-duration: 0.1s;
-  }
-
-  .header-name {
-    padding: 0 !important;
-    border: unset !important;
-  }
-}
-.push-btn {
-  width: 100%;
-  height: 170px;
-  background-color: #fff;
-  // padding: 0 41px;
-  position: fixed;
-  bottom: 0;
-  z-index: 999;
-  box-sizing: border-box;
-  padding-bottom: constant(safe-area-inset-bottom);
-  padding-bottom: env(safe-area-inset-bottom);
-  box-shadow: 0 0 10px 0 hsla(0, 6%, 58%, 0.6);
-  -webkit-box-shadow: 0 0 20px 0 hsla(0, 6%, 58%, 0.6);
-  -moz-box-shadow: 0 0 20px 0 hsla(0, 6%, 58%, 0.6);
-  // width: 100%;
-  // padding: 20px 0;
-  // position: fixed;
-  // bottom: 0px;
-  // height: 110px;
-  // padding-bottom: constant(safe-area-inset-bottom);
-  // padding-bottom: env(safe-area-inset-bottom);
-  // box-shadow: 0 0 10px 0 hsla(0, 6%, 58%, 0.6);
-  // -webkit-box-shadow: 0 0 20px 0 hsla(0, 6%, 58%, 0.6);
-  // -moz-box-shadow: 0 0 20px 0 hsla(0, 6%, 58%, 0.6);
-
-  .btn {
-    // margin: 20px 60px;
-    color: #ffffff;
-    border-radius: 50px;
-    text-align: center;
-    // padding: 20px 0;
-    height: 80px;
-    line-height: 80px;
-    width: 90%;
-    margin: 0 auto;
-    margin-top: 25px;
-    border-radius: 45px;
-  }
-
-  .push-again-btn {
-    // background-image: linear-gradient(to right, #7d4ea1, #40397c);
-    background: #064c8a;
-  }
-
-  .blue-push-again-btn {
-    .color-background-color('blue');
-  }
-
-  .green-push-again-btn {
-    .color-background-color('green');
-  }
-
-  .disable-btn {
-    background-color: #bdbdbd;
-  }
-}
-</style>