diff --git a/.env.development b/.env.development
index 5bae6850..9e88b879 100644
--- a/.env.development
+++ b/.env.development
@@ -9,8 +9,8 @@ ENV = 'development'
# VITE_APP_BASE_API_Url = 'http://25.64.16.133:9786'
-# VITE_APP_BASE_API_Url = 'https://aitstest.jlbank.com.cn:7001'
+VITE_APP_BASE_API_Url = 'https://aitstest.jlbank.com.cn:7001'
app入口
-VITE_APP_BASE_API_Url = 'http://25.18.122.65:7001'
+# VITE_APP_BASE_API_Url = 'http://25.18.122.65:7001'
diff --git a/src/api/common.js b/src/api/common.js
index 1b48c997..d51d705e 100644
--- a/src/api/common.js
+++ b/src/api/common.js
@@ -56,8 +56,12 @@ export function previewFile(id, responseType = 'arraybuffer') {
header,
responseType,
success(result) {
- console.log(result)
+ //#ifdef APP-PLUS
+ let _header = result.header['Content-Type'].split(';')[0]
+ // #endif
+ //#ifndef APP-PLUS
let _header = result.header['content-type'].split(';')[0]
+ // #endif
// let base64 = new Blob([result.data],{type:result.header['content-type'].split(';')[0]})
let base64 = `data:${_header};base64,` + uni.arrayBufferToBase64(result.data)
resolve(base64)
diff --git a/src/api/index.js b/src/api/index.js
index dd40aa06..5f5e6a05 100644
--- a/src/api/index.js
+++ b/src/api/index.js
@@ -12,8 +12,7 @@ export const getStatisticsData = (data) => {
return request({
url: '/traapp/traStdyInfo/queryTraStdyStatisticsPerson',
method: 'post',
- data,
- suppressErrors: true
+ data
});
};
@@ -35,8 +34,7 @@ export const queryCrsInfoByLastnew = (data) => {
return request({
url: '/traapp/mycrs/queryCrsInfoByLastnew',
method: 'post',
- data,
- suppressErrors: true
+ data
});
};
@@ -63,8 +61,7 @@ export const queryCrsInfoByPopular = (data) => {
return request({
url: '/traapp/mycrs/queryCrsInfoByPopular',
method: 'post',
- data,
- suppressErrors: true
+ data
});
};
@@ -86,7 +83,6 @@ export const queryCrsInfoByRecmd = (data) => {
return request({
url: '/traapp/mycrs/queryCrsInfoByRecmd',
method: 'post',
- data,
- suppressErrors: true
+ data
});
};
\ No newline at end of file
diff --git a/src/api/request.js b/src/api/request.js
index c52d6d87..7b232585 100644
--- a/src/api/request.js
+++ b/src/api/request.js
@@ -32,14 +32,14 @@ export const REQUES_ERROR_CODES = {
let no_login_show_modal_state = false
// 去登录方法
export const goto_login_fun = () => {
- // if (no_login_show_modal_state) return;
+ if (no_login_show_modal_state) return;
no_login_show_modal_state = true
common.hideLoading()
common.show('未登录', '现在去登录').then(() => {
common.navigateTo('/pages/login/login')
}).finally(() => {
no_login_show_modal_state = false
- })
+ })
}
@@ -96,7 +96,7 @@ export default function request({
return reject(res)
},
fail(res) {
- console.log('131231', res, url, base_url);
+ console.log('请求错误', res, url, base_url);
}
});
})
diff --git a/src/components/image-preview/image-preview.vue b/src/components/image-preview/image-preview.vue
index 412a4406..cc1a7fbf 100644
--- a/src/components/image-preview/image-preview.vue
+++ b/src/components/image-preview/image-preview.vue
@@ -43,6 +43,10 @@
},
methods: {
getPreviewUrlBlob(id) {
+
+ if (id === null) {
+ console.log('谢谢谢谢谢谢', id);
+ }
if(this.isCache){
previewCacheThumbImage(id, this.width,this.height).then((res) => {
this.imgUrlShow = res;
diff --git a/src/pages/courseDetail/components/comment.vue b/src/pages/courseDetail/components/comment.vue
index b2acfea9..635f7cc4 100644
--- a/src/pages/courseDetail/components/comment.vue
+++ b/src/pages/courseDetail/components/comment.vue
@@ -1,78 +1,247 @@
\ No newline at end of file
diff --git a/src/pages/index/index.vue b/src/pages/index/index.vue
index b6e53707..28393905 100644
--- a/src/pages/index/index.vue
+++ b/src/pages/index/index.vue
@@ -280,17 +280,67 @@
const hot_class_list = ref([...init_class_data])
const new_class_list = ref([...init_class_data])
const recommend_class_list = ref([...init_class_data])
-
-
+
+ // const statistics_data = reactive({
+ // 'stdtTmLen': 0, // 学习
+ // 'accmPracticeCnt': 0, // 训练
+ // 'accmExamCnt': 0, //考试
+ // 'start_tudy': 0, // 起始学习
+ // 'start_train': 0, // 起始训练
+ // 'start_exam': 0, //起始考试
+ // 'request_time': 0, //上次请求时间
+ // })
+
const statistics_data = reactive({
'stdtTmLen': 0, // 学习
'accmPracticeCnt': 0, // 训练
- 'accmExamCnt': 0, //考试
- 'start_tudy': 0, // 起始学习
- 'start_train': 0, // 起始训练
- 'start_exam': 0, //起始考试
- 'request_time': 0, //上次请求时间
- })
+ 'accmExamCnt': 0, // 考试
+ 'startStdtTmLen': 0, // 起始学习
+ 'startAccmPracticeCnt': 0, // 起始训练
+ 'startAccmExamCnt': 0, // 起始考试
+ 'request_time': 0, // 上次请求时间
+ "init": function() { // 初始化统计数据
+ // const index_statistics_data = common.getValue('index_statistics_data') // 获取缓存
+ // if (index_statistics_data) {
+ // this.stdtTmLen = index_statistics_data.study;
+ // this.start_train = index_statistics_data.train;
+ // this.start_exam = index_statistics_data.exam;
+ // }
+ },
+ "get_statistics_data": async function() {
+ try {
+ const time_now = Date.now();
+ if (time_now - this.request_time > 300 * 1000) {
+ this.request_time = time_now;
+ // 获取最新数据
+ const res = await queryTraStdyStatisticsSelf();
+ const accmPoint = res.body.accmPoint
+ const accmTaskCnt = res.body.accmTaskCnt
+ const stdtTmLen = res.body.stdtTmLen
+ if (accmPoint != this.accmPoint) { // 不相等就执行
+ this.startAccmPoint = this.accmPoint
+ this.accmPoint = accmPoint
+ accmPointRef.value.start()
+ }
+ if (accmTaskCnt != this.accmTaskCnt) { // 不相等就执行
+ this.startAccmTaskCnt = this.accmTaskCnt
+ this.accmTaskCnt = accmTaskCnt
+ accmTaskCntRef.value.start()
+ }
+ if (stdtTmLen != this.stdtTmLen) { // 不相等就执行
+ this.startStdtTmLen = this.stdtTmLen
+ this.stdtTmLen = stdtTmLen
+ stdtTmLenRef.value.start()
+ }
+ console.log('统计数据已更新');
+ } else {
+ console.log('时间没到无需更新');
+ }
+ } catch (error) {
+ console.error('获取统计数据失败:', error);
+ }
+ }
+ });
// 获取首页统计数据方法
@@ -305,7 +355,6 @@
// statistics_data['request_time'] = time_now
// const data = await getStatisticsData()
- // console.log(data);
// }
}
diff --git a/src/pages/me/index.vue b/src/pages/me/index.vue
index 7556fde2..410c5240 100644
--- a/src/pages/me/index.vue
+++ b/src/pages/me/index.vue
@@ -8,8 +8,7 @@
-
-
+
@@ -36,19 +35,22 @@
累计学习时长
- h
+ h
累计完成任务
-
+
累计获得积分
-
+
@@ -117,64 +119,56 @@
import {
queryTraStdyStatisticsSelf
} from '@/api/user.js'
+ const accmTaskCntRef = ref(null)
+ const accmPointRef = ref(null)
+ const stdtTmLenRef = ref(null)
const statistics_data = reactive({
- 'stdtTmLen': 2, // 学习
- 'study': 0, // 学习
- 'train': 0, // 训练
- 'exam': 0, // 考试
- 'start_study': 0, // 起始学习
- 'start_train': 0, // 起始训练
- 'start_exam': 0, // 起始考试
+ 'stdtTmLen': 0, // 累计学习时长
+ 'accmTaskCnt': 0, // 累计完成任务
+ 'accmPoint': 0, // 累计获得积分
+ 'startStdtTmLen': 0, // 起始累计学习时长
+ 'startAccmTaskCnt': 0, // 起始累计完成任务
+ 'startAccmPoint': 0, // 起始累计获得积分
'request_time': 0, // 上次请求时间
-
- /**
- * 初始化统计数据
- */
- "init": function() {
- // 初始化起始数据
- this.start_study = this.study;
- this.start_train = this.train;
- this.start_exam = this.exam;
-
+ "init": function() { // 初始化统计数据
+ const me_statistics_data = common.getValue('me_statistics_data') // 获取缓存
+ if (me_statistics_data) {
+ this.stdtTmLen = me_statistics_data.study;
+ this.start_train = me_statistics_data.train;
+ this.start_exam = me_statistics_data.exam;
+ }
},
-
- /**
- * 获取统计数据(带缓存机制)
- * @returns {Promise}
- */
"get_statistics_data": async function() {
try {
const time_now = Date.now();
- // 检查缓存是否过期(10分钟)
- if (time_now - this.request_time > 600 * 1000) {
+ if (time_now - this.request_time > 300 * 1000) {
this.request_time = time_now;
-
// 获取最新数据
- const {
- study,
- train,
- exam
- } = await getStatisticsData();
-
- // 保存起始值(如果是首次获取)
- if (this.request_time === 0) {
- this.start_study = study;
- this.start_train = train;
- this.start_exam = exam;
+ const res = await queryTraStdyStatisticsSelf();
+ const accmPoint = res.body.accmPoint
+ const accmTaskCnt = res.body.accmTaskCnt
+ const stdtTmLen = res.body.stdtTmLen
+ if (accmPoint != this.accmPoint) { // 不相等就执行
+ this.startAccmPoint = this.accmPoint
+ this.accmPoint = accmPoint
+ accmPointRef.value.start()
+ }
+ if (accmTaskCnt != this.accmTaskCnt) { // 不相等就执行
+ this.startAccmTaskCnt = this.accmTaskCnt
+ this.accmTaskCnt = accmTaskCnt
+ accmTaskCntRef.value.start()
+ }
+ if (stdtTmLen != this.stdtTmLen) { // 不相等就执行
+ this.startStdtTmLen = this.stdtTmLen
+ this.stdtTmLen = stdtTmLen
+ stdtTmLenRef.value.start()
}
-
- // 更新当前值
- this.study = study;
- this.train = train; // 修正:之前漏写这一行
- this.exam = exam;
-
console.log('统计数据已更新');
} else {
- console.log('使用缓存的统计数据');
+ console.log('时间没到无需更新');
}
} catch (error) {
console.error('获取统计数据失败:', error);
- // 可以在这里添加重试逻辑或使用默认值
}
}
});
@@ -183,19 +177,13 @@
userName: '',
userId: ''
});
-
+
onShow(() => {
const user_info_cache = getUserInfo()
Object.assign(user_info, user_info_cache)
- queryTraStdyStatisticsSelf().then(({body}) => {
- statistics_data['accmPoint'] = body['accmPoint']
- statistics_data['accmTaskCnt'] = body['accmTaskCnt']
- statistics_data['stdtTmLen'] = body['stdtTmLen']
- console.log('res', body);
- })
- // statistics_data['get_statistics_data']() // 获取首页统计数据
+ statistics_data['get_statistics_data']() // 获取首页统计数据
})
const click_loginout = () => {
@@ -310,9 +298,9 @@
box-shadow: #F6F8FF 0 0 2rpx;
.personal_information {
- padding: 20rpx 0 0 26rpx;
+ padding: 20rpx 18rpx 0 26rpx;
display: flex;
-
+
// 个人头像框框
.profile {
border-radius: 100%;
@@ -324,15 +312,16 @@
// 头像右边的信息
.personal_information_data {
+ flex: 1;
display: flex;
flex-direction: column;
margin-left: 26rpx;
+ overflow: hidden;
// 上边的姓名性别盒子
.name_sex_div {
display: flex;
margin-top: 6rpx;
-
.name {
font-family: PingFangSC;
font-weight: 600;
@@ -356,6 +345,9 @@
line-height: 38rpx;
text-align: left;
font-style: normal;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+
}
}
}
diff --git a/src/pages/study/index.vue b/src/pages/study/index.vue
index dee92763..a0f74130 100644
--- a/src/pages/study/index.vue
+++ b/src/pages/study/index.vue
@@ -9,41 +9,7 @@
diff --git a/src/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue b/src/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue
new file mode 100644
index 00000000..91370a82
--- /dev/null
+++ b/src/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue
@@ -0,0 +1,143 @@
+
+
+
+
+
+
diff --git a/src/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue b/src/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue
new file mode 100644
index 00000000..c8945d57
--- /dev/null
+++ b/src/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue
@@ -0,0 +1,188 @@
+
+
+
+
+
+
diff --git a/src/uni_modules/uni-popup/components/uni-popup/i18n/en.json b/src/uni_modules/uni-popup/components/uni-popup/i18n/en.json
new file mode 100644
index 00000000..7f1bd06a
--- /dev/null
+++ b/src/uni_modules/uni-popup/components/uni-popup/i18n/en.json
@@ -0,0 +1,7 @@
+{
+ "uni-popup.cancel": "cancel",
+ "uni-popup.ok": "ok",
+ "uni-popup.placeholder": "pleace enter",
+ "uni-popup.title": "Hint",
+ "uni-popup.shareTitle": "Share to"
+}
diff --git a/src/uni_modules/uni-popup/components/uni-popup/i18n/index.js b/src/uni_modules/uni-popup/components/uni-popup/i18n/index.js
new file mode 100644
index 00000000..de7509c8
--- /dev/null
+++ b/src/uni_modules/uni-popup/components/uni-popup/i18n/index.js
@@ -0,0 +1,8 @@
+import en from './en.json'
+import zhHans from './zh-Hans.json'
+import zhHant from './zh-Hant.json'
+export default {
+ en,
+ 'zh-Hans': zhHans,
+ 'zh-Hant': zhHant
+}
diff --git a/src/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json b/src/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json
new file mode 100644
index 00000000..5e3003ca
--- /dev/null
+++ b/src/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json
@@ -0,0 +1,7 @@
+{
+ "uni-popup.cancel": "取消",
+ "uni-popup.ok": "确定",
+ "uni-popup.placeholder": "请输入",
+ "uni-popup.title": "提示",
+ "uni-popup.shareTitle": "分享到"
+}
diff --git a/src/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json b/src/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json
new file mode 100644
index 00000000..13e39eba
--- /dev/null
+++ b/src/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json
@@ -0,0 +1,7 @@
+{
+ "uni-popup.cancel": "取消",
+ "uni-popup.ok": "確定",
+ "uni-popup.placeholder": "請輸入",
+ "uni-popup.title": "提示",
+ "uni-popup.shareTitle": "分享到"
+}
diff --git a/src/uni_modules/uni-popup/components/uni-popup/keypress.js b/src/uni_modules/uni-popup/components/uni-popup/keypress.js
new file mode 100644
index 00000000..62dda461
--- /dev/null
+++ b/src/uni_modules/uni-popup/components/uni-popup/keypress.js
@@ -0,0 +1,45 @@
+// #ifdef H5
+export default {
+ name: 'Keypress',
+ props: {
+ disable: {
+ type: Boolean,
+ default: false
+ }
+ },
+ mounted () {
+ const keyNames = {
+ esc: ['Esc', 'Escape'],
+ tab: 'Tab',
+ enter: 'Enter',
+ space: [' ', 'Spacebar'],
+ up: ['Up', 'ArrowUp'],
+ left: ['Left', 'ArrowLeft'],
+ right: ['Right', 'ArrowRight'],
+ down: ['Down', 'ArrowDown'],
+ delete: ['Backspace', 'Delete', 'Del']
+ }
+ const listener = ($event) => {
+ if (this.disable) {
+ return
+ }
+ const keyName = Object.keys(keyNames).find(key => {
+ const keyName = $event.key
+ const value = keyNames[key]
+ return value === keyName || (Array.isArray(value) && value.includes(keyName))
+ })
+ if (keyName) {
+ // 避免和其他按键事件冲突
+ setTimeout(() => {
+ this.$emit(keyName, {})
+ }, 0)
+ }
+ }
+ document.addEventListener('keyup', listener)
+ // this.$once('hook:beforeDestroy', () => {
+ // document.removeEventListener('keyup', listener)
+ // })
+ },
+ render: () => {}
+}
+// #endif
diff --git a/src/uni_modules/uni-popup/components/uni-popup/popup.js b/src/uni_modules/uni-popup/components/uni-popup/popup.js
new file mode 100644
index 00000000..c4e5781d
--- /dev/null
+++ b/src/uni_modules/uni-popup/components/uni-popup/popup.js
@@ -0,0 +1,26 @@
+
+export default {
+ data() {
+ return {
+
+ }
+ },
+ created(){
+ this.popup = this.getParent()
+ },
+ methods:{
+ /**
+ * 获取父元素实例
+ */
+ getParent(name = 'uniPopup') {
+ let parent = this.$parent;
+ let parentName = parent.$options.name;
+ while (parentName !== name) {
+ parent = parent.$parent;
+ if (!parent) return false
+ parentName = parent.$options.name;
+ }
+ return parent;
+ },
+ }
+}
diff --git a/src/uni_modules/uni-popup/components/uni-popup/uni-popup.uvue b/src/uni_modules/uni-popup/components/uni-popup/uni-popup.uvue
new file mode 100644
index 00000000..5eb8d5be
--- /dev/null
+++ b/src/uni_modules/uni-popup/components/uni-popup/uni-popup.uvue
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/uni_modules/uni-popup/components/uni-popup/uni-popup.vue b/src/uni_modules/uni-popup/components/uni-popup/uni-popup.vue
new file mode 100644
index 00000000..5af55e01
--- /dev/null
+++ b/src/uni_modules/uni-popup/components/uni-popup/uni-popup.vue
@@ -0,0 +1,518 @@
+
+
+
+
+
+
diff --git a/src/uni_modules/uni-popup/package.json b/src/uni_modules/uni-popup/package.json
new file mode 100644
index 00000000..7be6c669
--- /dev/null
+++ b/src/uni_modules/uni-popup/package.json
@@ -0,0 +1,107 @@
+{
+ "id": "uni-popup",
+ "displayName": "uni-popup 弹出层",
+ "version": "1.9.9",
+ "description": " Popup 组件,提供常用的弹层",
+ "keywords": [
+ "uni-ui",
+ "弹出层",
+ "弹窗",
+ "popup",
+ "弹框"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": "",
+ "uni-app": "^4.01",
+ "uni-app-x": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
+ "type": "component-vue",
+ "darkmode": "x",
+ "i18n": "x",
+ "widescreen": "x"
+ },
+ "uni_modules": {
+ "dependencies": [
+ "uni-scss",
+ "uni-transition"
+ ],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "x",
+ "aliyun": "x",
+ "alipay": "x"
+ },
+ "client": {
+ "uni-app": {
+ "vue": {
+ "vue2": "√",
+ "vue3": "√"
+ },
+ "web": {
+ "safari": "√",
+ "chrome": "√"
+ },
+ "app": {
+ "vue": "√",
+ "nvue": "√",
+ "android": "√",
+ "ios": "√",
+ "harmony": "x"
+ },
+ "mp": {
+ "weixin": "√",
+ "alipay": "√",
+ "toutiao": "√",
+ "baidu": "√",
+ "kuaishou": "√",
+ "jd": "√",
+ "harmony": "√",
+ "qq": "√",
+ "lark": "√"
+ },
+ "quickapp": {
+ "huawei": "-",
+ "union": "-"
+ }
+ },
+ "uni-app-x": {
+ "web": {
+ "safari": "-",
+ "chrome": "-"
+ },
+ "app": {
+ "android": "-",
+ "ios": "-",
+ "harmony": "-"
+ },
+ "mp": {
+ "weixin": "-"
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/uni_modules/uni-popup/readme.md b/src/uni_modules/uni-popup/readme.md
new file mode 100644
index 00000000..fdad4b3d
--- /dev/null
+++ b/src/uni_modules/uni-popup/readme.md
@@ -0,0 +1,17 @@
+
+
+## Popup 弹出层
+> **组件名:uni-popup**
+> 代码块: `uPopup`
+> 关联组件:`uni-transition`
+
+
+弹出层组件,在应用中弹出一个消息提示窗口、提示框等
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-popup)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
+
+
+
+
+
diff --git a/src/uni_modules/uni-transition/changelog.md b/src/uni_modules/uni-transition/changelog.md
new file mode 100644
index 00000000..1e500ab8
--- /dev/null
+++ b/src/uni_modules/uni-transition/changelog.md
@@ -0,0 +1,29 @@
+## 1.3.5(2025-06-11)
+- 修复 第一次执行不显示动画的问题
+## 1.3.4(2025-04-16)
+- 修复 页面数据更新到底动画复原的问题
+- 修复 示例页面打开报错的问题
+## 1.3.3(2024-04-23)
+- 修复 当元素会受变量影响自动隐藏的bug
+## 1.3.2(2023-05-04)
+- 修复 NVUE 平台报错的问题
+## 1.3.1(2021-11-23)
+- 修复 init 方法初始化问题
+## 1.3.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-transition](https://uniapp.dcloud.io/component/uniui/uni-transition)
+## 1.2.1(2021-09-27)
+- 修复 init 方法不生效的 Bug
+## 1.2.0(2021-07-30)
+- 组件兼容 vue3,如何创建 vue3 项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.1.1(2021-05-12)
+- 新增 示例地址
+- 修复 示例项目缺少组件的 Bug
+## 1.1.0(2021-04-22)
+- 新增 通过方法自定义动画
+- 新增 custom-class 非 NVUE 平台支持自定义 class 定制样式
+- 优化 动画触发逻辑,使动画更流畅
+- 优化 支持单独的动画类型
+- 优化 文档示例
+## 1.0.2(2021-02-05)
+- 调整为 uni_modules 目录规范
diff --git a/src/uni_modules/uni-transition/components/uni-transition/createAnimation.js b/src/uni_modules/uni-transition/components/uni-transition/createAnimation.js
new file mode 100644
index 00000000..8f89b185
--- /dev/null
+++ b/src/uni_modules/uni-transition/components/uni-transition/createAnimation.js
@@ -0,0 +1,131 @@
+// const defaultOption = {
+// duration: 300,
+// timingFunction: 'linear',
+// delay: 0,
+// transformOrigin: '50% 50% 0'
+// }
+// #ifdef APP-NVUE
+const nvueAnimation = uni.requireNativePlugin('animation')
+// #endif
+class MPAnimation {
+ constructor(options, _this) {
+ this.options = options
+ // 在iOS10+QQ小程序平台下,传给原生的对象一定是个普通对象而不是Proxy对象,否则会报parameter should be Object instead of ProxyObject的错误
+ this.animation = uni.createAnimation({
+ ...options
+ })
+ this.currentStepAnimates = {}
+ this.next = 0
+ this.$ = _this
+
+ }
+
+ _nvuePushAnimates(type, args) {
+ let aniObj = this.currentStepAnimates[this.next]
+ let styles = {}
+ if (!aniObj) {
+ styles = {
+ styles: {},
+ config: {}
+ }
+ } else {
+ styles = aniObj
+ }
+ if (animateTypes1.includes(type)) {
+ if (!styles.styles.transform) {
+ styles.styles.transform = ''
+ }
+ let unit = ''
+ if(type === 'rotate'){
+ unit = 'deg'
+ }
+ styles.styles.transform += `${type}(${args+unit}) `
+ } else {
+ styles.styles[type] = `${args}`
+ }
+ this.currentStepAnimates[this.next] = styles
+ }
+ _animateRun(styles = {}, config = {}) {
+ let ref = this.$.$refs['ani'].ref
+ if (!ref) return
+ return new Promise((resolve, reject) => {
+ nvueAnimation.transition(ref, {
+ styles,
+ ...config
+ }, res => {
+ resolve()
+ })
+ })
+ }
+
+ _nvueNextAnimate(animates, step = 0, fn) {
+ let obj = animates[step]
+ if (obj) {
+ let {
+ styles,
+ config
+ } = obj
+ this._animateRun(styles, config).then(() => {
+ step += 1
+ this._nvueNextAnimate(animates, step, fn)
+ })
+ } else {
+ this.currentStepAnimates = {}
+ typeof fn === 'function' && fn()
+ this.isEnd = true
+ }
+ }
+
+ step(config = {}) {
+ // #ifndef APP-NVUE
+ this.animation.step(config)
+ // #endif
+ // #ifdef APP-NVUE
+ this.currentStepAnimates[this.next].config = Object.assign({}, this.options, config)
+ this.currentStepAnimates[this.next].styles.transformOrigin = this.currentStepAnimates[this.next].config.transformOrigin
+ this.next++
+ // #endif
+ return this
+ }
+
+ run(fn) {
+ // #ifndef APP-NVUE
+ this.$.animationData = this.animation.export()
+ this.$.timer = setTimeout(() => {
+ typeof fn === 'function' && fn()
+ }, this.$.durationTime)
+ // #endif
+ // #ifdef APP-NVUE
+ this.isEnd = false
+ let ref = this.$.$refs['ani'] && this.$.$refs['ani'].ref
+ if(!ref) return
+ this._nvueNextAnimate(this.currentStepAnimates, 0, fn)
+ this.next = 0
+ // #endif
+ }
+}
+
+
+const animateTypes1 = ['matrix', 'matrix3d', 'rotate', 'rotate3d', 'rotateX', 'rotateY', 'rotateZ', 'scale', 'scale3d',
+ 'scaleX', 'scaleY', 'scaleZ', 'skew', 'skewX', 'skewY', 'translate', 'translate3d', 'translateX', 'translateY',
+ 'translateZ'
+]
+const animateTypes2 = ['opacity', 'backgroundColor']
+const animateTypes3 = ['width', 'height', 'left', 'right', 'top', 'bottom']
+animateTypes1.concat(animateTypes2, animateTypes3).forEach(type => {
+ MPAnimation.prototype[type] = function(...args) {
+ // #ifndef APP-NVUE
+ this.animation[type](...args)
+ // #endif
+ // #ifdef APP-NVUE
+ this._nvuePushAnimates(type, args)
+ // #endif
+ return this
+ }
+})
+
+export function createAnimation(option, _this) {
+ if(!_this) return
+ clearTimeout(_this.timer)
+ return new MPAnimation(option, _this)
+}
diff --git a/src/uni_modules/uni-transition/components/uni-transition/uni-transition.vue b/src/uni_modules/uni-transition/components/uni-transition/uni-transition.vue
new file mode 100644
index 00000000..cce8538f
--- /dev/null
+++ b/src/uni_modules/uni-transition/components/uni-transition/uni-transition.vue
@@ -0,0 +1,286 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/uni_modules/uni-transition/package.json b/src/uni_modules/uni-transition/package.json
new file mode 100644
index 00000000..9432c501
--- /dev/null
+++ b/src/uni_modules/uni-transition/package.json
@@ -0,0 +1,114 @@
+{
+ "id": "uni-transition",
+ "displayName": "uni-transition 过渡动画",
+ "version": "1.3.5",
+ "description": "元素的简单过渡动画",
+ "keywords": [
+ "uni-ui",
+ "uniui",
+ "动画",
+ "过渡",
+ "过渡动画"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": "",
+ "uni-app": "^4.01",
+ "uni-app-x": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
+ "type": "component-vue",
+ "darkmode": "x",
+ "i18n": "x",
+ "widescreen": "x"
+ },
+ "uni_modules": {
+ "dependencies": [
+ "uni-scss"
+ ],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "x",
+ "aliyun": "x",
+ "alipay": "x"
+ },
+ "client": {
+ "uni-app": {
+ "vue": {
+ "vue2": "√",
+ "vue3": "√"
+ },
+ "web": {
+ "safari": "√",
+ "chrome": "√"
+ },
+ "app": {
+ "vue": "√",
+ "nvue": "√",
+ "android": "√",
+ "ios": "√",
+ "harmony": "-"
+ },
+ "mp": {
+ "weixin": {
+ },
+ "alipay": {
+ },
+ "toutiao": {
+ },
+ "baidu": {
+ },
+ "kuaishou": {
+ "extVersion": "1.1.0",
+ "minVersion": ""
+ },
+ "jd": {
+ },
+ "harmony": "x",
+ "qq": "-",
+ "lark": "-"
+ },
+ "quickapp": {
+ "huawei": "-",
+ "union": "-"
+ }
+ },
+ "uni-app-x": {
+ "web": {
+ "safari": "-",
+ "chrome": "-"
+ },
+ "app": {
+ "android": "-",
+ "ios": "-",
+ "harmony": "-"
+ },
+ "mp": {
+ "weixin": "-"
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/uni_modules/uni-transition/readme.md b/src/uni_modules/uni-transition/readme.md
new file mode 100644
index 00000000..2f8a77e1
--- /dev/null
+++ b/src/uni_modules/uni-transition/readme.md
@@ -0,0 +1,11 @@
+
+
+## Transition 过渡动画
+> **组件名:uni-transition**
+> 代码块: `uTransition`
+
+
+元素过渡动画
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-transition)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
\ No newline at end of file