dongke 1 рік тому
батько
коміт
cba5bdf557

+ 23 - 0
api/pages/oa/receipt.js

@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright(c) 2024 dongke All rights reserved. / Confidential
+ * 类的信息:
+ *		1.程序名称:
+ *		2.功能描述:oa  发票管理
+ * 编辑履历:
+ *		作者				日期					版本				修改内容
+ *		王英杰		  	     2024-1-19       			1.00		       	新建
+ *******************************************************************************/
+module.exports = {
+    receiptService: {
+        // 前缀
+        prefix: 'oauth-server/receipt/',
+        selectByTradeId:'select_by_tradeid'
+    },
+
+    routeUrl: {
+        receipt: { 
+            invoiceType: { key: 'invoiceType', url: '/package-base-select/pages/select-data/select-data',type:'invoiceType',dictCode:'基础资料-账户'  }, 
+            receiptType: { key: 'receiptType', url: '/package-base-select/pages/select-data/select-data',type:'kindData', kindType:'发票类型' ,  },
+        }
+    }
+};

+ 1 - 1
api/pages/oa/receiptFit.js

@@ -2,7 +2,7 @@
  * Copyright(c) 2024 dongke All rights reserved. / Confidential
  * 类的信息:
  *		1.程序名称:
- *		2.功能描述:oa  票设置API接口
+ *		2.功能描述:oa  票设置API接口
  * 编辑履历:
  *		作者				日期					版本				修改内容
  *		王英杰		  	     2024-1-19       			1.00		       	新建

+ 1 - 1
api/pages/oa/trade.js

@@ -15,7 +15,7 @@ module.exports = {
 
     routeUrl: {
         trade: {
-            invoiceType: { key: 'invoiceType', url: '/package-base-select/pages/select-data/select-data',type:'invoiceType',dictCode:'基础资料-账户'  },
+        
         }
     }
 };

+ 2 - 1
app.js

@@ -90,11 +90,12 @@ const sign = require('./api/pages/sharesign/sign.js');
 const trade = require('./api/pages/oa/trade.js'); 
 const receiptSet = require('./api/pages/oa/receiptSet.js'); 
 const receiptFit = require('./api/pages/oa/receiptFit.js'); 
+const receipt = require('./api/pages/oa/receipt.js'); 
 
 
 // api服务路由文件
 var apiList = [common, oauth,setting, company, wechatPay,user, staff, staffRight, staffPurview, settingValue, customer, role, roleFun, org, roleSensitive, goodsBrand, goodsCategory, goodsSeries, unit, supplier, warehouse, saleChannel, goodsSku, basicData,customerMst,purchase,account,payment,
-  receiptPayment,inbound,inboundOther,inboundProcessing,inboundPurchaseReturn,outbound,outboundOther,outboundProcessing,outboundSaleReturn,inventory,moneyAccount,intoReturn,intoReturnItem,cusFollow,order,transfer,saleOutBound,inboundReturn,cusReceiptPayment,menuFrequency,userMenuFrequency,comMenu,saleOutBoundReturn,activity,check,freeze,otherReceivable,otherPayable,inventoryAdjustment,report,saleReport,printLayout,exportPage,inboundItem,accReceiptPayment,supReceiptPayment,followPlan,share,coupon,integral,integralShare,integralItem,integralTactic,sign,couponReceive,couponSend,couponUse,trade,receiptSet,receiptFit]
+  receiptPayment,inbound,inboundOther,inboundProcessing,inboundPurchaseReturn,outbound,outboundOther,outboundProcessing,outboundSaleReturn,inventory,moneyAccount,intoReturn,intoReturnItem,cusFollow,order,transfer,saleOutBound,inboundReturn,cusReceiptPayment,menuFrequency,userMenuFrequency,comMenu,saleOutBoundReturn,activity,check,freeze,otherReceivable,otherPayable,inventoryAdjustment,report,saleReport,printLayout,exportPage,inboundItem,accReceiptPayment,supReceiptPayment,followPlan,share,coupon,integral,integralShare,integralItem,integralTactic,sign,couponReceive,couponSend,couponUse,trade,receiptSet,receiptFit,receipt]
 
 const util = require('./utils/util.js')
 const baseMethod = require('./api/pages/baseMethod.js')

+ 3 - 2
app.json

@@ -74,9 +74,10 @@
                 "pages/historical-purchase-history/historical-purchase-history",
                 "pages/draw-bill/draw-bill",
                 "pages/draw-bill/add/add",
-                "pages/invoice-header/invoice-header", 
+                "pages/invoice-header/invoice-header",
                 "pages/invoice-header/add/add",
-                "pages/understand-software/understand-software" 
+                "pages/understand-software/understand-software",
+                "pages/historical-purchase-history/detail/detail"
             ]
         },
         {

+ 36 - 28
components/dkbase/dk-form/dk-form.js

@@ -20,7 +20,7 @@ Component({
    * 组件的属性列表
    */
   properties: {
-    allowZero:{
+    allowZero: {
       type: Boolean,
       value: false
     },
@@ -309,7 +309,7 @@ Component({
      * @author : 周兴
      * @date   : 2024/2/20 11:46
      */
-    validData() { 
+    validData() {
       let flag = true;
       let cardList = this.data.cardList;
       if (!cardList || cardList.length == 0) {
@@ -321,29 +321,23 @@ Component({
         if (contentObj[card]) {
           contentObj[card].forEach(item => {
             let title = this.$t(item.title ? item.title : item.code)
-            // 如果必须输入,就要进行判断
-            // if (item.required && !form[item.code]) {
-            //   item.errMsg = title + '不为空'
-            //   flag = false;
-            // } else {
-            //   item.errMsg = undefined
-            // }
-            if (item.required) {  
+
+            if (item.required) {
               // 如果不允许0值且当前值为0,则设置错误消息  
-              if (!this.data.allowZero && form[item.code] === 0) {  
-                item.errMsg = title + '不能为0';  
-                flag = false;  
-              } else if (form[item.code] === undefined || form[item.code] === null || form[item.code] === '') {  
+              if (!this.data.allowZero && form[item.code] === 0) {
+                item.errMsg = title + '不能为0';
+                flag = false;
+              } else if (form[item.code] === undefined || form[item.code] === null || form[item.code] === '') {
                 // 如果不允许为空且当前值为空(或假值,但不包括特别处理的0)  
-                item.errMsg = title + '不为空';  
-                flag = false;  
-              } else {  
+                item.errMsg = title + '不为空';
+                flag = false;
+              } else {
                 // 其他情况,包括0(如果allowZero为true),清空错误消息  
-                item.errMsg = undefined;  
-              }  
-            } else {  
+                item.errMsg = undefined;
+              }
+            } else {
               // 如果该项不是必填项,则无需检查,直接清空错误消息  
-              item.errMsg = undefined;  
+              item.errMsg = undefined;
             }
             // 电话校验
             if (item.type == 'phone' && item.required && form[item.code]) {
@@ -354,6 +348,15 @@ Component({
                 flag = false;
               }
             }
+            // 邮箱
+            if (item.type == 'email' && item.required && form[item.code]) {
+              //验证一个字符串是否为有效的邮箱地址
+              var myreg = Constants.Emai_Regular_Expression
+              if (!myreg.test(form[item.code])) {
+                item.errMsg = title + '格式错误'
+                flag = false;
+              }
+            }
           })
         }
       })
@@ -362,6 +365,7 @@ Component({
       })
       return flag;
     },
+ 
     /**
      * @desc   : 默认隐藏或者显示列 四个参数(1.contentObj 要改变的对象列表    2. 对象列表需要改变的块名 3.改变块 里的 changeObj 改变规则 4.规则里的 规则名)
      * @author : 周兴
@@ -809,7 +813,7 @@ Component({
       // 获取微信基础配置
       wx.getSetting({
         withSubscriptions: true,
-        success(res) { 
+        success(res) {
           let bol = false
           // 适配存在多个订阅消息模板的情况
           if (res.subscriptionsSetting.itemSettings) {
@@ -939,7 +943,7 @@ Component({
      * @author : 周兴
      * @date : 2024/6/24
      */
-    clickPreview(e){
+    clickPreview(e) {
       this.triggerEvent("clickPreview", {})
     },
     /**
@@ -963,10 +967,14 @@ Component({
           url: '/package-base-select/pages/cropper/cropper',
           events: {
             // 回调后
-            bindData: function (data) { 
+            bindData: function (data) {
               const {
                 file
-              } = {file:[{path:data}]};
+              } = {
+                file: [{
+                  path: data
+                }]
+              };
               // 配置存放的文件夹 公司code - 表名 - 年月 -- 日
               let folder = app.globalData.company.cpCode + '/' + _this.data.table + '/' + new Date().toYearMonth2() + '/' + new Date().toDay()
               let url = config.upload_url;
@@ -1008,11 +1016,11 @@ Component({
           success: function (res) {
             // 通过eventChannel向被打开页面传送数据
             res.eventChannel.emit('params', {
-              src: e.detail.file[0].path, 
+              src: e.detail.file[0].path,
             })
           }
         })
-      } else { 
+      } else {
         const {
           file
         } = e.detail;
@@ -1053,7 +1061,7 @@ Component({
           })
         })
       }
-  
+
 
 
     },

+ 6 - 1
components/dkbase/dk-form/dk-form.wxml

@@ -3,6 +3,11 @@
   <!-- 单据信息 -->
   <view class="{{!transparentStyle ? 'dk-card-class' : ''}}" wx:for="{{cardList}}" wx:for-item="card" data-item="{{card}}">
     <view wx:for="{{contentObj[card]}}" wx:for-item="item" data-item="{{item}}" wx:key="index">
+       <!--邮箱-->
+       <van-field wx:if="{{item.type=='email' && !item.hide}}" required="{{item.required?true:false }}" data-key="{{item.code}}" data-item="{{item}}" data-index="{{index}}" data-card="{{card}}" value="{{ form[item.code]}}" input-align="left" label="{{item.title?item.title:$t[item.code]}}" placeholder="{{wxmlUtil.setPlaceholder($t,item.title?item.title:item.code)}}" autosize border="{{ false }}" clearable readonly="{{!!item.readonly}}" label-class="{{!!item.readonly?'readonly-label':'nomal-label'}}" input-class="dk-cell-value-class" maxlength="{{item.maxlength?item.maxlength:50}}" right-icon="{{item.rightIcon}}" bind:change="changeField" bind:blur="blurField" bind:clear="clearField" catchtap="openStr" errorMessage="{{item.errMsg}}">
+        <!-- <van-icon wx:if="{{item.tip}}" slot="label-icon" name="question-o" data-item="{{item}}" catchtap="showTip" /> -->
+        <dk-tip wx:if="{{item.tip}}" slot="label-icon" style="display: inline-block;" id="{{item.code}}" Up="{{true}}" Right="{{true}}" tipContent='{{item.tip}}'   bind:clickTip="clickTip"></dk-tip>
+      </van-field>
       <!--文本框-->
       <van-field wx:if="{{item.type=='str' && !item.hide}}" required="{{item.required?true:false }}" data-key="{{item.code}}" data-item="{{item}}" data-index="{{index}}" data-card="{{card}}" value="{{ form[item.code]}}" input-align="left" label="{{item.title?item.title:$t[item.code]}}" placeholder="{{wxmlUtil.setPlaceholder($t,item.title?item.title:item.code)}}" autosize border="{{ false }}" clearable readonly="{{!!item.readonly}}" label-class="{{!!item.readonly?'readonly-label':'nomal-label'}}" input-class="dk-cell-value-class" maxlength="{{item.maxlength?item.maxlength:50}}" right-icon="{{item.rightIcon}}" bind:change="changeField" bind:blur="blurField" bind:clear="clearField" catchtap="openStr" errorMessage="{{item.errMsg}}">
         <!-- <van-icon wx:if="{{item.tip}}" slot="label-icon" name="question-o" data-item="{{item}}" catchtap="showTip" /> -->
@@ -18,7 +23,7 @@
       </van-field>
       <!--选单-->
       <van-field wx:if="{{item.type=='choose' && !item.hide}}" required="{{item.required?true:false }}" data-name="{{item.name}}" data-key="{{item.code}}" data-item="{{item}}" data-index="{{index}}" data-card="{{card}}" value="{{ form[item.name]}}" input-align="left" label="{{item.title?item.title:$t[item.code]}}" placeholder="{{item.placeholder ? item.placeholder : wxmlUtil.setPlaceholder($t, item.title?item.title:item.code)}}" is-link catchtap="open" autosize border="{{ false }}" readonly="{{true}}" label-class="{{!!item.readonly?'readonly-label':'nomal-label'}}" input-class="dk-cell-value-class" data-type='{{item.dropType}}' errorMessage="{{item.errMsg}}">
-        <van-icon wx:if="{{!readonly &&  form[item.code]&& (item.clear || item.clear == undefined)}}" slot="icon" name="clear" color="#c8c9cc;" data-name="{{item.name}}" data-key="{{item.code}}" data-item="{{item}}" catchtap="clearChoose"></van-icon>
+        <van-icon wx:if="{{!readonly && !item.readonly &&  form[item.code]&& (item.clear || item.clear == undefined)}}" slot="icon" name="clear" color="#c8c9cc;" data-name="{{item.name}}" data-key="{{item.code}}" data-item="{{item}}" catchtap="clearChoose"></van-icon>
       </van-field>
 
       <van-field wx:if="{{item.type=='chooseAndStr' && !item.hide}}" required="{{item.required?true:false }}" data-name="{{item.name}}" data-key="{{item.code}}" data-item="{{item}}" data-index="{{index}}" data-card="{{card}}" value="{{ form[item.name]}}" input-align="left" label="{{item.title?item.title:$t[item.code]}}" placeholder="{{item.placeholder ? item.placeholder : wxmlUtil.setPlaceholder($t, item.title?item.title:item.code)}}" bind:click-icon="open" autosize border="{{ false }}" readonly="{{false}}" label-class="{{!!item.readonly?'readonly-label':'nomal-label'}}" bind:change="changeField" input-class="dk-cell-value-class" data-type='{{item.dropType}}' errorMessage="{{item.errMsg}}">

+ 4 - 0
components/dkbase/dk-list/dk-list.wxml

@@ -96,6 +96,10 @@
                 <dk-number-input class="number-class" sign="" fontSize="14" height="36rpx" data-key="{{col.name}}" placeholder="{{col.placeholder}}" center="left" data-index="{{fIndex}}" fontWeight="600" inputValue="{{item[col.name]}}" bind:triggerBindValue="changeNumberInput">
                 </dk-number-input>
               </view>
+              <view wx:if="{{col.type === 'amount'}}" style="width:100%;">
+                <dk-number-input class="number-class"  fontSize="14" height="36rpx" data-key="{{col.name}}" placeholder="{{col.placeholder}}" center="left" data-index="{{fIndex}}" formatThousandth="{{true}}" fontWeight="600" inputValue="{{item[col.name]}}" bind:triggerBindValue="changeNumberInput" inputColor="#FF7B1A">
+                </dk-number-input>
+              </view>
               <!-- <view wx:if="{{col.name === 'warningUpperLimit' || col.name === 'warningLowerLimit'}}">
                 <dk-number-input sign="" fontSize="14" center="center" data-key="{{col.name}}" placeholder="{{col.name === 'warningUpperLimit' ? '请输入警戒上限': '请输入警戒下限'}}" center="left" data-index="{{fIndex}}" maxFlag="{{false}}" minFlag="{{false}}" fontWeight="600" inputValue="{{item[col.name]}}" bind:triggerBindValue="changeAmount">
                 </dk-number-input>

+ 2 - 0
package-base-select/pages/select-data/select-data.js

@@ -263,6 +263,8 @@ Page({
         data = {
           id: item.cpId,
           name: item.cpName, 
+          taxNo: item.taxNo,
+          setId: item.setId,
         }
         break;
         //资金账户

+ 81 - 13
package-basic-data/pages/draw-bill/add/add.js

@@ -50,12 +50,12 @@ Page({
                     name: 'receiptTypeName',
                     title: mixins.$t("invoiceType"),
                     type: 'choose',
-                    urlKey: 'invoiceType',
+                    urlKey: 'receiptType',
                     required: true,
                 },
                 { //接收邮箱
                     code: 'cpEmail',
-                    type: 'str',
+                    type: 'email',
                     required: true,
                     title: mixins.$t('receivingEmail')
                 },
@@ -96,7 +96,7 @@ Page({
         }],
         receiptFitService: app.globalData['receiptFitService'], //发票设置
         // 路由
-        routeObjName: 'trade',
+        routeObjName: 'receipt',
     },
     /**
      * @desc : 页面加载数据方法
@@ -104,15 +104,15 @@ Page({
      * @author : 王英杰
      */
     loadInit() {
-        if (this.data.formMode != Constants.formMode.edit) {
-            let formData = this.data.formData ? JSON.parse(this.data.formData) : {}
-            formData.headType = "企业单位"
-            formData.totalInvoiceAmount = this.data.item.sum("tradeAmount")
-            this.setData({
-                formData: JSON.stringify(formData)
-            })
-            this.getReceiptFit()
-        }
+        let formData = this.data.formData ? JSON.parse(this.data.formData) : {}
+        formData.headType = "企业单位"
+        formData.totalInvoiceAmount = this.data.item.sum("tradeAmount")
+        let tradeList = this.data.item
+        this.setData({
+            formData: JSON.stringify(formData),
+            tradeList: tradeList,
+        })
+        this.getReceiptFit()
 
     },
     /**
@@ -149,15 +149,83 @@ Page({
      * @date   : 2024年3月12日
      */
     chooseData(e) {
+
         let formData = JSON.parse(this.data.formData)
         let code = e.detail.code
         let data = e.detail.data.data
-        if (code == "cpId") { //供应商
+        if (code == "cpId") { //公司名称
             formData.cpId = data.id
             formData.cpName = data.name
+            formData.setId = data.setId
+            formData.taxNo = data.taxNo
+        }
+        if (code == "receiptType") { //发票类型
+            formData.receiptType = data.id
+            formData.receiptTypeName = data.name
+
         }
+
         this.setData({
             formData: JSON.stringify(formData)
         })
     },
+    /**
+     * @desc : 底部按钮 监听
+     * @date : 2024/2/1 15:49
+     * @author : 王英杰
+     */
+    saveButton(e) {
+        let name = e.detail.name
+        if (name == 'preview') { //预览
+
+        } else if (name == 'submit') { //提交
+            this.save({})
+        }
+    },
+    /**
+     * @desc : 保存的參數設置
+     * @date : 2024/2/1 15:49
+     * @author : 王英杰
+     */
+    setParams(params) {
+        params.tradeList = this.data.tradeList
+        params.receiptSetId = params.setId //发票设置ID
+        params.receiptStatus = "发票状态-申请" //发票状态
+        params.receiptType = params.receiptType //发票类型
+        params.applyStaff = app.globalData.user.staffName //申请人
+        params.applyDate = util.formatDayTime(new Date()) //申请日期
+        params.cpId = params.cpId //公司Id
+        params.cpName = params.cpName //公司名称
+        params.taxNo = params.taxNo //公司税号
+        params.cpEmail = params.cpEmail //电子邮箱 
+        params.receiptAmt = params.totalInvoiceAmount //发票金额 
+        params.receiptContent = params.receiptContent //发票内容  
+        params.receiptObj = params.receiptObj //开票方名称  
+        params.taxRate = params.receiptType == "发票类型-普票" ? params.taxRateNormal : params.taxRateSpecial //税率  
+        params.remarks = params.remarks //备注  
+
+        console.log("params", params);
+        return params
+    },
+    /**
+     * @desc : 保存数据服务
+     * @date : 2024/2/1 15:49
+     * @author : 王英杰
+     */
+    saveData() {
+        let pages = getCurrentPages();
+        let prevPage = pages[pages.length - 2];
+        prevPage.setData({
+            refreshByAdd: true,
+        })
+ 
+        let prevPage3 = pages[pages.length - 3];
+        prevPage.setData({
+            refreshByAdd: true,
+        })
+
+        return this.excute(this.data.service, this.data.service.insert, this.data.params);
+
+
+    },
 })

+ 131 - 0
package-basic-data/pages/historical-purchase-history/detail/detail.js

@@ -0,0 +1,131 @@
+/*******************************************************************************
+ * Copyright(c) 2022 dongke All rights reserved. / Confidential
+ * 类的信息:
+ *		1.程序名称:
+ *		2.功能描述:发票详情
+ * 编辑履历:
+ *		作者				日期					版本				修改内容
+ *		王英杰		  	2022-11-22			1.00		   	新建
+ *******************************************************************************/
+const mixins = require('@/mixins/index.js')
+const util = require('@/utils/util.js')
+const Constants = require('@/utils/Constants.js');
+const api = require('@/utils/api.js');
+const config = require('@/config/config.js');
+const app = getApp()
+
+Page({
+    mixins: [mixins],
+    /**
+     * 页面的初始数据
+     */
+    data: {
+        cardList: ['main', 'other'],
+        contentObj: {
+            main: [{ //抬头类型
+                    code: 'headType',
+                    type: 'str',
+                    readonly: true,
+                    title: mixins.$t('headType')
+                },
+                { //购方名称
+                    code: 'cpId',
+                    name: 'cpName',
+                    title: mixins.$t("buyerName"),
+                    type: 'choose',
+                    urlKey: 'invoiceType',
+                    readonly: true,
+                },
+                { //购方税号
+                    code: 'taxNo',
+                    type: 'str',
+                    readonly: true,
+                    title: mixins.$t('BuyerTaxNumber')
+                },
+                { //发票类型
+                    code: 'receiptType',
+                    name: 'receiptTypeName',
+                    title: mixins.$t("invoiceType"),
+                    type: 'choose',
+                    urlKey: 'receiptType',
+                    readonly: true,
+                },
+                { //接收邮箱
+                    code: 'cpEmail',
+                    type: 'str',
+                    readonly: true,
+                    title: mixins.$t('receivingEmail')
+                },
+                { //备注
+                    code: 'remarks',
+                    type: 'str',
+                    readonly: true,
+                    title: mixins.$t('remarks')
+                },
+            ],
+
+            other: [ //备注
+                {
+                    code: 'receiptContent',
+                    type: 'textarea',
+                    readonly: true,
+                    title: mixins.$t('invoiceContent')
+                },
+                {
+                    code: 'receiptObj',
+                    type: 'textarea',
+                    readonly: true,
+                    title: mixins.$t('invoicingParty')
+                },
+                {
+                    code: 'receiptAmt',
+                    type: 'str',
+                    readonly: true,
+                    title: mixins.$t('totalInvoiceAmount')
+                }
+            ],
+        },
+        buttonSaveList: [{
+            code: 'preview',
+            title: '预览',
+            width: '120rpx',
+        }, {
+            code: 'submit',
+            title: '联系客服',
+            width: '120rpx',
+        }],
+        // 路由
+        routeObjName: 'receipt',
+    },
+    /**
+     * @desc : 加载数据
+     * @author : 王英杰
+     * @date : 2024/1/23 9:16
+     */
+    getData(params) {
+        let item = this.data.item
+        if (item.receiptStatusName == "未开票") {
+            return
+        }
+        return this.excute(this.data.service, this.data.service.selectByTradeId + '/' + item.tradeId, params).then(res => {
+            if (res.data.code == Constants.SUCESS_CODE) {
+                console.log("getData", res);
+                let formData = res.data.data
+                formData.headType = "企业单位"
+                this.setData({
+                    formData: JSON.stringify(formData)
+                })
+            }
+        });
+    },
+    /**
+     * @desc : 页面加载数据方法
+     * @date : 2024/2/1 15:49
+     * @author : 王英杰
+     */
+    loadInit() {
+        this.setData({
+            okkey: true
+        })
+    },
+})

+ 4 - 0
package-basic-data/pages/historical-purchase-history/detail/detail.json

@@ -0,0 +1,4 @@
+{
+    "usingComponents": {},
+    "navigationBarTitleText": "发票详情"
+}

+ 17 - 0
package-basic-data/pages/historical-purchase-history/detail/detail.wxml

@@ -0,0 +1,17 @@
+<!-- 列表区 -->
+<view wx:if="{{okkey}}">
+	<view wx:if="{{item.receiptStatusName =='未开票'}}" class="dk-card-class" style="margin:4vw">
+		<view class="invoice-message">
+			未开发票,不能查详情!
+		</view>
+	</view>
+
+	<view wx:if="{{item.receiptStatusName !='未开票'}}">
+
+		<dk-form id="{{formName}}" routeObjName="{{routeObjName}}" cardList="{{cardList}}" contentObj="{{contentObj}}" model:value="{{formData}}" table="{{table}}" bind:chooseData="chooseData" bindtap="handleTap">
+		</dk-form>
+
+		<!-- 新建按钮 -->
+		<dk-save-button btnAutoWidthFlag="{{true}}" btnRightFlag="{{true}}" buttonList="{{buttonSaveList}}" bind:open="saveButton"></dk-save-button>
+	</view>
+</view>

+ 10 - 0
package-basic-data/pages/historical-purchase-history/detail/detail.wxss

@@ -0,0 +1,10 @@
+ 
+
+.invoice-message {
+	font-family: PingFang HK;
+	font-size: 24px;
+	font-weight: 600;
+	line-height: 33.6px;
+	text-align: center;
+   margin: 10vw;
+}

+ 22 - 0
package-basic-data/pages/historical-purchase-history/historical-purchase-history.js

@@ -52,6 +52,7 @@ Page({
             {
                 name: 'tradeAmount', // todo 颜色 先不用变
                 title: mixins.$t('paidInAmount'),
+                type:'amount'
             },
             {
                 name: 'tradeAmount', //todo  目前表还没有这个字段
@@ -135,4 +136,25 @@ Page({
             }
         })
     },
+      /**
+     * @desc : 跳转明细
+     * @date : 2024/2/1 15:49
+     * @author : 王英杰
+     */
+    toDetail(e){  
+        wx.navigateTo({
+            url: '/package-basic-data/pages/historical-purchase-history/detail/detail',
+            events: {
+                // 回调后,在这里给页面赋值
+                refresh: function (e) { 
+                }
+            },
+            success: function (res) {
+                // 通过eventChannel向被打开页面传送数据 TODO 测试例子url是写死的,实际中,需要从route中读取
+                res.eventChannel.emit('params', {
+                    item:e.detail.item
+                })
+            }
+        })
+    },
 })

+ 1 - 1
package-basic-data/pages/invoice-header/add/add.js

@@ -65,7 +65,7 @@ Page({
                 },
                 { //电子邮箱
                     code: 'cpEmail',
-                    type: 'str',
+                    type: 'email',
                     title: mixins.$t('Email')
                 },
 

+ 3 - 0
utils/Constants.js

@@ -34,6 +34,9 @@ module.exports = {
   Mess_Max_Quantity: '超过最大值或最小值,最大值为9999999999.999999',
   // 手机号正则表达式 目前只有位数校验(11位)
   Mobile_Phone_Number_Regular_Expression: /^[0-9][0-9][0-9]{9}$/,
+  //验证一个字符串是否为有效的邮箱地址
+  Emai_Regular_Expression: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
+  
   // 提示信息
   Messages: {
     save_sucess: '保存成功',