+ size="small" highlight-current-row ref="dataList" @selection-change="handleSelectionChange" @row-click="rowClick">
-
+
@@ -92,13 +92,11 @@
-
+
共:{{ loadOpts.totalCount }} 条记录,当前显示:{{
tableData.length
}}
- 条。
-
-
+ 条。
@@ -158,7 +156,8 @@ export default {
maxResultCount: 100,
},
loadOptsInit: {},
- lazyLoading:false
+ lazyLoading:false,
+ dom:null,
};
},
@@ -300,6 +299,7 @@ export default {
async load() {
this.loadOpts.skipCount++;
await this.getPrList();
+ this.lazyLoading = false
},
// 获取列表数据
@@ -503,14 +503,14 @@ export default {
//滚动加载数据
scrollFull() {
- let obj = this.$refs['dataList'].bodyWrapper
- console.log('obj', obj)
+ this.dom = this.$refs['dataList'].bodyWrapper
+ console.log('obj', this.dom)
- obj.addEventListener('scroll', async () => {
+ this.dom.addEventListener('scroll', async () => {
// console.log('scrollTop',this.dom.scrollTop,'clientHeight',this.dom.clientHeight,'scrollHeight',this.dom.scrollHeight);
- if (obj.scrollTop + obj.clientHeight + 20 > obj.scrollHeight && !this.lazyLoading) {
+ if (this.dom.scrollTop + this.dom.clientHeight + 20 > this.dom.scrollHeight && !this.lazyLoading) {
// 获取到的不是全部数据 当滚动到底部
- console.log('scrollTop', obj.scrollTop, 'clientHeight', obj.clientHeight, 'scrollHeight', obj.scrollHeight);
+ //console.log('scrollTop', obj.scrollTop, 'clientHeight', obj.clientHeight, 'scrollHeight', obj.scrollHeight);
if (Number(this.loadOpts.skipCount) * Number(this.loadOpts.maxResultCount) >= Number(this.loadOpts.totalCount)) {
this.lazyLoading = false
} else {
diff --git a/src/components/patientRegister/customerOrgTreeAll.vue b/src/components/patientRegister/customerOrgTreeAll.vue
index f80af36..dc2aa6a 100644
--- a/src/components/patientRegister/customerOrgTreeAll.vue
+++ b/src/components/patientRegister/customerOrgTreeAll.vue
@@ -35,7 +35,9 @@
+
diff --git a/src/store/index.js b/src/store/index.js
index 92158ed..13b4ac7 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -417,6 +417,8 @@ export default new Vuex.Store({
// 多层数据传递时使用(统一归结在此,便于管理)
dataTransOpts: {
+ orgDatas:[], // 未处理所有单位的数据
+ orgDataSet:[], // 单位设置处使用
// 强制刷新(如触发数据刷新的ID值没有变化时,但也想强制刷新数据:
// S--single 单记录刷新,M--more 多记录刷新,D--detail
// 当父子组件都在存在多记录刷新时 父组件用 M,子组件用 D
diff --git a/src/utlis/indexedDB.js b/src/utlis/indexedDB.js
new file mode 100644
index 0000000..6d97543
--- /dev/null
+++ b/src/utlis/indexedDB.js
@@ -0,0 +1,219 @@
+/**
+ * 打开数据库
+ * @param {object} dbName 数据库的名字
+ * @param {string} storeName 仓库名称
+ * @param {string} version 数据库的版本
+ * @return {object} 该函数会返回一个数据库实例
+ */
+function openDB(dbName, version = 1) {
+ return new Promise((resolve, reject) => {
+ // 兼容浏览器
+ var indexedDB =
+ window.indexedDB ||
+ window.mozIndexedDB ||
+ window.webkitIndexedDB ||
+ window.msIndexedDB;
+ let db;
+ // 打开数据库,若没有则会创建
+ const request = indexedDB.open(dbName, version);
+ // 数据库打开成功回调
+ request.onsuccess = function (event) {
+ db = event.target.result; // 数据库对象
+ // console.log("indexedDB 数据库打开成功");
+ resolve(db);
+ };
+ // 数据库打开失败的回调
+ request.onerror = function (event) {
+ console.log("indexedDB 数据库打开报错", event)
+ reject("indexedDB 数据库打开报错");
+ };
+
+ // 数据库有更新时候的回调
+ request.onupgradeneeded = function (event) {
+ // 数据库创建或升级的时候会触发
+ // console.log("onupgradeneeded");
+ db = event.target.result; // 数据库对象
+ // 创建表 keyPath 表示主键,插入更新数据时,必须存在 主键
+
+ // 可放在配置中,读取文件后,循环创建 ObjectStore(表)
+ // let tables = Object.keys(dbSQL.dddw)
+ // tables.forEach(e => {
+ // if (!db.objectStoreNames.contains(e)) createObjectStore(db,e,'id')
+ // });
+ //if (!db.objectStoreNames.contains('dict')) db.createObjectStore('dict', { keyPath: "id" }) // tableName作为id值
+
+ // 创建表 storeName 相当于表的概念
+ createObjectStore(db, 'dict', 'id') // 创建字典表,数据说明:id = tableName
+ createObjectStore(db, 'sort', 'id') // 创建排序信息表,数据说明:id = user_id + _ + tableName + _ + pageName
+ createObjectStore(db, 'drag', 'id') // 创建数据列拖拽表,数据说明:id = user_id + _ + tableName + _ + pageName
+ createObjectStore(db, 'form', 'id') // 创建表单设计表,数据说明:id = user_id + _ + tableName + _ + pageName
+ createObjectStore(db, 'query', 'id') // 创建高级查询表,数据说明:id = user_id + _ + tableName + _ + pageName
+ createObjectStore(db, 'localConfig', 'id') // 创建本地参数,数据说明:本地客户端个性化设置
+ createObjectStore(db, 'route', 'id') // 路由数据, id = path
+ createObjectStore(db, 'other', 'id') // 创建本地参数,数据说明:其他存本地参数,如:用户权限
+
+ // var objectStore; //相当于表名
+ // // 创建存储库
+ // objectStore = db.createObjectStore("signalChat", {
+ // keyPath: "sequenceId", // 这是主键
+ // // autoIncrement: true // 实现自增
+ // });
+ // // 创建索引,在后面查询数据的时候可以根据索引查
+ // objectStore.createIndex("link", "link", { unique: false });
+ // objectStore.createIndex("sequenceId", "sequenceId", { unique: false });
+ // objectStore.createIndex("messageType", "messageType", {
+ // unique: false,
+ // });
+ };
+ });
+}
+
+function createObjectStore(db, objectStoreName, keyPath) {
+ if (!db.objectStoreNames.contains(objectStoreName)) db.createObjectStore(objectStoreName, { keyPath: keyPath || "id" })
+}
+
+/**
+ * 更新数据 (插入也可以用此接口)
+ * @param {object} db 数据库实例
+ * @param {string} storeName 仓库名称
+ * @param {object} data 数据 {id:'data',records:[],updatedat:Date.now()}
+ * @param {string} devMode 是否开发模式 Y 时,打印日志
+ */
+function updateDB(db, pkey, data, devMode) {
+ return updateDBCom(db, 'dict', pkey, data, devMode)
+}
+function updateDBCom(db, storeName, pkey, data, devMode) {
+ return new Promise((resolve, reject) => {
+
+ let request = db
+ .transaction([storeName], "readwrite") // 事务对象
+ .objectStore(storeName) // 仓库对象
+ .put({ id: pkey, data, createdat: Date.now() });
+
+ request.onsuccess = function () {
+ if (devMode == 'Y') console.log("indexedDB 数据更新成功:storeName, pkey ", storeName, pkey);
+ resolve("indexedDB 数据更新成功");
+ };
+
+ request.onerror = function () {
+ if (devMode == 'Y') console.log("indexedDB 数据更新失败");
+ reject("数据更新失败")
+ };
+ })
+}
+
+/**
+ * 通过主键读取数据
+ * @param {object} db 数据库实例
+ * @param {string} storeName 仓库名称
+ * @param {string} key 主键值
+ * @param {string} devMode 是否开发模式 Y 时,打印日志
+ */
+function getDataByKey(db, pkey, devMode) {
+ return getDataByKeyCom(db, 'dict', pkey, devMode)
+}
+function getDataByKeyCom(db, storeName, pkey, devMode) {
+ return new Promise((resolve, reject) => {
+ var transaction = db.transaction([storeName]); // 事务
+ var objectStore = transaction.objectStore(storeName); // 仓库对象
+ var request = objectStore.get(pkey); // 通过主键获取数据
+
+ request.onerror = function (event) {
+ let err = `indexedDB 缓存数据库,读取 ${db}.${storeName} id=${pkey} 记录失败`
+ if (devMode == 'Y') console.error(err, event);
+ reject(err)
+ };
+
+ request.onsuccess = function () {
+ if (devMode == 'Y') console.log(`indexedDB 缓存数据库,读取 ${db}.${storeName} id=${pkey} 记录成功:`, request.result);
+ resolve(request.result);
+ };
+ });
+}
+
+
+/**
+ * 通过主键删除数据
+ * @param {object} db 数据库实例
+ * @param {string} storeName 仓库名称
+ * @param {object} pkey 主键值
+ * @param {string} devMode 是否开发模式 Y 时,打印日志
+ */
+function deleteDB(db, storeName, pkey, devMode) {
+ return new Promise((resolve, reject) => {
+ var request = db
+ .transaction([storeName], "readwrite")
+ .objectStore(storeName)
+ .delete(pkey);
+
+ request.onsuccess = function () {
+ let msg = `indexedDB缓存数据 ${db}.${storeName} id=${pkey} 记录删除成功`
+ if (devMode == 'Y') console.log(msg);
+ resolve(msg);
+ };
+
+ request.onerror = function () {
+ let err = `indexedDB缓存数据 ${db}.${storeName} id=${pkey} 记录删除失败`
+ if (devMode == 'Y') console.error(err);
+ reject(err)
+ };
+ });
+}
+
+/**
+ * 关闭数据库
+ * @param {object} db 数据库实例
+ */
+function closeDB(db) {
+ db.close();
+ // console.log("数据库已关闭");
+}
+
+// 删库
+const dropDB = (dbName, devMode) => {
+ return new Promise((resolve, reject) => {
+ let request = indexedDB.deleteDatabase(dbName);
+ request.onsuccess = () => {
+ let msg = `indexedDB缓存数据库 ${dbName} 已删除成功`
+ if (devMode == 'Y') console.log(msg);
+ resolve(msg);
+ };
+
+ request.onerror = (event) => {
+ if (devMode == 'Y') console.error(`indexedDB缓存数据库 ${dbName} 删除失败:`, event.target.error);
+ reject(`indexedDB缓存数据库 ${dbName} 删除失败:${event.target.error}`)
+ };
+
+ request.onblocked = () => {
+ let wMsg = `indexedDB存在未关闭的缓存数据库 ${dbName} 连接,删除被暂时阻塞`
+ if (devMode == 'Y') console.warn(wMsg);
+ reject(wMsg)
+ };
+ })
+
+}
+
+// 清单个表,保留表结构
+const clearStore = (db, storeName) => {
+ return new Promise((resolve, reject) => {
+ const transaction = db.transaction(storeName, 'readwrite');
+ const objectStore = transaction.objectStore(storeName);
+ const clearRequest = objectStore.clear();
+
+ clearRequest.onsuccess = function () {
+ resolve(`清除表【${storeName}】数据成功!`);
+ };
+
+ clearRequest.onerror = function (error) {
+ reject(`清除表【${storeName}】数据失败,原因: ` + error);
+ };
+ });
+}
+
+
+
+export default {
+ openDB, updateDBCom, getDataByKeyCom, deleteDB, dropDB, clearStore, closeDB,
+ updateDB, getDataByKey
+
+}
diff --git a/src/utlis/proFunc.js b/src/utlis/proFunc.js
index 55c0d91..e8a3c75 100644
--- a/src/utlis/proFunc.js
+++ b/src/utlis/proFunc.js
@@ -1,3 +1,4 @@
+const indexedDB = require('./indexedDB');
//多级联动选择数据处理 add by pengjun
function tcdate(date) {
@@ -482,6 +483,50 @@ function isValidMobileNumber(tel) {
}
exports.isValidMobileNumber = isValidMobileNumber;
+// 本地储存
+function updateDBCom(pkey,data){
+ return new Promise((resolve, reject) => {
+ let db
+ indexedDB.openDB('peis','1')
+ .then(res => {
+ db = res
+ return indexedDB.updateDBCom(db, 'dict', pkey, data, 'Y')
+ })
+ .then(() => {
+ resolve()
+ })
+ .catch(err => {
+ console.error(err)
+ reject(err)
+ })
+ .finally(() => {
+ if (db) indexedDB.closeDB(db) // 关闭indexedDB
+ })
+ })
+}
+exports.updateDBCom = updateDBCom;
+
+function getDBCom(pkey){
+ return new Promise((resolve, reject) => {
+ let db
+ indexedDB.openDB('peis','1')
+ .then(res => {
+ db = res
+ return indexedDB.getDataByKeyCom(db,'dict',pkey,'Y')
+ })
+ .then((res) => {
+ resolve(res)
+ })
+ .catch(err => {
+ console.error(err)
+ reject(err)
+ })
+ .finally(() => {
+ if (db) indexedDB.closeDB(db) // 关闭indexedDB
+ })
+ })
+}
+exports.getDBCom = getDBCom;
diff --git a/src/views/workload/examinedoctor.vue b/src/views/workload/examinedoctor.vue
index f293f58..e2077e0 100644
--- a/src/views/workload/examinedoctor.vue
+++ b/src/views/workload/examinedoctor.vue
@@ -5,7 +5,7 @@
工作量统计 /
审核医生工作量统计总检审核医生工作量统计