刘忠健 1 年間 前
コミット
efc91db2da
共有2 個のファイルを変更した109 個の追加1 個の削除を含む
  1. 109 1
      excel/readme.md
  2. BIN
      excel/sync.ffs_db

+ 109 - 1
excel/readme.md

@@ -11,6 +11,114 @@ yarn add @ycxxkj/excel
 
 # api说明
 
+# 使用示例
 
+## 第1步,引入库文件
+```
+import { ExcelWriter } from "@ycxxkj/excel";
+```
+## 第2步,写导出方法
+```
+    /**
+     * 分页查询数据并导出
+     * @param {*} params 
+     * @returns 
+     */
+    async output(params) {
+        let data = [];//要导出的数据
+        let next = true;//是否有下一页,true为有,false为最后1页
+        let count = 0;// 计数
+        let maxPage = 1000;//最大查询页数,避免死循环
+        while (next) {
+            //如果有数据,就查询
+            let pageRes = await this.list(params);//查询1页数据
+            console.log("#debug#🚀 ~ file: Order.js:23 ~ output ~ params:", params, pageRes)
+            if (pageRes.code != 0) {
+                break;//有错误就不查询下一页了
+            }
+            let pageData = pageRes.data;//本页的数据
+            pageData.data.forEach((item, index) => {
+                data.push(item);//将本页数据压入要导出的数据数组
+            });
+            if (pageData.current_page >= pageData.last_page) {
+                next = false;//如果当前页数大于等于最后一页的页数,表示没有下一页
+                break;
+            }
+            params.page = params.page + 1;//查询下一页
+            count++;
+            if (count > maxPage) {
+                next = false;//如果 超过最大查询页数,就跳出循环
+                break;//避免死循环
+            }
+        }
+        await this._dealOutput(data);//导出数据
+        return { code: 0 };//返回结果
+    },
+    //=========私有方法================
+    /**
+     * 根据数据,构造打印EXCEL表格
+     * @param {*} data 
+     */
+    async _dealOutput(data) {
+        /**
+         * 导出的文件配置
+         */
+        let options = {
+            fileName: "教师导出.xlsx",//文件名
+        };
+        /**
+         * 导出的表头
+         */
+        let header = [
+            { key: "id", title: "ID", type: Number, },
+            { key: "name", title: "名称", width: 10 },
+            { key: "phone", title: "手机号", width: 15 },
+            { key: "real_name", title: "账号名称", width: 15 },
+            { key: "login_name", title: "账号", width: 22 },
+            { key: "nick_name", title: "昵称", width: 22 },
+            { key: "school_name", title: "学校", width: 22 },
+            { key: "role_name", title: "角色", width: 12 },
+            { key: "money", title: "余额", width: 10, type: Number },
+            { key: "valid", title: "是否有效", width: 12 },
+        ];//表头根据实际数据构造
 
-# 使用示例
+        let columns = [];//excel文件的列配置
+        header.forEach((item, index) => {
+            let columnItem = {};
+            if (item?.width) {
+                columnItem.width = item.width;//设置行宽
+            }
+            columns.push(columnItem);
+        })
+        options.columns = columns;//设置列
+        options.border = true;//设置边框,true为有边框,false为无边框
+        let excelDataBody = [];//excel的表体数据
+        data.forEach((item, index) => {
+            let body = {
+                id: item.id,
+                name: item.name,
+                phone: item.phone,
+                real_name: item?.admin?.real_name,
+                login_name: item?.admin?.login_name,
+                nick_name: item?.admin?.nick_name,
+                school_name: item?.school?.name ?? "",
+                role_name: item?.admin?.adminRole?.name ?? "",
+                money: item.money,
+                valid: item.valid == 1 ? "有效" : "无效"
+            };//body根据实际数据构造
+            excelDataBody.push(body);//把数据压入表体数组
+        });
+
+        ExcelWriter.outputExcel(header, excelDataBody, options);//导出excel
+    }
+```
+
+## 第3步,调用导出方法
+```
+let params={
+    pageSize:1000,
+    page:1,
+    //... 其它条件自己添加
+}
+let res = await output(params);//执行完后,浏览器会自己下载excel文件
+```

BIN
excel/sync.ffs_db