From c41f5fe7fd28520935c31022c348238f75ab96f7 Mon Sep 17 00:00:00 2001
From: wtt <1985833171@qq.com>
Date: 星期三, 17 九月 2025 17:42:36 +0800
Subject: [PATCH] Merge branch 'Dev' of http://101.37.171.70:10101/r/~jhz/STUWMS into Dev
---
pages/quyangdan/table.vue | 2
pages/zutuosaoma/form.vue | 682 ++++++++++
uni_modules/zb-table/components/zb-table/zb-table.vue | 1345 +++++++++++++++++++++
uni_modules/zb-table/package.json | 81 +
uni_modules/zb-table/components/zb-table/js/util.js | 51
pages.json | 35
uni_modules/zb-table/components/zb-table/components/table-checkbox.vue | 180 ++
uni_modules/zb-table/components/zb-table/components/table-summary.vue | 77 +
pages/InnerHtmlPage/index.vue | 26
pages/zutuosaoma/table.vue | 28
uni_modules/zb-table/readme.md | 189 ++
uni_modules/zb-table/components/zb-table/js/summary.js | 88 +
uni_modules/zb-table/changelog.md | 106 +
uni_modules/zb-table/components/zb-table/components/table-side-summary.vue | 59
pages/chaituosaoma/form.vue | 678 ++++++++++
manifest.json | 2
uni_modules/zb-table/components/zb-table/components/zb-load-more.vue | 50
utils/mpaasScan.js | 5
pages/white/white.vue | 26
pages/index/index.vue | 15
uni_modules/zb-table/components/zb-table/components/table-h5-summary.vue | 78 +
21 files changed, 3,793 insertions(+), 10 deletions(-)
diff --git a/manifest.json b/manifest.json
index 9e5b387..d639705 100644
--- a/manifest.json
+++ b/manifest.json
@@ -3,7 +3,9 @@
"appid" : "__UNI__B002F49",
"description" : "",
"versionName" : "1.0.81",
+
"versionCode" : 181,
+ "versionName" : "1.0.80",
"transformPx" : false,
/* 5+App鐗规湁鐩稿叧 */
"app-plus" : {
diff --git a/pages.json b/pages.json
index f35caa3..9278ef0 100644
--- a/pages.json
+++ b/pages.json
@@ -767,6 +767,41 @@
{
"navigationBarTitleText" : ""
}
+ },
+ {
+ "path" : "pages/white/white",
+ "style" :
+ {
+ "navigationBarTitleText" : ""
+ }
+ },
+ {
+ "path" : "pages/zutuosaoma/table",
+ "style" :
+ {
+ "navigationBarTitleText" : "鏉$爜缁勬墭鍗曠紦瀛�"
+ }
+ },
+ {
+ "path" : "pages/zutuosaoma/form",
+ "style" :
+ {
+ "navigationBarTitleText" : "鏉$爜缁勬墭鍗�"
+ }
+ },
+ {
+ "path" : "pages/zutuosaoma/table",
+ "style" :
+ {
+ "navigationBarTitleText" : "缁勬墭鎵爜缂撳瓨"
+ }
+ },
+ {
+ "path" : "pages/chaituosaoma/form",
+ "style" :
+ {
+ "navigationBarTitleText" : "鎷嗘墭鎵爜"
+ }
}
],
"tabBar": {
diff --git a/pages/InnerHtmlPage/index.vue b/pages/InnerHtmlPage/index.vue
index de8b460..db19589 100644
--- a/pages/InnerHtmlPage/index.vue
+++ b/pages/InnerHtmlPage/index.vue
@@ -20,17 +20,29 @@
})
}
let pageMode = e.pageMode || 'vertical'
- if (pageMode == 'horizontal') {
- plus.screen.lockOrientation('landscape-primary');
- } else {
- plus.screen.lockOrientation('portrait-primary');
- }
+ // #ifdef APP-PLUS
+ uni.showLoading({
+ title: "鍔犺浇涓�..."
+ })
+ setTimeout(() => {
+ plus.screen.unlockOrientation();
+ if (pageMode == 'horizontal') {
+ plus.screen.lockOrientation('landscape-primary');
+ } else {
+ plus.screen.lockOrientation('portrait-primary');
+ }
+ uni.hideLoading();
+ }, 800)
+ //#endif
+
+
},
- onUnload() {
+ async onUnload() {
// 鎭㈠鍒扮珫灞�
+ plus.screen.unlockOrientation()
plus.screen.lockOrientation('portrait-primary');
- }
+ },
}
</script>
diff --git a/pages/chaituosaoma/form.vue b/pages/chaituosaoma/form.vue
new file mode 100644
index 0000000..5ca10b2
--- /dev/null
+++ b/pages/chaituosaoma/form.vue
@@ -0,0 +1,678 @@
+<template>
+ <view class="form">
+ <view class="form-base-info">
+ <view class="form-item">
+ <view class="title">绠辨潯鐮�</view>
+ <view class="right">
+ <input type="text" :focus="HBarCodePackFocus" v-model="HBarCode_Pack" @confirm="GetMeesageByBarCode_Pack(HBarCode_Pack)" />
+ </view>
+ <view class="right-icon">
+ <uni-icons class="right-icon" type="scan"
+ style="background-color: #3A78FF;padding: 6rpx;color: #fff;border-radius: 100%;" size="20"
+ @click="toScanCode"></uni-icons>
+ </view>
+ </view>
+ <!-- <view class="form-item">
+ <view class="title">鏉$爜</view>
+ <view class="right">
+ <input type="text" :focus="HBarCodeFocus" v-model="HBarCode" @confirm="GetMeesageByBarCode(HBarCode)" />
+ </view>
+ <view class="right-icon">
+ <uni-icons type="scan"
+ style="background-color: #3A78FF;padding: 6rpx;color: #fff;border-radius: 100%;" size="20"
+ @click="toScanCode2"></uni-icons>
+ </view>
+ </view> -->
+ </view>
+ <view class="tabs">
+ <view :class="tabs == 0 ? 'on':''" @tap="tabs = 0">瑁呯淇℃伅</view>
+ <view :class="tabs == 1 ? 'on':''" @tap="tabs = 1">鍗曟嵁淇℃伅</view>
+ </view>
+ <!-- 瑁呯淇℃伅 -->
+ <view v-if="tabs == 0">
+ <zb-table id="list-table" :style="{height: `${listTableHeight}px`}" :columns="columns" :data="listData"
+ :show-header="true" :border="true" :row-key="row => row.index" @toggleRowSelection="handleSelect"
+ @toggleAllSelection="handleSelectAll" />
+ </view>
+ <!-- 鍗曟嵁淇℃伅 -->
+ <view v-if="tabs == 1">
+ <view class="bill-info">
+ <view class="form-item">
+ <view class="title">鍗曟嵁鏃ユ湡</view>
+ <view class="right">
+ <uni-datetime-picker type="date" v-model="hform.HDate">
+ <input type="text" v-model="hform.HDate" />
+ </uni-datetime-picker>
+ </view>
+ </view>
+ </view>
+ <view class="bill-info">
+ <view class="form-item">
+ <view class="title">鍒跺崟浜�</view>
+ <view class="right disabled">
+ <input type="text" disabled :value="hform.HMaker" />
+ </view>
+ </view>
+ </view>
+ <view class="bill-info">
+ <view class="form-item">
+ <view class="title">鍗曟嵁鍙�</view>
+ <view class="right disabled">
+ <input type="text" disabled :value="hform.HBillNo" />
+ </view>
+ </view>
+ </view>
+ <view class="bill-info">
+ <view class="form-item">
+ <view class="title">鍗曟嵁ID</view>
+ <view class="right disabled">
+ <input type="text" disabled :value="hform.HInterID" />
+ </view>
+ </view>
+ </view>
+ <view class="bill-info">
+ <view class="form-item">
+ <view class="title">缁勭粐</view>
+ <view class="right disabled">
+ <input type="text" disabled :value="hform.HStockOrgName" />
+ </view>
+ </view>
+ </view>
+ </view>
+ <view class="bottom-btn" id="bottom-btn">
+ <button class="btn-a" size="mini" @tap="cmdSubmit">鎷嗙</button>
+ <view style="flex: 1;"></view>
+ <!-- <button class="btn-d" size="mini" @tap="cmdDelete">鍒犻櫎</button> -->
+ <button class="btn-c" size="mini" @tap="cmdExit">閫�鍑�</button>
+ </view>
+ </view>
+</template>
+
+<script>
+ import dayjs from 'dayjs'
+ import {
+ getUserInfo
+ } from "../../utils/auth";
+ import {
+ CommonUtils
+ } from "@/utils/common.js"
+ import {
+ MpaasScan
+ } from "@/utils/mpaasScan.js"
+ export default {
+ data() {
+ return {
+ // 璁$畻鍒楄〃楂樺害
+ bottomBtnTop: 0,
+ listTableTop: 0,
+ // 鍏叡鍙橀噺
+ HBarCodePackFocus: false,
+ HBarCodeFocus: false,
+ HBarCode_Pack: '', //绠辨潯鐮�
+ HBarCode: '', // 鍖呮潯鐮�
+ tabs: 0,
+ HBillType: '3783',
+ HBillSubType: '1', //瀛愮被鍨嬶紙1鎷嗙銆�2鎷嗘墭锛�
+ OperationType: 1, //鎿嶄綔绫诲瀷锛�1鏂板銆�2浠庣紦瀛樺垪琛ㄤ腑杩斿洖锛�
+ HMaterNumber_Pack: "", //鎵樻潯鐮佸搴旂墿鏂欎唬鐮�
+ listOption: [],
+ listData: [],
+ columns: [
+ {
+ type: 'selection',
+ fixed: true,
+ width: 50
+ },
+ {
+ name: 'index',
+ label: '搴忓彿',
+ width: 60
+ },
+ {
+ name: '鏉$爜缂栧彿',
+ label: '鏉$爜缂栧彿',
+ width: 200,
+ },
+ {
+ name: '鏁伴噺',
+ label: '鏁伴噺',
+ width: 100,
+ },
+ {
+ name: '鐗╂枡浠g爜',
+ label: '鐗╂枡浠g爜',
+ width: 200,
+ },
+ {
+ name: '鐗╂枡鍚嶇О',
+ label: '鐗╂枡鍚嶇О',
+ width: 200,
+ },
+ {
+ name: '鏉$爜涓暟',
+ label: '鏉$爜涓暟',
+ width: 100,
+ }
+ ],
+ selectedRows: [], // 瀛樺偍閫変腑鐨勬暟鎹�
+ HModName: "Sc_PackUnionBill_Packing_PDA",
+ ModRightName: "CE_PackUnionBill_Packing", //妯″潡鏉冮檺鍙傛暟
+ titleData: [], //涓嶉渶瑕佹樉绀虹殑瀛楁
+ OperationType: 1, //浠庣紦瀛樺垪琛ㄤ腑杩斿洖鏁版嵁绫诲瀷锛�1鏂板銆�2浠庣紦瀛樺垪琛ㄤ腑杩斿洖锛�
+ HBarCode_Pack_Temp: "", //浠庣紦瀛樺垪琛ㄤ腑杩斿洖绠辨潯鐮�
+
+ // 琛ㄥ崟鎻愪氦鍊�
+ hform: {
+ HDate: dayjs(new Date()).format('YYYY-MM-DD'),
+ HMaker: getUserInfo()['Czymc'],
+ HBillNo: '',
+ HInterID: '',
+ HStockOrgName: uni.getStorageSync("Organization"),
+ HStockOrgID: uni.getStorageSync("OrganizationID"),
+ },
+ // 鍒嗛〉妯″潡鍏冩暟鎹�
+ paginationMeta: {
+
+ }
+ }
+ },
+ methods: {
+ async HBarCodeFocusRefresh(){
+ this.HBarCode = ''
+ this.HBarCodeFocus = false
+ await this.$nextTick()
+ this.HBarCodeFocus = true
+ },
+ async HBarCodePackFocusRefresh(){
+ this.HBarCode_Pack = ''
+ this.HBarCodePackFocus = false
+ await this.$nextTick()
+ this.HBarCodePackFocus = true
+ },
+ toScanCode() {
+ MpaasScan.scanCode((scanCode) => {
+ this.HBarCode_Pack = scanCode
+ this.GetMeesageByBarCode_Pack(HBarCode_Pack)
+ })
+ },
+ GetMeesageByBarCode_Pack(HBarCode_Pack) {
+ // 鑾峰彇鎵樻潯鐮佸搴旂殑鏁版嵁
+ CommonUtils.doRequest2({
+ url: '/WEBSController/Get_PackBarCode_UnPackUnionBill_Json',
+ data: {
+
+ HBillSubType: this.HBillSubType,
+ HBarCode_Pack: HBarCode_Pack
+ },
+ resFunction: (res) => {
+ let {
+ data,
+ count,
+ Message,
+ list
+ } = res.data
+ if (count == 1) {
+ CommonUtils.playSound(1)
+ this.hform.HBillNo = data[0].HBillNo
+ this.hform.HInterID = data[0].HInterID
+ this.HMaterNumber_Pack = data[0].HMaterNumber
+ this.DisBillEntryList();
+ uni.showToast({
+ icon: 'none',
+ title: Message
+ })
+ } else {
+ CommonUtils.playSound(1)
+ this.HBarCodePackFocusRefresh()
+ uni.showToast({
+ icon: 'none',
+ title: Message
+ })
+ }
+ }
+ })
+ },
+ toScanCode2() {
+ MpaasScan.scanCode((scanCode) => {
+ this.HBarCode = scanCode
+ GetMeesageByBarCode(scanCode)
+ })
+ },
+ GetMeesageByBarCode(HBarCode) {
+ // 鑾峰彇鍖呮潯鐮佸搴旂殑鏁版嵁
+ let HBarCode_Pack = this.HBarCode_Pack
+ let sOldBarCode = this.HBarCode
+ let HDeleteFlag = sOldBarCode.substring(0, 1)
+ let sBarCode = sOldBarCode.slice(1)
+ if (!HBarCode_Pack) {
+ return uni.showToast({
+ icon: 'none',
+ title: '鎵樻潯鐮佷负绌猴紝璇峰厛鎵弿鎵樻潯鐮�',
+ })
+ }
+
+ if (HDeleteFlag == '*') {
+ if (!sBarCode) {
+ return uni.showToast({
+ icon: 'none',
+ title: '璇锋壂鎻忚鍒犻櫎鐨勭鏉$爜',
+ })
+ } else {
+ this.HBarCodeFocusRefresh()
+ }
+ CommonUtils.doRequest2({
+ url: '/WEBSController/set_DelPackUnionBill_Temp_Pack_Json',
+ data: {
+ "HInterID": this.hform.HInterID,
+ "HBarCode": sBarCode,
+ "HBillType": this.HBillType
+ },
+ resFunction: (res) => {
+ let {
+ data,
+ count,
+ Message
+ } = res.data
+ if (count == 1) {
+ CommonUtils.playSound(1)
+ this.DisBillEntryList()
+ } else {
+ CommonUtils.playSound(0)
+ uni.showToast({
+ icon: 'none',
+ title: Message
+ })
+ }
+ }
+ })
+ } else {
+ let sBarCode = this.HBarCode
+ if (!sBarCode) {
+ return uni.showToast({
+ icon: 'none',
+ title: '绠辨潯鐮佷笉鑳戒负绌猴紝璇锋壂鎻忕鏉$爜',
+ })
+ }
+ CommonUtils.doRequest2({
+ url: '/WEBSController/Get_BarCode_PackUnionBill_New_Json',
+ data: {
+ "HInterID": this.hform.HInterID,
+ "HBarCode": sBarCode,
+ "HBillType": this.HBillType,
+ "HBillNo": this.hform.HBillNo,
+ "HBillSubType": this.HBillSubType,
+ "HBarCode_Pack": HBarCode_Pack,
+ "HMaterNumber_Pack": this.HMaterNumber_Pack,
+ "HMaker": this.hform.HMaker,
+ "HStockOrgID": this.hform.HStockOrgID
+ },
+ resFunction: (res) => {
+ let {
+ data,
+ count,
+ Message
+ } = res.data
+ if (count == 1) {
+ CommonUtils.playSound(1)
+ this.HBarCodeFocusRefresh()
+ this.DisBillEntryList()
+ } else {
+ CommonUtils.playSound(0)
+ this.HBarCodeFocusRefresh()
+ uni.showToast({
+ icon: 'none',
+ title: Message
+ })
+ }
+ }
+ })
+ }
+ },
+ DisBillEntryList() {
+ CommonUtils.doRequest2({
+ url: '/WEBSController/GetBillEntry_Tmp_Pack_Json',
+ data: {
+ "HInterID": this.hform.HInterID,
+ "HBillNo": this.hform.HBillNo,
+ "HBillType": this.HBillType
+ },
+ resFunction: (res) => {
+ let {
+ count,
+ data,
+ Message
+ } = res.data
+ if (count == 1) {
+ this.listData = []
+ for (let i = 0; i < data.length; i++) {
+ this.listData.push(Object.assign(data[i], {
+ index: i
+ }))
+ }
+ } else {
+ // 娌℃湁浠讳綍璁板綍瑙嗕负浠�0寮�濮嬫柊澧�
+ this.listData = []
+ }
+ }
+ })
+ },
+ handleSelect(selected, array) {
+ this.selectedRows = array
+ },
+ handleSelectAll(selected, array) {
+ this.selectedRows = array
+ },
+ getMaxNo() {
+ CommonUtils.doRequest2({
+ url: "/WEBSController/GetMaxBillNoAndID_Json",
+ data: {
+ "HBillType": this.HBillType
+ },
+ resFunction: (d) => {
+ console.log('d: ', d);
+ let {
+ count,
+ data,
+ Message
+ } = d.data
+ if (count == 1) {
+ this.hform.HInterID = data[0].HInterID;
+ this.hform.HBillNo = data[0].HBillNo
+ } else {
+
+ uni.showModal({
+ title: "娓╅Θ鎻愮ず",
+ showCancel: false,
+ content: Message
+
+ })
+
+ }
+ }
+ })
+ },
+ submitPreCheck() {
+ if (CommonUtils.isEmpty(this.hform.HInterID)) {
+ uni.showToast({
+ icon: 'none',
+ title: '鍗曟嵁鍐呯爜鑾峰彇澶辫触锛岄敊璇殑鍗曟嵁鍐呯爜锛�'
+ })
+ return false
+ }
+ if (CommonUtils.isEmpty(this.hform.HBillNo)) {
+ uni.showToast({
+ icon: 'none',
+ title: '鍗曟嵁鍙疯幏鍙栧け璐ワ紝閿欒鐨勫崟鎹彿锛�'
+ })
+ return false
+ }
+ if (this.listData.length < 1) {
+ uni.showToast({
+ icon: 'none',
+ title: '娌℃湁鎵爜淇℃伅锛岃鍏堟壂鎻忔潯鐮侊紝纭鏃犺鍚庡啀鎻愪氦锛�'
+ })
+ return false
+ }
+ return true
+ },
+ cmdDelete() {
+ console.log('this.selectedRows: ', this.selectedRows);
+ if (this.selectedRows.length != 1) {
+ return uni.showToast({
+ icon: 'none',
+ title: '璇烽�夋嫨涓�琛岃褰曪紝杩涜鍒犻櫎锛�'
+ })
+ }
+ uni.showModal({
+ title: '鍒犻櫎纭',
+ content: '纭瑕佸垹闄ら�変腑琛屾墍鏈夋壂鐮佽褰曪紵鍒犻櫎鍚庡皢涓嶅彲鎭㈠!',
+ success: () => {
+ if (confirm) {
+ CommonUtils.doRequest2({
+ url: '/WEBSController/set_DelPackUnionBill_Temp_Pack_Json',
+ data: {
+ HInterID: this.hform.HInterID,
+ HBillType: this.HBillType,
+ HBarCode: this.selectedRows[0].HBarCode
+ },
+ resFunction: (res) => {
+ let {
+ data,
+ count,
+ Message
+ } = res.data
+ if (count == 1) {
+ CommonUtils.playSound(1)
+ uni.showToast({
+ icon: 'none',
+ title: Message
+ })
+ this.DisBillEntryList()
+ } else {
+ CommonUtils.playSound(0)
+ uni.showToast({
+ icon: 'none',
+ title: Message
+ })
+ }
+ }
+ })
+ }
+ }
+ })
+ },
+ cmdSubmit() {
+ let checkRes = this.submitPreCheck()
+ if (!checkRes) {
+ return
+ }
+ CommonUtils.doRequest2({
+ url: '/WEBSController/set_SaveUnPackUnionBill_Json',
+ data: {
+ "HInterID": this.hform.HInterID,
+ "HBillNo": this.hform.HBillNo,
+ "HBarCode_Pack": this.HBarCode_Pack,
+ "HMaker": this.hform.HMaker,
+ },
+ resFunction: (res) => {
+ let {data, count, Message} = res.data
+ if(count == 1){
+ uni.showModal({
+ title: '娓╅Θ鎻愮ず',
+ content: Message,
+ confirmText: "鏂板",
+ cancelText: '鍏抽棴',
+ success: ({confirm,cancel}) => {
+ if(confirm) {
+ uni.redirectTo({
+ url: "/pages/zutuosaoma/form"
+ })
+ }
+
+ if(cancel) {
+ uni.navigateBack()
+ }
+ }
+ })
+ }else {
+ uni.showToast({
+ icon:'none',
+ title: Message
+ })
+ }
+ }
+ })
+ },
+ cmdExit() {
+ uni.navigateBack()
+ }
+ },
+ computed: {
+ listTableHeight: {
+ get() {
+ return this.bottomBtnTop - this.listTableTop - 10
+ }
+ }
+ },
+ async onReady() {
+ // #ifndef MP-WEIXIN
+ let query = uni.createSelectorQuery().in(this)
+ query.select("#bottom-btn")
+ .boundingClientRect((data) => {
+ if (data) {
+ this.bottomBtnTop = data.top
+ } else {
+ console.log("鏈壘鍒�#bottom-btn鑺傜偣");
+ }
+ })
+ .exec();
+ query.select("#list-table")
+ .boundingClientRect((data) => {
+ if (data) {
+ this.listTableTop = data.top
+ } else {
+ console.log("鏈壘鍒�#list-table鑺傜偣");
+ }
+ })
+ .exec();
+ // #endif
+ },
+ onLoad(e) {
+ this.OperationType = e.OperationType || 1
+ this.HBarCode_Pack_Temp = e.CommonUtils || ""
+
+ if (this.OperationType == 1) {
+ this.getMaxNo()
+ } else if (this.OperationType == 2) {
+
+ }
+ }
+ }
+</script>
+
+<style lang="scss">
+ input {
+ width: inherit;
+ padding: 8rpx 20rpx;
+ font-size: 30rpx;
+ }
+
+ .form {
+ display: flex;
+ flex-direction: column;
+ gap: 20rpx;
+
+ .form-base-info {
+ display: flex;
+ flex-direction: column;
+ gap: 10rpx;
+ box-sizing: border-box;
+ padding: 30rpx;
+ }
+
+ .bill-info {
+ display: flex;
+ flex-direction: column;
+ gap: 10rpx;
+ box-sizing: border-box;
+ padding: 16rpx 30rpx;
+ }
+
+ .form-item {
+ display: flex;
+ flex-direction: row;
+ gap: 10rpx;
+
+ .title {
+ width: 5rem;
+ flex-shrink: 0;
+ }
+
+ .right {
+ flex: 1;
+ border-radius: 22rpx;
+ border: 1px solid #acacac;
+ }
+
+ .disabled {
+ border: 1px solid #e4e4e4;
+ background-color: #e4e4e4;
+ }
+
+ .right-icon {
+ flex-shrink: 0;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ }
+
+ }
+ }
+
+ .tabs {
+ width: 100%;
+ display: flex;
+ border-bottom: 1px solid #ddd;
+ margin: 20rpx 0;
+
+ view {
+ width: 25%;
+ font-size: 30rpx;
+ color: #555;
+ text-align: center;
+ padding: 16rpx 0;
+ }
+
+ .on {
+ color: #3a78ff;
+ font-weight: bold;
+ border-bottom: 3px solid #3a78ff;
+ }
+ }
+
+ .bottom-btn {
+ width: 100%;
+ box-sizing: border-box;
+ // height: 120rpx;
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ background-color: #fff;
+ box-shadow: 0 2rpx 10rpx 2rpx rgba(0, 0, 0, 0.4);
+ padding: 30rpx 40rpx 40rpx 40rpx;
+ display: flex;
+ flex-direction: row;
+ gap: 10rpx;
+
+ button {
+ border-radius: 50rpx;
+ width: 180rpx;
+ height: 66rpx;
+ line-height: 66rpx;
+ font-size: 28rpx;
+ }
+
+ .btn-a {
+ background-color: #3A78FF;
+ color: #fff;
+ }
+
+ .btn-b {
+ background-color: #41a863;
+ color: #fff;
+ }
+
+ .btn-c {
+ background-color: #acacac;
+ color: #fff;
+ // position: absolute;
+ // right: 120rpx;
+ }
+
+ .btn-d {
+ background-color: #ff8901;
+ color: #fff;
+ }
+ }
+
+</style>
\ No newline at end of file
diff --git a/pages/index/index.vue b/pages/index/index.vue
index 65fa8a4..0cc7315 100644
--- a/pages/index/index.vue
+++ b/pages/index/index.vue
@@ -210,7 +210,20 @@
url: `/pages/InnerHtmlPage/index?src=http://172.16.72.15:8999/index.aspx?name=${getUserInfo()['HICNumber']}&pageTitle=妫�楠屾姤鍛�&pageMode=horizontal`,
id: 24,
hidden: false,
- },
+ },{
+ img: '../../static/icon/icon8.png',
+ text: '缁勬墭鎵爜',
+ url: `/pages/zutuosaoma/form`,
+ id: 25,
+ hidden: false,
+ },
+ {
+ img: '../../static/icon/icon8.png',
+ text: '鎷嗘墭鎵爜',
+ url: `/pages/chaituosaoma/form`,
+ id: 26,
+ hidden: false,
+ }
],
// itemData: [{
// img: '../../static/icon/icon1.png',
diff --git a/pages/quyangdan/table.vue b/pages/quyangdan/table.vue
index ed0a009..ed247e7 100644
--- a/pages/quyangdan/table.vue
+++ b/pages/quyangdan/table.vue
@@ -447,6 +447,8 @@
width: 100%;
}
}
+
+
}
input {
diff --git a/pages/white/white.vue b/pages/white/white.vue
new file mode 100644
index 0000000..a8f4551
--- /dev/null
+++ b/pages/white/white.vue
@@ -0,0 +1,26 @@
+<template>
+ <view>
+
+ </view>
+</template>
+
+<script>
+ export default {
+ name: 'white',
+ data() {
+ return {
+
+ }
+ },
+ onLoad: () => {
+ uni.navigateBack()
+ },
+ methods: {
+
+ }
+ }
+</script>
+
+<style>
+
+</style>
diff --git a/pages/zutuosaoma/form.vue b/pages/zutuosaoma/form.vue
new file mode 100644
index 0000000..b6c1725
--- /dev/null
+++ b/pages/zutuosaoma/form.vue
@@ -0,0 +1,682 @@
+<template>
+ <view class="form">
+ <view class="form-base-info">
+ <view class="form-item">
+ <view class="title">鎵樻潯鐮�</view>
+ <view class="right">
+ <input type="text" :focus="HBarCodePackFocus" v-model="HBarCode_Pack" @confirm="GetMeesageByBarCode_Pack(HBarCode_Pack)" />
+ </view>
+ <view class="right-icon">
+ <uni-icons class="right-icon" type="scan"
+ style="background-color: #3A78FF;padding: 6rpx;color: #fff;border-radius: 100%;" size="20"
+ @click="toScanCode"></uni-icons>
+ </view>
+ </view>
+ <view class="form-item">
+ <view class="title">鏉$爜</view>
+ <view class="right">
+ <input type="text" :focus="HBarCodeFocus" v-model="HBarCode" @confirm="GetMeesageByBarCode(HBarCode)" />
+ </view>
+ <view class="right-icon">
+ <uni-icons type="scan"
+ style="background-color: #3A78FF;padding: 6rpx;color: #fff;border-radius: 100%;" size="20"
+ @click="toScanCode2"></uni-icons>
+ </view>
+ </view>
+ </view>
+ <view class="tabs">
+ <view :class="tabs == 0 ? 'on':''" @tap="tabs = 0">瑁呯淇℃伅</view>
+ <view :class="tabs == 1 ? 'on':''" @tap="tabs = 1">鍗曟嵁淇℃伅</view>
+ </view>
+ <!-- 瑁呯淇℃伅 -->
+ <view v-if="tabs == 0">
+ <zb-table id="list-table" :style="{height: `${listTableHeight}px`}" :columns="columns" :data="listData"
+ :show-header="true" :border="true" :row-key="row => row.index" @toggleRowSelection="handleSelect"
+ @toggleAllSelection="handleSelectAll" />
+ </view>
+ <!-- 鍗曟嵁淇℃伅 -->
+ <view v-if="tabs == 1">
+ <view class="bill-info">
+ <view class="form-item">
+ <view class="title">鍗曟嵁鏃ユ湡</view>
+ <view class="right">
+ <uni-datetime-picker type="date" v-model="hform.HDate">
+ <input type="text" v-model="hform.HDate" />
+ </uni-datetime-picker>
+ </view>
+ </view>
+ </view>
+ <view class="bill-info">
+ <view class="form-item">
+ <view class="title">鍒跺崟浜�</view>
+ <view class="right disabled">
+ <input type="text" disabled :value="hform.HMaker" />
+ </view>
+ </view>
+ </view>
+ <view class="bill-info">
+ <view class="form-item">
+ <view class="title">鍗曟嵁鍙�</view>
+ <view class="right disabled">
+ <input type="text" disabled :value="hform.HBillNo" />
+ </view>
+ </view>
+ </view>
+ <view class="bill-info">
+ <view class="form-item">
+ <view class="title">鍗曟嵁ID</view>
+ <view class="right disabled">
+ <input type="text" disabled :value="hform.HInterID" />
+ </view>
+ </view>
+ </view>
+ <view class="bill-info">
+ <view class="form-item">
+ <view class="title">缁勭粐</view>
+ <view class="right disabled">
+ <input type="text" disabled :value="hform.HStockOrgName" />
+ </view>
+ </view>
+ </view>
+ </view>
+ <view class="bottom-btn" id="bottom-btn">
+ <button class="btn-a" size="mini" @tap="cmdSubmit">鎻愪氦</button>
+ <view style="flex: 1;"></view>
+ <button class="btn-d" size="mini" @tap="cmdDelete">鍒犻櫎</button>
+ <button class="btn-c" size="mini" @tap="cmdExit">閫�鍑�</button>
+ </view>
+ </view>
+</template>
+
+<script>
+ import dayjs from 'dayjs'
+ import {
+ getUserInfo
+ } from "../../utils/auth";
+ import {
+ CommonUtils
+ } from "@/utils/common.js"
+ import {
+ MpaasScan
+ } from "@/utils/mpaasScan.js"
+ export default {
+ data() {
+ return {
+ // 璁$畻鍒楄〃楂樺害
+ bottomBtnTop: 0,
+ listTableTop: 0,
+ // 鍏叡鍙橀噺
+ HBarCodePackFocus: false,
+ HBarCodeFocus: false,
+ HBarCode_Pack: '', //绠辨潯鐮�
+ HBarCode: '', // 鍖呮潯鐮�
+ tabs: 0,
+ HBillType: '3783',
+ HBillSubType: '1', //瀛愮被鍨嬶紙1瑁呯銆�2缁勬墭锛�
+ OperationType: 1, //鎿嶄綔绫诲瀷锛�1鏂板銆�2浠庣紦瀛樺垪琛ㄤ腑杩斿洖锛�
+ HMaterNumber_Pack: "", //鎵樻潯鐮佸搴旂墿鏂欎唬鐮�
+ listOption: [],
+ listData: [],
+ columns: [
+ {
+ type: 'selection',
+ fixed: true,
+ width: 50
+ },
+ {
+ name: 'index',
+ label: '搴忓彿',
+ width: 60
+ },
+ {
+ name: '鏉$爜缂栧彿',
+ label: '鏉$爜缂栧彿',
+ width: 200,
+ },
+ {
+ name: '鏁伴噺',
+ label: '鏁伴噺',
+ width: 100,
+ },
+ {
+ name: '鐗╂枡浠g爜',
+ label: '鐗╂枡浠g爜',
+ width: 200,
+ },
+ {
+ name: '鐗╂枡鍚嶇О',
+ label: '鐗╂枡鍚嶇О',
+ width: 200,
+ },
+ {
+ name: '鏉$爜涓暟',
+ label: '鏉$爜涓暟',
+ width: 100,
+ }
+ ],
+ selectedRows: [], // 瀛樺偍閫変腑鐨勬暟鎹�
+ HModName: "Sc_PackUnionBill_Packing_PDA",
+ ModRightName: "CE_PackUnionBill_Packing", //妯″潡鏉冮檺鍙傛暟
+ titleData: [], //涓嶉渶瑕佹樉绀虹殑瀛楁
+ OperationType: 1, //浠庣紦瀛樺垪琛ㄤ腑杩斿洖鏁版嵁绫诲瀷锛�1鏂板銆�2浠庣紦瀛樺垪琛ㄤ腑杩斿洖锛�
+ HBarCode_Pack_Temp: "", //浠庣紦瀛樺垪琛ㄤ腑杩斿洖绠辨潯鐮�
+
+ // 琛ㄥ崟鎻愪氦鍊�
+ hform: {
+ HDate: dayjs(new Date()).format('YYYY-MM-DD'),
+ HMaker: getUserInfo()['Czymc'],
+ HBillNo: '',
+ HInterID: '',
+ HStockOrgName: uni.getStorageSync("Organization"),
+ HStockOrgID: uni.getStorageSync("OrganizationID"),
+ },
+ // 鍒嗛〉妯″潡鍏冩暟鎹�
+ paginationMeta: {
+
+ }
+ }
+ },
+ methods: {
+ async HBarCodeFocusRefresh(){
+ this.HBarCode = ''
+ this.HBarCodeFocus = false
+ await this.$nextTick()
+ this.HBarCodeFocus = true
+ },
+ async HBarCodePackFocusRefresh(){
+ this.HBarCode_Pack = ''
+ this.HBarCodePackFocus = false
+ await this.$nextTick()
+ this.HBarCodePackFocus = true
+ },
+ toScanCode() {
+ MpaasScan.scanCode((scanCode) => {
+ this.HBarCode_Pack = scanCode
+ this.GetMeesageByBarCode_Pack(HBarCode_Pack)
+ })
+ },
+ GetMeesageByBarCode_Pack(HBarCode_Pack) {
+ // 鑾峰彇鎵樻潯鐮佸搴旂殑鏁版嵁
+ CommonUtils.doRequest2({
+ url: '/WEBSController/Get_PackBarCode_PackUnionBill_New_Json',
+ data: {
+ HInterID: this.hform.HInterID,
+ HBillNo: this.hform.HBillNo,
+ HBillType: this.HBillType,
+ HBillSubType: this.HBillSubType,
+ HBarCode_Pack: HBarCode_Pack
+ },
+ resFunction: (res) => {
+ let {
+ data,
+ count,
+ Message,
+ list
+ } = res.data
+ if (count == 1) {
+ CommonUtils.playSound(1)
+ this.hform.HBillNo = data[0].HBillNo
+ this.hform.HInterID = data[0].HInterID
+ this.HMaterNumber_Pack = data[0].HMaterNumber
+ this.DisBillEntryList();
+ uni.showToast({
+ icon: 'none',
+ title: Message
+ })
+ } else {
+ CommonUtils.playSound(1)
+ this.HBarCodePackFocusRefresh()
+ uni.showToast({
+ icon: 'none',
+ title: Message
+ })
+ }
+ }
+ })
+ },
+ toScanCode2() {
+ MpaasScan.scanCode((scanCode) => {
+ this.HBarCode = scanCode
+ GetMeesageByBarCode(scanCode)
+ })
+ },
+ GetMeesageByBarCode(HBarCode) {
+ // 鑾峰彇鍖呮潯鐮佸搴旂殑鏁版嵁
+ let HBarCode_Pack = this.HBarCode_Pack
+ let sOldBarCode = this.HBarCode
+ let HDeleteFlag = sOldBarCode.substring(0, 1)
+ let sBarCode = sOldBarCode.slice(1)
+ if (!HBarCode_Pack) {
+ return uni.showToast({
+ icon: 'none',
+ title: '鎵樻潯鐮佷负绌猴紝璇峰厛鎵弿鎵樻潯鐮�',
+ })
+ }
+
+ if (HDeleteFlag == '*') {
+ if (!sBarCode) {
+ return uni.showToast({
+ icon: 'none',
+ title: '璇锋壂鎻忚鍒犻櫎鐨勭鏉$爜',
+ })
+ } else {
+ this.HBarCodeFocusRefresh()
+ }
+ CommonUtils.doRequest2({
+ url: '/WEBSController/set_DelPackUnionBill_Temp_Pack_Json',
+ data: {
+ "HInterID": this.hform.HInterID,
+ "HBarCode": sBarCode,
+ "HBillType": this.HBillType
+ },
+ resFunction: (res) => {
+ let {
+ data,
+ count,
+ Message
+ } = res.data
+ if (count == 1) {
+ CommonUtils.playSound(1)
+ this.DisBillEntryList()
+ } else {
+ CommonUtils.playSound(0)
+ uni.showToast({
+ icon: 'none',
+ title: Message
+ })
+ }
+ }
+ })
+ } else {
+ let sBarCode = this.HBarCode
+ if (!sBarCode) {
+ return uni.showToast({
+ icon: 'none',
+ title: '绠辨潯鐮佷笉鑳戒负绌猴紝璇锋壂鎻忕鏉$爜',
+ })
+ }
+ CommonUtils.doRequest2({
+ url: '/WEBSController/Get_BarCode_PackUnionBill_New_Json',
+ data: {
+ "HInterID": this.hform.HInterID,
+ "HBarCode": sBarCode,
+ "HBillType": this.HBillType,
+ "HBillNo": this.hform.HBillNo,
+ "HBillSubType": this.HBillSubType,
+ "HBarCode_Pack": HBarCode_Pack,
+ "HMaterNumber_Pack": this.HMaterNumber_Pack,
+ "HMaker": this.hform.HMaker,
+ "HStockOrgID": this.hform.HStockOrgID
+ },
+ resFunction: (res) => {
+ let {
+ data,
+ count,
+ Message
+ } = res.data
+ if (count == 1) {
+ CommonUtils.playSound(1)
+ this.HBarCodeFocusRefresh()
+ this.DisBillEntryList()
+ } else {
+ CommonUtils.playSound(0)
+ this.HBarCodeFocusRefresh()
+ uni.showToast({
+ icon: 'none',
+ title: Message
+ })
+ }
+ }
+ })
+ }
+ },
+ DisBillEntryList() {
+ CommonUtils.doRequest2({
+ url: '/WEBSController/GetBillEntry_Tmp_Pack_Json',
+ data: {
+ "HInterID": this.hform.HInterID,
+ "HBillNo": this.hform.HBillNo,
+ "HBillType": this.HBillType
+ },
+ resFunction: (res) => {
+ let {
+ count,
+ data,
+ Message
+ } = res.data
+ if (count == 1) {
+ this.listData = []
+ for (let i = 0; i < data.length; i++) {
+ this.listData.push(Object.assign(data[i], {
+ index: i
+ }))
+ }
+ } else {
+ // 娌℃湁浠讳綍璁板綍瑙嗕负浠�0寮�濮嬫柊澧�
+ this.listData = []
+ }
+ }
+ })
+ },
+ handleSelect(selected, array) {
+ this.selectedRows = array
+ },
+ handleSelectAll(selected, array) {
+ this.selectedRows = array
+ },
+ getMaxNo() {
+ CommonUtils.doRequest2({
+ url: "/WEBSController/GetMaxBillNoAndID_Json",
+ data: {
+ "HBillType": this.HBillType
+ },
+ resFunction: (d) => {
+ console.log('d: ', d);
+ let {
+ count,
+ data,
+ Message
+ } = d.data
+ if (count == 1) {
+ this.hform.HInterID = data[0].HInterID;
+ this.hform.HBillNo = data[0].HBillNo
+ } else {
+
+ uni.showModal({
+ title: "娓╅Θ鎻愮ず",
+ showCancel: false,
+ content: Message
+
+ })
+
+ }
+ }
+ })
+ },
+ submitPreCheck() {
+ if (CommonUtils.isEmpty(this.hform.HInterID)) {
+ uni.showToast({
+ icon: 'none',
+ title: '鍗曟嵁鍐呯爜鑾峰彇澶辫触锛岄敊璇殑鍗曟嵁鍐呯爜锛�'
+ })
+ return false
+ }
+ if (CommonUtils.isEmpty(this.hform.HBillNo)) {
+ uni.showToast({
+ icon: 'none',
+ title: '鍗曟嵁鍙疯幏鍙栧け璐ワ紝閿欒鐨勫崟鎹彿锛�'
+ })
+ return false
+ }
+ if (this.listData.length < 1) {
+ uni.showToast({
+ icon: 'none',
+ title: '娌℃湁鎵爜淇℃伅锛岃鍏堟壂鎻忔潯鐮侊紝纭鏃犺鍚庡啀鎻愪氦锛�'
+ })
+ return false
+ }
+ return true
+ },
+ cmdDelete() {
+ console.log('this.selectedRows: ', this.selectedRows);
+ if (this.selectedRows.length != 1) {
+ return uni.showToast({
+ icon: 'none',
+ title: '璇烽�夋嫨涓�琛岃褰曪紝杩涜鍒犻櫎锛�'
+ })
+ }
+ uni.showModal({
+ title: '鍒犻櫎纭',
+ content: '纭瑕佸垹闄ら�変腑琛屾墍鏈夋壂鐮佽褰曪紵鍒犻櫎鍚庡皢涓嶅彲鎭㈠!',
+ success: () => {
+ if (confirm) {
+ CommonUtils.doRequest2({
+ url: '/WEBSController/set_DelPackUnionBill_Temp_Pack_Json',
+ data: {
+ HInterID: this.hform.HInterID,
+ HBillType: this.HBillType,
+ HBarCode: this.selectedRows[0].HBarCode
+ },
+ resFunction: (res) => {
+ let {
+ data,
+ count,
+ Message
+ } = res.data
+ if (count == 1) {
+ CommonUtils.playSound(1)
+ uni.showToast({
+ icon: 'none',
+ title: Message
+ })
+ this.DisBillEntryList()
+ } else {
+ CommonUtils.playSound(0)
+ uni.showToast({
+ icon: 'none',
+ title: Message
+ })
+ }
+ }
+ })
+ }
+ }
+ })
+ },
+ cmdSubmit() {
+ let checkRes = this.submitPreCheck()
+ if (!checkRes) {
+ return
+ }
+ CommonUtils.doRequest2({
+ url: '/WEBSController/set_SavePackUnionBill_Json',
+ data: {
+ "HInterID": this.hform.HInterID,
+ "HBillType": this.HBillType,
+ "HBillNo": this.hform.HBillNo,
+ "HBarCode_Pack": this.HBarCode_Pack,
+ "HMaker": this.hform.HMaker,
+ "HStockOrgID": this.hform.HStockOrgID
+ },
+ resFunction: (res) => {
+ let {data, count, Message} = res.data
+ if(count == 1){
+ uni.showModal({
+ title: '娓╅Θ鎻愮ず',
+ content: Message,
+ confirmText: "鏂板",
+ cancelText: '鍏抽棴',
+ success: ({confirm,cancel}) => {
+ if(confirm) {
+ uni.redirectTo({
+ url: "/pages/zutuosaoma/form"
+ })
+ }
+
+ if(cancel) {
+ uni.navigateBack()
+ }
+ }
+ })
+ }else {
+ uni.showToast({
+ icon:'none',
+ title: Message
+ })
+ }
+ }
+ })
+ },
+ cmdExit() {
+ uni.navigateBack()
+ }
+ },
+ computed: {
+ listTableHeight: {
+ get() {
+ return this.bottomBtnTop - this.listTableTop - 10
+ }
+ }
+ },
+ async onReady() {
+ // #ifndef MP-WEIXIN
+ let query = uni.createSelectorQuery().in(this)
+ query.select("#bottom-btn")
+ .boundingClientRect((data) => {
+ if (data) {
+ this.bottomBtnTop = data.top
+ } else {
+ console.log("鏈壘鍒�#bottom-btn鑺傜偣");
+ }
+ })
+ .exec();
+ query.select("#list-table")
+ .boundingClientRect((data) => {
+ if (data) {
+ this.listTableTop = data.top
+ } else {
+ console.log("鏈壘鍒�#list-table鑺傜偣");
+ }
+ })
+ .exec();
+ // #endif
+ },
+ onLoad(e) {
+ this.OperationType = e.OperationType || 1
+ this.HBarCode_Pack_Temp = e.CommonUtils || ""
+
+ if (this.OperationType == 1) {
+ this.getMaxNo()
+ } else if (this.OperationType == 2) {
+
+ }
+ }
+ }
+</script>
+
+<style lang="scss">
+ input {
+ width: inherit;
+ padding: 8rpx 20rpx;
+ font-size: 30rpx;
+ }
+
+ .form {
+ display: flex;
+ flex-direction: column;
+ gap: 20rpx;
+
+ .form-base-info {
+ display: flex;
+ flex-direction: column;
+ gap: 10rpx;
+ box-sizing: border-box;
+ padding: 30rpx;
+ }
+
+ .bill-info {
+ display: flex;
+ flex-direction: column;
+ gap: 10rpx;
+ box-sizing: border-box;
+ padding: 16rpx 30rpx;
+ }
+
+ .form-item {
+ display: flex;
+ flex-direction: row;
+ gap: 10rpx;
+
+ .title {
+ width: 5rem;
+ flex-shrink: 0;
+ }
+
+ .right {
+ flex: 1;
+ border-radius: 22rpx;
+ border: 1px solid #acacac;
+ }
+
+ .disabled {
+ border: 1px solid #e4e4e4;
+ background-color: #e4e4e4;
+ }
+
+ .right-icon {
+ flex-shrink: 0;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ }
+
+ }
+ }
+
+ .tabs {
+ width: 100%;
+ display: flex;
+ border-bottom: 1px solid #ddd;
+ margin: 20rpx 0;
+
+ view {
+ width: 25%;
+ font-size: 30rpx;
+ color: #555;
+ text-align: center;
+ padding: 16rpx 0;
+ }
+
+ .on {
+ color: #3a78ff;
+ font-weight: bold;
+ border-bottom: 3px solid #3a78ff;
+ }
+ }
+
+ .bottom-btn {
+ width: 100%;
+ box-sizing: border-box;
+ // height: 120rpx;
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ background-color: #fff;
+ box-shadow: 0 2rpx 10rpx 2rpx rgba(0, 0, 0, 0.4);
+ padding: 30rpx 40rpx 40rpx 40rpx;
+ display: flex;
+ flex-direction: row;
+ gap: 10rpx;
+
+ button {
+ border-radius: 50rpx;
+ width: 180rpx;
+ height: 66rpx;
+ line-height: 66rpx;
+ font-size: 28rpx;
+ }
+
+ .btn-a {
+ background-color: #3A78FF;
+ color: #fff;
+ }
+
+ .btn-b {
+ background-color: #41a863;
+ color: #fff;
+ }
+
+ .btn-c {
+ background-color: #acacac;
+ color: #fff;
+ // position: absolute;
+ // right: 120rpx;
+ }
+
+ .btn-d {
+ background-color: #ff8901;
+ color: #fff;
+ }
+ }
+
+</style>
\ No newline at end of file
diff --git a/pages/zutuosaoma/table.vue b/pages/zutuosaoma/table.vue
new file mode 100644
index 0000000..f62f9e6
--- /dev/null
+++ b/pages/zutuosaoma/table.vue
@@ -0,0 +1,28 @@
+<template>
+ <view>
+
+ </view>
+</template>
+
+<script>
+ import {
+ getUserInfo
+ } from "@/utils/auth.js";
+ import {
+ CommonUtils
+ } from "@/utils/common.js"
+ export default {
+ data() {
+ return {
+
+ }
+ },
+ methods: {
+
+ }
+ }
+</script>
+
+<style>
+
+</style>
diff --git a/uni_modules/zb-table/changelog.md b/uni_modules/zb-table/changelog.md
new file mode 100644
index 0000000..0194cfd
--- /dev/null
+++ b/uni_modules/zb-table/changelog.md
@@ -0,0 +1,106 @@
+## 1.2.18锛�2023-06-01锛�
+鏇存柊
+## 1.2.16锛�2023-05-10锛�
+澧炲姞鍗曞厓鏍肩偣鍑讳簨浠�
+瀹屽杽鏂囨。
+澧炲姞绀轰緥
+## 1.2.15锛�2022-08-25锛�
+浼樺寲閮ㄥ垎缁嗚妭
+## 1.2.14锛�2022-04-25锛�
+淇敼vue 3 鎶ラ敊灏忕▼搴廏enerated an empty chunk: "uni_modules/zb-table/components/zb-table/js/util"
+## 1.2.13锛�2022-04-22锛�
+澧炲姞鍥剧墖瀹藉害璁剧疆
+## 1.2.12锛�2022-04-22锛�
+淇pc绔� 婊氬姩鏉″崰浣嶉棶棰�
+## 1.2.11锛�2022-04-22锛�
+澧炲姞澶氬浘鐗囧睍绀�
+## 1.2.10锛�2022-04-19锛�
+鐗堟湰瑙e喅鍐茬獊
+## 1.2.9锛�2022-04-19锛�
+鏆傛椂鍘绘帀澶氱骇琛ㄥご...鏈夌潃鏌愪簺闂锛屾鍦ㄤ慨澶嶄腑
+## 1.1.9锛�2022-04-19锛�
+鏆傛椂鍘绘帀澶氱骇琛ㄥご...鏈夌潃鏌愪簺闂锛屾鍦ㄤ慨澶嶄腑
+## 1.1.23锛�2022-04-19锛�
+鏆傛椂鍘绘帀澶氱骇琛ㄥご锛屾湁鐫�鏌愪簺闂锛屼慨澶嶄腑銆傘�傘��
+## 1.1.22锛�2022-04-19锛�
+鏆傛椂鍘绘帀澶氱骇琛ㄥご锛屽瓨鍦ㄦ煇浜涢棶棰� 锛屾鍦ㄤ慨澶嶄腑
+## 1.1.21锛�2022-03-29锛�
+浼樺寲鏁板瓧闂
+## 1.1.20锛�2022-03-29锛�
+浼樺寲鎸夐挳锛屽彲浠ヨ嚜瀹氫箟鎸夐挳锛岃嚜瀹氫箟娣诲姞class
+## 1.1.19锛�2022-03-28锛�
+杩涜浼樺寲鍔犺浇
+## 1.1.18锛�2022-03-28锛�
+淇pc绔粴鍔ㄦ潯闂
+## 1.1.17锛�2022-03-25锛�
+淇敼 鏁版嵁鍥炴樉鐨勬椂鍊欙紝鍏ㄩ�夋娌℃湁閫変腑鏁堟灉
+## 1.1.16锛�2022-03-25锛�
+鏂板锛歵able灞炴�� cell-style 淇敼鍗曞厓鏍兼牱寮�
+## 1.1.15锛�2022-03-23锛�
+fix:鏀粯瀹濆皬绋嬪簭涓婃媺鍔犺浇e.detail 娌℃湁鍊煎鑷翠笂鎷夊姞杞藉け鏁� 锛屽凡淇
+## 1.1.14锛�2022-03-23锛�
+fix: 鏀粯瀹濆皬绋嬪簭宸﹀彸鏃犳硶婊戝姩鐨勯棶棰�
+## 1.1.13锛�2022-03-21锛�
+fix锛氳嫳鏂囧搴﹁嚜閫傚簲闂
+## 1.1.12锛�2022-03-20锛�
+淇敼鑷�傚簲瀹藉害闂
+## 1.1.11锛�2022-03-19锛�
+澧炲姞涓婃媺鍔犺浇鍔熻兘
+## 1.1.10锛�2022-03-18锛�
+淇敼鍚堣涓嶆洿鏂伴棶棰�
+## 1.1.9锛�2022-03-16锛�
+浼樺寲css 鏍峰紡
+## 1.1.8锛�2022-03-16锛�
+澧炲姞琛ㄥ熬鍚堣琛�
+## 1.1.7锛�2022-03-15锛�
+淇敼css鏍峰紡
+## 1.1.6锛�2022-03-14锛�
+杩涜浠g爜浼樺寲
+## 1.1.5锛�2022-03-12锛�
+鏇存柊涓�涓搷浣滄寜閽殑鏃跺�� 鎶ラ敊闂锛岃繘琛屼唬鐮佷紭鍖�
+## 1.1.4锛�2022-03-12锛�
+澧炲姞鍥剧墖缁熶竴楂樺害
+## 1.1.3锛�2022-03-12锛�
+澧炲姞鍥剧墖鍦板潃 锛屽苟涓斿浘鐗囨敮鎸侀瑙堝姛鑳�
+## 1.1.2锛�2022-03-11锛�
+鏂板榛樿 鏄惁閫変腑鍔熻兘锛岃繘琛屼紭鍖�
+## 1.1.1锛�2022-03-10锛�
+鏂板鍗曞嚮浜嬩欢
+## 1.1.0锛�2022-03-10锛�
+- 澧炲姞鍗曞嚮浜嬩欢
+
+## 1.1.0锛�2022-03-10锛�
+- 澧炲姞checkbox鍔熻兘 锛岃繘琛屼紭鍖�
+
+## 1.0.11锛�2022-03-09锛�
+- 淇敼灏忕▼搴忎腑鎺掑簭闂
+
+## 1.0.10锛�2022-03-09锛�
+- 鍋氫簡鍏煎鎬у鐞�
+
+## 1.0.8锛�2022-03-09锛�
+- 杩涜浼樺寲婊氬姩闃叉 澶氭璁$畻
+
+## 1.0.7锛�2022-03-09锛�
+- 淇敼涓�浜涢棶棰� 鏂板杩囨护鍣�
+
+## 1.0.6锛�2022-03-08锛�
+- 淇敼鏍峰紡 鎸夐挳鑷�傚簲瀹藉害
+
+## 1.0.5锛�2022-03-08锛�
+- 鏂板鎸夐挳 淇敼闂
+
+## 1.0.4锛�2022-03-04锛�
+- 澧炲姞绌哄崰浣嶇"--"
+
+## 1.0.3锛�2022-03-02锛�
+- 鏂板琛ㄦ牸鏂戦┈绾归厤缃�佸垪瀹介厤缃�佽〃澶存樉绀洪厤缃�
+
+## 1.0.2锛�2022-03-02锛�
+- 鏂板鎺掑簭鍔熻兘锛屼紭鍖栨牱寮�
+
+## 1.0.1锛�2022-03-01锛�
+- 鍙互浼犲叆鍔ㄦ�佹暟鎹紝鍙互瀵瑰乏杈瑰垪琛ㄨ繘琛屾槸鍚﹀浐瀹氶鍒�
+
+## 1.0.0锛�2022-03-01锛�
+- 鍒濆鍖�
\ No newline at end of file
diff --git a/uni_modules/zb-table/components/zb-table/components/table-checkbox.vue b/uni_modules/zb-table/components/zb-table/components/table-checkbox.vue
new file mode 100644
index 0000000..e1448ee
--- /dev/null
+++ b/uni_modules/zb-table/components/zb-table/components/table-checkbox.vue
@@ -0,0 +1,180 @@
+<template>
+ <view class="uni-table-checkbox" @click.stop="selected">
+ <view v-if="!indeterminate" class="checkbox__inner" :class="{'is-checked':isChecked,'is-disable':isDisabled}">
+ <view class="checkbox__inner-icon"></view>
+ </view>
+ <view v-else class="checkbox__inner checkbox--indeterminate">
+ <view class="checkbox__inner-icon"></view>
+ </view>
+ </view>
+</template>
+
+<script>
+ export default {
+ name: 'TableCheckbox',
+ emits:['checkboxSelected'],
+ props: {
+ indeterminate: {
+ type: Boolean,
+ default: false
+ },
+ checked: {
+ type: [Boolean,String],
+ default: false
+ },
+ disabled: {
+ type: Boolean,
+ default: false
+ },
+ index: {
+ type: Number,
+ default: -1
+ },
+ cellData: {
+ type: Object,
+ default () {
+ return {}
+ }
+ }
+ },
+ watch:{
+ checked(newVal){
+ if(typeof this.checked === 'boolean'){
+ this.isChecked = newVal
+ }else{
+ this.isChecked = true
+ }
+ },
+ indeterminate(newVal){
+ this.isIndeterminate = newVal
+ }
+ },
+ data() {
+ return {
+ isChecked: false,
+ isDisabled: false,
+ isIndeterminate:false
+ }
+ },
+ created() {
+ if(typeof this.checked === 'boolean'){
+ this.isChecked = this.checked
+ }
+ this.isDisabled = this.disabled
+ },
+ methods: {
+ selected() {
+ if (this.isDisabled) return
+ this.isIndeterminate = false
+ this.isChecked = !this.isChecked
+ console.log('===',this.indeterminate,this.isChecked)
+ this.$emit('checkboxSelected', {
+ checked: this.isChecked,
+ data: this.cellData
+ })
+ }
+ }
+ }
+</script>
+
+<style lang="scss">
+ $checked-color: #007aff;
+ $border-color: #DCDFE6;
+ $disable:0.4;
+
+ .uni-table-checkbox {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: center;
+ position: relative;
+ margin: 5px 0;
+ cursor: pointer;
+
+ // 澶氶�夋牱寮�
+ .checkbox__inner {
+ /* #ifndef APP-NVUE */
+ flex-shrink: 0;
+ box-sizing: border-box;
+ /* #endif */
+ position: relative;
+ width: 16px;
+ height: 16px;
+ border: 1px solid $border-color;
+ border-radius: 2px;
+ background-color: #fff;
+ z-index: 1;
+
+ .checkbox__inner-icon {
+ position: absolute;
+ /* #ifdef APP-NVUE */
+ top: 2px;
+ /* #endif */
+ /* #ifndef APP-NVUE */
+ top: 2px;
+ /* #endif */
+ left: 5px;
+ height: 7px;
+ width: 3px;
+ border: 1px solid #fff;
+ border-left: 0;
+ border-top: 0;
+ opacity: 0;
+ transform-origin: center;
+ transform: rotate(45deg);
+ box-sizing: content-box;
+ }
+
+ &.checkbox--indeterminate {
+ border-color: $checked-color;
+ background-color: $checked-color;
+
+ .checkbox__inner-icon {
+ position: absolute;
+ opacity: 1;
+ transform: rotate(0deg);
+ height: 2px;
+ top: 0;
+ bottom: 0;
+ margin: auto;
+ left: 0px;
+ right: 0px;
+ bottom: 0;
+ width: auto;
+ border: none;
+ border-radius: 2px;
+ transform: scale(0.5);
+ background-color: #fff;
+ }
+ }
+ &:hover{
+ border-color: $checked-color;
+ }
+ // 绂佺敤
+ &.is-disable {
+ /* #ifdef H5 */
+ cursor: not-allowed;
+ /* #endif */
+ background-color: #F2F6FC;
+ border-color: $border-color;
+ }
+
+ // 閫変腑
+ &.is-checked {
+ border-color: $checked-color;
+ background-color: $checked-color;
+
+ .checkbox__inner-icon {
+ opacity: 1;
+ transform: rotate(45deg);
+ }
+
+ // 閫変腑绂佺敤
+ &.is-disable {
+ opacity: $disable;
+ }
+ }
+
+ }
+ }
+</style>
diff --git a/uni_modules/zb-table/components/zb-table/components/table-h5-summary.vue b/uni_modules/zb-table/components/zb-table/components/table-h5-summary.vue
new file mode 100644
index 0000000..73734b2
--- /dev/null
+++ b/uni_modules/zb-table/components/zb-table/components/table-h5-summary.vue
@@ -0,0 +1,78 @@
+<template>
+ <view class="table-h5-footer top-header-uni" :style="{paddingRight:`${scrollbarSize}px`}">
+ <scroll-view class="zb-table-headers"
+ @scroll="handleFooterTableScrollLeft"
+ scroll-x="true"
+ scroll-y="false"
+ id="tableFooterHeaders"
+ scroll-anchoring="true"
+ :scroll-left="headerFooterTableLeft"
+ style="padding-bottom: 0px;
+ background: #fafafa;height: 100%">
+ <view class="zb-table-fixed" >
+ <view class="zb-table-thead" style="position: relative;" >
+ <view class="item-tr">
+ <view
+ class="item-th"
+ :style="{
+ width:`${item.width?item.width:'100'}px`,
+ flex:index===transColumns.length-1?1:'none',
+ minWidth:`${item.width?item.width:'100'}px`,
+ borderRight:`${border?'1px solid #e8e8e8':''}`,
+ borderTop:`${border?'1px solid #e8e8e8':''}`,
+ textAlign:item.align||'left'
+ }"
+ v-for="(item,index) in transColumns" :key="index">
+ {{ sums[index] }}
+ </view>
+ </view>
+ </view>
+ </view>
+ </scroll-view>
+ </view>
+</template>
+<script>
+import summary from '../js/summary.js'
+export default {
+ name:'table-footer',
+ mixins:[summary],
+}
+</script>
+<style lang="scss" scoped>
+.table-h5-footer {
+ background: #fafafa;
+ /*姣忎釜椤甸潰鍏叡css */
+ scroll-view ::-webkit-scrollbar {
+ display: none !important;
+ width: 0 !important;
+ height: 0 !important;
+ -webkit-appearance: none;
+ background: transparent;
+ }
+ //绗簩绉�
+ ::-webkit-scrollbar{
+ display: none;
+ }
+ .item-tr{
+ display: flex;
+ }
+ .item-th{
+ padding-left: 8px;
+ line-height: 39px;
+ height: 40px;
+ //display: flex;
+ //align-items: center;
+ box-sizing: border-box;
+ flex-shrink: 0;
+ width: 100px;
+ padding-right: 20px;
+ word-break: keep-all;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ overflow-wrap: break-word;
+ border-bottom: 1px solid #e8e8e8;
+ }
+
+}
+</style>
diff --git a/uni_modules/zb-table/components/zb-table/components/table-side-summary.vue b/uni_modules/zb-table/components/zb-table/components/table-side-summary.vue
new file mode 100644
index 0000000..fa27c93
--- /dev/null
+++ b/uni_modules/zb-table/components/zb-table/components/table-side-summary.vue
@@ -0,0 +1,59 @@
+<template>
+ <view class="zb-table-header" style="display: flex;" >
+ <view class="item-tr" >
+ <view class='item-td'
+ :style="{
+ width:`${item.width?item.width:'100'}px`,
+ borderRight:`${border?'1px solid #e8e8e8':''}`,
+ textAlign:item.align||'left'
+ }"
+ :key="`15255966555${index}`"
+ v-for="(item,index) in fixedLeftColumns">
+ <template >
+ {{sums[index]}}
+ </template>
+ </view>
+ </view>
+ </view>
+
+</template>
+<script>
+import summary from '../js/summary.js'
+export default {
+ mixins:[summary]
+}
+</script>
+<style lang="scss" scoped>
+.zb-table-header {
+ overflow: hidden;
+ background: #fafafa;
+ .item-th{
+ padding-left: 8px;
+ line-height: 39px;
+ height: 40px;
+ //display: flex;
+ //align-items: center;
+ box-sizing: border-box;
+ }
+}
+.item-tr{
+ display: flex;
+ box-sizing: border-box;
+}
+.item-td{
+ flex-shrink: 0;
+ width: 100px;
+ padding-left: 8px;
+ height: 40px;
+ line-height: 40px;
+ padding-right: 20px;
+ box-sizing: border-box;
+ word-break: keep-all;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ overflow-wrap: break-word;
+ border-bottom: 1px solid #e8e8e8;
+ background: rgb(250, 250, 250);
+}
+</style>
diff --git a/uni_modules/zb-table/components/zb-table/components/table-summary.vue b/uni_modules/zb-table/components/zb-table/components/table-summary.vue
new file mode 100644
index 0000000..2850740
--- /dev/null
+++ b/uni_modules/zb-table/components/zb-table/components/table-summary.vue
@@ -0,0 +1,77 @@
+<template>
+ <view class="zb-table-footer" style="height: 40px;">
+ <view class="zb-table-fixed" >
+ <view class="zb-table-thead" style="position: relative;" >
+ <view class="item-tr">
+ <view
+ :class="['item-th',index <fixedLeftColumns.length&&'zb-stick-side']"
+ :style="{
+ left:`${item.left}px`,
+ width:`${item.width?item.width:'100'}px`,
+ flex:index===transColumns.length-1?1:'none',
+ minWidth:`${item.width?item.width:'100'}px`,
+ borderRight:`${border?'1px solid #e8e8e8':''}`,
+ borderTop:`${border?'1px solid #e8e8e8':''}`,
+ textAlign:item.align||'left'
+ }"
+ v-for="(item,index) in transColumns" :key="index">
+ <template>
+ {{ sums[index]||item.emptyString }}
+ </template>
+ </view>
+ </view>
+ </view>
+ </view>
+ </view>
+</template>
+<script>
+ import summary from '../js/summary.js'
+ export default {
+ mixins:[summary]
+ }
+</script>
+<style lang="scss" scoped>
+ .zb-table-footer {
+ background: #fafafa;
+ width: fit-content;
+ min-width: 100%;
+ position: sticky;
+ bottom: 0;
+ z-index: 2;
+ .item-tr{
+ display: flex;
+ min-width: 100%;
+ }
+ .item-th{
+ padding-left: 8px;
+ line-height: 39px;
+ height: 40px;
+ //display: flex;
+ //align-items: center;
+ box-sizing: border-box;
+ flex-shrink: 0;
+ width: 100px;
+ padding-right: 20px;
+ word-break: keep-all;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ overflow-wrap: break-word;
+ border-bottom: 1px solid #e8e8e8;
+ }
+ .zb-table-fixed{
+ min-width: 100%;
+
+ }
+ .zb-stick-side{
+ position: sticky;
+ bottom:0 ;
+ left: 0;
+ z-index: 2;
+ //border-right: solid 1rpx #dbdbdb;
+ box-sizing: border-box;
+ background: #fafafa;
+ //box-shadow: 6px 0 6px -4px #ccc;
+ }
+ }
+</style>
diff --git a/uni_modules/zb-table/components/zb-table/components/zb-load-more.vue b/uni_modules/zb-table/components/zb-table/components/zb-load-more.vue
new file mode 100644
index 0000000..5a7da41
--- /dev/null
+++ b/uni_modules/zb-table/components/zb-table/components/zb-load-more.vue
@@ -0,0 +1,50 @@
+<template >
+ <view class="zb-load-more">
+ <image :src="base64Flower" style="" class="loading-custom-image"></image>
+ <text>姝e湪鍔犺浇涓�...</text>
+ </view>
+</template>
+<script>
+const base64Flower = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkBAMAAACCzIhnAAAAKlBMVEVHcEzDw8Ovr6+pqamUlJTCwsKenp61tbWxsbGysrLNzc2bm5u5ubmjo6MpovhuAAAACnRSTlMA/P79/sHDhiZS0DxZowAABBBJREFUWMPtl89rE0EUx7ctTXatB3MI1SWnDbUKPUgXqh4ED8Uf7KUVSm3ooVSpSii0Fn/gD4j4o+APiEoVmos9FO2celiqZVgwgaKHPQiCCkv+F99kM7Ozm5kxq1dfD91k9pPve9/3ZjbRNHHok/mKli4eIPNgSuRObuN9SqSEzM20iGnm0yIbqCuV7NSSSIV7uyPM6JMBYdeTOanh/QihJYZsUCSby+VkMj2AvOt0rAeQAwqE3lfKMZVlQCZk1QOCKkkVPadITCfIRNKxfoJI5+0OIFtJx14CMSg1mRSDko7VAfksRQzEbGYqxOJcVTWMCH2I1/IACNW0PWU2M8cmAVHtnH5mM1VRWtwKZjOd5JbF6s1IbaYqaotjNlPHgDAnlAizubTR6ovMYn052g/U5qcmOpi0WL8xTS/3IfSet5m8MEr5ajjF5le6dq/OJpobrdY0t3i9QgefWrxW9/1BLhk0E9m8FeUMhhXal499iD0eQRfDF+ts/tttORRerfp+oV7f4xJj82iUYm1Yzod+ZQEAlS/8mMBwKebVmCVp1f0JLS6zKd17+iwRKTARVg2SHtz3iEbBH+Q+U28zW2Jiza8Tjb1YFoYZMsJyjDqp3M9XBQdSdPLFdxEpvOB37JrHcmR/y9+LgoTlCFGZEa2sc6d4PGlweEa2JSVPoVm+IfGG3ZL037iV9oH+P+Jxc4HGVflNq1M0pivao/EopO4b/ojVCP9GjmiXOeS0DOn1o/iiccT4ORnyvBGF3yUywkQajW4Ti0SGuiy/wVSg/L8w+X/8Q+hvUx8Xd90z4oV5a1i88MbFWHz0WZZ1UrTwBGPX3Rat9AFiXRMRjoMdIdJLEOt2h7jrYOzgOamKZSWSNspOS0X8SAqRYmxRL7sg4eLzYmNehcxh3uoyud/BH2Udux4ywxFTc1xC7Mgf4vMhc5S+kSH3Y7yj+qpwIWSoPTVCOOPVthGx9FbGqrwFw6wSFxJr+17zeKcztt3u+2roAEVgUjDd+AHGuxHy2rZHaa8JMkTHEeyi85ANPO9j9BVuBRD2FY5LDMo/Sz/2hReqGIs/KiFin+CsPsYO/yvM3jL2vE8EbX7/Bf8ejtr2GLN65bioAdgLd8Bis/mD5GmP2qeqyo2ZwQEOtAjRIDH7mBKpUcMoApbZJ5UIxkEwxyMZyMxW/uKFvHCFR3SSmerHyDNQ2dF4JG6zIMpBgLfjSF9x1D6smFcYnGApjmSLICO3ecCDWrQ48geba9DI3STy2i7ax6WIB62fSyIZIiO3GFQqSURp8wCo7GhJBGwuSovJBNjb7kT6FPVnIa9qJ2Ko+l9mefGIdinaMp0yC1URYiwsdfNE45EuA5Cx9EhalfvN5s+UyItm81vaB3p4joniN+SCP7Qc1hblAAAAAElFTkSuQmCC';
+export default {
+ data(){
+ return{
+ base64Flower
+ }
+ }
+}
+</script>
+<style lang="scss" scoped>
+.zb-load-more {
+ width: 100%;
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ z-index: 999;
+ background: white;
+ display: flex;
+ height: 40px;
+ flex-shrink: 0;
+ align-items: center;
+ justify-content: center;
+ .loading-custom-image{
+ color: #a4a4a4;
+ margin-right: 8rpx;
+ width: 24px;
+ height: 24px;
+ /* #ifndef APP-NVUE */
+ animation: loading-circle 1s linear infinite;
+ /* #endif */
+ }
+ @keyframes loading-circle {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+ }
+}
+</style>
diff --git a/uni_modules/zb-table/components/zb-table/js/summary.js b/uni_modules/zb-table/components/zb-table/js/summary.js
new file mode 100644
index 0000000..fbd81f1
--- /dev/null
+++ b/uni_modules/zb-table/components/zb-table/js/summary.js
@@ -0,0 +1,88 @@
+export default {
+ props:{
+ scrollbarSize:{
+ type:Number,
+ default:0
+ },
+ fixedLeftColumns:{
+ type:Array,
+ default:()=>[]
+ },
+ data:{
+ type:Array,
+ default:()=>[]
+ },
+ transColumns:{
+ type:Array,
+ default:()=>[]
+ },
+ border:{
+ type:Boolean,
+ default:false
+ },
+ showSummary:{
+ type:Boolean,
+ default:false
+ },
+ summaryMethod:{
+ type:Function
+ },
+ sumText:{
+ type:String,
+ default:'鍚堣'
+ },
+ headerFooterTableLeft:{
+ type:Number,
+ default:0
+ },
+ handleFooterTableScrollLeft:Function,
+ },
+ data(){
+ return{
+ sums:[]
+ }
+ },
+ watch:{
+ 'data':{
+ deep:true,
+ immediate:true,
+ handler(newValue,oldValue){
+ let sums = [];
+ if (this.summaryMethod) {
+ sums = this.summaryMethod({ columns: this.transColumns, data: this.data });
+ } else {
+ this.transColumns.forEach((column, index) => {
+ if (index === 0) {
+ sums[index] = this.sumText;
+ return;
+ }
+ const values = this.data.map(item => Number(item[column.name]));
+ const precisions = [];
+ let notNumber = true;
+ values.forEach(value => {
+ if (!isNaN(value)) {
+ notNumber = false;
+ let decimal = ('' + value).split('.')[1];
+ precisions.push(decimal ? decimal.length : 0);
+ }
+ });
+ const precision = Math.max.apply(null, precisions);
+ if (!notNumber) {
+ sums[index] = values.reduce((prev, curr) => {
+ const value = Number(curr);
+ if (!isNaN(value)) {
+ return parseFloat((prev + curr).toFixed(Math.min(precision, 20)));
+ } else {
+ return prev;
+ }
+ }, 0);
+ } else {
+ sums[index] = '';
+ }
+ });
+ }
+ this.sums = sums
+ },
+ }
+ }
+}
diff --git a/uni_modules/zb-table/components/zb-table/js/util.js b/uni_modules/zb-table/components/zb-table/js/util.js
new file mode 100644
index 0000000..e682cb2
--- /dev/null
+++ b/uni_modules/zb-table/components/zb-table/js/util.js
@@ -0,0 +1,51 @@
+/**
+ * 鑾峰彇婊氬姩鏉″搴�
+ */
+let cached = undefined;
+
+export const getScrollbarSize = fresh => {
+ // #ifdef H5
+
+ if (fresh || cached === undefined) {
+ let inner = document.createElement("div");
+ let innerStyle = inner.style;
+
+ innerStyle.width = "100%";
+ innerStyle.height = "200px";
+
+ let outer = document.createElement("div");
+ let outerStyle = outer.style;
+
+ outerStyle.position = "absolute";
+ outerStyle.top = 0;
+ outerStyle.left = 0;
+ outerStyle.pointerEvents = "none";
+ outerStyle.width = "200px";
+ outerStyle.height = "150px";
+ outerStyle.visibility = "hidden";
+
+ outer.appendChild(inner);
+ document.body.appendChild(outer);
+
+ // 璁剧疆瀛愬厓绱犺秴鍑洪儴鍒嗛殣钘�
+ outerStyle.overflow = "hidden";
+
+ let width1 = inner.offsetWidth;
+
+ // 璁剧疆瀛愬厓绱犺秴鍑洪儴鍒嗘粴鍔�
+ outer.style.overflow = "scroll";
+
+ let width2 = inner.offsetWidth;
+
+ if (width1 === width2) {
+ width2 = outer.clientWidth;
+ }
+
+ document.body.removeChild(outer);
+
+ cached = width1 - width2;
+ }
+ //#endif
+
+ return cached;
+};
diff --git a/uni_modules/zb-table/components/zb-table/zb-table.vue b/uni_modules/zb-table/components/zb-table/zb-table.vue
new file mode 100644
index 0000000..45c41e0
--- /dev/null
+++ b/uni_modules/zb-table/components/zb-table/zb-table.vue
@@ -0,0 +1,1345 @@
+<template>
+ <!-- #ifdef H5 || APP-PLUS -->
+ <view :class="['zb-table','zb-table-fixed-header',!border&&(bodyTableLeft>50||headerTableLeft>50)&&'scroll-left-fixed']">
+ <view class="zb-table-content" style="flex: 1">
+ <view class="zb-table-scroll" style="height: 100%;">
+ <template v-if="showHeader">
+ <view class="zb-table-header top-header-uni"
+ >
+ <scroll-view class="zb-table-headers"
+ @scroll="handleTableScrollLeft"
+ scroll-x="true"
+ scroll-y="false"
+ id="tableHeaders"
+ scroll-anchoring="true"
+ :scroll-left="headerTableLeft"
+ style="
+ height: 100%">
+
+ <view class="zb-table-fixed" >
+ <view class="zb-table-thead" style="position: relative;" >
+ <view class="item-tr">
+ <view
+ @click.stop="sortAction(item,index)"
+ class="item-th"
+ :style="[{
+ display: `${item.hidden?'none':'block'}`,
+ width:`${item.width?item.width:'100'}px`,
+ flex:index===transColumns.length-1?1:'none',
+ minWidth:`${item.width?item.width:'100'}px`,
+ borderRight:`${border?'1px solid #e8e8e8':''}`,
+
+ borderTop:`${border?'1px solid #e8e8e8':''}`,
+ textAlign:item.align||'left'
+ },getHeaderCellStyle(item,index)]"
+ v-for="(item,index) in transColumns" :key="index">
+ <template v-if="item.type==='selection'">
+ <view class="checkbox-item">
+ <tableCheckbox
+ :indeterminate="indeterminate" :checked="checkedAll" @checkboxSelected="checkboxSelectedAll"></tableCheckbox>
+ </view>
+ </template>
+ <template v-else>
+ {{ item.label }}
+ <view class="sorter-table" v-if="item.sorter">
+ <view :class="['sorter-table-icon',item.sorterMode==='_asc'&&`sorting${item.sorterMode||''}`]"></view>
+ <view :class="['sorter-table-icon',item.sorterMode==='_desc'&&`sorting${item.sorterMode||''}`]"></view>
+ </view>
+ </template>
+
+ </view>
+ <view
+ v-if="scrollbarSize"
+ class="item-th "
+ :style="{
+
+ borderTop:`${border?'1px solid #e8e8e8':''}`,
+ padding:0,
+ width:`${scrollbarSize}px`,
+ }">
+ </view>
+ </view>
+ </view>
+ </view>
+ </scroll-view>
+ </view>
+ </template>
+ <template v-if="!data.length">
+ <view class="no-data">鏆傛棤鏁版嵁~~</view>
+ </template>
+ <scroll-view
+ class="zb-table-body" ref="tableBody" scroll-x="true" scroll-y="true" id="tableBody"
+ :lower-threshold="40"
+ :upper-threshold="10"
+ @scrolltolower="scrolltolower"
+ @scrolltoupper="(e)=>debounce(scrollToLeft)(e)"
+ @scroll="handleBodyScroll" :scroll-left="bodyTableLeft" :scroll-top="bodyScrollTop"
+ :style=" `height: calc(100% - ${showSummary?80:40}px)`" >
+ <view class="zb-table-fixed">
+ <view class="zb-table-tbody">
+ <view :class="['item-tr',highlight&&isHighlight(item,index)?'current-row':'']"
+ @click.stop="rowClick(item,index)"
+ v-for="(item,index) in transData" :key="item.key" >
+ <view
+ :style="[{
+ display: `${ite.hidden?'none':'block'}`,
+ width:`${ite.width?ite.width:'100'}px`,
+ flex:i===transColumns.length-1?1:'none',
+ minWidth:`${ite.width?ite.width:'100'}px`,
+ borderRight:`${border?'1px solid #e8e8e8':''}`,
+ textAlign:ite.align||'left',
+ },cellStyle&&getCellStyle(item,ite,index,i)]"
+ @click="cellClick(item,index,ite)"
+ :class="['item-td',stripe?(index % 2) != 0?'odd':'even':'']"
+ v-for="(ite,i) in transColumns" :key="i">
+ <template v-if="ite.type==='operation'">
+ <view style="display: flex;align-items: center;height: 100%">
+ <view
+ v-for="ren,ind in permission(item,ite.renders,index)"
+ :key="ind"
+ @click.stop="$emit(ren.func,item,index)"
+ :style="{
+ display:'flex',
+ alignItems: 'center',
+ marginRight:ite.renders.length>1?'8px':'0'
+ }">
+ <template v-if="ren.type==='custom'">
+ <view :class="ren.class||''" style="cursor: pointer">
+ {{ren.name}}
+ </view>
+ </template>
+ <template v-else>
+ <button
+ :class="ren.class||''"
+ :type="ren.type||'primary'" :size="ren.size||'mini'">{{ren.name}}</button>
+ </template>
+ </view>
+ </view>
+ </template>
+ <template v-else-if="ite.type==='selection'">
+ <view class="checkbox-item">
+ <tableCheckbox @checkboxSelected="(e)=>checkboxSelected(e,item)" :cellData="item" :checked="item.checked"/>
+ </view>
+ </template>
+ <template v-else-if="ite.type==='index'">
+ {{index+1}}
+ </template>
+ <template v-else-if="ite.type==='img'">
+ <view class="checkbox-item">
+ <template v-if="item[ite.name]">
+ <image
+ @click.stop="previewImage(item,item[ite.name],iImage)"
+ v-for="iImageTem,iImage in imgs(item[ite.name])"
+ :show-menu-by-longpress="false"
+ :key="iImage"
+ :src="iImageTem" style="width: 40px;height:30px; " mode="aspectFit"></image>
+ </template>
+ <text v-else>{{ite.emptyString}}</text>
+ </view>
+ </template>
+ <template v-else>
+<!-- {{ ite.filters?itemFilter(item,ite):(item[ite.name]==null||item[ite.name]==='')?ite.emptyString:item[ite.name] }}-->
+ {{ ite.filters?itemFilter(item,ite):formatterAction(item,ite,index,i) }}
+ </template>
+ </view>
+ </view>
+ </view>
+ </view>
+ </scroll-view>
+ <table-h5-summary
+ :scrollbarSize="scrollbarSize"
+ :data="data"
+ :handleFooterTableScrollLeft="handleFooterTableScrollLeft"
+ :headerFooterTableLeft="headerFooterTableLeft"
+ v-if="showSummary"
+ :showSummary="showSummary"
+ :transColumns="transColumns"
+ :border="border"
+ :summary-method="summaryMethod"
+ :sumText="sumText"
+ :fixedLeftColumns="fixedLeftColumns"/>
+ </view>
+ <view class="zb-table-fixed-left"
+ v-if="isFixedLeft"
+ :style=" {height: `calc(100% - ${scrollbarSize}px)`}"
+ >
+ <template v-if="showHeader">
+ <view class="zb-table-header" style="display: flex">
+ <view class="item-tr"
+ style=""
+ @click.stop="rowClick(item,index)"
+ v-for="(item,index) in fixedLeftColumns" :key="index">
+ <view
+
+ :style="{
+ width:`${item.width?item.width:'100'}px`,
+ borderRight:`${border?'1px solid #e8e8e8':''}`,
+ borderTop:`${border?'1px solid #e8e8e8':''}`,
+ textAlign:item.align||'left'
+ }"
+ @click.stop="sortAction(item,index)"
+ class="item-th"
+ >
+ <template v-if="item.type==='selection'">
+ <view class="checkbox-item">
+ <tableCheckbox
+ :indeterminate="indeterminate" :checked="checkedAll" @checkboxSelected="checkboxSelectedAll"></tableCheckbox>
+ </view>
+ </template>
+ <template v-else>
+ {{ item.label }}
+ <view class="sorter-table" v-if="item.sorter">
+ <view :class="['sorter-table-icon',item.sorterMode==='_asc'&&`sorting${item.sorterMode||''}`]"></view>
+ <view :class="['sorter-table-icon',item.sorterMode==='_desc'&&`sorting${item.sorterMode||''}`]"></view>
+ </view>
+ </template>
+ </view>
+ </view>
+
+ </view>
+ </template>
+ <scroll-view
+ scroll-y="true"
+ id="leftTableFixed"
+ :upper-threshold="15"
+ @scrolltoupper="(e)=>scrollToFixedLeft(e)"
+ @scroll="leftFixedScrollAction"
+ :scroll-top="leftFiexScrollTop"
+ class="zb-table-body-inner"
+ :style=" `height: calc(100% - ${showSummary?80:40}px)`">
+ <view class="zb-table-fixed">
+ <view class="zb-table-tbody">
+ <view
+ :class="['item-tr',stripe?(i % 2) != 0?'odd':'even':'',highlight&&isHighlight(ite,i)?'current-row':'']"
+ v-for="(ite,i) in transData"
+ @click.stop="rowClick(ite,i)"
+ :key="ite.key"
+ style="">
+ <view class='item-td'
+ @click="cellClick(ite,index,item)"
+ :style="[{
+ width:`${item.width?item.width:'100'}px`,
+ borderRight:`${border?'1px solid #e8e8e8':''}`,
+ textAlign:item.align||'left'
+ },cellStyle&&getCellStyle(ite,item,i,index)]"
+ :key="index"
+ v-for="(item,index) in fixedLeftColumns">
+ <template v-if="item.type==='selection'">
+ <view class="checkbox-item">
+ <tableCheckbox @checkboxSelected="(e)=>checkboxSelected(e,ite)" :cellData="ite" :checked="ite.checked"/>
+ </view>
+ </template>
+ <template v-else-if="item.type==='index'">
+ {{i+1}}
+ </template>
+ <template v-else>
+ {{ite[item.name]||item.emptyString}}
+ </template>
+ </view>
+ </view>
+ </view>
+ </view>
+ </scroll-view>
+ <table-side-summary
+ :scrollbarSize="scrollbarSize"
+ v-if="showSummary&&!(scrollbarSize>0)"
+ :data="data"
+ :showSummary="showSummary"
+ :transColumns="transColumns"
+ :border="border"
+ :summary-method="summaryMethod"
+ :sumText="sumText"
+ :fixedLeftColumns="fixedLeftColumns"/>
+ </view>
+ </view>
+ <zb-load-more v-if="isLoadMore&&!completeLoading"/>
+ </view>
+ <!-- #endif -->
+ <!-- #ifndef H5 || APP-PLUS -->
+ <view class="zb-table-applet">
+ <view class="zb-table-content" style="white-space: nowrap">
+ <scroll-view
+
+ <!-- #ifdef MP-ALIPAY -->
+ @scroll="scrollAlipay"
+ <!-- #endif -->
+
+ @scrolltolower="scrolltolower"
+ <!-- #ifdef MP-ALIPAY -->
+ style=" height: 100%;overflow-x:scroll"
+ <!-- #endif -->
+ <!-- #ifndef MP-ALIPAY -->
+ style=" height: 100%"
+ <!-- #endif -->
+ scroll-y="true"
+ scroll-x="true">
+ <view class="zb-table-scroll" >
+ <template v-if="showHeader">
+ <view class="zb-table-header top-header-uni" style="">
+ <view class="zb-table-fixed" >
+ <view class="zb-table-thead" style="position: relative;" >
+ <view class="item-tr">
+ <view
+ @click.stop="sortAction(item,index)"
+ :class="['item-th',index <fixedLeftColumns.length&&'zb-stick-side']"
+ :style="{
+
+ left:`${item.left}px`,
+ width:`${item.width?item.width:'100'}px`,
+ flex:index===transColumns.length-1?1:'none',
+ minWidth:`${item.width?item.width:'100'}px`,
+ borderRight:`${border?'1px solid #e8e8e8':''}`,
+ borderTop:`${border?'1px solid #e8e8e8':''}`,
+ textAlign:item.align||'left'
+ }"
+ v-for="(item,index) in transColumns" :key="index">
+ <template v-if="item.type==='selection'">
+ <view class="checkbox-item">
+ <tableCheckbox
+ :indeterminate="indeterminate" :checked="checkedAll" @checkboxSelected="checkboxSelectedAll"></tableCheckbox>
+ </view>
+ </template>
+ <template v-else>
+ {{ item.label||'' }}
+ <view class="sorter-table" v-if="item.sorter">
+ <view :class="['sorter-table-icon',item.sorterMode==='_asc'&&`sorting${item.sorterMode||''}`]"></view>
+ <view :class="['sorter-table-icon',item.sorterMode==='_desc'&&`sorting${item.sorterMode||''}`]"></view>
+ </view>
+ </template>
+ </view>
+ </view>
+ </view>
+ </view>
+ </view>
+ </template>
+ <template v-if="!data.length">
+ <view class="no-data">鏆傛棤鏁版嵁~~</view>
+ </template>
+ <view class="zb-table-fixed">
+ <view class="zb-table-tbody">
+ <view :class="['item-tr',highlight&&isHighlight(item,index)?'current-row':'']"
+ @click.stop="rowClick(item,index)"
+ v-for="(item,index) in transData" :key="item.key" >
+ <view
+ :style="[{
+ left:`${ite.left}px`,
+ width:`${ite.width?ite.width:'100'}px`,
+ flex:i===transColumns.length-1?1:'none',
+ minWidth:`${ite.width?ite.width:'100'}px`,
+ borderRight:`${border?'1px solid #e8e8e8':''}`,
+ textAlign:ite.align||'left',
+ },getCellStyle(item,ite,index,i)]"
+ @click="cellClick(item,index,ite)"
+ :class="['item-td', i <fixedLeftColumns.length&&'zb-stick-side',stripe?(index % 2) != 0?'odd':'even':'']"
+ v-for="(ite,i) in transColumns" :key="i">
+ <template v-if="ite.type==='operation'">
+ <view style="display: flex;align-items: center;height: 100%">
+ <view
+ v-for="ren,ind in permission(item,ite.renders,index)"
+ :key="ind"
+ @click.stop="$emit(ren.func,item,index)"
+ :style="{
+ display:'flex',
+ alignItems: 'center',
+ marginRight:ite.renders.length>1?'8px':'0'
+ }">
+ <template v-if="ren.type==='custom'">
+ <view :class="ren.class||''" style="cursor: pointer">
+ {{ren.name}}
+ </view>
+ </template>
+ <template v-else>
+ <button
+ :class="ren.class||''"
+ :type="ren.type||'primary'" :size="ren.size||'mini'">{{ren.name}}</button>
+ </template>
+ </view>
+ </view>
+ </template>
+ <template v-else-if="ite.type==='selection'">
+ <view class="checkbox-item">
+ <tableCheckbox @checkboxSelected="(e)=>checkboxSelected(e,item)" :cellData="item" :checked="item.checked"/>
+ </view>
+ </template>
+ <template v-else-if="ite.type==='img'">
+ <template v-if="item[ite.name]">
+ <view class="checkbox-item" @click.stop>
+ <image
+ @click.stop="previewImage(iImageTem,item[ite.name],iImage)"
+ v-for="iImageTem,iImage in imgs(item[ite.name])"
+ :show-menu-by-longpress="false"
+ :key="iImage"
+ :src="iImageTem" style="width: 40px;height:30px; " mode="aspectFit"></image>
+ </view>
+ </template>
+
+ <text v-else>{{ite.emptyString}}</text>
+ </template>
+ <template v-else-if="ite.type==='index'">
+ {{index+1}}
+ </template>
+ <template v-else>
+<!-- {{ ite.filters?itemFilter(item,ite):(item[ite.name]==null||item[ite.name]==='')?ite.emptyString:item[ite.name] }}-->
+ {{ ite.filters?itemFilter(item,ite):formatterAction(item,ite,index,i) }}
+ </template>
+ </view>
+ </view>
+ </view>
+ </view>
+ <table-summary
+ v-if="showSummary"
+ :data="data"
+ :showSummary="showSummary"
+ :fixedLeftColumns="fixedLeftColumns"
+ :transColumns="transColumns"
+ :border="border"
+ :summary-method="summaryMethod"
+ :sumText="sumText"
+ />
+ </view>
+ </scroll-view>
+ </view>
+ <zb-load-more v-if="isLoadMore&&!completeLoading"/>
+ </view>
+ <!-- #endif -->
+</template>
+<script>
+import TableCheckbox from './components/table-checkbox.vue'
+import TableSummary from "./components/table-summary.vue";
+import TableSideSummary from "./components/table-side-summary.vue";
+import TableH5Summary from './components/table-h5-summary'
+import ZbLoadMore from './components/zb-load-more'
+
+// #ifdef H5
+import {getScrollbarSize} from "./js/util";
+// #endif
+
+export default {
+ components:{
+ TableCheckbox,
+ TableSummary,
+ TableSideSummary,
+ TableH5Summary,
+ ZbLoadMore
+ },
+ props:{
+ highlight:{
+ type:Boolean,
+ default:false
+ },
+ itemDate:{
+ type:Object,
+ default:()=>{}
+ },
+ columns:{
+ type:Array,
+ default:()=>[]
+ },
+ showSummary:{
+ type:Boolean,
+ default:false
+ },
+ isShowLoadMore:{
+ type:Boolean,
+ default:false
+ },
+ data:{
+ type:Array,
+ default:()=>[]
+ },
+ sumText:{
+ type:String,
+ default:'鍚堣'
+ },
+ showHeader:{
+ type:Boolean,
+ default:true
+ },
+ border:{
+ type:Boolean,
+ default:false
+ },
+ stripe:{
+ type:Boolean,
+ default:true
+ },
+ fit:{
+ type:Boolean,
+ default:false
+ },
+ rowKey:[String, Function],
+ summaryMethod:Function,
+ pullUpLoading:Function,
+ formatter:Function,
+ cellStyle:Function,
+ cellHeaderStyle:Function,
+ permissionBtn:Function,
+ },
+ computed:{
+ loadMoreHeight(){
+ return this.isLoadMore?40:0
+ },
+ fixedLeftColumns(){
+ let arr = []
+ for(let i=0;i<this.columns.length;i++){
+ let item = this.columns[i]
+ if(item.fixed){
+ arr.push(item)
+ }else {
+ break
+ }
+ }
+ return arr
+ },
+ imgs(){
+ return (item)=>{
+ return typeof item==='string'?[item]:item
+ }
+ },
+ itemfilters(){
+ return(item,ite)=>{
+ if(item[ite.name]==null){
+ return ite.emptyString
+ }
+ return item[ite.name]
+ }
+ },
+ scrollbarSize(){
+ // #ifdef H5
+ return getScrollbarSize()
+ // #endif
+
+ // #ifndef H5
+ return 0
+ // #endif
+ },
+ isFixedLeft(){
+ if(!this.columns.length){
+ return false
+ }
+ if(!this.data.length){
+ return false
+ }
+ let [firstArr] = this.columns
+ return !!firstArr.fixed;
+ },
+ transColumns(){
+ if(this.fit){
+ this.columns.forEach(column=>{
+ if(column.type==="operation"&&column.renders){
+ let str = ''
+ column.renders.map((item)=>{
+ str+=item.name
+ })
+ column.width = this.getTextWidth(str)+column.renders.length*40
+ }else if(column.type==="img"){
+
+ }else if(column.type==="selection"){
+ }else{
+ let arr = [this.getTextWidth(column.label)]
+ this.data.forEach(data=>{
+ let str = (data[column.name]+'')
+ if(str==='undefined'){
+ arr.push(30)
+ }else{
+ let width = this.getTextWidth(str)
+ arr.push(width)
+ }
+ })
+ column.width = Math.max(...arr)+20
+ }
+ })
+ }
+ let number = 0
+ this.columns.forEach((item,index)=>{
+ if(item.type==="operation"&&item.renders&&!item.width){
+ let str = ''
+ item.renders.map((item)=>{
+ str+=item.name
+ })
+ item.width = this.getTextWidth(str)+item.renders.length*40
+ }
+ if(item.type==="img"){
+ if(!item.width){
+ let arr = []
+ let widImg = this.getTextWidth(item.label)
+ this.data.forEach(data=>{
+ if(data[item.name]){
+ let urls = typeof data[item.name]==='string'?[data[item.name]]:data[item.name]
+ arr.push(urls.length)
+ }
+ item.width = Math.max(...arr)*40+widImg
+ })
+ }
+
+ }
+ if(item.fixed){
+ if(index===0){
+ item.left = 0
+ number+=item.width
+ }else {
+ item.left = number
+ number+=item.width
+ }
+ }
+ item.emptyString = item.emptyString||'--'
+ })
+ return this.columns
+ },
+ transData(){
+ let flag = this.columns.some(item=>item.type==='selection')
+ this.data.forEach((item,index)=>{
+ if(flag){
+ if(item.checked){
+ if(!this.selectArr.length){
+ this.selectArr.push(item)
+ }
+ }
+ }
+ if(this.rowKey){
+ if(typeof this.rowKey==='function'){
+ item.key = Object.freeze(this.rowKey(item))||Date.now()
+ }else {
+ item.key = Object.freeze(item[this.rowKey])||Date.now()
+ }
+ }else {
+ item.key = index
+ }
+ })
+ if(flag){
+ if(this.data.length){
+ let le = this.data.filter(item=>item.checked).length
+ if(le){
+ if(le===this.data.length){
+ this.checkedAll = true
+ }else {
+ this.indeterminate = true
+ }
+ }else {
+ this.checkedAll = false
+ this.indeterminate = false
+ this.selectArr = []
+ }
+ }else {
+ this.checkedAll = false
+ this.indeterminate = false
+ this.selectArr = []
+ }
+ }
+ return this.data
+ },
+ isHighlight(){
+ return (item,index)=>{
+ if(this.rowKey){
+ return item.key === this.currentRow['key']
+ }else{
+ return index === this.currentRowIndex
+ }
+ }
+ },
+ getHeaderCellStyle() {
+ return (column, columnIndex,childIndex)=>{
+ const cellStyle = this.cellHeaderStyle;
+ if(typeof cellStyle==='function'){
+ return cellStyle({ column, columnIndex})
+ }
+ return {}
+ }
+ },
+ getCellStyle() {
+ return (row, column, rowIndex, columnIndex)=>{
+ const cellStyle = this.cellStyle;
+ if(typeof cellStyle==='function'){
+ return cellStyle({row, column, rowIndex, columnIndex})
+ }
+ return {}
+ }
+ },
+ },
+ data() {
+ return {
+ button:[],
+ alipayScrollTop:0,
+ alipayScrollOldTop:0,
+ alipayFlag:false,
+ bodyTableLeft:0,
+ headerTableLeft:0,
+ lastScrollLeft:0,
+ isLoadMore:false,
+ headerFooterTableLeft:0,
+ leftFiexScrollTop:0,
+ bodyScrollTop:0,
+ currentDriver:null,
+ currentDriver1:null,
+ bodyTime:null,
+ currentRowIndex:null,
+ currentRow: {},
+ bodyTime1:null,
+ headerTime:null,
+ debounceTime:null,
+ operation:{},
+ completedFlag:false,
+ selectArr:[],
+ indeterminate:false,
+ checkedAll:false,
+ completeLoading:false,
+ aliTime:null,
+ }
+ },
+ created(){
+ },
+ mounted(){
+
+ // setTimeout(()=>{
+ // uni.createSelectorQuery().in(this).select(".top-header-uni").boundingClientRect( data => {
+ // console.log('data=======',data)
+ // //data 鍙互鎵撳嵃data杈撳嚭鐪嬭缁嗘暟鎹紝鏈夊緢澶氭暟鎹俊鎭�
+ // var left = data.width;//琛ㄧず鍏冪礌瀹藉害
+ // }).exec();
+ // },1000)
+ },
+ beforeDestroy(){
+ this.aliTime&&clearTimeout(this.aliTime)
+ this.debounceTime&&clearTimeout(this.debounceTime)
+ this.bodyTime1&&clearTimeout(this.bodyTime1)
+ this.bodyTime&&clearTimeout(this.bodyTime)
+ this.selectArr = []
+ this.indeterminate = false
+ this.checkedAll = false
+
+ },
+ methods: {
+ clearSelection(){
+ this.transData.forEach(item=>{
+ item.checked = false
+ })
+ this.selectArr = []
+ this.indeterminate = false
+ this.checkedAll = false
+ },
+ formatterAction(row,column,rowIndex,columnIndex){
+ if(column.formatter&&typeof this.formatter==='function'){
+ return this.formatter(row,column,rowIndex,columnIndex)
+ }
+ return (row[column.name]==null||row[column.name]==='')?column.emptyString:row[column.name]
+ },
+ permission(item,renders,index){
+ if(this.permissionBtn&&typeof this.permissionBtn==='function'){
+ return this.permissionBtn(item,renders,index)
+ }
+ return renders
+ },
+ pullUpCompleteLoading(type){
+ this.isLoadMore = false
+ if(type==='ok'){
+ this.completeLoading = true
+ }
+ },
+ scrollAlipay(e){
+
+ if(!this.alipayScrollOldTop){
+ this.alipayScrollOldTop = e.detail.scrollTop
+ }
+ this.aliTime&&clearTimeout(this.aliTime)
+ this.aliTime = setTimeout(()=>{
+
+ if(this.alipayFlag&&e.detail.scrollTop>this.alipayScrollOldTop){
+ this.pullLoad()
+ }
+ this.alipayFlag = false
+ this.alipayScrollOldTop = null
+ },500)
+ },
+ pullLoad(){
+ if(this.isShowLoadMore){
+ this.isLoadMore = true
+ this.$emit('pullUpLoading')
+ let that = this
+ this.pullUpLoading&&this.pullUpLoading.call(this.$parent.$parent, (type)=>{
+ that.isLoadMore = false
+ if(type==='ok'){
+ that.completeLoading=true
+ }
+ })
+ }
+
+ },
+ scrolltolower(e){
+ this.alipayFlag = true
+ if(e.detail.direction==='bottom'){
+ this.pullLoad()
+ }
+
+ // this.pullUpLoading.call(this.$parent)
+ },
+ previewImage(item,url,current){
+ let urls = typeof url==='string'?[url]:url
+ uni.previewImage({
+ current,
+ urls:urls
+ })
+ },
+ resetHighlight(){
+ this.currentRowIndex = null
+ this.currentRow = {}
+ },
+ cellClick(row,index,column){
+ this.$emit('cellClick',row,index,column)
+ },
+ rowClick(row,index){
+ if(this.highlight){
+ this.currentRowIndex = index
+ this.currentRow = row
+ this.$emit('currentChange',row,index)
+ }
+ this.$emit('rowClick',row,index)
+ },
+ checkboxSelectedAll(e){
+ this.indeterminate = false
+ if(e.checked){
+ this.selectArr = []
+ this.checkedAll = true
+ this.data.forEach(item=>{
+ // this.$set(item,'checked',true)
+ item.checked = true
+ this.selectArr.push(item)
+ })
+ }else{
+ this.checkedAll = false
+ this.data.forEach(item=>{
+ this.$set(item,'checked',false)
+ })
+ this.selectArr = []
+ }
+ // #ifndef H5 || APP-PLUS
+ this.$forceUpdate()
+ // #endif
+ this.$emit('toggleAllSelection',e.checked,this.selectArr)
+ },
+ checkboxSelected(e,item){
+ // #ifdef H5 || APP-PLUS
+ this.$set(item,'checked',e.checked)
+ // #endif
+ // #ifndef H5 || APP-PLUS
+ this.data.forEach(item=>{
+ if(item.key===e.data.key){
+ item.checked = e.checked
+ }
+ })
+ // #endif
+ item.checked = e.checked
+ e.data.checked = e.checked
+ if(e.checked){
+ this.selectArr.push(e.data)
+ }else{
+ this.selectArr = this.selectArr.filter(item=>item.key!==e.data.key)
+ }
+ if(this.selectArr.length===this.transData.length){
+ this.indeterminate = false
+ this.checkedAll = true
+ }else{
+ this.indeterminate = true
+ this.checkedAll = false
+ }
+ if(!this.selectArr.length){
+ this.checkedAll = false
+ this.indeterminate = false
+ }
+ // #ifndef H5 || APP-PLUS
+ this.$forceUpdate()
+ // #endif
+ this.$emit('toggleRowSelection',e.checked,this.selectArr)
+ },
+ itemFilter(item,ite){
+ if(ite.filters&&ite.name){
+ let key = item[ite.name]
+ return ite.filters[key]||''
+ }
+ return item[ite.name]||ite.emptyString
+ },
+ // 榛樿瀛椾綋涓哄井杞泤榛� Microsoft YaHei,瀛椾綋澶у皬涓� 14px
+ getTextWidth(str) {
+ if(str.length<3){
+ return 40
+ }
+ let regx = /^[0-9]+.?[0-9]*$/
+ let flexWidth = 0
+ for (const char of str) {
+ if ((char >= 'A' && char <= 'Z') || (char >= 'a' && char <= 'z')) {
+ // 濡傛灉鏄嫳鏂囧瓧绗︼紝涓哄瓧绗﹀垎閰�8涓崟浣嶅搴�
+ flexWidth += 10
+ } else if (char >= '\u4e00' && char <= '\u9fa5') {
+ // 濡傛灉鏄腑鏂囧瓧绗︼紝涓哄瓧绗﹀垎閰�15涓崟浣嶅搴�
+ flexWidth += 15
+ } else if(regx.test(char)){
+ flexWidth += 9
+ }else {
+ // 鍏朵粬绉嶇被瀛楃锛屼负瀛楃鍒嗛厤8涓崟浣嶅搴�
+ flexWidth += 7
+ }
+ }
+ return flexWidth
+ },
+ width(item){
+ return `${item.width?item.width:'100'}px`
+ },
+ showStripe(index){
+ if(this.currentDriver)return
+ if(this.stripe){
+ return (index % 2) != 0?'odd':'even'
+ }else{
+ return ''
+ }
+ },
+ //楠岃瘉瀛楃涓叉槸鍚︽槸鏁板瓧
+ checkNumber(theObj) {
+ var reg = /^[0-9]+.?[0-9]*$/;
+ if (reg.test(theObj)) {
+ return true;
+ }
+ return false;
+ },
+ isDate(data){
+ if(isNaN(data)&&!isNaN(Date.parse(data))){
+ return true
+ }
+ return false
+ },
+ sortAction(item,index){
+ if(!item.sorter){return false}
+ this.$set(item,'sorterMode',item.sorterMode==='_asc'?'_desc':'_asc')
+ if(item.sorter==='custom'){
+ this.$emit('sort-change',item,item.sorterMode.replace('_',''),index)
+ }else {
+ this.sortData(item)
+ }
+ // #ifndef H5 || APP-PLUS
+ this.$forceUpdate()
+ // #endif
+ },
+ sortData(item){
+ let key = item.name
+
+ if(item.sorterMode==='_asc'){
+ this.data.sort((a,b)=>{
+ if(this.checkNumber(a[key])){
+ return a[key]-b[key]
+ }
+ if(this.isDate(a[key])){
+ let a1 = new Date(a[key]).getTime()
+ let b1 = new Date(b[key]).getTime()
+ return a1-b1
+ }
+ })
+ }else {
+ this.data.sort((a,b)=>{
+ if(this.checkNumber(a[key])){
+ return b[key]-a[key]
+ }
+ if(this.isDate(a[key])){
+ let a1 = new Date(a[key]).getTime()
+ let b1 = new Date(b[key]).getTime()
+ return b1-a1
+ }
+ })
+ }
+ },
+ throttle(method,delay=60){
+ let time = null
+ return (...args)=>{
+ if(!time){
+ time = setTimeout(()=>{
+ method(...args)
+ time = null;
+ },delay)
+ }
+ }
+ },
+ debounce(method,delay=1000){
+ return (...args)=>{
+ this.debounceTime&&clearTimeout(this.debounceTime)
+ this.debounceTime = setTimeout(()=>{
+ method(...args)
+ },delay)
+ }
+ },
+ handleBodyScroll(e){
+ if(this.currentDriver&&this.currentDriver!==e.currentTarget.id)return
+ this.currentDriver = e.currentTarget.id
+ this.headerTableLeft = e.detail.scrollLeft
+ this.headerFooterTableLeft = e.detail.scrollLeft
+ this.leftFiexScrollTop = e.detail.scrollTop
+ this.bodyTime&&clearTimeout(this.bodyTime)
+ this.bodyTime = setTimeout(()=>{
+ this.currentDriver=null
+ },200)
+
+ },
+ leftFixedScrollAction(e){
+ if(this.currentDriver&&this.currentDriver!==e.currentTarget.id)return
+ this.currentDriver = e.currentTarget.id
+ this.bodyScrollTop = e.detail.scrollTop
+ this.bodyTime&&clearTimeout(this.bodyTime)
+ this.bodyTime = setTimeout(()=>{
+ this.currentDriver=null
+ },200)
+ },
+ scrollToLeft(e){
+ if(this.currentDriver1&&this.currentDriver1!==e.currentTarget.id)return
+ this.currentDriver1 = e.currentTarget.id
+ if(e.detail.direction==='left'&&this.headerTableLeft<10){
+ this.headerTableLeft = 0
+ }else if(e.detail.direction==='top'&&this.leftFiexScrollTop<10){
+ this.leftFiexScrollTop = 0
+ }
+ this.bodyTime&&clearTimeout(this.bodyTime)
+ this.bodyTime = setTimeout(()=>{
+ this.currentDriver1=null
+ },200)
+ },
+ scrollToFixedLeft(e){
+ if(this.currentDriver1&&this.currentDriver1!==e.currentTarget.id)return
+ this.currentDriver1 = e.currentTarget.id
+ if(e.detail.direction==='top'&&this.bodyScrollTop<10){
+ this.bodyScrollTop = 0
+ }
+ this.bodyTime&&clearTimeout(this.bodyTime)
+ this.bodyTime = setTimeout(()=>{
+ this.currentDriver1=null
+ },200)
+ },
+ handleTableScrollLeft(e,type){
+ if(this.currentDriver&&this.currentDriver!==e.currentTarget.id)return
+ this.currentDriver = e.currentTarget.id
+ this.bodyTableLeft = e.detail.scrollLeft
+ this.headerFooterTableLeft = e.detail.scrollLeft
+ this.bodyTime&&clearTimeout(this.bodyTime)
+ this.bodyTime = setTimeout(()=>{
+ this.currentDriver=null
+ },200)
+ },
+ handleFooterTableScrollLeft(e){
+ if(this.currentDriver&&this.currentDriver!==e.currentTarget.id)return
+ this.currentDriver = e.currentTarget.id
+ this.bodyTableLeft = e.detail.scrollLeft
+ this.headerTableLeft = e.detail.scrollLeft
+ this.bodyTime&&clearTimeout(this.bodyTime)
+ this.bodyTime = setTimeout(()=>{
+ this.currentDriver=null
+ },200)
+ }
+ }
+}
+</script>
+<style lang="scss">
+.zb-table-fixed-left{
+ /*鍘婚櫎宸﹁竟婊氬姩鏉� */
+ scroll-view ::-webkit-scrollbar {
+ display: none !important;
+ width: 0 !important;
+ height: 0 !important;
+ -webkit-appearance: none;
+ background: transparent;
+ }
+}
+.zb-table-header{
+ ///*鍘婚櫎澶撮儴婊氬姩鏉� */
+ scroll-view ::-webkit-scrollbar {
+ display: none !important;
+ width: 0 !important;
+ height: 0 !important;
+ -webkit-appearance: none;
+ background: transparent;
+ }
+}
+
+</style>
+<style lang="scss" scoped>
+.sorter-table{
+ position: absolute;
+ right: 6px;
+ top:50%;
+ transform:translateY(-50%);
+ .sorter-table-icon{
+ width: 0;
+ height: 0;
+ color: #dcdcdc;
+ border-right: 4px solid transparent;
+ border-left: 4px solid transparent;
+ }
+ .sorter-table-icon:first-child{
+ border-bottom: 5px solid currentColor;
+ }
+ .sorter-table-icon:last-child{
+ margin-top: 1.5px;
+ border-top: 5px solid currentColor;
+ }
+ .sorting_desc{
+ color: #2979ff;
+ }
+ .sorting_asc{
+ color: #2979ff;
+ }
+}
+.checkbox-item{
+ display: flex;align-items: center;justify-content: center;width: 100%;height: 100%
+}
+.no-data{
+ width: 100%;
+ height: 80rpx;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ border-bottom: 1px solid #e8e8e8;
+}
+.item-th{
+ position: relative;
+ flex-shrink: 0;
+ width: 100px;
+ overflow-wrap: break-word;
+ border-bottom: 1px solid #e8e8e8;
+ transition: background 0.3s;
+ padding-right: 20px;
+ word-break:keep-all; /* 涓嶆崲琛� */
+ white-space:nowrap; /* 涓嶆崲琛� */
+ overflow:hidden; /* 鍐呭瓒呭嚭瀹藉害鏃堕殣钘忚秴鍑洪儴鍒嗙殑鍐呭 */
+ text-overflow:ellipsis; /* 褰撳璞″唴鏂囨湰婧㈠嚭鏃舵樉绀虹渷鐣ユ爣璁�(...) 锛涢渶涓巓verflow:hidden;涓�璧蜂娇鐢ㄣ��*/
+ overflow-wrap: break-word;
+}
+.zb-table{
+ height: 100%;
+ overflow: hidden;
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ font-size: 12px;
+ position: relative;
+ .zb-table-content{
+ //height: 100%;
+ //flex: 1;
+ position: relative;
+ overflow: hidden;
+ }
+ .zb-table-fixed{
+ min-width: 100%;
+ }
+ .zb-table-body{
+ position: relative;
+ background: #fff;
+ transition: opacity 0.3s;
+ }
+ .item-tr{
+ display: flex;
+ //height: 41px;
+ }
+ .item-td{
+ flex-shrink: 0;
+ width: 100px;
+ padding-left: 8px;
+ height: 40px;
+ line-height: 40px;
+ padding-right: 20px;
+ box-sizing: border-box;
+ word-break:keep-all; /* 涓嶆崲琛� */
+ white-space:nowrap; /* 涓嶆崲琛� */
+ overflow:hidden; /* 鍐呭瓒呭嚭瀹藉害鏃堕殣钘忚秴鍑洪儴鍒嗙殑鍐呭 */
+ text-overflow:ellipsis; /* 褰撳璞″唴鏂囨湰婧㈠嚭鏃舵樉绀虹渷鐣ユ爣璁�(...) 锛涢渶涓巓verflow:hidden;涓�璧蜂娇鐢ㄣ��*/
+ overflow-wrap: break-word;
+ border-bottom: 1px solid #e8e8e8;
+ //transition: background 0.3s;
+ }
+
+ .zb-table-fixed-left .zb-table-header{
+ overflow-y: hidden;
+ }
+ .zb-table-header {
+ overflow: hidden;
+ background: #fafafa;
+ .item-th{
+ padding-left: 8px;
+ line-height: 39px;
+ height: 40px;
+ //display: flex;
+ //align-items: center;
+ box-sizing: border-box;
+ }
+ }
+ .zb-table-fixed-left .zb-table-fixed{
+ background: #fff;
+ }
+ .zb-table-fixed-right .zb-table-fixed{
+ background: #fff;
+ }
+ .zb-table-body-inner{
+ height: 100%;
+ // overflow: scroll;
+ }
+ .zb-table-fixed-left{
+ position: absolute;
+ top: 0;
+ z-index: 1;
+ overflow: hidden;
+ border-radius: 0;
+ height: 100%;
+ //transition: box-shadow 0.3s ease;
+ }
+ .odd{
+ background-color:rgba(249,249,249,0.6);
+ //height: 100%;
+ width: 100%;
+ }
+ .even{
+ background-color:white ;
+ //height: 100%;
+ width: 100%;
+ }
+}
+.scroll-left-fixed{
+ .zb-table-fixed-left {
+ left: 0;
+ box-shadow: 6px 0 6px -4px #ccc;
+ }
+}
+.zb-table-applet{
+ height: 100%;
+ //overflow: hidden;
+ width: 100%;
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ font-size: 12px;
+ .zb-table-content{
+ //height: 100%;
+ flex: 1;
+ overflow: hidden;
+ position: relative;
+
+ }
+ .zb-table-fixed{
+ min-width: 100%;
+ width: fit-content;
+ }
+
+ .zb-table-body{
+ position: relative;
+ background: #fff;
+ transition: opacity 0.3s;
+ }
+ .item-tr{
+ display: flex;
+ //height: 41px;
+ }
+ .item-td{
+ flex-shrink: 0;
+ width: 100px;
+ padding-left: 8px;
+ height: 40px;
+ line-height: 40px;
+ padding-right:20px;
+ box-sizing: border-box;
+ word-break:keep-all; /* 涓嶆崲琛� */
+ white-space:nowrap; /* 涓嶆崲琛� */
+ overflow:hidden; /* 鍐呭瓒呭嚭瀹藉害鏃堕殣钘忚秴鍑洪儴鍒嗙殑鍐呭 */
+ text-overflow:ellipsis; /* 褰撳璞″唴鏂囨湰婧㈠嚭鏃舵樉绀虹渷鐣ユ爣璁�(...) 锛涢渶涓巓verflow:hidden;涓�璧蜂娇鐢ㄣ��*/
+ overflow-wrap: break-word;
+ border-bottom: 1px solid #e8e8e8;
+ //transition: background 0.3s;
+ }
+ .zb-table-header {
+ //overflow: hidden;
+ position: sticky;
+ top: 0;
+ z-index: 2;
+ //width: fit-content;
+ .item-th{
+ padding-left: 8px;
+ line-height: 39px;
+ height: 40px;
+ box-sizing: border-box;
+ background: #fafafa;
+ }
+ .zb-stick-side{
+ position: sticky;
+ top: 0;
+ left: 0;
+ z-index: 2;
+ //border-right: solid 1rpx #dbdbdb;
+ box-sizing: border-box;
+ background: #fafafa;
+ //box-shadow: 6px 0 6px -4px #ccc;
+ }
+ }
+ .zb-table-fixed-left .zb-table-fixed{
+ background: #fff;
+ }
+ .zb-table-fixed-right .zb-table-fixed{
+ background: #fff;
+ }
+ .zb-table-fixed-header .zb-table-body-inner{
+ height: 100%;
+ // overflow: scroll;
+ }
+ .zb-table-fixed-left{
+ position: absolute;
+ top: 0;
+ z-index: 1;
+ overflow: hidden;
+ border-radius: 0;
+ height: 100%;
+ //transition: box-shadow 0.3s ease;
+ }
+ .scroll-left-fixed{
+ .zb-table-fixed-left {
+ left: 0;
+ box-shadow: 6px 0 6px -4px #ccc;
+ }
+ }
+ .odd{
+ background-color:rgba(249,249,249,0.6);
+ //height: 100%;
+ width: 100%;
+ }
+ .even{
+ background-color:white ;
+ //height: 100%;
+ width: 100%;
+ }
+ .zb-table-tbody {
+ .zb-stick-side{
+ position: sticky;
+ left: 0;
+ z-index: 1;
+ box-sizing: border-box;
+ background:white;
+ //box-shadow: 6px 0 6px -2px #ccc;
+ }
+ .odd{
+ background:#f9f9f9;
+ //height: 100%;
+ width: 100%;
+ }
+ .even{
+ background:white ;
+ //height: 100%;
+ width: 100%;
+ }
+ }
+ .current-row{
+ .item-td{
+ background-color: #ecf5ff;
+ }
+ }
+}
+.current-row{
+ .item-td{
+ background-color: #ecf5ff;
+ }
+}
+.zb-table-header{
+ height: 40px;
+}
+.scrollPosition{
+ position: absolute;right: 0;top: 0;height: 100%;background: red;
+ z-index: 999;
+}
+</style>
diff --git a/uni_modules/zb-table/package.json b/uni_modules/zb-table/package.json
new file mode 100644
index 0000000..4bf4a39
--- /dev/null
+++ b/uni_modules/zb-table/package.json
@@ -0,0 +1,81 @@
+{
+ "id": "zb-table",
+ "displayName": "zb-table锛堝鍔熻兘琛ㄦ牸锛�",
+ "version": "1.2.18",
+ "description": "琛ㄦ牸缁勪欢 鏀寔鍥哄畾琛ㄥご鍜岄鍒椼�佷笂鎷夊姞杞芥洿澶氥�佸強鍥哄畾澶氬垪锛岃〃鏍艰嚜閫傚簲鍐呭锛屾帓搴忥紝澶氶�塩heckbox銆佸彲鐐瑰嚮鍒犻櫎锛岀紪杈戙�佸悎璁″姛鑳斤紝鍏煎澶氱",
+ "keywords": [
+ "table",
+ "琛ㄦ牸",
+ "鍥哄畾琛ㄥご銆佸浐瀹氶鍒椼�佸鍒�",
+ "涓婃媺鍔犺浇鏇村銆�",
+ "鎺掑簭銆佽嚜閫傚簲鍒楀銆佸閫塩heckbox銆佺紪杈戙�佸垹闄ゃ�佹寜閽�佸悎璁�"
+],
+ "repository": "https://github.com/zouzhibin/zb-table.git",
+ "engines": {
+ "HBuilderX": "^3.1.0"
+ },
+"dcloudext": {
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "鏃�",
+ "data": "鏃�",
+ "permissions": "鏃�"
+ },
+ "npmurl": "",
+ "type": "component-vue"
+ },
+ "uni_modules": {
+ "dependencies": [],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ },
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "u"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "寰俊娴忚鍣�(Android)": "y",
+ "QQ娴忚鍣�(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "灏忕▼搴�": {
+ "寰俊": "y",
+ "闃块噷": "y",
+ "鐧惧害": "y",
+ "瀛楄妭璺冲姩": "y",
+ "QQ": "y"
+ },
+ "蹇簲鐢�": {
+ "鍗庝负": "y",
+ "鑱旂洘": "y"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/zb-table/readme.md b/uni_modules/zb-table/readme.md
new file mode 100644
index 0000000..e3d402f
--- /dev/null
+++ b/uni_modules/zb-table/readme.md
@@ -0,0 +1,189 @@
+
+## 浠嬬粛
+鍩轰簬uni-app寮�鍙戠殑涓�涓櫘閫氱殑琛ㄦ牸缁勪欢锛屽姛鑳芥湁鍥哄畾棣栧垪鍜岃〃澶淬�佹帓搴忋�佹搷浣滄寜閽��
+table 琛ㄦ牸 鍥哄畾琛ㄥご銆佸浐瀹氶鍒椼�佸鍒� 涓婃媺鍔犺浇鏇村銆� 鎺掑簭銆佽嚜閫傚簲鍒楀銆佸閫塩heckbox銆佺紪杈戙�佸垹闄ゃ�佹寜閽�佸悎璁�
+宸茬敤浜庣敓浜х幆澧�
+
+寰俊=銆� 19550102670 鎷夎繘缇�
+## -- github 绗竴鏃堕棿浼氭洿鏂板埌github锛屾案杩滀繚鎸佹渶鏂帮紝鏈夊暐鎯虫硶鐨勫彲浠ユ彁PR,鍏卞悓寮�鍙� [鍦板潃](https://github.com/zouzhibin/zb-ui)
+
+## 鍙嬫儏閾炬帴
+### 鍦ㄧ嚎棰勮鐐瑰嚮 鈥斺�� [浼佷笟绾с�侀�氱敤鍨嬩腑鍚庡彴鍓嶇瑙e喅鏂规 ](https://yuanzbz.gitee.io/vue-admin-perfect/#/login?redirect=/home)
+### vue-admin-perfect 鈥斺�� [浼佷笟绾с�侀�氱敤鍨嬩腑鍚庡彴鍓嶇瑙e喅鏂规锛堝熀浜巚ue3.0+TS+Element-Plus 鏈�鏂扮増锛屽悓鏃舵敮鎸佺數鑴戯紝鎵嬫満锛屽钩鏉�)](https://github.com/zouzhibin/vue-admin-perfect)
+
+
+## table 灞炴��
+| 鍙傛暟 | 璇存槑 | 绫诲瀷 | 鍙�夊�� | 榛樿鍊� |鏄惁蹇呴』|
+| ------ | ------ | ------ | ------ | ------ |------ |
+| data | 鏄剧ず鐨勬暟鎹� | array |-- | -- |蹇呴』 |
+| column | 鏄剧ず鐨勫垪鏁版嵁 | array |-- | -- |蹇呴』 |
+| stripe | 鏄惁涓烘枒椹汗 table| boolean | - |false | 鍚� |
+| fit | 鍒楃殑瀹藉害鏄惁鑷拺寮� | boolean |true,false | false |鍚� |
+| show-header | 鏄惁鏄剧ず琛ㄥご | boolean |true,false | true |鍚� |
+| cell-style | 鍗曞厓鏍肩殑 style 鐨勫洖璋冩柟娉曪紝涔熷彲浠ヤ娇鐢ㄤ竴涓浐瀹氱殑 Object 涓烘墍鏈夊崟鍏冩牸璁剧疆涓�鏍风殑 Style銆� | Function({row, column, rowIndex, columnIndex})/Object |-- | -- |鍚� |
+| cell-header-style | 澶撮儴鍗曞厓鏍肩殑 style 鐨勫洖璋冩柟娉曪紝涔熷彲浠ヤ娇鐢ㄤ竴涓浐瀹氱殑 Object 涓烘墍鏈夊崟鍏冩牸璁剧疆涓�鏍风殑 Style銆� | Function({ column, columnIndex})/Object |-- | -- |鍚� |
+| formatter | colomn =銆媐ormatter 蹇呴』璁剧疆涓簍rue,鎵嶆湁浣滅敤锛岃繘琛屾牸寮忓寲鏁版嵁锛岃繘琛屾暟鎹殑杞崲 | Function({row, column, rowIndex, columnIndex})/Object |-- | -- |鍚� |
+| border | 鏄惁甯︽湁绾靛悜杈规 | boolean |true,false | true |鍚� |
+| highlight | 鏄惁瑕侀珮浜綋鍓嶈 | boolean |true,false | false |鍚� |
+| show-summary | 鏄惁鍦ㄨ〃灏炬樉绀哄悎璁¤ | boolean |true,false | false |鍚� |
+| sum-text | 鍚堣琛岀涓�鍒楃殑鏂囨湰 | String |- | 鍚堣 |鍚� |
+| summary-method | 鑷畾涔夌殑鍚堣璁$畻鏂规硶 | Function({ columns, data }) |- | - |鍚� |
+| permissionBtn | 鏄惁鍔ㄦ�佹帶鍒舵寜閽殑鏄剧ず闅愯棌 | Function({ row, renders,index }) |- | - |鍚� |
+| isShowLoadMore | 鏄惁寮�鍚笂鎷夊姞杞� | boolean |true,false | false |鍚� |
+| pullUpLoading | 寮�鍚笂鎷夊姞杞藉悗鐨勮繑鍥炲嚱鏁帮紝鎺ユ敹鍙傛暟done鏄嚱鏁�,done(type),type涓虹┖浠h〃杩樻湁鏁版嵁锛岀户缁紑鍚笂鎷夊姞杞斤紝type='ok',浠h〃缁撴潫涓婃媺鍔犺浇 | Function(done) |-- | -- |鍚� |
+
+```
+鍏抽棴涓婃媺鍔犺浇鐨勬柟寮�1锛歱ullUpLoading((done)=>{
+ done(type)
+})
+done 鎺ユ敹鍙傛暟涓� type 锛宼ype涓虹┖浠h〃杩樻湁鏁版嵁锛屽彲浠ョ户缁姞杞斤紝鏃犳暟鎹殑鏃跺�欎紶鍏� 'ok'浠h〃缁撴潫
+```
+
+## table 浜嬩欢
+| 鍙傛暟 | 璇存槑 | 绫诲瀷 | 鍙�夊�� | 榛樿鍊� |鏄惁蹇呴』|
+| ------ | ------ | ------ |--------------------------| ------ |------ |
+| 浜嬩欢鍚嶈嚜瀹氫箟 | 鍙栧喅浜巘ype绫诲瀷涓簅peration鐨� renders鍙傛暟閲岄潰 func 鐨勫弬鏁板悕 | Function | (row,index)=>{} | -- |鍚� |
+| sort-change | 鍙栧喅浜巘ype绫诲瀷涓簅peration鐨� renders鍙傛暟閲岄潰 func 鐨勫弬鏁板悕 | Function | (column,model,index)=>{} | -- |鍚� |
+| currentChange | 褰撹〃鏍肩殑褰撳墠琛屽彂鐢熷彉鍖栫殑鏃跺�欎細瑙﹀彂璇ヤ簨浠讹紝濡傛灉瑕侀珮浜綋鍓嶈锛岃鎵撳紑琛ㄦ牸鐨� highlight灞炴��,this.$refs.table.resetHighlight()娓呴櫎閫変腑 | Function | (row,index)=>{} | -- |鍚� |
+| toggleRowSelection | 鐢ㄤ簬澶氶�夎〃鏍硷紝鍒囨崲鏌愪竴琛岀殑閫変腑鐘舵�侊紝绗竴涓弬鏁颁唬琛ㄩ�変腑鐘舵�侊紝鍙傛暟浜屼唬琛ㄩ�変腑鐨勫璞� | Function | (selected ,array)=>{} | -- |鍚� |
+| toggleAllSelection | 鐢ㄤ簬澶氶�夎〃鏍硷紝鍒囨崲鎵�鏈夎鐨勯�変腑鐘舵�� 锛岀涓�涓弬鏁颁唬琛ㄩ�変腑鐘舵�侊紝鍙傛暟浜屼唬琛ㄩ�変腑鐨勫璞 Function | (selected ,array)=>{} | -- |鍚� |
+| rowClick | 鍗曞嚮鏌愯 锛岀涓�涓弬鏁颁唬琛ㄩ�変腑瀵硅薄锛屽弬鏁颁簩浠h〃閫変腑鐨刬ndex| Function | (row ,index)=>{} | -- |鍚� |
+| cellClick | 鍗曞嚮鍗曞厓鏍� 锛屽綋鏌愪釜鍗曞厓鏍艰鐐瑰嚮鏃朵細瑙﹀彂璇ヤ簨浠秥 Function | (row ,index,column)=>{} | -- |鍚� |
+| pullUpLoading | 寮�鍚笂鎷夊姞杞藉悗鐨勮繑鍥炲嚱鏁帮紝鏃犲弬鏁皘 Function | -- |-- |鍚� |
+
+```
+鍏抽棴涓婃媺鍔犺浇鐨勬柟寮�2锛歵his.$refs.zbTable.pullUpCompleteLoading('ok')
+鎺ユ敹鍙傛暟涓� type 锛宼ype涓虹┖浠h〃杩樻湁鏁版嵁锛屽彲浠ョ户缁姞杞斤紝鏃犳暟鎹殑鏃跺�欎紶鍏� 'ok'浠h〃缁撴潫
+```
+
+## data 灞炴��
+| 鍙傛暟 | 璇存槑 | 绫诲瀷 | 鍙�夊�� | 榛樿鍊� |
+| ------ | ------ | ------ | ------ | ------ |
+| checked | 鏄惁琚嬀閫� | boolean |true,false | 鏃� |
+
+
+## column 灞炴��
+| 鍙傛暟 | 璇存槑 | 绫诲瀷 | 鍙�夊�� | 榛樿鍊� |
+| ------ | ------ | ------ | ------ | ------ |
+| name | 灞炴�у�� | string |-- | 鏃� |
+| label | 鏄剧ず鐨勬爣棰� | string |-- | 鏃� |
+| width | 鍒楃殑瀹藉害 | number |-- | 100 |
+| fixed | 鍒楁槸鍚﹀浐瀹氬湪宸︿晶锛宼rue 琛ㄧず鍥哄畾鍦ㄥ乏渚� | boolean |true,false | true |
+| sorter | 鎺掑簭锛屽綋璁剧疆涓篶ustom鐨勬椂鍊欎唬琛ㄨ嚜瀹氫箟鎺掑簭锛屼笉浼氬啀瑙﹀彂榛樿鎺掑簭锛屼細瑙﹀彂table浜嬩欢@sort-change,鍙互閫氳繃鎺ュ彛鏉ヨ繘琛屾帓搴� | boolean |true,false,'custom' | false |
+| emptyString | 褰撳�间负绌虹殑鏃跺�欓粯璁ゆ樉绀虹殑鍊� | string | | -- |
+| filters | 瀵硅薄杩囨护鐨勯�夐」锛屽璞℃牸寮忥紝瀵硅薄涓殑鍏冪礌闇�瑕佹湁 key 鍜� value 灞炴�с�� | Object | {key:value} | -- |
+| align | 瀵归綈鏂瑰紡 | String | left/center/right | left |
+| type | 涓� operation 鐨勬椂鍊欎唬琛ㄤ负鎿嶄綔鎸夐挳,img鐨勬椂鍊欎唬琛ㄥ浘鐗囧湴鍧�,index浠h〃搴忓垪鍙� | string | operation,img,index | -- |
+| renders | type 涓簅peration鐨勬椂鍊� 蹇呬紶 | Array | {name:'鍚嶅瓧',func:"鐖跺厓绱犳帴鏀朵簨浠跺悕",type:"鎸夐挳鐨勭被鍨�",size:"澶у皬"} | -- |
+```
+type 涓� operation 鐨勬椂鍊欎唬琛ㄤ负鎿嶄綔鎸夐挳
+renders 浠h〃浼犲叆鐨勬寜閽� Array =>[
+ {
+ name:'缂栬緫',
+ class:"", // 娣诲姞class
+ type:'primary',浠h〃鎸夐挳鐨勭被鍨� type 涓篶ustom鐨勬椂鍊欒嚜瀹氫箟鎸夐挳 鍏朵粬绫诲瀷鍙栧喅浜巙niapp buttom缁勪欢鎸夐挳
+ size:'mini',浠h〃鎸夐挳鐨勫ぇ灏�
+ func:'edit' // func 浠h〃鎿嶄綔鎸夐挳鐐瑰嚮鐨勪簨浠跺悕瀛� 鐖跺厓绱犳帴鏀剁殑浜嬩欢 鐖跺厓绱� @edit
+ 渚嬪锛�// <zb-table @edit=""/>
+
+ }
+]
+```
+## 绀轰緥
+```
+<zb-table
+ :show-header="true"
+ :columns="column"
+ :stripe="true"
+ :fit="false"
+ show-summary
+ sum-text="鍚堣"
+ @rowClick="rowClick"
+ :summary-method="getSummaries"
+ @toggleRowSelection="toggleRowSelection"
+ @toggleAllSelection="toggleAllSelection"
+ :border="true"
+ @edit="buttonEdit"
+ @dele="dele"
+ :data="data"></zb-table>
+```
+
+## 鏁版嵁鏍煎紡
+```
+column:[
+ { type:'selection', fixed:true,width:50 },
+ { name: 'name', label: '濮撳悕',fixed:false,width:80,emptyString:'--' },
+ { name: 'age', label: '骞寸邯',sorter:false,align:'right', },
+ { name: 'sex', label: '鎬у埆',filters:{0:'鐢�',1:'濂�'}},
+ { name: 'img', label: '鍥剧墖',type:"img" },
+ { name: 'address', label: '鍦板潃' },
+ { name: 'date', label: '鏃ユ湡',sorter:true },
+ { name: 'province', label: '鐪佷唤' },
+ { name: 'city', label: '鍩庡競' },
+ { name: 'zip', label: '閭紪' },
+ { name: 'operation', type:'operation',label: '鎿嶄綔',renders:[
+ {
+ name:'缂栬緫',
+ func:'edit' // func 浠h〃瀛愬厓绱犵偣鍑荤殑浜嬩欢 鐖跺厓绱犳帴鏀剁殑浜嬩欢 鐖跺厓绱� @edit
+ },
+ {
+ name:'鍒犻櫎',
+ type:'warn',
+ func:"dele"
+ },
+ ]},
+ ],
+ data:[
+ {
+ date: '2016-05-02',
+ name: '鐜嬪皬铏�1',
+ province: '涓婃捣',
+ sex:'鐢�',
+ age:'18',
+ img:"https://img1.baidu.com/it/u=300787145,1214060415&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=500",
+ city: '鏅檧鍖�',
+ address: '涓婃捣甯傛櫘',
+ zip: 200333
+ },
+ {
+ date: '2016-05-02',
+ name: '鐜嬪皬铏�2',
+ province: '涓婃捣',
+ sex:'鐢�',
+ age:'18',
+ city: '鏅檧鍖�',
+ address: '涓婃捣甯傛櫘',
+ zip: 200333
+ },
+ {
+ date: '2016-05-02',
+ name: '鐜嬪皬铏�3',
+ province: '涓婃捣',
+ sex:'鐢�',
+ age:'18',
+ city: '鏅檧鍖�',
+ address: '涓婃捣甯傛櫘',
+ zip: 200333
+ },
+ {
+ date: '2016-05-02',
+ name: '鐜嬪皬铏�4',
+ province: '涓婃捣',
+ sex:'鐢�',
+ age:'18',
+ city: '鏅檧鍖�',
+ address: '涓婃捣甯傛櫘',
+ zip: 200333
+ },
+ {
+ date: '2016-05-02',
+ name: '鐜嬪皬铏�5',
+ province: '涓婃捣',
+ sex:'鐢�',
+ age:'18',
+ city: '鏅檧鍖�',
+ address: '涓婃捣甯傛櫘',
+ zip: 200333
+ }
+ ]
+```
diff --git a/utils/mpaasScan.js b/utils/mpaasScan.js
index deb1ca1..752e190 100644
--- a/utils/mpaasScan.js
+++ b/utils/mpaasScan.js
@@ -1,11 +1,12 @@
+import { CommonUtils } from "./common"
class mpaasScan {
mpaasScanModule
constructor() {
this.mpaasScanModule = uni.requireNativePlugin("Mpaas-Scan-Module")
}
- scanCode(callback) {
- mpaasScanModule.mpaasScan({
+ scanCode(callback) {
+ this.mpaasScanModule.mpaasScan({
'hideAlbum': true,
'timeoutInterval':'10', //瓒呮椂鏃堕棿
'timeoutText':'鏈瘑鍒埌浜岀淮鐮�' //瓒呮椂鎻愰啋
--
Gitblit v1.9.1