123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405 |
- <template>
- <view class="content-box" >
- <image class="bg-img" src="https://beiliyo-2025.obs.cn-north-4.myhuaweicloud.com/fs/20250115/1736955760372.png"></image>
- <view class="nav-bar">
- <view class="grace-page-header" :style="{ background:headerBG }">
- <!-- 沉浸式状态栏 -->
- <view class="grace-page-status-bar" :style="{ background:statusBarBG}"></view>
- <!-- 头部核心 -->
- <view class="grace-page-header-nav" id="gracePageHeader" :style="{minHeight:headerHeight+'px', height:headerHeight+'px', overflow:'hidden'}">
- <view class="u-nav-left" @tap="navBack()">
- <image class="back" src="@/static/images/course/ret-white.png" ></image>
- </view>
- <view class="grace-header-main es-fw-500">我的笔记</view>
- <view class="u-nav-right">
- <image class="right-icon" src="@/static/images/course/edit.png" @tap="deleteNote()" ></image>
- <view v-if="noteType!=2" class="edit" @tap="changeEdit()">{{!isEdit?'编辑':'取消'}}</view>
- </view>
- </view>
- </view>
- <view class="nav_box">
- <view class="status_bar"></view>
- <view class="nav_bar"></view>
- </view>
-
- </view>
-
- <mescroll-body ref="mescrollRef" style="background-color:#f7f7f7;min-height: 700px;" @init="mescrollInit" top="0" bottom="200" :down="downOption" :up="upOption" @down="downCallback" @up="upCallback">
- <view class="es-ml-30 es-mr-30 es-mt-30">
- <image @tap="$navTo('/pages_course/info?courseId='+noteData.courseId)" class="cover" :src="noteData.imgUrl" mode="scaleToFill"></image>
- <view @tap="$navTo('/pages_course/info?courseId='+noteData.courseId)" class="title es-fw-500 es-fs-30 es-mb-20">{{noteData.courseName}}</view>
- <view @tap="$navTo('/pages_course/info?courseId='+noteData.courseId)" class="es-fw-500 es-fs-26 es-c-33">{{noteData.videoName}}</view>
- <view class="x-start es-mt-20">
- <view class="calendar x-c es-w-60 es-h-60">
- <image class="es-w-28 es-h-30" src="@/static/images/course/calendar.png"></image>
- </view>
- <view class="es-ml-20 es-mt-20 es-fw-500 es-fs-24 es-c-99">{{ utils.formatDate(noteData.createTime)}}</view>
- </view>
-
- <view v-if="!isEdit" class="textAreaBox es-bc-ff es-br-20 es-mt-20 es-fw-n es-fs-30 es-c-33 es-pl-20 es-pt-20">
- {{noteData.content}}
- </view>
-
- <view v-if="isEdit" class="textAreaBox es-bc-ff es-br-20 es-mt-20 es-fw-n es-fs-30 es-c-33 x-c es-pl-20 es-pt-20">
- <textarea class="textArea" :focus="isEdit" :disabled="noteType==2" v-model="noteData.content" placeholder-style="color:#999" placeholder="请填写笔记内容"/>
- </view>
-
- <view v-if="isEdit" class="btn-box">
- <view class="sub-btn" @click="doSend()">保存</view>
- </view>
-
- </view>
- </mescroll-body>
- </view>
- </template>
- <script>
- import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
- import mescrollBody from "@/uni_modules/mescroll-uni/components/mescroll-body/mescroll-body.vue";
- import { getDictByKey } from '@/api/common'
- import { editCourseNote,getMyCourseNoteByNoteId,delCourseNote } from '@/api/course'
- export default {
- mixins: [MescrollMixin], // 使用mixin
- components: {
- mescrollBody,
- },
- data() {
- return {
- headerHeight:44,
- statusBarBG:"none",
- headerIndex:98,
- downOption: { //下拉刷新
- auto: false, // 不自动加载 (mixin已处理第一个tab触发downCallback)
- use:false
- },
- upOption: { //上拉加载
- auto: false, // 不自动加载
- use:false,
- page: {
- num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
- size: 10 // 每页数据的数量
- },
- noMoreSize: 5, //如果列表已无数据,可设置列表的总数量要大于半页才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看; 默认5
- empty: {
- tip: '~ 空空如也 ~' // 提示
- // btnText: '去看看'
- }
- },
- dataList:[],
- noteId:null,
- fixedTop: false,
- top:0,
- isEdit:false,
- noteType:0,
- noteData:{"content":"","courseId":0,"noteType":0}
-
- }
- },
- onPageScroll(e) {
- this.top=e.scrollTop;
- },
- computed: {
- // 计算属性的 getter
- headerBG:function() {
- var top=this.top/88;
- return 'rgba(255,92,3, ' + top + ')';
- },
- },
- onShow(){
-
- },
- onLoad(options){
- this.noteId=options.noteId;
- this.noteType=options.noteType;
- this.requestData();
- },
-
- methods: {
- /*下拉刷新的回调 */
- downCallback() {
- this.mescroll.resetUpScroll();
- var that=this;
- },
- /*上拉加载的回调*/
- upCallback(page) {
- //this.mescroll.endByPage(1, 1);
- //this.mescroll.endSuccess(8,false);
- // if (page.num == 1) {
- // this.mescroll.endSuccess(8, false);
- // } else {
- // this.mescroll.endErr()
- // }
- },
- requestData(){
- getMyCourseNoteByNoteId(this.noteId).then(res => {
- if(res.code==200){
- this.noteData=res.data;
- }
- },
- rej => {}
- );
- },
- changeEdit(){
- this.isEdit=!this.isEdit;
- },
- doSend(){
- if(this.utils.isEmpty(this.noteData.content)){
- uni.showToast({title: '请输入笔记内容',icon: 'none'});
- return;
- }
- uni.showLoading({title:""});
- editCourseNote(this.noteData).then(res => {
- uni.hideLoading();
- if(res.code==200){
- uni.showToast({title: res.msg,icon: 'none'});
- }else{
- uni.showToast({title: res.msg,icon: 'none'});
- }
- this.isLike=!this.isLike;
- //this.isEdit=!this.isEdit;
- },
- rej => {}
- );
- },
- deleteNote(){
- let that=this;
- uni.showModal({
- title:"系统提示",
- content:"确定删除吗?",
- cancelText:'取消',
- confirmText:'确定',
- success: (res) => {
- console.log("qxj res:"+JSON.stringify(res));
- if (res.confirm) {
- that.deleteNoteAction();
- }
- else if(res.cancel) {
-
- }
- },
- fail: () => {
- uni.hideLoading();
- }
- });
- },
- navBack() {
- uni.navigateBack({
- animationType: 'pop-out',
- animationDuration: 200
- });
- },
- deleteNoteAction(){
- uni.showLoading({title:""});
- delCourseNote({"noteId":this.noteId}).then(res => {
- uni.hideLoading();
- if(res.code==200){
- uni.showToast({title: "删除成功",icon: 'none'});
- setTimeout(e => {
- this.navBack();
- uni.$emit('refreshMyNote', { });
- }, 2000);
-
- }else{
- uni.showToast({title: res.msg,icon: 'none'});
- }
- this.isLike=!this.isLike;
- },
- rej => {}
- );
- },
-
- }
- }
- </script>
- <style scoped lang="scss">
- page{
- height: 100%;
- background-color: #f7f7f7;
- }
- .grace-page-header {
- position: fixed;
- width: 100%;
- left: 0;
- top: 0;
- z-index: 98;
- border-bottom: 0px solid #FFFFFF;
- .grace-page-status-bar {
- width: 100%;
- height: var(--status-bar-height);
- }
- .grace-page-header-nav {
- width: 100%;
- display: flex;
- flex-direction: row;
- flex-wrap: nowrap;
- align-items: center;
- justify-content: space-between;
- }
- .grace-header-main {
- width: 300rpx;
- flex: auto;
- overflow: hidden;
- margin:0 20rpx;
- height: 48rpx;
- text-align: center;
- color: #fff;
- }
- }
- .u-nav-left{
- display: flex;
- justify-content: space-between;
- align-items: center;
- margin-left: 25rpx;
- .back{
- width: 18rpx;
- height: 31rpx;
- }
- }
-
-
- .u-nav-right{
- position: absolute;
- right:20rpx;
- display: flex;
- justify-content: space-between;
- align-items: center;
- .right-icon{
- width: 27rpx;
- height: 29rpx;
- margin-right: 30rpx;
- }
- .edit{
- color: #fff;
- font-size: 34rpx;
- margin-right: 10rpx;
- font-weight: normal;
- }
- }
-
- .bg-img{
- position: fixed;
- width: 100%;
- height: 524rpx;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- z-index: 0;
- }
-
-
- .nav_box{
- width: 100%;
- .status_bar {
- height: var(--status-bar-height);
- width: 100%;
- }
- .nav_bar {
- height: 44px;
- width: 100%;
- }
- }
-
-
- .search-box {
- width: calc(100% - 60rpx);
- height: 70rpx;
- display: flex;
- flex-direction: row;
- align-items: center;
- justify-content: space-between;
- background: #fff;
- border-radius: 35rpx;
- margin:30rpx;
- margin-top: 10rpx;
- padding-left: 30rpx;
- position: relative;
- z-index: 10;
- .left{
- display: flex;
- flex-direction: row;
- align-items: center;
- justify-content: flex-start;
- }
-
- image{
- width: 28upx;
- height: 28upx;
- margin-right: 16upx;
- }
- .input-text{
- color: #333;
- font-size: 24rpx;
- height: 70rpx;
- line-height:70rpx ;
- }
- .uni-input-placeholder{
- color:#999;
- }
- .button{
- background: #FF5C03;
- border-radius: 29rpx;
- width: 108rpx;
- height: 54rpx;
- line-height: 54rpx;
- color: #fff;
- font-size: 26rpx;
- margin-right: 10rpx;
- }
- }
-
- .cover{
- height:300rpx ;
- width: 100%;
- border-radius: 20rpx;
- }
- .title{
- color:#0173FF;
- }
-
- .calendar{
- background-color:#FFE8DC ;
- width: 60rpx;
- height: 60rpx;
- border-radius: 50%;
- }
-
- .textAreaBox{
- background-color: #fff;
- padding-left: 15rpx;
- padding-right: 15rpx;
- height: 200px;
- }
-
- .textArea{
- background-color: #fff;
- border-radius: 10rpx;
- width: 100%;
- height: 100%;
- font-size: 30rpx;
- }
-
- .btn-box{
- margin-top: 15rpx;
- height: 120upx;
- padding: 0 30upx;
- display: flex;
- align-items: center;
- justify-content: center;
- .sub-btn{
- width: 100%;
- height: 88upx;
- line-height: 88upx;
- text-align: center;
- font-size: 30upx;
- font-family: PingFang SC;
- font-weight: bold;
- color: #FFFFFF;
- background: #FF5C03;
- border-radius: 44upx;
- }
- }
-
-
- </style>
|