local-copy.html 8.16 KB
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    <title>网络网页</title>
    <style type="text/css">
      .btn {
        display: block;
        margin: 20px auto;
        padding: 5px;
        background-color: #007aff;
        border: 0;
        color: #ffffff;
        height: 40px;
        width: 200px;
      }

      .btn-red {
        background-color: #dd524d;
      }

      .btn-yellow {
        background-color: #f0ad4e;
      }

      .desc {
        padding: 10px;
        color: #999999;
      }

      .post-message-section {
        visibility: hidden;
      }
    </style>
  </head>
  <body>
	  <h1>上传Excel文件</h1>
	      <input type="file" id="fileInput">
	      <button id="getBtn">获取文件信息</button>
	      <div id="fileInfo"></div>
    <!-- 需要把 uni.webview.1.5.6.js 下载到自己的服务器 -->
    <!-- <script type="text/javascript" src="https://gitcode.net/dcloud/uni-app/-/raw/dev/dist/uni.webview.1.5.6.js"></script> -->
	<script type="text/javascript" src="webview.js"></script>
	<script src="https://unpkg.com/xlsx/dist/xlsx.full.min.js"></script>
    <script type="text/javascript">
		console.log('XLSX', XLSX)
		// var worksheet = XLSX.utils.aoa_to_sheet([
		//   ["A1", "B1", "C1"],
		//   ["A2", "B2", "C2"],
		//   ["A3", "B3", "C3"]
		// ]);
		// console.log('worksheet', JSON.stringify(worksheet))
		
      // 待触发 `UniAppJSBridgeReady` 事件后,即可调用 uni 的 API。
      document.addEventListener('UniAppJSBridgeReady', function() {
        uni.postMessage({
            data: {
                action: 'message'
            }
        });
        uni.getEnv(function(res) {
            console.log('当前环境:' + JSON.stringify(res));
        });

		document.getElementById('getBtn').addEventListener('click', function() {
		    const fileInput = document.getElementById('fileInput');
		    const fileInfoDiv = document.getElementById('fileInfo');
		
		    if (fileInput.files.length === 0) {
		        fileInfoDiv.innerHTML = '没有选择文件。';
		        return;
		    }
		
		    const file = fileInput.files[0];
			
			  /* f is a File */
			  var reader = new FileReader();
			  reader.onload = function(e) {
			    var data = e.target.result;
				console.log('读取数据', data)
			    /* reader.readAsArrayBuffer(file) -> data will be an ArrayBuffer */
			    var workbook = XLSX.read(data);
				/**
				 * workbook解析对象
				 * {
					"SheetNames": [
						"Sheet1"
					], 
					"Sheets": {
						"Sheet1": {
							"A1": {
								"t": "s", 
								"v": "姓名"
							}, 
							"B1": {
								"t": "s", 
								"v": "电话"
							}, 
							"C1": {
								"t": "s", 
								"v": "邮箱"
							}, 
							"A2": {
								"t": "s", 
								"v": "测试数据"
							}, 
							"B2": {
								"t": "n", 
								"v": 123456
							}, 
							"C2": {
								"t": "s", 
								"v": "123@456.com"
							}, 
							"!ref": "A1:C2"
						}
					}
				}
				 */
				console.log('读取数据workbook', JSON.stringify(workbook))
				
				
				
				const sheetName = workbook.SheetNames[0];
				const sheet = workbook.Sheets[sheetName];
				const jsonData = XLSX.utils.sheet_to_json(sheet);
				console.log('读取数据jsonData', JSON.stringify(jsonData))
				// jsonData 数据格式 如dataArr
				const dataArr =  [
						{
							"中段": 1, 
							"分段": "1-1", 
							"巷道": "1-2", 
							"孔号": "1-3", 
							"设计孔深": 1
						}, 
						{
							"中段": 1, 
							"分段": "2", 
							"巷道": 1, 
							"孔号": 1, 
							"设计孔深": 2
						}, 
						{
							"中段": 1, 
							"分段": 2, 
							"巷道": 2, 
							"孔号": 1, 
							"设计孔深": 3
						}, 
						{
							"中段": 1, 
							"分段": 2, 
							"巷道": 2, 
							"孔号": 2, 
							"设计孔深": 4
						}, 
						{
							"中段": 2, 
							"分段": "2-1", 
							"巷道": "2-2", 
							"孔号": "2-3", 
							"设计孔深": 5
						}
					]
				
				
				
				
				
				// 获取第一个数据列表
				getCascadeList(dataArr, '中段', null, '中段')
				//  获取第二个数据列表
				getCascadeList(dataArr, '中段', '1', '分段')
				// 根据父列表选中值,获取下级的数据
				//originArr所有列表数据  parentKey上级对应字段  parentVal上级对应字段值
				function getCascadeList(originArr, parentKey, parentVal, sonKey){
					const sonArr = new Set()
					
					originArr.forEach((item, index)=>{
						if(parentVal){ // 根据父级查找子级
							if(item[parentKey] === parentVal){
								sonArr.add(item[sonKey])
							}
						}else{ // 顶级列表
							sonArr.add(item[parentKey])
						}
						
					})
					console.log(sonArr)
					return sonArr
				}
				
				uni.postMessage({
				  data: dataArr
				});
				
				// 数据处理
				let workbookTemp = workbook.Sheets
			
			    /* DO SOMETHING WITH workbook HERE */
			  };
			  reader.readAsArrayBuffer(file);
			
		    const fileSize = (file.size / 1024).toFixed(2); // 文件大小,单位KB
		    const fileName = file.name;
		    const fileType = file.type;
		
		    fileInfoDiv.innerHTML = `
		        <p>文件名: ${fileName}</p>
		        <p>文件类型: ${fileType}</p>
		        <p>文件大小: ${fileSize} KB</p>
		    `;
			  
			});
      });
    </script>
  </body>
</html>



<!-- <!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<title>本地网页</title>
		<style type="text/css">
			.btn {
				display: block;
				margin: 20px auto;
				padding: 5px;
				background-color: #007aff;
				border: 0;
				color: #ffffff;
				height: 40px;
				width: 200px;
			}

			.btn-red {
				background-color: #dd524d;
			}

			.btn-yellow {
				background-color: #f0ad4e;
			}

			.desc {
				padding: 10px;
				color: #999999;
			}
		</style>
		   <script type="text/javascript" src="https://gitcode.net/dcloud/uni-app/-/raw/dev/dist/uni.webview.1.5.6.js"></script>
		<script>
			 document.addEventListener('UniAppJSBridgeReady', function() {
				 window.getFileInfo = function() {
				 	alert('ssse')
				     const fileInput = document.getElementById('fileInput');
				     const fileInfoDiv = document.getElementById('fileInfo');
				 
				     if (fileInput.files.length === 0) {
				         fileInfoDiv.innerHTML = '没有选择文件。';
				         return;
				     }
				 
				     const file = fileInput.files[0];
				     const fileSize = (file.size / 1024).toFixed(2); // 文件大小,单位KB
				     const fileName = file.name;
				     const fileType = file.type;
				 
				     fileInfoDiv.innerHTML = `
				         <p>文件名: ${fileName}</p>
				         <p>文件类型: ${fileType}</p>
				         <p>文件大小: ${fileSize} KB</p>
				     `;
				 }
				 
				 document.getElementById('getBtn').addEventListener('click', function() {
				 	alert('555')
				 });
			 })
			 
			
			// document.querySelector("#postMessage").addEventListener('click', function() {
			// 	uni.postMessage({
			// 		data: {
			// 			action: 'message'
			// 		}
			// 	});
			// })
		</script>
	</head>
	<body>
		<h1>上传Excel文件</h1>
		    <input type="file" id="fileInput">
		    <button onclick="window.getFileInfo" id="getBtn">获取文件信息</button>
		    <div id="fileInfo"></div>

		<p class="desc">web-view 组件加载本地 html 示例,仅在 App 环境下生效。点击下列按钮,跳转至其它页面。</p>
		<div class="btn-list">
			<button class="btn" type="button" data-action="navigateTo">navigateTo</button>
			<button class="btn" type="button" data-action="redirectTo">redirectTo</button>
			<button class="btn" type="button" data-action="navigateBack">navigateBack</button>
			<button class="btn" type="button" data-action="reLaunch">reLaunch</button>
			<button class="btn" type="button" data-action="switchTab">switchTab</button>
		</div>
		<p class="desc">网页向应用发送消息。注意:小程序端应用会在此页面后退时接收到消息。</p>
		<div class="btn-list">
			<button class="btn btn-red" type="button" id="postMessage">postMessage</button>
		</div>
	</body>
</html -->