diff --git a/common/config.js b/common/config.js
index b5f9682..83ff890 100644
--- a/common/config.js
+++ b/common/config.js
@@ -27,8 +27,8 @@ const config = {
// config.baseUrl = 'http://tc.cqsznc.com:7080/api';
//正式
-config.baseUrl = 'http://183.230.235.66:11010/api';
+// config.baseUrl = 'http://183.230.235.66:11010/api';
-// config.baseUrl = 'http://378a061a.r28.cpolar.top'
+config.baseUrl = 'http://799004da.r28.cpolar.top';
export default config;
diff --git a/common/http.api.js b/common/http.api.js
index b8a397a..16caa68 100644
--- a/common/http.api.js
+++ b/common/http.api.js
@@ -64,7 +64,17 @@ const install = (Vue, vm) => {
getImageUrl:(params = {}, ossIds) => vm.$u.get(config.adminPath+`/resource/oss/listByIds/${ossIds}`,params),
//巡检任务列表
- getInspection:(params = {})=>vm.$u.get(config.adminPath+'/property/item/list',params),
+ getInspection:(params = {})=>vm.$u.get(config.adminPath+'/property/mobile/inspectionTask/list',params),
+
+ // getTaskList:(params = {},taskId)=>vm.$u.get(config.adminPath+`/property/mobile/taskDetail/list/${taskId}`,params),
+ //巡检任务
+ getTaskList:(params = {})=>vm.$u.get(config.adminPath+'/property/mobile/taskDetail/list',params),
+ //巡检签到
+ taskSignIn:(params = {})=>vm.$u.post(config.adminPath+'/property/mobile/taskDetail/signIn',params),
+ //巡检提交
+ taskSubmit:(params = {})=>vm.$u.post(config.adminPath+'/property/mobile/taskDetail/submit',params),
+ //巡检工单提报
+ taskOrderSubmit:(params = {})=>vm.$u.post(config.adminPath+'/property/mobile/taskDetail/reportedOrder',params),
// 基础服务:登录登出、身份信息、菜单授权、切换系统、字典数据等
lang: (params = {}) => vm.$u.get('/lang/'+params.lang),
diff --git a/components/CommonCalendar.vue b/components/CommonCalendar.vue
new file mode 100644
index 0000000..a14e355
--- /dev/null
+++ b/components/CommonCalendar.vue
@@ -0,0 +1,300 @@
+
+
+
+
+
+
+
+
+ {{ w }}
+
+
+
+
+
+ {{ item.day || '' }}
+
+
+
+
+
+
+
+
+
diff --git a/pages.json b/pages.json
index 8d9d26f..3ca434f 100644
--- a/pages.json
+++ b/pages.json
@@ -373,7 +373,7 @@
{
"path": "pages/sys/user/myRecord/myRecord",
"style": {
- "navigationStyle": "custom"
+ "navigationBarTitleText": "我的考勤"
}
},
{
@@ -479,6 +479,34 @@
{
"navigationBarTitleText" : "巡检任务"
}
+ },
+ {
+ "path" : "pages/sys/workbench/inspection/inspectionOpt",
+ "style" :
+ {
+ "navigationBarTitleText" : "巡检详情"
+ }
+ },
+ {
+ "path" : "pages/sys/workbench/inspection/inspectionDetail",
+ "style" :
+ {
+ "navigationBarTitleText" : "巡检详情"
+ }
+ },
+ {
+ "path" : "pages/sys/workbench/book/book",
+ "style" :
+ {
+ "navigationBarTitleText" : " 通讯录"
+ }
+ },
+ {
+ "path" : "pages/sys/workbench/leave/leave",
+ "style" :
+ {
+ "navigationBarTitleText" : "请假"
+ }
}
],
"tabBar": {
diff --git a/pages/sys/user/myRecord/myRecord.vue b/pages/sys/user/myRecord/myRecord.vue
index ef8e8ca..2922f8a 100644
--- a/pages/sys/user/myRecord/myRecord.vue
+++ b/pages/sys/user/myRecord/myRecord.vue
@@ -1,10 +1,5 @@
-
-
+
+
- {{ calendarExpanded ? '收起' : '展开' }}
+
+
@@ -100,77 +98,43 @@
+
+
diff --git a/pages/sys/workbench/earlyWarning/earlyWarning.vue b/pages/sys/workbench/earlyWarning/earlyWarning.vue
index b995b31..f213f12 100644
--- a/pages/sys/workbench/earlyWarning/earlyWarning.vue
+++ b/pages/sys/workbench/earlyWarning/earlyWarning.vue
@@ -86,10 +86,15 @@
this.loadAllTabsData()
},
onShow() {
- uni.$once('refreshData', () => {
+ // 使用$on替代$once,确保每次都能监听到事件
+ uni.$on('refreshData', () => {
this.loadAllTabsData()
});
},
+ // 页面卸载时移除事件监听器
+ onUnload() {
+ uni.$off('refreshData');
+ },
methods: {
goBack() {
uni.navigateBack();
@@ -141,16 +146,16 @@
this.tabLoaded[idx] = true;
this.loading = false;
},
- goDetail2(item) {
- const itemStr = encodeURIComponent(JSON.stringify(item));
- if([20, 30, 31, 32].includes(item.state)){
- uni.navigateTo({
- url: "/pages/sys/workbench/earlyWarning/warnDetail?item=" + itemStr,
- });
- }else{
- uni.navigateTo({
- url: "/pages/sys/workbench/earlyWarning/warnDetail?item=" + itemStr + "&pageType=detail",
- });
+ goDetail2(item) {
+ const itemStr = encodeURIComponent(JSON.stringify(item));
+ if([20, 30, 31, 32].includes(item.state)){
+ uni.navigateTo({
+ url: "/pages/sys/workbench/earlyWarning/warnDetail?item=" + itemStr,
+ });
+ }else{
+ uni.navigateTo({
+ url: "/pages/sys/workbench/earlyWarning/warnDetail?item=" + itemStr + "&pageType=detail",
+ });
}
},
goStatistics() {
@@ -161,6 +166,11 @@
// 添加预加载所有标签页数据的方法
async loadAllTabsData() {
+ // 重置状态
+ this.pageNum = [1, 1];
+ this.noMore = [false, false];
+ this.tabData = [[], []];
+
// 并行加载所有标签页数据,提高加载速度
const loadPromises = [0, 1].map((index) => {
return this.loadTabData(index);
diff --git a/pages/sys/workbench/inspection/inspection.vue b/pages/sys/workbench/inspection/inspection.vue
index f2a6080..cf6e44d 100644
--- a/pages/sys/workbench/inspection/inspection.vue
+++ b/pages/sys/workbench/inspection/inspection.vue
@@ -8,24 +8,45 @@
-
-
-
-
- 保洁部日常巡检 {{ item.createTime.substring(0,11) }}
-
- {{ getStatusLabel(item.status) }}
-
-
-
- 巡检人:{{ item.createTime }}
- 计划完成时间:{{ item.typeName }}
- 实际完成时间:{{ item.location }}
- 巡检进度:{{ item.location }}
-
-
+
+
+
+
+
+
+ {{item.planName || ''}} {{ item.createTime ? item.createTime.substring(0,11) : '' }}
+
+ {{ getStatusLabel(item.status) }}
+
+
+
+ 巡检人:{{ item.actUserName || '' }}
+ 计划完成时间:{{ item.planInsTime || '' }}
+ 实际完成时间:{{ item.location || '' }}
+ 巡检进度:{{ item.inspectionProgress || '' }}
+
+
+
+
+ 加载中...
+
+
+ 没有更多数据了
+
+
-
@@ -33,65 +54,122 @@
export default {
data() {
return {
- tabs: ['待进行', '处理中', '已完成'],
+ tabs: ['待进行', '处理中', '已完成', '已超时'],
activeTab: 0,
tabData: [
- [],
- [],
- []
- ], // 每个tab的数据
- tabLoaded: [false, false, false], // 每个tab是否已加载
- loading: false
+ { list: [], pageNum: 1, pageSize: 10 },
+ { list: [], pageNum: 1, pageSize: 10 },
+ { list: [], pageNum: 1, pageSize: 10 },
+ { list: [], pageNum: 1, pageSize: 10 }
+ ],
+ pageNum: [1, 1, 1, 1], // 每个 tab 当前页码
+ pageSize: 10,
+ noMore: [false, false, false, false], // 每个 tab 是否没有更多数据
+ tabLoaded: [false, false, false, false], // tab 是否加载过
+ loading: [false, false, false, false], // 每个 tab 的加载状态
+ refresherTriggered: [false, false, false, false] // 每个 tab 的下拉刷新状态
}
},
computed: {
list() {
- return this.tabData[this.activeTab];
+ return this.tabData[this.activeTab].list;
+ },
+ hasMore() {
+ return !this.noMore[this.activeTab];
}
},
created() {
- this.loadTabData(this.activeTab); // 初始化加载当前tab数据
+ this.loadAllTabsData();
},
methods: {
goBack() {
uni.navigateBack();
},
+ // 加载所有tab数据
+ async loadAllTabsData() {
+ for (let idx = 0; idx < this.tabs.length; idx++) {
+ if (!this.tabLoaded[idx]) {
+ await this.loadTabData(idx);
+ }
+ }
+ },
+ // 切换 tab
async changeTab(idx) {
this.activeTab = idx;
if (!this.tabLoaded[idx]) {
- await this.loadTabData(idx);
+ await this.onRefresh();
}
},
+ // 下拉刷新
+ async onRefresh() {
+ this.refresherTriggered[this.activeTab] = true;
+ this.pageNum[this.activeTab] = 1;
+ this.noMore[this.activeTab] = false;
+ this.tabData[this.activeTab].list = [];
+ await this.loadTabData(this.activeTab);
+ this.refresherTriggered[this.activeTab] = false;
+ },
+ // 滚动加载更多
+ async loadMore() {
+ if (this.loading[this.activeTab] || this.noMore[this.activeTab]) return;
+ this.pageNum[this.activeTab]++;
+ this.loading[this.activeTab] = true;
+ await this.loadTabData(this.activeTab);
+ this.loading[this.activeTab] = false;
+ },
async loadTabData(idx) {
- this.loading = true;
- // 模拟接口请求,不同tab返回不同mock数据
- let params = {}
-
-
- let data = [];
+ this.loading[idx] = true;
+ let params = {
+ pageNum: this.pageNum[idx],
+ pageSize: this.pageSize
+ };
+
+ // 根据tab索引设置不同的状态参数
+ switch(idx) {
+ case 0: // 待进行
+ params.status = '0';
+ break;
+ case 1: // 处理中
+ params.status = '1';
+ break;
+ case 2: // 已完成
+ params.status = '2';
+ break;
+ case 3: // 已超时
+ params.status = '3';
+ break;
+ }
let res = await this.$u.api.getInspection(params);
if (res.code == '200') {
- data = res.rows
+ let rows = res.rows || [];
+ if (rows.length < this.pageSize) {
+ this.noMore[idx] = true;
+ }
+ if (this.pageNum[idx] === 1) {
+ // 刷新时重置数据
+ this.tabData[idx].list = rows;
+ } else {
+ // 加载更多时追加数据
+ this.tabData[idx].list = [...this.tabData[idx].list, ...rows];
+ }
}
-
- this.$set(this.tabData, idx, data);
this.$set(this.tabLoaded, idx, true);
- this.loading = false;
+ this.loading[idx] = false;
},
goProcess(item) {
const detailItemStr = encodeURIComponent(JSON.stringify(item));
- uni.navigateTo({
- url: `/pages/sys/workbench/inspection/inspectionProcess?detailItem=${item}`
+ uni.navigateTo({
+ url: `/pages/sys/workbench/inspection/inspectionProcess?item=${detailItemStr}`
});
},
getStatusLabel(status) {
const statusMap = {
- 0: '待确认',
- 1: '已确认',
- 2: '已取消',
- 3: '已完成'
+ 0: '待进行',
+ 1: '处理中',
+ 2: '已完成',
+ 3: '已超时'
};
return statusMap[status] || '';
},
@@ -100,7 +178,8 @@
0: '待确认',
1: 'orange',
2: '已取消',
- 3: '已完成'
+ 3: 'done',
+ 4: 'done'
};
return statusMap[status] || '';
}
@@ -153,15 +232,15 @@
margin-top: 8rpx;
}
- .ins-list {
- margin: 25rpx 0 0 0;
- padding: 0 35rpx;
+ .ins-list-container {
flex: 1;
- /* 占据所有剩余空间 */
- overflow-y: auto;
- /* 内容超出时,开启垂直滚动 */
- padding-bottom: 200rpx;
- /* 为底部按钮留出空间 */
+ overflow: hidden;
+ }
+
+ .ins-list {
+ height: 100%;
+ padding: 25rpx 35rpx 0;
+ box-sizing: border-box;
}
.ins-card {
@@ -180,43 +259,47 @@
margin-top: 25rpx;
margin-left: 19rpx;
margin-right: 50rpx;
- }
-
- .ins-no {
- font-size: 24rpx;
- color: #0B0B0B;
- font-weight: 500;
- }
-
- .ins-status {
- font-size: 24rpx;
- font-weight: 500;
- }
-
- .ins-line-image {
- margin: left 29rpx;
- margin-right: 39rpx;
- height: 2rpx;
- margin-bottom: 29rpx;
- }
-
- .ins-status.orange {
- color: #F3AB44;
- }
-
- .ins-status.doing {
- color: #00C9AA;
- }
-
- .ins-status.done {
- color: #8A8A8A;
- }
-
- .ins-info {
- font-size: 24rpx;
- color: #888;
- margin-bottom: 30rpx;
- margin-left: 47rpx;
+ }
+
+ .ins-no {
+ font-size: 24rpx;
+ color: #0B0B0B;
+ font-weight: 500;
+ }
+
+ .ins-status {
+ font-size: 24rpx;
+ font-weight: 500;
+ }
+
+ .ins-line-image {
+ margin: left 29rpx;
+ margin-right: 39rpx;
+ height: 2rpx;
+ margin-bottom: 29rpx;
+ }
+
+ .ins-status.orange {
+ color: #F3AB44;
+ }
+
+ .ins-status.doing {
+ color: #00C9AA;
+ }
+
+ .ins-status.done {
+ color: #8A8A8A;
+ }
+
+ .ins-status.overdue {
+ color: #FF4D4D;
+ }
+
+ .ins-info {
+ font-size: 24rpx;
+ color: #888;
+ margin-bottom: 30rpx;
+ margin-left: 47rpx;
}
\ No newline at end of file
diff --git a/pages/sys/workbench/inspection/inspectionDetail.vue b/pages/sys/workbench/inspection/inspectionDetail.vue
new file mode 100644
index 0000000..8d4b356
--- /dev/null
+++ b/pages/sys/workbench/inspection/inspectionDetail.vue
@@ -0,0 +1,452 @@
+
+
+ 巡检人
+
+ {{info.planInspectionPerson}}
+
+ 巡检位置
+ *
+
+
+ {{info.inspectionLocation}}
+
+ 巡检结果
+ *
+
+ 正常
+
+ 异常
+
+ 巡检描述
+ *
+
+ {{ info.remark }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/sys/workbench/inspection/inspectionOpt.vue b/pages/sys/workbench/inspection/inspectionOpt.vue
new file mode 100644
index 0000000..814589b
--- /dev/null
+++ b/pages/sys/workbench/inspection/inspectionOpt.vue
@@ -0,0 +1,573 @@
+
+
+ 巡检人
+
+ {{info.planInspectionPerson}}
+
+ 巡检位置
+ *
+
+
+ {{info.inspectionLocation}}
+ 签到
+
+ 巡检结果
+ *
+
+ 正常
+
+ 异常
+
+ 巡检描述
+ *
+
+
+
+
+
+
+
+
+ 上传图片
+
+
+
+
+
+ ✕
+
+
+ 报事报修
+
+ {{ selectedType.orderTypeName }}
+
+
+
+
+
+
+
+
+
+
+ 是否确定
+ 转送确定生成工单编号
+
+
+ 下次再说
+ 确认生成
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/sys/workbench/inspection/inspectionProcess.vue b/pages/sys/workbench/inspection/inspectionProcess.vue
index 362ea78..63b4835 100644
--- a/pages/sys/workbench/inspection/inspectionProcess.vue
+++ b/pages/sys/workbench/inspection/inspectionProcess.vue
@@ -1,274 +1,293 @@
-
-
-
- 巡检点
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ item.pointName }}({{ item.date }} {{ item.time }})
-
-
- {{ item.pointName }}({{ item.date }} {{ item.time }})
-
-
-
-
- 立即巡检
-
-
-
- 完成巡检
-
- {{ item.result }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ goDetail(item) {
+ // const detailItemStr = encodeURIComponent(JSON.stringify(item));
+ // uni.navigateTo({
+ // url: `/pages/sys/workbench/inspection/inspectionDetail?item=${detailItemStr}`
+ // });
+ }
+ }
+ }
+
+
+
\ No newline at end of file
diff --git a/pages/sys/workbench/leave/leave.vue b/pages/sys/workbench/leave/leave.vue
new file mode 100644
index 0000000..9d65fe4
--- /dev/null
+++ b/pages/sys/workbench/leave/leave.vue
@@ -0,0 +1,583 @@
+
+
+
+
+
+ {{ tab }}
+
+
+
+
+
+
+
+
+ 提交人
+
+ 马花花
+
+
+
+
+ 请假类型
+
+ {{ leaveTypes[leaveTypeIndex] || '请选择' }}
+
+
+
+
+
+
+ 开始时间
+
+
+ {{ startDate || '请选择' }}
+
+
+
+
+
+
+
+ 结束时间
+
+
+ {{ endDate || '请选择' }}
+
+
+
+
+
+
+
+ 时间(小时)
+
+
+
+
+
+ 请假事由
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.type }}
+ {{ item.status }}
+
+
+ 请假类型:{{ item.leaveType }}
+
+ 开始时间:{{ item.startTime }}
+
+
+ 结束时间:{{ item.endTime }}
+
+
+
+
+
+
+ 加载中...
+ 没有更多数据了
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/sys/workbench/oa/oa.vue b/pages/sys/workbench/oa/oa.vue
index 61149cc..aaf96c7 100644
--- a/pages/sys/workbench/oa/oa.vue
+++ b/pages/sys/workbench/oa/oa.vue
@@ -23,7 +23,12 @@
v-show="idx === activeTab"
class="oa-list-scroll"
scroll-y
- :refresher-enabled="false">
+ :scroll-top="scrollTop[idx]"
+ :refresher-enabled="true"
+ :refresher-triggered="refreshing[idx]"
+ @refresherrefresh="onRefresh"
+ @scrolltolower="onLoadMore"
+ @scroll="onScroll($event, idx)">
{{ item.type }}
@@ -46,6 +51,11 @@
{{ item.dateTime }}
+
+
+ 加载中...
+ 没有更多数据了
+
@@ -63,7 +73,12 @@
[] // 已发起
],
tabLoaded: [false, false, false], // 每个tab是否已加载
- loading: false
+ loading: false,
+ pageNum: [1, 1, 1], // 每个tab的页码
+ pageSize: 10, // 每页条数
+ hasMore: [true, true, true], // 每个tab是否还有更多数据
+ refreshing: [false, false, false], // 每个tab是否正在刷新
+ scrollTop: [0, 0, 0] // 每个tab的滚动位置
}
},
computed: {
@@ -93,6 +108,32 @@
}
*/
},
+ // 监听滚动事件,记录每个tab的滚动位置
+ onScroll(e, idx) {
+ this.scrollTop[idx] = e.detail.scrollTop;
+ },
+ // 下拉刷新
+ async onRefresh() {
+ // 设置当前tab为刷新状态
+ this.$set(this.refreshing, this.activeTab, true);
+ // 重置页码
+ this.$set(this.pageNum, this.activeTab, 1);
+ // 重新加载数据
+ await this.loadTabData(this.activeTab);
+ // 取消刷新状态
+ this.$set(this.refreshing, this.activeTab, false);
+ },
+ // 上拉加载更多
+ async onLoadMore() {
+ // 如果没有更多数据或正在加载,则不处理
+ if (!this.hasMore[this.activeTab] || this.loading) {
+ return;
+ }
+ // 页码加1
+ this.$set(this.pageNum, this.activeTab, this.pageNum[this.activeTab] + 1);
+ // 加载更多数据
+ await this.loadTabData(this.activeTab);
+ },
async loadTabData(idx) {
this.loading = true;
// 模拟接口请求,不同tab返回不同mock数据
@@ -227,9 +268,25 @@
}
];
}
+
+ // 模拟分页效果
+ const start = (this.pageNum[idx] - 1) * this.pageSize;
+ const end = start + this.pageSize;
+ const pageData = data.slice(start, end);
+
// 模拟网络延迟
await new Promise(res => setTimeout(res, 300));
- this.$set(this.tabData, idx, data);
+
+ if (this.pageNum[idx] === 1) {
+ // 刷新操作,替换数据
+ this.$set(this.tabData, idx, pageData);
+ } else {
+ // 加载更多,追加数据
+ this.tabData[idx] = [...this.tabData[idx], ...pageData];
+ }
+
+ // 判断是否还有更多数据
+ this.$set(this.hasMore, idx, end < data.length);
this.$set(this.tabLoaded, idx, true);
this.loading = false;
},
@@ -334,6 +391,7 @@
.oa-list-container {
flex: 1;
position: relative;
+ margin-top: 20rpx;
}
.oa-list-scroll {
@@ -344,8 +402,6 @@
bottom: 0;
padding: 0 35rpx;
overflow-y: auto;
- padding-bottom: 50rpx;
- height: calc(100vh - 80rpx - 32rpx - 150rpx); /* 减去顶部区域高度 */
box-sizing: border-box;
}
@@ -354,7 +410,6 @@
padding: 0 35rpx;
flex: 1;
overflow-y: auto;
- padding-bottom: 50rpx;
}
.oa-card {
@@ -448,6 +503,16 @@
font-size: 24rpx;
color: #626262;
}
-
-
+
+ .loading-more {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ padding: 20rpx 0;
+ }
+
+ .loading-text {
+ font-size: 28rpx;
+ color: #999;
+ }
diff --git a/pages/sys/workbench/order/order.vue b/pages/sys/workbench/order/order.vue
index f00885f..753660e 100644
--- a/pages/sys/workbench/order/order.vue
+++ b/pages/sys/workbench/order/order.vue
@@ -148,9 +148,13 @@ export default {
this.isManager = this.vuex_user.roles[0].roleId == 1
},
onShow() {
- uni.$once('refreshData', () => {
+ uni.$on('refreshData', () => {
this.loadAllTabsData();
});
+ },
+ // 页面卸载时移除事件监听器
+ onUnload() {
+ uni.$off('refreshData');
},
methods: {
async changeTab(idx) {
diff --git a/pages/sys/workbench/workbench.vue b/pages/sys/workbench/workbench.vue
index 90b46cb..3aa24ba 100644
--- a/pages/sys/workbench/workbench.vue
+++ b/pages/sys/workbench/workbench.vue
@@ -48,17 +48,7 @@
data() {
return {
commonApps: [
- // {
- // icon: 'https://picsum.photos/80/80?random=3',
- // text: '工作巡检',
- // url:'/pages/sys/workbench/inspection/inspection'
- // },
- // {
- // icon: 'https://picsum.photos/80/80?random=3',
- // text: '假勤',
- // url:'/pages/sys/workbench/camera'
-
- // },
+
{
icon: '/static/aaaa_gd.png',
text: '工单',
@@ -83,11 +73,26 @@
icon: '/static/aaaa_bsbx.png',
text: '报事报修',
url:'/pages/sys/user/myRepair/myRepair'
- }
+ },
+ {
+ icon: 'https://picsum.photos/80/80?random=3',
+ text: '工作巡检',
+ url:'/pages/sys/workbench/inspection/inspection'
+ },
+ // {
+ // icon: 'https://picsum.photos/80/80?random=3',
+ // text: '通讯录',
+ // url:'/pages/sys/workbench/book/book'
+ // },
+ // {
+ // icon: 'https://picsum.photos/80/80?random=3',
+ // text: '请假',
+ // url:'/pages/sys/workbench/leave/leave'
+ // },
// {
// icon: 'https://picsum.photos/80/80?random=3',
- // text: '会议',
- // url:'/pages/sys/workbench/meet/meet'
+ // text: 'oa',
+ // url:'/pages/sys/workbench/oa/oa'
// },
// {
// icon: 'https://picsum.photos/80/80?random=3',
diff --git a/static/ic_camera.png b/static/ic_camera.png
new file mode 100644
index 0000000..ba6d6aa
Binary files /dev/null and b/static/ic_camera.png differ
diff --git a/static/ic_dialog_01.png b/static/ic_dialog_01.png
new file mode 100644
index 0000000..2496e05
Binary files /dev/null and b/static/ic_dialog_01.png differ
diff --git a/static/ic_exp.png b/static/ic_exp.png
new file mode 100644
index 0000000..b752699
Binary files /dev/null and b/static/ic_exp.png differ
diff --git a/static/ic_sq.png b/static/ic_sq.png
new file mode 100644
index 0000000..087819f
Binary files /dev/null and b/static/ic_sq.png differ