zhengkaixin преди 3 месеца
родител
ревизия
c72709ad4c

+ 37 - 0
apis/utils/index.js

@@ -2,6 +2,43 @@ export const currentTimeStamp = () => new Date().getTime()
 
 
 export const unixTimeStamp = (val) => new Date(val).getTime()
 export const unixTimeStamp = (val) => new Date(val).getTime()
 
 
+
+export function DX(n) {
+	console.log(n)
+	var fraction = ['角', '分'];
+	var digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
+	var unit = [
+		['元', '万', '亿'],
+		['', '拾', '佰', '仟']
+	];
+	var head = n < 0 ? '欠' : '';
+	n = Math.abs(n);
+
+	var s = '';
+
+	for (var i = 0; i < fraction.length; i++) {
+		//console.log( 10.0 *n  )
+		//  s += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '');  
+		var a = (n * 10).toFixed(2)
+
+		s += (digit[Math.floor(a * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '');
+
+	}
+	s = s || '整';
+	n = Math.floor(n);
+
+	for (var i = 0; i < unit[0].length && n > 0; i++) {
+		var p = '';
+		for (var j = 0; j < unit[1].length && n > 0; j++) {
+			p = digit[n % 10] + unit[1][j] + p;
+			n = Math.floor(n / 10);
+		}
+		s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s;
+	}
+	return head + s.replace(/(零.)*零元/, '元').replace(/(零.)+/g, '零').replace(/^整$/, '零元整');
+
+}
+
 export const nextMonth=(year,month,day,bl)=>{
 export const nextMonth=(year,month,day,bl)=>{
 	if(day){
 	if(day){
 		
 		

+ 6 - 0
assets/img/riLine-eraser-line.svg

@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="16" height="16" style="border-color: rgba(0,0,0,0);border-width: bpx;border-style: undefined" filter="none">
+    
+    <g>
+    <path d="M11.448 11.811l-6.6 6.6 6.925 6.925h1.56v-0.003h1.563l5.037-5.037-8.485-8.485zM13.333 9.925l8.485 8.485 3.771-3.772-8.485-8.485-3.771 3.772zM18.667 25.333h9.333v2.667l-17.331 0.003-8.649-8.649c-0.241-0.241-0.39-0.575-0.39-0.943s0.149-0.701 0.39-0.943l14.14-14.143c0.241-0.242 0.575-0.391 0.943-0.391s0.702 0.149 0.943 0.391v0l10.371 10.371c0.241 0.241 0.39 0.575 0.39 0.943s-0.149 0.701-0.39 0.943l-9.751 9.752z" fill="rgba(16.065,16.065,16.065,1)"></path>
+    </g>
+  </svg>

+ 66 - 0
components/l-signature/context.js

@@ -0,0 +1,66 @@
+export const uniContext = (ctx) => {
+	const ALIAS_ATTRS_MAP = [
+		'lineCap',
+		'strokeStyle',
+		'lineWidth',
+		'fillStyle',
+	]
+	ALIAS_ATTRS_MAP.forEach(style => {
+		Object.defineProperty(ctx, style, {
+			set: value => {
+				if(value)
+				ctx[`set${style.charAt(0).toUpperCase()}${style.slice(1)}`](value)
+			}
+		})
+	})
+	ctx.uniDrawImage = ctx.drawImage
+	ctx.drawImage = (image,...agrs) => {
+		ctx.uniDrawImage(image.src, ...agrs)
+	}
+	return ctx
+}
+
+class Image {
+	constructor() {
+		this.currentSrc = null
+		this.naturalHeight = 0
+		this.naturalWidth = 0
+		this.width = 0
+		this.height = 0
+		this.tagName = 'IMG'
+	}
+	set src(src) {
+		this.currentSrc = src
+		uni.getImageInfo({
+			src,
+			success: (res) => {
+				this.naturalWidth = this.width = res.width
+				this.naturalHeight = this.height = res.height
+				this.onload()
+			},
+			fail: () => {
+				this.onerror()
+			}
+		})
+	}
+	get src() {
+		return this.currentSrc
+	}
+}
+
+export const createImage = () => {
+	return new Image()
+}
+
+export const toDataURL = (canvasId, com) => {
+	return new Promise((resolve, reject) => {
+		uni.canvasToTempFilePath({
+			canvasId,
+			success: (res) => {
+				resolve(res.tempFilePath)
+			},
+			fail: reject
+		}, com)
+	})
+	
+}

+ 478 - 0
components/l-signature/l-signature.vue

@@ -0,0 +1,478 @@
+<template>
+	<view class="lime-signature" :style="[canvasStyle, styles]" ref="limeSignature">
+		<!-- #ifndef APP-VUE || APP-NVUE -->
+		<canvas 
+		v-if="useCanvas2d"
+		class="lime-signature__canvas"
+		:id="canvasId" 
+		type="2d"
+		:disableScroll="disableScroll"
+		@touchstart="touchStart"
+		@touchmove="touchMove"
+		@touchend="touchEnd"
+		></canvas>
+		<canvas 
+		v-else
+		:disableScroll="disableScroll"
+		class="lime-signature__canvas"
+		:canvas-id="canvasId" 
+		:id="canvasId"
+		@touchstart="touchStart"
+		@touchmove="touchMove"
+		@touchend="touchEnd"
+		@mousedown="touchStart"
+		@mousemove="touchMove"
+		@mouseup="touchEnd"
+		></canvas>
+		<!-- #endif -->
+		<!-- #ifdef APP-VUE -->
+		<view 
+		:id="canvasId"
+		:disableScroll="disableScroll"
+		:rparam="param"
+		:change:rparam="sign.update"
+		
+		:rclear="rclear"
+		:change:rclear="sign.clear"
+		
+		:rundo="rundo"
+		:change:rundo="sign.undo"
+		
+		:rsave="rsave"
+		:change:rsave="sign.save"
+		
+		:rempty="rempty"
+		:change:rempty="sign.isEmpty"
+		
+		></view>	
+		<!-- #endif -->
+		<!-- #ifdef APP-NVUE -->
+		<web-view 
+		src="/uni_modules/lime-signature/static/index.html"
+		class="lime-signature__canvas"
+		ref="webview"
+		@pagefinish="onPageFinish"
+		@error="onError"
+		@onPostMessage="onMessage"
+		></web-view>
+		<!-- #endif -->
+	</view>
+</template>
+<!-- #ifdef APP-VUE -->
+<script module="sign" lang="renderjs">
+// #ifdef APP-VUE 
+// import { Signature } from '@signature'
+import { Signature } from './signature'
+// import {base64ToPath} from './utils'
+
+export default {
+	data() {
+		return {
+			canvasid: null,
+			signature: null,
+			observer: null,
+			options: {},
+			saveCount: 0,
+		}
+	},
+	mounted() {
+		this.$nextTick(this.init)
+	},
+	methods: {
+		init() {
+			const el = this.$refs.limeSignature;
+			const canvas = document.createElement('canvas')
+			canvas.style = 'width:100%; height: 100%;'
+			el.appendChild(canvas)
+			this.signature = new Signature({el: canvas})
+			this.signature.pen.setOption(this.options)
+			const width = this.signature.canvas.get('width')
+			const height = this.signature.canvas.get('height')
+			
+			this.emit({
+				changeSize: {width, height}
+			})
+		},
+		undo(v) {
+			if(v && this.signature) {
+				this.signature.undo()
+			}
+		},
+		clear(v) {
+			if(v && this.signature) {
+				this.signature.clear()
+			}
+		},
+		save(v) {
+			if(v !== this.saveCount) {
+				this.saveCount = v;
+				const image = this.signature.canvas.get('el').toDataURL()
+				this.emit({save: image})
+				// base64ToPath(image).then((res) => {
+				// 	this.emit({save: res})
+				// })
+			}
+		},
+		isEmpty(v) {
+			if(v && this.signature) {
+				const isEmpty = this.signature.isEmpty()
+				this.emit({isEmpty})
+			}
+		},
+		emit(event) {
+			this.$ownerInstance.callMethod('onMessage', {
+				detail: {
+					data: [
+						{
+							event
+						}
+					]
+				}
+			})
+		},
+		update(v) {
+			if(v) {
+				if(this.signature) {
+					this.options = v
+					this.signature.pen.setOption(v)
+				} else {
+					this.options = v
+				}
+			}
+		}
+	}
+}
+// #endif
+</script>		
+<!-- #endif -->
+
+
+<script>
+	// #ifndef APP-NVUE
+	import {getCanvas2d, wrapEvent, requestAnimationFrame, sleep} from './utils'
+	import {Signature} from './signature'
+	// import {Signature} from '@signature';
+	import {uniContext, createImage, toDataURL} from './context'
+	// #endif
+	import {base64ToPath} from './utils'
+	export default {
+		props: {
+			styles: String,
+			disableScroll: Boolean,
+			type: {
+				type: String,
+				default: '2d'
+			},
+			// 画笔颜色
+			penColor: {
+				type: String,
+				default: 'black'
+			},
+			penSize: {
+				type: Number,
+				default: 2
+			},
+			// 画板背景颜色 未实现
+			backgroundColor: String,
+			// 笔锋
+			openSmooth: Boolean,
+			// 画笔最小值
+			minLineWidth: {
+				type: Number,
+				default: 2
+			},
+			// 画笔最大值
+			maxLineWidth: {
+				type: Number,
+				default: 6
+			},
+			// 画笔达到最小宽度所需最小速度(px/ms),取值范围1.0-10.0,值越小,画笔越容易变细,笔锋效果会比较明显,可以自行调整查看效果,选出自己满意的值。
+			minSpeed: {
+				type: Number,
+				default: 1.5
+			},
+			// 相邻两线宽度增(减)量最大百分比,取值范围1-100,为了达到笔锋效果,画笔宽度会随画笔速度而改变,如果相邻两线宽度差太大,过渡效果就会很突兀,使用maxWidthDiffRate限制宽度差,让过渡效果更自然。可以自行调整查看效果,选出自己满意的值。
+			maxWidthDiffRate: {
+				type: Number,
+				default: 20
+			},
+			// 限制历史记录数,即最大可撤销数,传入0则关闭历史记录功能
+			maxHistoryLength: {
+				type: Number,
+				default: 20
+			},
+			beforeDelay: {
+				type: Number,
+				default: 0
+			}
+		},
+		data() {
+			return {
+				canvasWidth: null,
+				canvasHeight: null,
+				useCanvas2d: true,
+				// #ifdef APP-PLUS
+				rclear: 0,
+				rundo: 0,
+				rsave: 0,
+				rempty: 0,
+				risEmpty: true,
+				toDataURL: null,
+				tempFilePath: [],
+				// #endif
+			}
+		},
+		computed: {
+			canvasId() {
+				return `lime-signature${this._uid||this._.uid}`
+			},
+			canvasStyle() {
+				const {canvasWidth, canvasHeight} = this
+				return {
+					width: canvasWidth && (canvasWidth + 'px'),
+					height: canvasHeight && (canvasHeight + 'px'),
+				}
+			},
+			param() {
+				const {penColor, penSize, backgroundColor, openSmooth, minLineWidth, maxLineWidth, minSpeed, maxWidthDiffRate, maxHistoryLength, disableScroll} = this
+				return JSON.parse(JSON.stringify({penColor, penSize, backgroundColor, openSmooth, minLineWidth, maxLineWidth, minSpeed, maxWidthDiffRate, maxHistoryLength, disableScroll}))
+			}
+		},
+		// #ifdef APP-NVUE
+		watch: {
+			param(v) {
+				this.$refs.webview.evalJS(`update(${JSON.stringify(v)})`)
+			}
+		},
+		// #endif
+		// #ifndef APP-PLUS
+		created() {
+			this.useCanvas2d = this.type=== '2d' && getCanvas2d()
+		},
+		// #endif
+		// #ifndef APP-PLUS
+		async mounted() {
+			if(this.beforeDelay) {
+				await sleep(this.beforeDelay)
+			}
+			const config = await this.getContext()
+			this.signature = new Signature(config)
+			this.canvasEl =  this.signature.canvas.get('el')
+			this.canvasWidth = this.signature.canvas.get('width')
+			this.canvasHeight = this.signature.canvas.get('height')
+			
+			this.stopWatch = this.$watch('param' , (v) => {
+				this.signature.pen.setOption(v)
+			}, {immediate: true})
+		},
+		// #endif
+		// #ifndef APP-PLUS
+		// #ifdef VUE3
+		beforeUnmount() {
+			this.stopWatch()
+			this.signature.destroy()
+		},
+		// #endif
+		// #ifdef VUE2
+		beforeDestroy() {
+			this.stopWatch()
+			this.signature.destroy()
+		},
+		// #endif
+		// #endif
+		methods: {
+			// #ifdef APP-PLUS
+			onPageFinish() {
+				this.$refs.webview.evalJS(`update(${JSON.stringify(this.param)})`)
+			},
+			onMessage(e = {}) {
+				const {detail: {data: [res]}} = e
+				if(res.event?.save) {
+					 this.toDataURL = res.event.save
+				}
+				if(res.event?.changeSize) {
+					const {width, height} = res.event.changeSize
+				}
+				if(res.event.hasOwnProperty('isEmpty')) {
+					this.risEmpty = res.event.isEmpty
+				}
+				if (res.event?.file) {
+					this.tempFilePath.push(res.event.file)
+					if (this.tempFilePath.length > 7) {
+						this.tempFilePath.shift()
+					}
+					return
+				}
+				if (res.event?.success) {
+					if (res.event.success) {
+						this.tempFilePath.push(res.event.success)
+						if (this.tempFilePath.length > 8) {
+							this.tempFilePath.shift()
+						}
+						this.toDataURL = this.tempFilePath.join('')
+						this.tempFilePath = []
+						// base64ToPath(this.tempFilePath.join('')).then(res => {
+							
+						// })
+					} else {
+						this.$emit('fail', 'canvas no data')
+					}
+					return
+				}
+			},
+			// #endif
+			undo() {
+				// #ifdef APP-VUE || APP-NVUE
+				this.rundo += 1
+				// #endif
+				// #ifdef APP-NVUE
+				this.$refs.webview.evalJS(`undo()`)
+				// #endif
+				// #ifndef APP-VUE
+				if(this.signature)
+					this.signature.undo()
+				// #endif
+			},
+			clear() {
+				// #ifdef APP-VUE || APP-NVUE
+				this.rclear += 1
+				// #endif
+				// #ifdef APP-NVUE
+				this.$refs.webview.evalJS(`clear()`)
+				// #endif
+				// #ifndef APP-VUE
+				if(this.signature)
+					this.signature.clear()
+				// #endif
+			},
+			isEmpty() {
+				// #ifdef APP-NVUE
+				this.$refs.webview.evalJS(`isEmpty()`)
+				// #endif
+				// #ifdef APP-VUE || APP-NVUE
+				this.rempty += 1
+				// #endif
+				// #ifndef APP-VUE || APP-NVUE
+				return this.signature.isEmpty()
+				// #endif
+			},
+			canvasToTempFilePath(param) {
+				const isEmpty = this.isEmpty()
+				// #ifdef APP-NVUE
+				this.$refs.webview.evalJS(`save()`)
+				// #endif
+				// #ifdef APP-VUE || APP-NVUE
+				const stopURLWatch = this.$watch('toDataURL', (v, n) => {
+					if(v && v !== n) {
+						if(param.pathType == 'url') {
+							base64ToPath(v).then(res => {
+								param.success({tempFilePath: res,isEmpty: this.risEmpty })
+							})
+						} else {
+							param.success({tempFilePath: v,isEmpty: this.risEmpty })
+						}
+						
+					}
+					stopURLWatch && stopURLWatch()
+				})
+				this.rsave += 1
+				// #endif
+				// #ifndef APP-VUE || APP-NVUE
+				const success = (success) => param.success && param.success(success)
+				const fail = (fail) => param.fail && param.fail(err)
+				if(this.useCanvas2d) {
+					try{
+						// #ifndef MP-ALIPAY
+						const {canvas} = this.signature.canvas.get('el')
+						const tempFilePath = canvas.toDataURL()
+						success({tempFilePath, isEmpty})
+						// #endif
+						// #ifdef MP-ALIPAY
+						canvas.toTempFilePath({
+							canvasid: this.canvasid,
+							success(res){success({tempFilePath: res, isEmpty})},
+							fail
+						})
+						// #endif
+					}catch(err){
+						console.warn(err)
+						fail(err)
+					}
+				} else {
+					toDataURL(this.canvasId, this).then(res => {
+						success({tempFilePath: res, isEmpty})
+					}).catch(err => {
+						console.warn(err)
+						fail(err)
+					})
+				}
+				// #endif
+			},
+			// #ifndef APP-PLUS
+			getContext() {
+				const {pixelRatio} = uni.getSystemInfoSync()
+				return new Promise(resolve => {
+					if(this.useCanvas2d) {
+						uni.createSelectorQuery().in(this)
+						.select(`#${this.canvasId}`)
+						.fields({
+							node: true,
+							size: true,
+							rect: true,
+						})
+						.exec(res => {
+							if(res) {
+								const {width, height, node, left, top, right} = res[0]
+								const context = node.getContext('2d')
+								node.width = width * pixelRatio;
+								node.height = height * pixelRatio;
+								resolve({ left, top, right, width, height, context, canvas: node, pixelRatio})
+							}
+						})
+					} else {
+						uni.createSelectorQuery().in(this)
+						.select(`#${this.canvasId}`)
+						.boundingClientRect()
+						.exec(res => {
+							if(res) {
+								const {width, height,  left, top, right} = res[0]
+								const context = uniContext(uni.createCanvasContext(this.canvasId, this))
+								const canvas = {
+									createImage, 
+									toDataURL: () => toDataURL(this.canvasId, this), 
+									requestAnimationFrame
+								}
+								resolve({ left, top, right, width, height, context, pixelRatio:1, canvas})
+							}
+						})
+					}
+				})
+			},
+			touchStart(e) {
+				if(!this.canvasEl) return
+				this.isStart = true
+				this.canvasEl.dispatchEvent('touchstart', wrapEvent(e))
+			},
+			touchMove(e) {
+				if(!this.canvasEl || !this.isStart && this.canvasEl) return
+				this.canvasEl.dispatchEvent('touchmove', wrapEvent(e))
+			},
+			touchEnd(e) {
+				if(!this.canvasEl) return
+				this.isStart = false
+				this.canvasEl.dispatchEvent('touchend', wrapEvent(e))
+			},
+			// #endif
+		}
+	}
+</script>
+<style lang="stylus">
+	.lime-signature,.lime-signature__canvas
+		// #ifndef APP-NVUE
+		width: 100%;
+		height: 100%
+		// #endif
+		// #ifdef APP-NVUE
+		flex: 1;
+		// #endif
+</style>

Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
components/l-signature/signature.js


+ 95 - 0
components/l-signature/utils.js

@@ -0,0 +1,95 @@
+export function compareVersion(v1, v2) {
+	v1 = v1.split('.')
+	v2 = v2.split('.')
+	const len = Math.max(v1.length, v2.length)
+	while (v1.length < len) {
+		v1.push('0')
+	}
+	while (v2.length < len) {
+		v2.push('0')
+	}
+	for (let i = 0; i < len; i++) {
+		const num1 = parseInt(v1[i], 10)
+		const num2 = parseInt(v2[i], 10)
+
+		if (num1 > num2) {
+			return 1
+		} else if (num1 < num2) {
+			return -1
+		}
+	}
+	return 0
+}
+
+
+export const getCanvas2d = () => {
+	let {SDKVersion, uniPlatform} = uni.getSystemInfoSync()
+	
+	if(!uniPlatform) {
+		// #ifdef MP-WEIXIN
+		uniPlatform = 'mp-weixin'
+		// #endif
+		// #ifdef MP-MP-ALIPAY
+		SDKVersion = my.SDKVersion
+		uniPlatform = 'mp-alipay'
+		// #endif
+		// #ifdef MP-MP-ALIPAY
+		uniPlatform = 'mp-toutiao'
+		// #endif
+	}
+	
+	const MAP = {
+		'mp-weixin': '2.9.7',
+		'mp-toutiao': '1.78.0',
+		'mp-alipay': '2.7.0'
+	}[uniPlatform]
+	return MAP && SDKVersion && compareVersion(SDKVersion, MAP) >= 1
+}
+
+export const wrapEvent = (e) => {
+  if (!e) return;
+  if (!e.preventDefault) {
+    e.preventDefault = function() {};
+  }
+  return e;
+}
+
+export const requestAnimationFrame = (cb) => {
+	setTimeout(cb, 30)
+}
+
+
+/**
+ * base64转路径
+ * @param {Object} base64
+ */
+export function base64ToPath(base64) {
+	const [, format, bodyData] = /data:image\/(\w+);base64,(.*)/.exec(base64) || [];
+	return new Promise((resolve, reject) => {
+		const bitmap = new plus.nativeObj.Bitmap('bitmap' + Date.now())
+		bitmap.loadBase64Data(base64, () => {
+			if (!format) {
+				reject(new Error('ERROR_BASE64SRC_PARSE'))
+			}
+			const time = new Date().getTime();
+			const filePath = `_doc/uniapp_temp/${time}.${format}`
+			bitmap.save(filePath, {},
+				() => {
+					bitmap.clear()
+					resolve(filePath)
+				},
+				(error) => {
+					bitmap.clear()
+					reject(error)
+				})
+		}, (error) => {
+			bitmap.clear()
+			reject(error)
+		})
+	})
+}
+
+
+export function sleep(delay) {
+	return new Promise(resolve => setTimeout(resolve, delay))
+}

+ 2 - 1
package.json

@@ -10,7 +10,8 @@
 		"vue-cli": "^2.9.6",
 		"vue-cli": "^2.9.6",
 		"vue-cropper": "^0.5.6",
 		"vue-cropper": "^0.5.6",
 		"vuex": "^3.6.2",
 		"vuex": "^3.6.2",
-		"weixin-js-sdk": "^1.6.0"
+		"weixin-js-sdk": "^1.6.0",
+		"xlsx": "^0.18.5"
 	},
 	},
 	"devDependencies": {
 	"devDependencies": {
 		"@vue/cli-plugin-babel": "^4.0.0",
 		"@vue/cli-plugin-babel": "^4.0.0",

+ 4 - 3
pages/mine/myApps.vue

@@ -120,7 +120,7 @@
 			</view>
 			</view>
 			<view class="apps-groups">
 			<view class="apps-groups">
 				
 				
-				<view class="item"  v-if="companyInfo.type==2||companyInfo.type==5"
+				<view class="item"  v-if="regUser.allowWithdrawal"
 				  @click="gotoUrl('/pages/withdrawal/index')" >
 				  @click="gotoUrl('/pages/withdrawal/index')" >
 					<view class="item-icon item-icon8">
 					<view class="item-icon item-icon8">
 						<image class="img" src="@/assets/img/riLine-hand-coin-line.svg" mode=""></image>
 						<image class="img" src="@/assets/img/riLine-hand-coin-line.svg" mode=""></image>
@@ -203,7 +203,8 @@
 				codes: '',
 				codes: '',
 				abnormalRecordsList: [],
 				abnormalRecordsList: [],
 				informationList:[],
 				informationList:[],
-				companyInfo:{}
+				companyInfo:{},
+				regUser:{}
 			}
 			}
 		},
 		},
 		onReady() {
 		onReady() {
@@ -264,7 +265,7 @@
 					uni.hideLoading();
 					uni.hideLoading();
 					this.codes = response.data.regUser.codes;
 					this.codes = response.data.regUser.codes;
 					this.companyInfo=response.data.companyInfo
 					this.companyInfo=response.data.companyInfo
-					
+					this.regUser=response.data.regUser
 				}).catch(error => {
 				}).catch(error => {
 					uni.showToast({
 					uni.showToast({
 						title: error,
 						title: error,

+ 83 - 19
pages/withdrawal/index.vue

@@ -2,15 +2,16 @@
 	<view>
 	<view>
 		<u-navbar title="提现记录" title-color="#101010"></u-navbar>
 		<u-navbar title="提现记录" title-color="#101010"></u-navbar>
 		<view class="tabs">
 		<view class="tabs">
-			<u-picker v-model="tabsFrom.show1" :default-selector="[tabsFrom.show1Index]" mode="selector"
-				:range="tabsFrom.selector1" range-key="label" @confirm="selector1confirm"></u-picker>
-			<u-picker-select title="日期选择" v-model="tabsFrom.show2" :defaultTime="tabsFrom.show2Index"
-				mode="time" :params="params" @confirm="selector2confirm" @reset="selector2reset"></u-picker-select>
+			<u-picker v-model="tabsFrom.show2" :default-selector="[tabsFrom.show2Index]" mode="selector"
+				:range="tabsFrom.selector2" range-key="label" @confirm="selector2confirm"></u-picker>
+				
+			<u-picker title="日期选择" v-model="tabsFrom.show1" :defaultTime="tabsFrom.show1Index"
+				mode="time" :params="params" @confirm="selector1confirm"></u-picker>
 
 
 			<view class="tabsItem" @click="tabsFrom.show1=!tabsFrom.show1">{{tabsFrom.show1Text}} <u-icon
 			<view class="tabsItem" @click="tabsFrom.show1=!tabsFrom.show1">{{tabsFrom.show1Text}} <u-icon
 					name="arrow-up" v-if="tabsFrom.show1"></u-icon><u-icon v-else name="arrow-down"></u-icon></view>
 					name="arrow-up" v-if="tabsFrom.show1"></u-icon><u-icon v-else name="arrow-down"></u-icon></view>
 
 
-			<view v-if="companyInfo.type==2" class="tabsItem" @click="tabsFrom.show3=!tabsFrom.show3">
+			<view v-if="0" class="tabsItem" @click="tabsFrom.show3=!tabsFrom.show3">
 				{{tabsFrom.show3Text}} <u-icon name="arrow-up" v-if="tabsFrom.show3"></u-icon><u-icon v-else
 				{{tabsFrom.show3Text}} <u-icon name="arrow-up" v-if="tabsFrom.show3"></u-icon><u-icon v-else
 					name="arrow-down"></u-icon></view>
 					name="arrow-down"></u-icon></view>
 
 
@@ -18,9 +19,10 @@
 			<view class="tabsItem" @click="tabsFrom.show2=!tabsFrom.show2">{{tabsFrom.show2Text}} <u-icon
 			<view class="tabsItem" @click="tabsFrom.show2=!tabsFrom.show2">{{tabsFrom.show2Text}} <u-icon
 					name="arrow-up" v-if="tabsFrom.show2"></u-icon><u-icon v-else name="arrow-down"></u-icon></view>
 					name="arrow-up" v-if="tabsFrom.show2"></u-icon><u-icon v-else name="arrow-down"></u-icon></view>
 		</view>
 		</view>
-		<view class="main">
+		<view class="main">
+		
 			<view class="line" v-for="(item,i) in list"    >
 			<view class="line" v-for="(item,i) in list"    >
-				<view class="title name">
+				<view class="title name" v-if="0">
 					<view class="nameA">
 					<view class="nameA">
 						2025年2月
 						2025年2月
 
 
@@ -30,24 +32,24 @@
 
 
 					</view>
 					</view>
 				</view>
 				</view>
-				<view class="item" @click="gotoUrl('/pages/withdrawal/info')">
+				<view class="item" @click="gotoItem('/pages/withdrawal/info?id='+item.id)">
 					<view class="body">
 					<view class="body">
 						<view class="name name1">
 						<view class="name name1">
 							<view class="nameA">
 							<view class="nameA">
-								物业方费用 (可提现)
+								{{item.title}}<span  :class="' statusN status'+item.status" >({{item.statusText}})</span> 
 							</view>
 							</view>
 							<view class="nameB">
 							<view class="nameB">
-								990.00
+								{{item.withdrawalAmount}}
 
 
 							</view>
 							</view>
 						</view>
 						</view>
 						<view class=" name name2">
 						<view class=" name name2">
 							<view class="nameA">
 							<view class="nameA">
-								荆鹏公寓
+								{{item.ownerCompanyName}}
 
 
 							</view>
 							</view>
 							<view class="nameB">
 							<view class="nameB">
-								2025-03-03
+								{{item.createDate}}
 
 
 							</view>
 							</view>
 						</view>
 						</view>
@@ -56,7 +58,9 @@
 						<u-icon name="arrow-right" color="#ACACAC"></u-icon>
 						<u-icon name="arrow-right" color="#ACACAC"></u-icon>
 					</view>
 					</view>
 				</view>
 				</view>
-			</view>
+			</view>
+			<u-divider :isnone="list.length==0"  nonetext="无记录"
+				border-color="#CFD2D5">已经到底了</u-divider>
 		</view>
 		</view>
 
 
 	</view>
 	</view>
@@ -68,14 +72,21 @@
 	export default {
 	export default {
 		data() {
 		data() {
 			return {
 			return {
-				list: [{}],
+				list: [],
 				recordsTotal: 0,
 				recordsTotal: 0,
 				companyInfo: {},
 				companyInfo: {},
 				formData: {
 				formData: {
 					pageIndex: 1,
 					pageIndex: 1,
 					pageSize: 20,
 					pageSize: 20,
 				},
 				},
-				params:{},
+				params:{
+					year: true,
+										month: false,
+										day: false,
+										hour: false,
+										minute: false,
+										second: false
+				},
 				tabsFrom: {
 				tabsFrom: {
 					show3: false,
 					show3: false,
 					show3Index: 0,
 					show3Index: 0,
@@ -91,15 +102,27 @@
 						value: '',
 						value: '',
 					}, ],
 					}, ],
 					selector2: [{
 					selector2: [{
-						label: '全部类型',
+						label: '全部状态',
 						value: '',
 						value: '',
-					}, ],
+					},{
+						label: '未签字',
+						value: '0',
+					}, {
+						label: '已签字',
+						value: '1',
+					}, {
+						label: '财务已审核',
+						value: '2',
+					},  ],
 					selector3: [{
 					selector3: [{
 						label: '全部类型',
 						label: '全部类型',
 						value: '',
 						value: '',
 					}, ]
 					}, ]
 				},
 				},
 			};
 			};
+		},
+		onLoad() {
+			this.tabsFrom.show1Index=new Date().getFullYear()+"-1-1"
 		},
 		},
 		onReady() {
 		onReady() {
 			this.companyInfo = this.carhelp.getPersonInfoPlus().companyInfo
 			this.companyInfo = this.carhelp.getPersonInfoPlus().companyInfo
@@ -110,8 +133,41 @@
 			if (this.list.length < this.recordsTotal) {
 			if (this.list.length < this.recordsTotal) {
 				this.myLoadmore();
 				this.myLoadmore();
 			}
 			}
+		},
+		onShow(){
+			
 		},
 		},
-		methods: {
+		methods: {
+			selector1confirm(e){
+				console.log(e)
+				this.tabsFrom.show1Text=e.year+"年"
+				this.tabsFrom.show1Index=e.year+"-1-1"
+				this.formData.year=this.tabsFrom.show1Index
+				this.getList(1)
+			},
+			selector2confirm(e){
+				var item=this.tabsFrom.selector2[e[0]]
+				
+				this.tabsFrom.show2Text=item.label
+				this.tabsFrom.show2Index=e[0]
+				this.formData.status=item.value
+				this.getList(1)
+				
+				console.log(e)
+			},
+			init(){
+				this.getList(1)
+			},
+			gotoItem(url){
+				uni.navigateTo({
+					url: url,
+					events: {
+						refreshData: () => {
+							this.init()
+						}
+					}
+				})
+			},
 			getList(bl) {
 			getList(bl) {
 				
 				
 				uni.showLoading({
 				uni.showLoading({
@@ -151,7 +207,8 @@
 		height: 96rpx;
 		height: 96rpx;
 		line-height: 96rpx;
 		line-height: 96rpx;
 		background-color: #fff;
 		background-color: #fff;
-		border-top: 1px solid rgba(241, 241, 241, 1);
+		border-top: 1px solid rgba(241, 241, 241, 1);
+		    border-bottom: 1px solid #E5E7EA;
 		display: flex;
 		display: flex;
 		justify-content: space-around;
 		justify-content: space-around;
 
 
@@ -187,6 +244,13 @@
 							color: rgba(51, 51, 51, 1);
 							color: rgba(51, 51, 51, 1);
 							font-size: 28rpx;
 							font-size: 28rpx;
 
 
+						}
+						.status0 {
+							color: #FF9800;
+						}
+						
+						.status1 {
+							color: #4CAF50;
 						}
 						}
 
 
 						.nameB {
 						.nameB {

+ 794 - 217
pages/withdrawal/info.vue

@@ -1,245 +1,822 @@
 <template>
 <template>
 	<view>
 	<view>
-		<u-navbar title="提现记录" title-color="#101010"></u-navbar>
-		<u-tabs :list="list"   class="jputabs" style="border-bottom: 1px solid #E5E7EA;"
-		:is-scroll="false" :current="current" @change="change"></u-tabs>
-		<view class="step step0" v-show="step==0">
-			<view class="withdraw">
-				<view class="withdraw-head ">
-					<b>申请物业</b><span class="classFFF">111元</span>
-				</view>
-				<view class="withdraw-head border-n">
-					<b>申请物业</b><span class="classFFF">111元</span>
-				</view>
-				<view class="withdraw-head border-n">
-					<b>申请物业</b><span class="classFFF">111元</span>
-				</view>
-				<view class="withdraw-head border-n">
-					<b>申请物业</b><span class="classFFF">111元</span>
-				</view>
-				<view class="withdraw-head ">
-					<b>申请物业</b><span class="classFFF">111元</span>
-				</view>
-			</view>
-			
-			
-			
-			<view class="withdraw">
-				<view class="withdraw-head ">
-					<b class="asterisk"><text>*</text>提现人收款户名</b>
-					<u-input class="textarea" type="textarea" 
-					v-model="info.accountName"
-					placeholder="请填写收款户名" height="96" cursor-spacing="8" />
-			
-				</view>
-				<view class="withdraw-head ">
-					<b class="asterisk"><text>*</text>提现人收款银行</b>
-					<u-input class="textarea" type="textarea"
-					v-model="info.bankName"
-					 placeholder="请填写收款银行全称" height="96" cursor-spacing="8" />
-			
-				</view>
-				<view class="withdraw-head border-n">
-					<b class="asterisk"><text>*</text>提现人收款账号</b>
-					<u-input class="textarea" v-model="info.accountNo"
-					type="textarea" placeholder="提现人收款账号" height="96" cursor-spacing="8" />
-			
-				</view>
-			
-			</view>
-			<view class="applyBtn">
-				<u-button class="save" @click="submit0()">申请提现</u-button>
-			</view>
-		</view>
-		<view class="step step1" v-show="step==1">
-			
-		</view>
-		<view class="step step2"  v-show="step==2">
-			
+		<u-navbar title="提现记录" v-if="step!=2" title-color="#101010"></u-navbar>
+		<u-navbar title="提现记录" v-else :custom-back="step0Fn" title-color="#101010"></u-navbar>
+		<u-tabs :list="list" v-if="step!=2" class="jputabs" style="border-bottom: 1px solid #E5E7EA;" :is-scroll="false"
+			:current="current" @change="change"></u-tabs>
+		<view class="step step0" v-show="step==0">
+
+			<view class="withdraw">
+				<view class="withdraw-head ">
+					<view class="bclass">申请方</view>
+					<view class="spanclass" >{{info.application.sharingCompanyName}}</view>
+				</view>
+				<view class="withdraw-head border-n">
+					<view class="bclass">申请园区
+					</view>
+					<view class="spanclass" >{{info.application.ownerCompanyName}}</view>
+				</view>
+				<view class="withdraw-head ">
+					<view class="bclass">提现状态</view>
+					<view class="spanclass"  :class="' statusN status'+info.application.status">
+						{{info.application.statusText}}</view>
+				</view>
+				<view class="withdraw-head border-n">
+					<view class="bclass">提现月份
+					</view>
+					<view class="spanclass" >{{info.application.applicationMonth}}</view>
+				</view>
+				<view class="withdraw-head ">
+					<view class="bclass">抄表开始日期
+					</view>
+					<view class="spanclass" >{{info.application.startTime}}</view>
+				</view>
+				<view class="withdraw-head ">
+					<view class="bclass">抄表截止日期
+
+					</view>
+					<view class="spanclass" >{{info.application.endTime}}</view>
+				</view>
+			</view>
+
+
+			<view class="withdraw">
+				<view class="withdraw-head ">
+
+					<view class="bclass">本期代收费金额<br/>
+					<b style="font-size: 24rpx;">(房租、物业、保洁)</b>
+					</view>
+					<view class="spanclass" >{{info.application.proxyFee}}元</view>
+					
+				</view>
+
+				<view class="withdraw-head border-n">
+					<view class="bclass">本期水电金额
+
+					</view>
+					<view class="spanclass" >{{info.application.electricityWaterFee}}元</view>
+				</view>
+				<view class="withdraw-head border-n">
+					<view class="bclass">本期节能金额
+
+					</view>
+					<view class="spanclass" >{{info.application.energySavingFee}}元</view>
+				</view>
+				<view class="withdraw-head border-n">
+					<view class="bclass">总金额
+
+					</view>
+					<view class="spanclass" >{{info.application.totalAmount}}元</view>
+				</view>
+				<view class="withdraw-head ">
+					<view class="bclass">平台手续费率
+
+					</view>
+					<view class="spanclass" >{{info.application. transactionRatio*100}}%</view>
+				</view>
+				<view class="withdraw-head ">
+					<view class="bclass">平台手续费
+
+
+					</view>
+					<view class="spanclass" >{{info.application. transactionFee}}元</view>
+				</view>
+				<view class="withdraw-head ">
+					<view class="bclass">平台代收费分润比率
+
+
+					</view>
+					<view class="spanclass" >{{info.application. proxyFeeSharingRatio * 100}}%</view>
+				</view>
+				<view class="withdraw-head ">
+					<view class="bclass">平台水电分润比率
+
+
+					</view>
+					<view class="spanclass" >{{info.application.electricityWaterFeeSharingRatio * 100}}%
+					</view>
+				</view>
+				<view class="withdraw-head ">
+					<view class="bclass">节能分润比率
+
+
+					</view>
+					<view class="spanclass" >{{info.application.energySavingFeeSharingRatio* 100}}%
+					</view>
+				</view>
+			</view>
+
+
+			<view class="withdraw">
+				<view class="withdraw-head ">
+					<view class="bclass">代收费分润金额 </view>
+					<view class="spanclass" >{{info.application.proxyFeeSharingAmount}}元</view>
+				</view>
+				<view class="withdraw-head border-n">
+					<view class="bclass">水电分润金额 </view>
+					<view class="spanclass" >{{info.application. electricityWaterFeeSharingAmount}}元
+					</view>
+				</view>
+				<view class="withdraw-head border-n">
+					<view class="bclass">节能分润金额 </view>
+					<view class="spanclass" >{{info.application.energySavingFeeSharingAmount}}元</view>
+				</view>
+				<view class="withdraw-head border-n">
+					<view class="bclass">总分润金额 </view>
+					<view class="spanclass" >{{info.application. platformSharingAmount}}元</view>
+				</view>
+
+			</view>
+
+			<view class="withdraw">
+				<view class="withdraw-head ">
+					<view class="bclass">申请提现金额 </view>
+					<view class="spanclass" >{{info.application.withdrawalAmount}}元</view>
+				</view>
+				<view class="withdraw-head border-n">
+					<view class="bclass">大写 </view>
+					<view class="spanclass" >{{applicationAmountDX()}}元</view>
+				</view>
+
+			</view>
+
+			<view class="withdraw">
+				<view class="withdraw-head withdraw-head2 ">
+					<b class="asterisk"><text>*</text>收款户名
+				</b>
+				<u-input class="textarea" type="textarea" v-model="data.accountName" placeholder="请填写收款户名" height="96"
+					cursor-spacing="8" />
+
+			</view>
+			<view class=" withdraw-head withdraw-head2 ">
+				<view class="asterisk"><text>*</text>收款银行
+			</view>
+			<u-input class="textarea" type="textarea" v-model="data.bankName" placeholder="请填写收款银行全称" height="96"
+				cursor-spacing="8" />
+
 		</view>
 		</view>
+		<view class="withdraw-head withdraw-head2 border-n">
+			<view class="asterisk"><text>*</text>收款账号
+		</view>
+		<u-input class="textarea" v-model="data.accountNo" type="textarea" placeholder="提现人收款账号" height="96"
+			cursor-spacing="8" />
+
+	</view>
+
+	</view>
+	<view class="applyBtn" v-if="info.application.status==0">
+		<u-button class="save" type="primary" @click="submit0()">申请提现</u-button>
+	</view>
+	</view>
+	<view class="step step1" v-show="step==1">
+
+		<scroll-view :scroll-x="true" :scroll-y="true" style="width: 750rpx;">
+			<view class="applyBtn">
+				<u-button class="save" type="success" @click="down()">下载对账单</u-button>
+			</view>
+			<table class="border-table " style="width: 1800px;" id="my-table-id">
+				<tr>
+					<td colspan=""></td>
+					<td colspan="11">e家能源月度账单明细表</td>
+				</tr>
+				<tr>
+					<td colspan=""></td>
+					<td colspan="3">园区:{{info.parkName}}</td>
+					<td colspan="8">抄表时间:{{info.startTime}}至{{info.endTime}}</td>
+				</tr>
+				<tr>
+					<td width="50px">序号</td>
+					<td width="250px">单位名称</td>
+					<td width="220px">本期代收费金额<br />
+						(房租、物业、保洁)</td>
+					<td width="150px">本期使用电量(度)</td>
+					<td width="150px">本期使用水量(吨)</td>
+					<td width="150px">电单价/度</td>
+					<td width="150px">水单价/吨</td>
+					<td width="150px">使用金额</td>
+					<td width="150px">分摊线损(度)</td>
+					<td width="150px">分摊公摊(度)</td>
+					<td width="150px">节能收益</td>
+					<td width="150px">总收入</td>
+
+				</tr>
+				<tr v-for="(item,i) in info.monthList" :key="i">
+					<td>{{item.index}}</td>
+					<td>{{item.name}}</td>
+
+					<td>{{item.proxyFee?item.proxyFee:'/'}}</td>
+					<td>{{item.electricityConsumption?item.electricityConsumption:'/'}}</td>
+
+
+					<td>{{item.waterConsumption?item.waterConsumption:'/'}}</td>
+					<td>{{item.electricityPrice?item.electricityPrice:'/'}}</td>
+					<td>{{item.waterPrice?item.waterPrice:'/'}}</td>
+					<td>{{item.electricityWaterFee?item.electricityWaterFee:'/'}}</td>
+					<td>{{item.lineLoss?item.lineLoss:'/'}}</td>
+					<td>{{item.shareElectricityConsumption?item.shareElectricityConsumption:'/'}}</td>
+					<td>{{item.saveEnergyIncome?item.saveEnergyIncome:'/'}}</td>
+					<td>{{item.totalAmount?item.totalAmount:'/'}}</td>
+
+				</tr>
+				<tr>
+					<td></td>
+					<td>合计</td>
+
+					<td>{{sumKey('proxyFee')}}</td>
+					<td>{{sumKey('electricityConsumption')}}</td>
+
+
+					<td>{{sumKey('waterConsumption')}}</td>
+					<td></td>
+					<td></td>
+					<td>{{sumKey('electricityWaterFee')}}</td>
+					<td></td>
+					<td></td>
+					<td>{{sumKey('saveEnergyIncome')}}</td>
+					<td>{{sumKey('totalAmount')}}</td>
+
+				</tr>
+			</table>
+		</scroll-view>
+	</view>
+	<view class="step step2" v-show="step==2">
+		<view class="sign">
+
+			<p>请在下方空白区域使用正楷字体进行电子签名</p>
+
+			<view class="signature">
+				<l-signature disableScroll ref="signatureRef" :penColor="penColor" :penSize="penSize"
+					:openSmooth="openSmooth"></l-signature>
+			</view>
+			<view class="clean-save">
+				<view class="clean" @click="onClick('clear')">
+					<img src="@/assets/img/riLine-eraser-line.svg" alt="">
+					<view class="">
+						清除
+					</view>
+				</view>
+				<view class="save" @click="onClick('save')">
+					<img src="@/assets/img/riLine-eraser-line.svg" alt="">
+					<view class="">
+						保存并提交
+					</view>
+				</view>
+
+			</view>
+			<!-- 				<img :src="data.signUrl" v-if="data&&data.signUrl" style="width: 100%;border: 1px solid;"> -->
+
+			<button v-if="data.signUrl" class="submit" @click="submit()">提交确认单</button>
+		</view>
+	</view>
 
 
 	</view>
 	</view>
 </template>
 </template>
 
 
 <script>
 <script>
+	import * as API from '@/apis/pagejs/withdrawal.js'
+	import LSignature from '@/components/l-signature/l-signature.vue'
+
+
+	//import * as API_Common from '@/apis/common.js'
+
+	// import XLSX from 'xlsx';
+	//import * as XLSX from 'xlsx/xlsx.mjs';
+	var XLSX = require("xlsx");
+
+
+	import {
+		DX
+	} from '@/apis/utils'
 	export default {
 	export default {
 		data() {
 		data() {
-			return {
-				step:0,
+			return {
+				step: 0,
 				list: [{
 				list: [{
-					name: '待收货'
+					name: '提现申请单'
 				}, {
 				}, {
-					name: '待付款'
+					name: '收入明细'
 				}],
 				}],
-				current: 0,
-				info:{},
-				data:{},	
+				id: "",
+				current: 0,
+				info: {
+					application: {},
+					endTime: "",
+					monthList: [],
+					parkName: "",
+					startTime: ""
+				},
+				data: {},
+
+				penColor: '',
+				penSize: 5,
+				openSmooth: true,
+				url: '',
+				suburl: '',
+
+				nowTime: "",
+				serverUrl: "",
+				token: "",
 			};
 			};
 		},
 		},
+		onLoad(op) {
+			if (op.id) {
+				this.id = op.id
+				this.getInfo()
+			}
+		},
 		methods: {
 		methods: {
+			down() {
+				var table_elt = document.getElementById("my-table-id");
+
+				// 1. 转换数据为工作表格式
+				var workbook = XLSX.utils.table_to_book(table_elt);
+
+				// 2. 创建工作簿并添加工作表
+
+				//var worksheet = workbook.Sheets["Sheet1"];
+				// XLSX.utils.sheet_add_aoa(ws, {origin:-1});
+
+				//XLSX.utils.sheet_add_aoa(workbook,[], {origin:-1});
+				// 3. 生成Excel文件二进制数据
+				const excelBuffer = XLSX.write(workbook, {
+					bookType: 'xlsx',
+					type: 'array'
+				});
+
+				// 4. 转换为Blob并下载(H5端)
+				const blob = new Blob([excelBuffer], {
+					type: 'application/octet-stream'
+				});
+				const url = URL.createObjectURL(blob);
+				const link = document.createElement('a');
+				link.href = url;
+				link.download = this.info.application.applicationMonth + '月对账单数据导出' + new Date().getTime() + '.xlsx';
+				link.click();
+				URL.revokeObjectURL(url);
+			},
+			submit() {
+				if (this.data.signUrl) {
+					this.data.status = 0;
+					this.submitFrom()
+				} else {
+					uni.showToast({
+						title: "请签字后提交"
+					})
+				}
+			},
+			submitFrom() {
+
+				uni.showLoading({
+					title: "提交中...",
+					mask: true,
+				})
+
+				//this.info.status=5;
+				//var str=JSON.stringify();
+				this.data.recordId = this.id
+				API.apply(this.data).then((res) => {
+
+					const eventChannel = this.getOpenerEventChannel();
+					eventChannel.emit('refreshData');
+
+					uni.hideLoading()
+
+					uni.showModal({
+						title: '提示',
+						content: '提交成功,等待财务审核!',
+						showCancel: false,
+						success: function(res) {
+							if (res.confirm) {
+
+								uni.navigateBack()
+							} else if (res.cancel) {
+								//.log('用户点击取消');
+							}
+						}
+					});
+
+				}).catch(error => {
+					uni.hideLoading()
+					uni.showModal({
+						title: "提示",
+						content: error,
+						showCancel: false
+					})
+				})
+			},
+
+			uploadpic() {
+				uni.showLoading({
+					title: '上传中'
+				});
+				this.token = this.carhelp.getToken();
+				this.serverUrl = process.car.BASE_URL;
+				var time = ""; //parseUnixTime(new Date(), '{y}{m}{d}-{h}-{i}');
+
+
+				uni.request({
+					url: this.serverUrl + "/uploadBase64Json",
+					method: "POST",
+					header: {
+						Authorization: this.token
+					},
+					data: {
+						"photoName": "signature" + time + ".png",
+						"photoBase64Data": this.url
+					},
+					success: (res) => {
+						uni.hideLoading();
+
+						console.log(res)
+
+						if (res.data.result) {
+							uni.showToast({
+								title: '签名保存成功!',
+								duration: 2000
+							});
+
+							//this.info.status=0;
+							this.data.signUrl = res.data.data;
+							//this.$emit("signsubmit",0,this.suburl)
+							this.submitFrom()
+						} else {
+							uni.showToast({
+								title: '签名保存失败!' + JSON.stringify(res),
+								duration: 2000
+							});
+						}
+					}
+				})
+			},
+			onClick(type) {
+				this.url = ""
+				if (type == 'openSmooth') {
+					this.openSmooth = !this.openSmooth
+					return
+				}
+				if (type == 'save') {
+					this.$refs.signatureRef.canvasToTempFilePath({
+						success: (res) => {
+							// 是否为空画板 无签名
+							if (res.isEmpty) {
+								this.url = "";
+							} else {
+								this.url = res.tempFilePath
+
+								console.log(this.url)
+								// 生成图片的临时路径
+								// app | H5 | 微信小程序 生成的是base64
+								this.uploadpic()
+								//this.data.signUrl=this.url
+								// this.submitFrom()
+
+							}
+						}
+					})
+					return
+				}
+				if (this.$refs.signatureRef)
+					this.$refs.signatureRef[type]()
+			},
+			applicationAmountDX() {
+				if (this.info.application.withdrawalAmount) {
+					var c = DX(this.info.application.withdrawalAmount)
+					return c
+				} else {
+					return ''
+				}
+			},
+			sumKey(key) {
+				var num = 0
+				this.info.monthList.forEach(item => {
+					var n = item[key]
+					if (n) {
+						num += n
+					}
+
+				})
+				return num.toFixed(2)
+			},
+			getInfo() {
+				uni.showLoading({
+					title: "加载中",
+					mask: true,
+				})
+
+				API.recordDetails({
+					recordId: this.id
+				}).then((res) => {
+					uni.hideLoading();
+					this.info = res.data
+					this.data.accountName = this.info.application.accountName
+					this.data.bankName = this.info.application.bankName
+					this.data.accountNo = this.info.application.accountNo
+					this.data.signUrl = this.info.application.signUrl
+				}).catch(error => {
+					uni.showToast({
+						title: error,
+						icon: "none"
+					})
+				})
+			},
 			change(index) {
 			change(index) {
 				this.current = index;
 				this.current = index;
-			},
-			submit0(){
-				if(!this.info.accountName){
-						uni.showToast({
-							title: "请输入提现人收款户名"
-						})
-					return
-				}
-				if(!this.info.bankName){
-						uni.showToast({
-							title: "请输入提现人收款银行"
-						})
-					return
-				}
-				if(!this.info.accountNo){
-						uni.showToast({
-							title: "请输入提现人收款账号"
-						})
-					return
-				}
-				
+				this.step = index
+			},
+			submit0() {
+				if (!this.data.accountName) {
+					uni.showToast({
+						title: "请输入收款户名"
+					})
+					return
+				}
+				if (!this.data.bankName) {
+					uni.showToast({
+						title: "请输入收款银行"
+					})
+					return
+				}
+				if (!this.data.accountNo) {
+					uni.showToast({
+						title: "请输入收款账号"
+					})
+					return
+				}
+
+				this.step = 2
+				this.$forceUpdate()
+				console.log(this.step)
+			},
+			step0Fn() {
+				this.step = 0
 			}
 			}
+
+
 		}
 		}
 	}
 	}
 </script>
 </script>
 
 
-<style lang="scss">
-	.jputabs {
-		//position: absolute;
-		position: fixed;
-		background-color: #FFF;
-		width: 100%;
-		top: 40px;
-		z-index: 99;
+<style lang="scss" scoped>
+	.sign {
+		margin: 32rpx 16rpx;
+		font-weight: bold;
+		line-height: 20px;
+
+		p {
+			color: rgba(16, 16, 16, 1);
+		}
+
+		.signature {
+			background-color: #fff;
+			margin-top: 8px;
+			height: 160px;
+			border: #c2c2c2 1px solid;
+		}
+
+		.clean-save {
+			background-color: #fff;
+			display: flex;
+
+			.clean,
+			.save {
+				width: 50%;
+				text-align: center;
+				color: #252525;
+				line-height: 40px;
+			}
+
+			.clean,
+			.save {
+				border: #c2c2c2 1px solid;
+				display: flex;
+				justify-content: center;
+
+				img {
+					margin-right: 4px;
+				}
+			}
+		}
 	}
 	}
-	.withdraw {
-		margin-bottom: 16rpx;
-		background-color: #fff;
-		padding: 0px 32rpx 0 32rpx;
-	
-		.withdraw-head {
-			padding: 24rpx 0;
-			border-bottom: 1px solid #E5E7EA;
-	
-			align-items: center;
-			position: relative;
-	
-			.unit {
-				position: absolute;
-				top: 34rpx;
-				right: 0;
-	
-			}
-	
-			.whthdraw-price {
-				font-size: 36px;
-				color: #101010;
-				font-weight: 600;
-			}
-	
-			b {
-				color: rgba(119, 119, 119, 100);
-				font-size: 32rpx;
-			}
-	
-			span {
-				width: 60%;
-				float: right;
-				text-align: left;
+
+	.submit {
+		border-radius: 8px;
+		background-color: rgba(24, 90, 198, 1);
+		color: rgba(255, 255, 255, 1);
+		font-size: 16px;
+		line-height: 44px;
+		margin: 0 16px;
+		position: fixed;
+		bottom: 12px;
+		left: 0;
+		right: 0;
+	}
+
+	.submitNo {
+		border-radius: 8px;
+		background-color: #185ac6a8;
+		color: rgba(255, 255, 255, 1);
+		font-size: 16px;
+		line-height: 44px;
+		margin: 0 16px;
+		position: fixed;
+		bottom: 12px;
+		left: 0;
+		right: 0;
+	}
+
+	.jputabs {
+		//position: absolute;
+		position: fixed;
+		background-color: #FFF;
+		width: 100%;
+		top: 40px;
+		z-index: 99;
+	}
+
+	.withdraw {
+		margin-bottom: 16rpx;
+		background-color: #fff;
+		padding: 0px 32rpx 0 32rpx;
+
+		.withdraw-head {
+			padding: 24rpx 0;
+			border-bottom: 1px solid #E5E7EA;
+
+			align-items: center;
+			position: relative;
+			    display: flex;
+			.unit {
+				position: absolute;
+				top: 34rpx;
+				right: 0;
+
+			}
+
+			.whthdraw-price {
+				font-size: 36px;
+				color: #101010;
+				font-weight: 600;
+			}
+
+			.bclass {
+				color: rgba(119, 119, 119, 100);
 				font-size: 32rpx;
 				font-size: 32rpx;
-				color: #333333;
-			}
-	
-			@media screen and (max-width:320px) {
-				span {
-					width: 55%;
-				}
-			}
-	
-		}
-	
-		.withdraw-main {
-			border-top: 1px solid #f7f7f7;
-			border-bottom: 1px solid #f7f7f7;
-	
-			margin: 32rpx 0;
-			padding: 32rpx 0;
-	
-			.withdraw-input {
-				margin-top: 64rpx;
-				display: flex;
-				align-items: center;
-				font-size: 56rpx;
-	
-				::v-deep.uni-input-input {
-					font-size: 28rpx;
-				}
-			}
-		}
-	
-		.withdraw-foot {
-			display: flex;
-			align-items: center;
-	
-			p {
-				color: #999
-			}
-	
-			span {
-				color: #2979FF;
-				margin-left: 32rpx;
-	
-			}
-		}
-	}
-	.asterisk {
-		position: relative;
-	
-		text {
-			position: absolute;
-			top: 0px;
-			left: -14rpx;
-			color: #EE3138;
-		}
-	}
-	.textarea {
-		background-color: rgba(242, 242, 242, 100);
-		margin-top: 12px;
-		line-height: 20px;
-		border-radius: 4px;
-		color: rgba(136, 136, 136, 100);
-	
-		.uni-textarea-placeholder {
-			padding: 0 16rpx;
-	
-		}
-	
-		::v-deep.uni-textarea-textarea {
-			width: 90%;
-			padding: 0 16rpx;
-	
+				width: 320rpx;
+				min-width: 320rpx;
+			}
+
+			.spanclass {
+				
+				text-align: left;
+				font-size: 32rpx;
+				color: #333333;
+			}
+
+			.status0 {
+				color: #FF9800;
+			}
+
+			.status1 {
+				color: #4CAF50;
+			}
+
+			.statusN {}
+
 		}
 		}
-	}
-	.applyBtn {
-		padding: 0 32rpx;
-	
-		display: flex;
-	
-		font-size: 32rpx;
-		line-height: 88rpx;
-		height: 120rpx;
-		position: fixed;
-		bottom: 0;
-		left: 0;
-		right: 0;
-	
-	}
-	.step{
-		padding-bottom: 120rpx;
-	}
-	.step0,.step1{
-		padding-top: 90rpx;
+		.withdraw-head2{
+			display: inline;
+		}
+
+		.withdraw-main {
+			border-top: 1px solid #f7f7f7;
+			border-bottom: 1px solid #f7f7f7;
+
+			margin: 32rpx 0;
+			padding: 32rpx 0;
+
+			.withdraw-input {
+				margin-top: 64rpx;
+				display: flex;
+				align-items: center;
+				font-size: 56rpx;
+
+				::v-deep.uni-input-input {
+					font-size: 28rpx;
+				}
+			}
+		}
+
+		.withdraw-foot {
+			display: flex;
+			align-items: center;
+
+			p {
+				color: #999
+			}
+
+			span {
+				color: #2979FF;
+				margin-left: 32rpx;
+
+			}
+		}
+	}
+
+	.asterisk {
+		position: relative;
+
+		text {
+			position: absolute;
+			top: 0px;
+			left: -14rpx;
+			color: #EE3138;
+		}
+	}
+
+	.textarea {
+		background-color: rgba(242, 242, 242, 100);
+		margin-top: 12px;
+		line-height: 20px;
+		border-radius: 4px;
+		color: rgba(136, 136, 136, 100);
+
+		.uni-textarea-placeholder {
+			padding: 0 16rpx;
+
+		}
+
+		::v-deep.uni-textarea-textarea {
+			width: 90%;
+			padding: 0 16rpx;
+
+		}
+	}
+
+	.applyBtn {
+		padding: 0 48rpx;
+
+		font-size: 32rpx;
+		line-height: 88rpx;
+		height: 120rpx;
+		position: fixed;
+		bottom: 0;
+		left: 0;
+		right: 0;
+
+	}
+
+	.step {
+		padding-bottom: 120rpx;
+	}
+
+	.step0,
+	.step1 {
+		padding-top: 90rpx;
+
+	}
+
+
+	.step1 {
+
+		width: 300%;
+	}
+
+	.table1,
+	.border-table {
+		margin: 8rpx 0;
+		width: 100%;
+		border-collapse: collapse;
+
+		td {
+			border: 1px solid #e7e7e7;
+
+
+			padding: 16rpx 16rpx;
+		}
+
+		tr {
+			background-color: #f5f5f6
+		}
+
+		tr {
+			td:first-child {
+
+				//text-align: center;
+
+			}
+
+			td:last-child {
+				white-space: pre;
+			}
+		}
+
+		.tr1 {
+			text-align: end;
+			font-weight: bold;
+		}
+
+		tr:nth-child(even) {
+			background-color: #fff;
+		}
 	}
 	}
 </style>
 </style>

Някои файлове не бяха показани, защото твърде много файлове са промени