杨磊
2025-03-18 07050487199a910d9a23db79cb2eb5e8a5cdd6a6
first submit
17个文件已修改
1个文件已删除
217个文件已添加
3 文件已重命名
2617 ■■■■■ 已修改文件
package-lock.json 688 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/App.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/about/Phone-.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/about/adress.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/about/chuanzhen.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/about/custom-phone.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/about/dianhua.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/about/email.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/about/guanyu_tu.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/about/guanyu_tu@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/about/map-marker.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/about/phone.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/about/rongyu_bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/about/rongyu_bg@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/about/webpeizhi.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/about/zuzhijiagou_bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/about/zuzhijiagou_bg@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/book-cover.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/Collect.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/audio.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/biaoqian.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/cd.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/close.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/dangdang.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/done.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/goumai.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/jd.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/last.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/next.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/note.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/other.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/paihangbang.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/play.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/play.svg 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/search.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/shujixiangq_di.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/sp-mr.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/suspend.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/suspend.svg 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/tmall.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/top-1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/top-2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/top-3.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/vedio.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/video-bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/weidian.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/word.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/xuanzhong.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bookStore/yishoucang.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/default-book-img.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/default-bookFair.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/defaultImg/book.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/defaultImg/journal.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/defaultImg/news.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/header/Group.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/header/Slice.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/header/bottom_1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/header/check.gif 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/header/erCode.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/header/login_bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/header/logo.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/header/mobile-phone-dianji.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/header/mobile-phone-moren.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/header/password-icon.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/header/wechat-dianji.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/header/wechat-moren.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/home/icon_tushu.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/home/icon_xinwen.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/home/icon_ziyuan.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/home/tuijiantushu_bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/home/tuijianziyuan_bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/Group 29.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/Group 29@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/Top_bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/Top_bg@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/am1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/arrow_.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/arrow_@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/banner - 副本.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/banner.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/banner@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/cd.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/cd@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/collect1e.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/collect1f.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/default-audio.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/default-pub.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/fengexian.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/fengexian@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/icon_pause.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/icon_play.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/md-index.jpeg 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/md1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/moxing.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/moxing@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/moxing_Top_bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/moxing_Top_bg@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/shipin.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/shipin@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/shipin_Top_bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/shipin_Top_bg@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/shizhong.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/sp-index.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/tp-index.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/tp1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/tupian.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/tupian@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/tupian_Top_bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/tupian_Top_bg@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/yinpin.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/yinpin@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/math/yp-index.jpeg 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/Wechat.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/icon_cart.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/icon_cart_click.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/icon_dingdan.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/icon_dingdan_click.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/icon_geren.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/icon_geren_click.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/icon_kecheng.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/icon_kecheng_click.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/icon_news.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/icon_news_click.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/icon_shoucang.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/icon_shoucang_click.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/icon_tushu.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/icon_tushu_click.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/icon_ziyuan.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/icon_ziyuan_click.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/jihuo.svg 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/jihuo1.svg 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/moxingku.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/moxingku1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/notification.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/shipinku.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/shipinku1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/tupianku.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/tupianku1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/xuanzhong.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/yinpinku.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/personalCenter/yinpinku1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/FullScreen2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/Listen.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/Listen2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/action@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/biji-dianji.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/biji-dianji2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/biji.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/biji2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/bookmark.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/danlan-dianji.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/danlan.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/fenxiang.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/fullScreen.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/fuzhi.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/gaoliang-dianji.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/gaoliang-dianji2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/gaoliang.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/gaoliang2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/halfScreen.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/halfScreen2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/hangju1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/hangju2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/hangju3.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/hangju4.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/hangjuActive1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/hangjuActive2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/hangjuActive3.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/hangjuActive4.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/huaxian-dianji.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/huaxian-dianji2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/huaxian.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/huaxian2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/jieshu-icon.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/kaishi.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/kuaijin.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/kuaijin@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/kuaitui.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/kuaitui@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/mulu-dianji.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/mulu-dianji2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/mulu.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/mulu2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/page-blue.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/page-green.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/page-purple.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/page-yellow.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/page.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/pattern.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/pattern2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/search-dianji.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/search.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/search2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/serch-dianji2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/shuanglan-dianji.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/shuanglan.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/shuqian-click.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/shuqian-click2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/shuqian.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/shuqian1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/shuqian2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/tingshu.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/tingshu2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/tuichu.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/yangshi-click.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/yangshi-click2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/zanting.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/zanting@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/zihao-da.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/reader/zihao-xiao.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/standard/biaozhun_bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/standard/biaozhun_bg@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/standard/jianjie_tu.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/standard/jianjie_tu@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/canvas2image.js 266 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/config.js 81 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/middleGround/WebMiddleGroundApi.js 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/middleGround/api/app.js 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/middleGround/api/dps5.js 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/middleGround/api/edu.js 189 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/middleGround/api/identity.js 208 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/middleGround/api/store.js 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/middleGround/api/ugc.js 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/middleGround/tool.js 326 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/toolClass.js 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.js 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/plugin/axios/index.ts 86 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/index.ts 83 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/index.Ts 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/modules/user.ts 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/login/index.vue 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/model/children/landerModel.vue 67 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/model/index.vue 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/simulation/component/Config.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/views/simulation/component/Result.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/views/simulation/component/Test.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/views/simulation/index.vue 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package-lock.json
@@ -1,15 +1,20 @@
{
  "name": "my-vue-app",
  "name": "model",
  "version": "0.0.0",
  "lockfileVersion": 2,
  "requires": true,
  "packages": {
    "": {
      "name": "my-vue-app",
      "name": "model",
      "version": "0.0.0",
      "license": "MIT",
      "dependencies": {
        "@element-plus/icons-vue": "^2.3.1",
        "axios": "^1.6.2",
        "element-plus": "^2.5.6",
        "moment": "^2.30.1",
        "pinia": "^3.0.1",
        "spark-md5": "^3.0.2",
        "vue": "^3.4.21",
        "vue-router": "^4.3.0"
      },
@@ -17,7 +22,7 @@
        "@vitejs/plugin-vue": "^5.0.4",
        "less": "^4.2.2",
        "less-loader": "^12.2.0",
        "vite": "^5.1.6"
        "vite": "5.4.11"
      }
    },
    "node_modules/@babel/helper-string-parser": {
@@ -818,6 +823,28 @@
      "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
      "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g=="
    },
    "node_modules/@vue/devtools-kit": {
      "version": "7.7.2",
      "resolved": "https://registry.npmmirror.com/@vue/devtools-kit/-/devtools-kit-7.7.2.tgz",
      "integrity": "sha512-CY0I1JH3Z8PECbn6k3TqM1Bk9ASWxeMtTCvZr7vb+CHi+X/QwQm5F1/fPagraamKMAHVfuuCbdcnNg1A4CYVWQ==",
      "dependencies": {
        "@vue/devtools-shared": "^7.7.2",
        "birpc": "^0.2.19",
        "hookable": "^5.5.3",
        "mitt": "^3.0.1",
        "perfect-debounce": "^1.0.0",
        "speakingurl": "^14.0.1",
        "superjson": "^2.2.1"
      }
    },
    "node_modules/@vue/devtools-shared": {
      "version": "7.7.2",
      "resolved": "https://registry.npmmirror.com/@vue/devtools-shared/-/devtools-shared-7.7.2.tgz",
      "integrity": "sha512-uBFxnp8gwW2vD6FrJB8JZLUzVb6PNRG0B0jBnHsOH8uKyva2qINY8PTF5Te4QlTbMDqU5K6qtJDr6cNsKWhbOA==",
      "dependencies": {
        "rfdc": "^1.4.1"
      }
    },
    "node_modules/@vue/reactivity": {
      "version": "3.5.13",
      "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.13.tgz",
@@ -951,6 +978,52 @@
      "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz",
      "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg=="
    },
    "node_modules/asynckit": {
      "version": "0.4.0",
      "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz",
      "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
    },
    "node_modules/axios": {
      "version": "1.8.2",
      "resolved": "https://registry.npmmirror.com/axios/-/axios-1.8.2.tgz",
      "integrity": "sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg==",
      "dependencies": {
        "follow-redirects": "^1.15.6",
        "form-data": "^4.0.0",
        "proxy-from-env": "^1.1.0"
      }
    },
    "node_modules/birpc": {
      "version": "0.2.19",
      "resolved": "https://registry.npmmirror.com/birpc/-/birpc-0.2.19.tgz",
      "integrity": "sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==",
      "funding": {
        "url": "https://github.com/sponsors/antfu"
      }
    },
    "node_modules/call-bind-apply-helpers": {
      "version": "1.0.2",
      "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
      "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
      "dependencies": {
        "es-errors": "^1.3.0",
        "function-bind": "^1.1.2"
      },
      "engines": {
        "node": ">= 0.4"
      }
    },
    "node_modules/combined-stream": {
      "version": "1.0.8",
      "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz",
      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
      "dependencies": {
        "delayed-stream": "~1.0.0"
      },
      "engines": {
        "node": ">= 0.8"
      }
    },
    "node_modules/copy-anything": {
      "version": "2.0.6",
      "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-2.0.6.tgz",
@@ -972,6 +1045,27 @@
      "version": "1.11.13",
      "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz",
      "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="
    },
    "node_modules/delayed-stream": {
      "version": "1.0.0",
      "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz",
      "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
      "engines": {
        "node": ">=0.4.0"
      }
    },
    "node_modules/dunder-proto": {
      "version": "1.0.1",
      "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz",
      "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
      "dependencies": {
        "call-bind-apply-helpers": "^1.0.1",
        "es-errors": "^1.3.0",
        "gopd": "^1.2.0"
      },
      "engines": {
        "node": ">= 0.4"
      }
    },
    "node_modules/element-plus": {
      "version": "2.9.5",
@@ -1022,6 +1116,47 @@
        "errno": "cli.js"
      }
    },
    "node_modules/es-define-property": {
      "version": "1.0.1",
      "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz",
      "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
      "engines": {
        "node": ">= 0.4"
      }
    },
    "node_modules/es-errors": {
      "version": "1.3.0",
      "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz",
      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
      "engines": {
        "node": ">= 0.4"
      }
    },
    "node_modules/es-object-atoms": {
      "version": "1.1.1",
      "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
      "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
      "dependencies": {
        "es-errors": "^1.3.0"
      },
      "engines": {
        "node": ">= 0.4"
      }
    },
    "node_modules/es-set-tostringtag": {
      "version": "2.1.0",
      "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
      "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
      "dependencies": {
        "es-errors": "^1.3.0",
        "get-intrinsic": "^1.2.6",
        "has-tostringtag": "^1.0.2",
        "hasown": "^2.0.2"
      },
      "engines": {
        "node": ">= 0.4"
      }
    },
    "node_modules/esbuild": {
      "version": "0.21.5",
      "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.21.5.tgz",
@@ -1070,6 +1205,39 @@
      "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
    },
    "node_modules/follow-redirects": {
      "version": "1.15.9",
      "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.9.tgz",
      "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
      "funding": [
        {
          "type": "individual",
          "url": "https://github.com/sponsors/RubenVerborgh"
        }
      ],
      "engines": {
        "node": ">=4.0"
      },
      "peerDependenciesMeta": {
        "debug": {
          "optional": true
        }
      }
    },
    "node_modules/form-data": {
      "version": "4.0.2",
      "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.2.tgz",
      "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==",
      "dependencies": {
        "asynckit": "^0.4.0",
        "combined-stream": "^1.0.8",
        "es-set-tostringtag": "^2.1.0",
        "mime-types": "^2.1.12"
      },
      "engines": {
        "node": ">= 6"
      }
    },
    "node_modules/fsevents": {
      "version": "2.3.3",
      "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz",
@@ -1084,12 +1252,107 @@
        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
      }
    },
    "node_modules/function-bind": {
      "version": "1.1.2",
      "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz",
      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
      "funding": {
        "url": "https://github.com/sponsors/ljharb"
      }
    },
    "node_modules/get-intrinsic": {
      "version": "1.3.0",
      "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
      "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
      "dependencies": {
        "call-bind-apply-helpers": "^1.0.2",
        "es-define-property": "^1.0.1",
        "es-errors": "^1.3.0",
        "es-object-atoms": "^1.1.1",
        "function-bind": "^1.1.2",
        "get-proto": "^1.0.1",
        "gopd": "^1.2.0",
        "has-symbols": "^1.1.0",
        "hasown": "^2.0.2",
        "math-intrinsics": "^1.1.0"
      },
      "engines": {
        "node": ">= 0.4"
      },
      "funding": {
        "url": "https://github.com/sponsors/ljharb"
      }
    },
    "node_modules/get-proto": {
      "version": "1.0.1",
      "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz",
      "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
      "dependencies": {
        "dunder-proto": "^1.0.1",
        "es-object-atoms": "^1.0.0"
      },
      "engines": {
        "node": ">= 0.4"
      }
    },
    "node_modules/gopd": {
      "version": "1.2.0",
      "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz",
      "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
      "engines": {
        "node": ">= 0.4"
      },
      "funding": {
        "url": "https://github.com/sponsors/ljharb"
      }
    },
    "node_modules/graceful-fs": {
      "version": "4.2.11",
      "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz",
      "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
      "dev": true,
      "optional": true
    },
    "node_modules/has-symbols": {
      "version": "1.1.0",
      "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz",
      "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
      "engines": {
        "node": ">= 0.4"
      },
      "funding": {
        "url": "https://github.com/sponsors/ljharb"
      }
    },
    "node_modules/has-tostringtag": {
      "version": "1.0.2",
      "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
      "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
      "dependencies": {
        "has-symbols": "^1.0.3"
      },
      "engines": {
        "node": ">= 0.4"
      },
      "funding": {
        "url": "https://github.com/sponsors/ljharb"
      }
    },
    "node_modules/hasown": {
      "version": "2.0.2",
      "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz",
      "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
      "dependencies": {
        "function-bind": "^1.1.2"
      },
      "engines": {
        "node": ">= 0.4"
      }
    },
    "node_modules/hookable": {
      "version": "5.5.3",
      "resolved": "https://registry.npmmirror.com/hookable/-/hookable-5.5.3.tgz",
      "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ=="
    },
    "node_modules/iconv-lite": {
      "version": "0.6.3",
@@ -1217,6 +1480,14 @@
        "node": ">=6"
      }
    },
    "node_modules/math-intrinsics": {
      "version": "1.1.0",
      "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
      "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
      "engines": {
        "node": ">= 0.4"
      }
    },
    "node_modules/memoize-one": {
      "version": "6.0.0",
      "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz",
@@ -1233,6 +1504,38 @@
      },
      "engines": {
        "node": ">=4"
      }
    },
    "node_modules/mime-db": {
      "version": "1.52.0",
      "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
      "engines": {
        "node": ">= 0.6"
      }
    },
    "node_modules/mime-types": {
      "version": "2.1.35",
      "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
      "dependencies": {
        "mime-db": "1.52.0"
      },
      "engines": {
        "node": ">= 0.6"
      }
    },
    "node_modules/mitt": {
      "version": "3.0.1",
      "resolved": "https://registry.npmmirror.com/mitt/-/mitt-3.0.1.tgz",
      "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="
    },
    "node_modules/moment": {
      "version": "2.30.1",
      "resolved": "https://registry.npmmirror.com/moment/-/moment-2.30.1.tgz",
      "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
      "engines": {
        "node": "*"
      }
    },
    "node_modules/nanoid": {
@@ -1283,6 +1586,11 @@
        "node": ">= 0.10"
      }
    },
    "node_modules/perfect-debounce": {
      "version": "1.0.0",
      "resolved": "https://registry.npmmirror.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
      "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="
    },
    "node_modules/picocolors": {
      "version": "1.1.1",
      "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",
@@ -1296,6 +1604,34 @@
      "optional": true,
      "engines": {
        "node": ">=6"
      }
    },
    "node_modules/pinia": {
      "version": "3.0.1",
      "resolved": "https://registry.npmmirror.com/pinia/-/pinia-3.0.1.tgz",
      "integrity": "sha512-WXglsDzztOTH6IfcJ99ltYZin2mY8XZCXujkYWVIJlBjqsP6ST7zw+Aarh63E1cDVYeyUcPCxPHzJpEOmzB6Wg==",
      "dependencies": {
        "@vue/devtools-api": "^7.7.2"
      },
      "funding": {
        "url": "https://github.com/sponsors/posva"
      },
      "peerDependencies": {
        "typescript": ">=4.4.4",
        "vue": "^2.7.0 || ^3.5.11"
      },
      "peerDependenciesMeta": {
        "typescript": {
          "optional": true
        }
      }
    },
    "node_modules/pinia/node_modules/@vue/devtools-api": {
      "version": "7.7.2",
      "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-7.7.2.tgz",
      "integrity": "sha512-1syn558KhyN+chO5SjlZIwJ8bV/bQ1nOVTG66t2RbG66ZGekyiYNmRO7X9BJCXQqPsFHlnksqvPhce2qpzxFnA==",
      "dependencies": {
        "@vue/devtools-kit": "^7.7.2"
      }
    },
    "node_modules/postcss": {
@@ -1325,12 +1661,22 @@
        "node": "^10 || ^12 || >=14"
      }
    },
    "node_modules/proxy-from-env": {
      "version": "1.1.0",
      "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
      "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
    },
    "node_modules/prr": {
      "version": "1.0.1",
      "resolved": "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz",
      "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==",
      "dev": true,
      "optional": true
    },
    "node_modules/rfdc": {
      "version": "1.4.1",
      "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz",
      "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="
    },
    "node_modules/rollup": {
      "version": "4.34.8",
@@ -1412,6 +1758,55 @@
        "node": ">=0.10.0"
      }
    },
    "node_modules/spark-md5": {
      "version": "3.0.2",
      "resolved": "https://registry.npmmirror.com/spark-md5/-/spark-md5-3.0.2.tgz",
      "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw=="
    },
    "node_modules/speakingurl": {
      "version": "14.0.1",
      "resolved": "https://registry.npmmirror.com/speakingurl/-/speakingurl-14.0.1.tgz",
      "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==",
      "engines": {
        "node": ">=0.10.0"
      }
    },
    "node_modules/superjson": {
      "version": "2.2.2",
      "resolved": "https://registry.npmmirror.com/superjson/-/superjson-2.2.2.tgz",
      "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==",
      "dependencies": {
        "copy-anything": "^3.0.2"
      },
      "engines": {
        "node": ">=16"
      }
    },
    "node_modules/superjson/node_modules/copy-anything": {
      "version": "3.0.5",
      "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-3.0.5.tgz",
      "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==",
      "dependencies": {
        "is-what": "^4.1.8"
      },
      "engines": {
        "node": ">=12.13"
      },
      "funding": {
        "url": "https://github.com/sponsors/mesqueeb"
      }
    },
    "node_modules/superjson/node_modules/is-what": {
      "version": "4.1.16",
      "resolved": "https://registry.npmmirror.com/is-what/-/is-what-4.1.16.tgz",
      "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==",
      "engines": {
        "node": ">=12.13"
      },
      "funding": {
        "url": "https://github.com/sponsors/mesqueeb"
      }
    },
    "node_modules/tslib": {
      "version": "2.8.1",
      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz",
@@ -1419,9 +1814,9 @@
      "dev": true
    },
    "node_modules/vite": {
      "version": "5.4.14",
      "resolved": "https://registry.npmmirror.com/vite/-/vite-5.4.14.tgz",
      "integrity": "sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==",
      "version": "5.4.11",
      "resolved": "https://registry.npmmirror.com/vite/-/vite-5.4.11.tgz",
      "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==",
      "dev": true,
      "dependencies": {
        "esbuild": "^0.21.3",
@@ -1959,6 +2354,28 @@
      "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
      "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g=="
    },
    "@vue/devtools-kit": {
      "version": "7.7.2",
      "resolved": "https://registry.npmmirror.com/@vue/devtools-kit/-/devtools-kit-7.7.2.tgz",
      "integrity": "sha512-CY0I1JH3Z8PECbn6k3TqM1Bk9ASWxeMtTCvZr7vb+CHi+X/QwQm5F1/fPagraamKMAHVfuuCbdcnNg1A4CYVWQ==",
      "requires": {
        "@vue/devtools-shared": "^7.7.2",
        "birpc": "^0.2.19",
        "hookable": "^5.5.3",
        "mitt": "^3.0.1",
        "perfect-debounce": "^1.0.0",
        "speakingurl": "^14.0.1",
        "superjson": "^2.2.1"
      }
    },
    "@vue/devtools-shared": {
      "version": "7.7.2",
      "resolved": "https://registry.npmmirror.com/@vue/devtools-shared/-/devtools-shared-7.7.2.tgz",
      "integrity": "sha512-uBFxnp8gwW2vD6FrJB8JZLUzVb6PNRG0B0jBnHsOH8uKyva2qINY8PTF5Te4QlTbMDqU5K6qtJDr6cNsKWhbOA==",
      "requires": {
        "rfdc": "^1.4.1"
      }
    },
    "@vue/reactivity": {
      "version": "3.5.13",
      "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.13.tgz",
@@ -2046,6 +2463,43 @@
      "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz",
      "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg=="
    },
    "asynckit": {
      "version": "0.4.0",
      "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz",
      "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
    },
    "axios": {
      "version": "1.8.2",
      "resolved": "https://registry.npmmirror.com/axios/-/axios-1.8.2.tgz",
      "integrity": "sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg==",
      "requires": {
        "follow-redirects": "^1.15.6",
        "form-data": "^4.0.0",
        "proxy-from-env": "^1.1.0"
      }
    },
    "birpc": {
      "version": "0.2.19",
      "resolved": "https://registry.npmmirror.com/birpc/-/birpc-0.2.19.tgz",
      "integrity": "sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ=="
    },
    "call-bind-apply-helpers": {
      "version": "1.0.2",
      "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
      "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
      "requires": {
        "es-errors": "^1.3.0",
        "function-bind": "^1.1.2"
      }
    },
    "combined-stream": {
      "version": "1.0.8",
      "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz",
      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
      "requires": {
        "delayed-stream": "~1.0.0"
      }
    },
    "copy-anything": {
      "version": "2.0.6",
      "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-2.0.6.tgz",
@@ -2064,6 +2518,21 @@
      "version": "1.11.13",
      "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz",
      "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="
    },
    "delayed-stream": {
      "version": "1.0.0",
      "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz",
      "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
    },
    "dunder-proto": {
      "version": "1.0.1",
      "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz",
      "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
      "requires": {
        "call-bind-apply-helpers": "^1.0.1",
        "es-errors": "^1.3.0",
        "gopd": "^1.2.0"
      }
    },
    "element-plus": {
      "version": "2.9.5",
@@ -2100,6 +2569,35 @@
      "optional": true,
      "requires": {
        "prr": "~1.0.1"
      }
    },
    "es-define-property": {
      "version": "1.0.1",
      "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz",
      "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="
    },
    "es-errors": {
      "version": "1.3.0",
      "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz",
      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="
    },
    "es-object-atoms": {
      "version": "1.1.1",
      "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
      "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
      "requires": {
        "es-errors": "^1.3.0"
      }
    },
    "es-set-tostringtag": {
      "version": "2.1.0",
      "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
      "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
      "requires": {
        "es-errors": "^1.3.0",
        "get-intrinsic": "^1.2.6",
        "has-tostringtag": "^1.0.2",
        "hasown": "^2.0.2"
      }
    },
    "esbuild": {
@@ -2143,6 +2641,22 @@
      "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
    },
    "follow-redirects": {
      "version": "1.15.9",
      "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.9.tgz",
      "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ=="
    },
    "form-data": {
      "version": "4.0.2",
      "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.2.tgz",
      "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==",
      "requires": {
        "asynckit": "^0.4.0",
        "combined-stream": "^1.0.8",
        "es-set-tostringtag": "^2.1.0",
        "mime-types": "^2.1.12"
      }
    },
    "fsevents": {
      "version": "2.3.3",
      "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz",
@@ -2150,12 +2664,74 @@
      "dev": true,
      "optional": true
    },
    "function-bind": {
      "version": "1.1.2",
      "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz",
      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
    },
    "get-intrinsic": {
      "version": "1.3.0",
      "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
      "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
      "requires": {
        "call-bind-apply-helpers": "^1.0.2",
        "es-define-property": "^1.0.1",
        "es-errors": "^1.3.0",
        "es-object-atoms": "^1.1.1",
        "function-bind": "^1.1.2",
        "get-proto": "^1.0.1",
        "gopd": "^1.2.0",
        "has-symbols": "^1.1.0",
        "hasown": "^2.0.2",
        "math-intrinsics": "^1.1.0"
      }
    },
    "get-proto": {
      "version": "1.0.1",
      "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz",
      "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
      "requires": {
        "dunder-proto": "^1.0.1",
        "es-object-atoms": "^1.0.0"
      }
    },
    "gopd": {
      "version": "1.2.0",
      "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz",
      "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="
    },
    "graceful-fs": {
      "version": "4.2.11",
      "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz",
      "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
      "dev": true,
      "optional": true
    },
    "has-symbols": {
      "version": "1.1.0",
      "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz",
      "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="
    },
    "has-tostringtag": {
      "version": "1.0.2",
      "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
      "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
      "requires": {
        "has-symbols": "^1.0.3"
      }
    },
    "hasown": {
      "version": "2.0.2",
      "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz",
      "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
      "requires": {
        "function-bind": "^1.1.2"
      }
    },
    "hookable": {
      "version": "5.5.3",
      "resolved": "https://registry.npmmirror.com/hookable/-/hookable-5.5.3.tgz",
      "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ=="
    },
    "iconv-lite": {
      "version": "0.6.3",
@@ -2240,6 +2816,11 @@
        "semver": "^5.6.0"
      }
    },
    "math-intrinsics": {
      "version": "1.1.0",
      "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
      "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="
    },
    "memoize-one": {
      "version": "6.0.0",
      "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz",
@@ -2251,6 +2832,29 @@
      "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
      "dev": true,
      "optional": true
    },
    "mime-db": {
      "version": "1.52.0",
      "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz",
      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
    },
    "mime-types": {
      "version": "2.1.35",
      "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz",
      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
      "requires": {
        "mime-db": "1.52.0"
      }
    },
    "mitt": {
      "version": "3.0.1",
      "resolved": "https://registry.npmmirror.com/mitt/-/mitt-3.0.1.tgz",
      "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="
    },
    "moment": {
      "version": "2.30.1",
      "resolved": "https://registry.npmmirror.com/moment/-/moment-2.30.1.tgz",
      "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how=="
    },
    "nanoid": {
      "version": "3.3.8",
@@ -2279,6 +2883,11 @@
      "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==",
      "dev": true
    },
    "perfect-debounce": {
      "version": "1.0.0",
      "resolved": "https://registry.npmmirror.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
      "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="
    },
    "picocolors": {
      "version": "1.1.1",
      "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",
@@ -2291,6 +2900,24 @@
      "dev": true,
      "optional": true
    },
    "pinia": {
      "version": "3.0.1",
      "resolved": "https://registry.npmmirror.com/pinia/-/pinia-3.0.1.tgz",
      "integrity": "sha512-WXglsDzztOTH6IfcJ99ltYZin2mY8XZCXujkYWVIJlBjqsP6ST7zw+Aarh63E1cDVYeyUcPCxPHzJpEOmzB6Wg==",
      "requires": {
        "@vue/devtools-api": "^7.7.2"
      },
      "dependencies": {
        "@vue/devtools-api": {
          "version": "7.7.2",
          "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-7.7.2.tgz",
          "integrity": "sha512-1syn558KhyN+chO5SjlZIwJ8bV/bQ1nOVTG66t2RbG66ZGekyiYNmRO7X9BJCXQqPsFHlnksqvPhce2qpzxFnA==",
          "requires": {
            "@vue/devtools-kit": "^7.7.2"
          }
        }
      }
    },
    "postcss": {
      "version": "8.5.3",
      "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.3.tgz",
@@ -2301,12 +2928,22 @@
        "source-map-js": "^1.2.1"
      }
    },
    "proxy-from-env": {
      "version": "1.1.0",
      "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
      "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
    },
    "prr": {
      "version": "1.0.1",
      "resolved": "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz",
      "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==",
      "dev": true,
      "optional": true
    },
    "rfdc": {
      "version": "1.4.1",
      "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz",
      "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="
    },
    "rollup": {
      "version": "4.34.8",
@@ -2370,6 +3007,39 @@
      "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",
      "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="
    },
    "spark-md5": {
      "version": "3.0.2",
      "resolved": "https://registry.npmmirror.com/spark-md5/-/spark-md5-3.0.2.tgz",
      "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw=="
    },
    "speakingurl": {
      "version": "14.0.1",
      "resolved": "https://registry.npmmirror.com/speakingurl/-/speakingurl-14.0.1.tgz",
      "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ=="
    },
    "superjson": {
      "version": "2.2.2",
      "resolved": "https://registry.npmmirror.com/superjson/-/superjson-2.2.2.tgz",
      "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==",
      "requires": {
        "copy-anything": "^3.0.2"
      },
      "dependencies": {
        "copy-anything": {
          "version": "3.0.5",
          "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-3.0.5.tgz",
          "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==",
          "requires": {
            "is-what": "^4.1.8"
          }
        },
        "is-what": {
          "version": "4.1.16",
          "resolved": "https://registry.npmmirror.com/is-what/-/is-what-4.1.16.tgz",
          "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A=="
        }
      }
    },
    "tslib": {
      "version": "2.8.1",
      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz",
@@ -2377,9 +3047,9 @@
      "dev": true
    },
    "vite": {
      "version": "5.4.14",
      "resolved": "https://registry.npmmirror.com/vite/-/vite-5.4.14.tgz",
      "integrity": "sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==",
      "version": "5.4.11",
      "resolved": "https://registry.npmmirror.com/vite/-/vite-5.4.11.tgz",
      "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==",
      "dev": true,
      "requires": {
        "esbuild": "^0.21.3",
package.json
@@ -11,16 +11,18 @@
  },
  "dependencies": {
    "@element-plus/icons-vue": "^2.3.1",
    "element-plus": "^2.5.6",
    "vue": "^3.4.21",
    "vue-router": "^4.3.0",
    "axios": "^1.6.2",
    "spark-md5": "^3.0.2"
    "element-plus": "^2.5.6",
    "moment": "^2.30.1",
    "pinia": "^3.0.1",
    "spark-md5": "^3.0.2",
    "vue": "^3.4.21",
    "vue-router": "^4.3.0"
  },
  "devDependencies": {
    "@vitejs/plugin-vue": "^5.0.4",
    "less": "^4.2.2",
    "less-loader": "^12.2.0",
    "vite": "^5.1.6"
    "vite": "5.4.11"
  }
}
src/App.vue
@@ -13,7 +13,7 @@
</script>
<template>
  <el-config-provider :locale="zhCn">
  <!-- <el-config-provider :locale="zhCn">
    <el-container class="common-layout">
      <el-header height="60px">
        <Header @selectMenu="handMenu" />
@@ -22,10 +22,10 @@
        <el-aside width="240px">
          <TreeMenu :menuItem="menuItem" />
        </el-aside>
        <el-main>
        <el-main> -->
          <RouterView />
        </el-main>
  <!-- </el-main>
      </el-container>
    </el-container>
  </el-config-provider>
  </el-config-provider> -->
</template>
src/assets/images/about/Phone-.png
src/assets/images/about/adress.png
src/assets/images/about/chuanzhen.png
src/assets/images/about/custom-phone.png
src/assets/images/about/dianhua.png
src/assets/images/about/email.png
src/assets/images/about/guanyu_tu.png
src/assets/images/about/guanyu_tu@2x.png
src/assets/images/about/map-marker.png
src/assets/images/about/phone.png
src/assets/images/about/rongyu_bg.png
src/assets/images/about/rongyu_bg@2x.png
src/assets/images/about/webpeizhi.png
src/assets/images/about/zuzhijiagou_bg.png
src/assets/images/about/zuzhijiagou_bg@2x.png
src/assets/images/book-cover.png
src/assets/images/bookStore/Collect.png
src/assets/images/bookStore/audio.png
src/assets/images/bookStore/biaoqian.png
src/assets/images/bookStore/cd.png
src/assets/images/bookStore/close.png
src/assets/images/bookStore/dangdang.png
src/assets/images/bookStore/done.png
src/assets/images/bookStore/goumai.png
src/assets/images/bookStore/jd.png
src/assets/images/bookStore/last.png
src/assets/images/bookStore/next.png
src/assets/images/bookStore/note.png
src/assets/images/bookStore/other.png
src/assets/images/bookStore/paihangbang.png
src/assets/images/bookStore/play.png
src/assets/images/bookStore/play.svg
New file
@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="25.84" height="25.84" viewBox="0 0 25.84 25.84">
  <g id="zanting" transform="translate(-88.218 -82.074)">
    <path id="路径_420" data-name="路径 420" d="M101.138,107.914a12.92,12.92,0,1,1,12.92-12.92A12.934,12.934,0,0,1,101.138,107.914Zm0-23.995a11.074,11.074,0,1,0,11.074,11.074A11.087,11.087,0,0,0,101.138,83.92Z" fill="#d7000f"/>
    <path id="路径_421" data-name="路径 421" d="M385.23,340.113a.924.924,0,0,1-.923-.923v-9.153a.923.923,0,0,1,1.846,0v9.153A.924.924,0,0,1,385.23,340.113Zm6.192,0a.924.924,0,0,1-.923-.923v-9.153a.923.923,0,0,1,1.846,0v9.153A.924.924,0,0,1,391.422,340.113Z" transform="translate(-287.194 -239.619)" fill="#d7000f"/>
  </g>
</svg>
src/assets/images/bookStore/search.png
src/assets/images/bookStore/shujixiangq_di.png
src/assets/images/bookStore/sp-mr.png
src/assets/images/bookStore/suspend.png
src/assets/images/bookStore/suspend.svg
New file
@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" width="25.84" height="25.84" viewBox="0 0 25.84 25.84">
  <g id="zanting" transform="translate(-88.558 -82.074)">
    <path id="路径_420" data-name="路径 420" d="M101.138,107.914a12.92,12.92,0,1,1,12.92-12.92A12.934,12.934,0,0,1,101.138,107.914Zm0-23.995a11.074,11.074,0,1,0,11.074,11.074A11.087,11.087,0,0,0,101.138,83.92Z" transform="translate(0.34)" fill="#d7000f"/>
    <path id="路径_422" data-name="路径 422" d="M268.53,206.3l-6.406-5.338a1.3,1.3,0,0,0-2.127,1v10.676a1.3,1.3,0,0,0,2.127,1l6.406-5.338a1.3,1.3,0,0,0,0-1.992Z" transform="translate(-162.438 -112.59)" fill="#d7000f"/>
  </g>
</svg>
src/assets/images/bookStore/tmall.png
src/assets/images/bookStore/top-1.png
src/assets/images/bookStore/top-2.png
src/assets/images/bookStore/top-3.png
src/assets/images/bookStore/vedio.png
src/assets/images/bookStore/video-bg.png
src/assets/images/bookStore/weidian.png
src/assets/images/bookStore/word.png
src/assets/images/bookStore/xuanzhong.png
src/assets/images/bookStore/yishoucang.png
src/assets/images/default-book-img.png
src/assets/images/default-bookFair.png
src/assets/images/defaultImg/book.png
src/assets/images/defaultImg/journal.png
src/assets/images/defaultImg/news.png
src/assets/images/header/Group.png
src/assets/images/header/Slice.png
src/assets/images/header/bottom_1.png
src/assets/images/header/check.gif
src/assets/images/header/erCode.jpg
src/assets/images/header/login_bg.png
src/assets/images/header/logo.png
src/assets/images/header/mobile-phone-dianji.png
src/assets/images/header/mobile-phone-moren.png
src/assets/images/header/password-icon.png
src/assets/images/header/wechat-dianji.png
src/assets/images/header/wechat-moren.png
src/assets/images/home/icon_tushu.png
src/assets/images/home/icon_xinwen.png
src/assets/images/home/icon_ziyuan.png
src/assets/images/home/tuijiantushu_bg.png
src/assets/images/home/tuijianziyuan_bg.png
src/assets/images/math/Group 29.png
src/assets/images/math/Group 29@2x.png
src/assets/images/math/Top_bg.png
src/assets/images/math/Top_bg@2x.png
src/assets/images/math/am1.png
src/assets/images/math/arrow_.png
src/assets/images/math/arrow_@2x.png
src/assets/images/math/banner - ¸±±¾.png
src/assets/images/math/banner.png
src/assets/images/math/banner@2x.png
src/assets/images/math/cd.png
src/assets/images/math/cd@2x.png
src/assets/images/math/collect1e.png
src/assets/images/math/collect1f.png
src/assets/images/math/default-audio.png
src/assets/images/math/default-pub.png
src/assets/images/math/fengexian.png
src/assets/images/math/fengexian@2x.png
src/assets/images/math/icon_pause.png
src/assets/images/math/icon_play.png
src/assets/images/math/md-index.jpeg
src/assets/images/math/md1.png
src/assets/images/math/moxing.png
src/assets/images/math/moxing@2x.png
src/assets/images/math/moxing_Top_bg.png
src/assets/images/math/moxing_Top_bg@2x.png
src/assets/images/math/shipin.png
src/assets/images/math/shipin@2x.png
src/assets/images/math/shipin_Top_bg.png
src/assets/images/math/shipin_Top_bg@2x.png
src/assets/images/math/shizhong.png
src/assets/images/math/sp-index.jpg
src/assets/images/math/tp-index.jpg
src/assets/images/math/tp1.png
src/assets/images/math/tupian.png
src/assets/images/math/tupian@2x.png
src/assets/images/math/tupian_Top_bg.png
src/assets/images/math/tupian_Top_bg@2x.png
src/assets/images/math/yinpin.png
src/assets/images/math/yinpin@2x.png
src/assets/images/math/yp-index.jpeg
src/assets/images/personalCenter/Wechat.png
src/assets/images/personalCenter/icon_cart.png
src/assets/images/personalCenter/icon_cart_click.png
src/assets/images/personalCenter/icon_dingdan.png
src/assets/images/personalCenter/icon_dingdan_click.png
src/assets/images/personalCenter/icon_geren.png
src/assets/images/personalCenter/icon_geren_click.png
src/assets/images/personalCenter/icon_kecheng.png
src/assets/images/personalCenter/icon_kecheng_click.png
src/assets/images/personalCenter/icon_news.png
src/assets/images/personalCenter/icon_news_click.png
src/assets/images/personalCenter/icon_shoucang.png
src/assets/images/personalCenter/icon_shoucang_click.png
src/assets/images/personalCenter/icon_tushu.png
src/assets/images/personalCenter/icon_tushu_click.png
src/assets/images/personalCenter/icon_ziyuan.png
src/assets/images/personalCenter/icon_ziyuan_click.png
src/assets/images/personalCenter/jihuo.svg
New file
@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" width="18.191" height="20.989" viewBox="0 0 18.191 20.989">
  <g id="jihuo" transform="translate(-115 -64.101)">
    <path id="路径_642" data-name="路径 642" d="M133.187,67.446a.387.387,0,0,0-.389-.377l-.511-.008a13.275,13.275,0,0,1-4.124-.859,18.49,18.49,0,0,1-3.527-1.812l-.309-.216a.41.41,0,0,0-.469,0l-.306.214a18.453,18.453,0,0,1-3.527,1.812,13.268,13.268,0,0,1-4.121.859l-.514.008a.387.387,0,0,0-.389.377v8.492c0,4.448,5.915,9.152,9.094,9.152s9.1-4.7,9.1-9.152Zm-4.3,13.708a8.557,8.557,0,0,1-4.792,2.536c-2.542,0-7.693-4.264-7.693-7.753v-7.5a14.819,14.819,0,0,0,4.137-.93,21.059,21.059,0,0,0,3.557-1.795,20.975,20.975,0,0,0,3.557,1.795,14.763,14.763,0,0,0,4.135.93l0,7.5C131.79,77.524,130.7,79.475,128.886,81.154Z"/>
    <path id="路径_643" data-name="路径 643" d="M405.157,512.349h0a2.821,2.821,0,0,0-2.833,2.809v.008l.014,0a2.821,2.821,0,1,0,2.823-2.819Zm-.007,4.241a1.421,1.421,0,0,1-1.42-1.422h-.007v0a1.42,1.42,0,0,1,1.426-1.415h0a1.421,1.421,0,1,1,0,2.841Z" transform="translate(-280.585 -437.74)"/>
    <path id="路径_644" data-name="路径 644" d="M493.02,279.141v-5.229a.7.7,0,0,1,1.4,0v5.229a.7.7,0,0,1-1.4,0Z" transform="translate(-369.159 -204.207)"/>
    <path id="路径_645" data-name="路径 645" d="M495.848,274.614h-2.126a.7.7,0,1,1,0-1.4h2.126a.7.7,0,1,1,0,1.4Zm0,2.482h-2.126a.7.7,0,1,1,0-1.4h2.126a.7.7,0,1,1,0,1.4Z" transform="translate(-369.159 -204.207)"/>
  </g>
</svg>
src/assets/images/personalCenter/jihuo1.svg
New file
@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" width="18.191" height="20.989" viewBox="0 0 18.191 20.989" style="fill:#fff">
  <g id="jihuo" transform="translate(-115 -64.101)" >
    <path id="路径_642" data-name="路径 642" d="M133.187,67.446a.387.387,0,0,0-.389-.377l-.511-.008a13.275,13.275,0,0,1-4.124-.859,18.49,18.49,0,0,1-3.527-1.812l-.309-.216a.41.41,0,0,0-.469,0l-.306.214a18.453,18.453,0,0,1-3.527,1.812,13.268,13.268,0,0,1-4.121.859l-.514.008a.387.387,0,0,0-.389.377v8.492c0,4.448,5.915,9.152,9.094,9.152s9.1-4.7,9.1-9.152Zm-4.3,13.708a8.557,8.557,0,0,1-4.792,2.536c-2.542,0-7.693-4.264-7.693-7.753v-7.5a14.819,14.819,0,0,0,4.137-.93,21.059,21.059,0,0,0,3.557-1.795,20.975,20.975,0,0,0,3.557,1.795,14.763,14.763,0,0,0,4.135.93l0,7.5C131.79,77.524,130.7,79.475,128.886,81.154Z"/>
    <path id="路径_643" data-name="路径 643" d="M405.157,512.349h0a2.821,2.821,0,0,0-2.833,2.809v.008l.014,0a2.821,2.821,0,1,0,2.823-2.819Zm-.007,4.241a1.421,1.421,0,0,1-1.42-1.422h-.007v0a1.42,1.42,0,0,1,1.426-1.415h0a1.421,1.421,0,1,1,0,2.841Z" transform="translate(-280.585 -437.74)"/>
    <path id="路径_644" data-name="路径 644" d="M493.02,279.141v-5.229a.7.7,0,0,1,1.4,0v5.229a.7.7,0,0,1-1.4,0Z" transform="translate(-369.159 -204.207)"/>
    <path id="路径_645" data-name="路径 645" d="M495.848,274.614h-2.126a.7.7,0,1,1,0-1.4h2.126a.7.7,0,1,1,0,1.4Zm0,2.482h-2.126a.7.7,0,1,1,0-1.4h2.126a.7.7,0,1,1,0,1.4Z" transform="translate(-369.159 -204.207)"/>
  </g>
</svg>
src/assets/images/personalCenter/moxingku.png
src/assets/images/personalCenter/moxingku1.png
src/assets/images/personalCenter/notification.png
src/assets/images/personalCenter/shipinku.png
src/assets/images/personalCenter/shipinku1.png
src/assets/images/personalCenter/tupianku.png
src/assets/images/personalCenter/tupianku1.png
src/assets/images/personalCenter/xuanzhong.png
src/assets/images/personalCenter/yinpinku.png
src/assets/images/personalCenter/yinpinku1.png
src/assets/images/reader/FullScreen2.png
src/assets/images/reader/Listen.png
src/assets/images/reader/Listen2.png
src/assets/images/reader/action@2x.png
src/assets/images/reader/biji-dianji.png
src/assets/images/reader/biji-dianji2.png
src/assets/images/reader/biji.png
src/assets/images/reader/biji2.png
src/assets/images/reader/bookmark.png
src/assets/images/reader/danlan-dianji.png
src/assets/images/reader/danlan.png
src/assets/images/reader/fenxiang.png
src/assets/images/reader/fullScreen.png
src/assets/images/reader/fuzhi.png
src/assets/images/reader/gaoliang-dianji.png
src/assets/images/reader/gaoliang-dianji2.png
src/assets/images/reader/gaoliang.png
src/assets/images/reader/gaoliang2.png
src/assets/images/reader/halfScreen.png
src/assets/images/reader/halfScreen2.png
src/assets/images/reader/hangju1.png
src/assets/images/reader/hangju2.png
src/assets/images/reader/hangju3.png
src/assets/images/reader/hangju4.png
src/assets/images/reader/hangjuActive1.png
src/assets/images/reader/hangjuActive2.png
src/assets/images/reader/hangjuActive3.png
src/assets/images/reader/hangjuActive4.png
src/assets/images/reader/huaxian-dianji.png
src/assets/images/reader/huaxian-dianji2.png
src/assets/images/reader/huaxian.png
src/assets/images/reader/huaxian2.png
src/assets/images/reader/jieshu-icon.png
src/assets/images/reader/kaishi.png
src/assets/images/reader/kuaijin.png
src/assets/images/reader/kuaijin@2x.png
src/assets/images/reader/kuaitui.png
src/assets/images/reader/kuaitui@2x.png
src/assets/images/reader/mulu-dianji.png
src/assets/images/reader/mulu-dianji2.png
src/assets/images/reader/mulu.png
src/assets/images/reader/mulu2.png
src/assets/images/reader/page-blue.png
src/assets/images/reader/page-green.png
src/assets/images/reader/page-purple.png
src/assets/images/reader/page-yellow.png
src/assets/images/reader/page.png
src/assets/images/reader/pattern.png
src/assets/images/reader/pattern2.png
src/assets/images/reader/search-dianji.png
src/assets/images/reader/search.png
src/assets/images/reader/search2.png
src/assets/images/reader/serch-dianji2.png
src/assets/images/reader/shuanglan-dianji.png
src/assets/images/reader/shuanglan.png
src/assets/images/reader/shuqian-click.png
src/assets/images/reader/shuqian-click2.png
src/assets/images/reader/shuqian.png
src/assets/images/reader/shuqian1.png
src/assets/images/reader/shuqian2.png
src/assets/images/reader/tingshu.png
src/assets/images/reader/tingshu2.png
src/assets/images/reader/tuichu.png
src/assets/images/reader/yangshi-click.png
src/assets/images/reader/yangshi-click2.png
src/assets/images/reader/zanting.png
src/assets/images/reader/zanting@2x.png
src/assets/images/reader/zihao-da.png
src/assets/images/reader/zihao-xiao.png
src/assets/images/standard/biaozhun_bg.png
src/assets/images/standard/biaozhun_bg@2x.png
src/assets/images/standard/jianjie_tu.png
src/assets/images/standard/jianjie_tu@2x.png
src/assets/js/canvas2image.js
File was deleted
src/assets/js/config.js
@@ -1,19 +1,71 @@
// export const requestCtx = "http://182.92.203.7:3001"; // è¯·æ±‚地址
// export const appId = 27;
export const requestCtx = 'https://jsek.bnuic.com' // è¯·æ±‚地址
export const appId = 3
export const requestCtx = 'http://182.92.203.7:5001' // è¯·æ±‚地址
// export const appId = 36
// export const requestCtx = "http://47.95.43.11"; // è¯·æ±‚地址
// export const requestCtx = "https://www.jlstp.cn"
export const appId = 1;
export const requestTimeOut = 300000 // è¯·æ±‚è¶…æ—¶æ—¶é—´
export const tokenKey = 'jsek-token'
export const userInfoKey = 'jesk-userInfo' // ç”¨æˆ·ä¿¡æ¯key
export const appRefCode = 'jingshieke'
export const tokenKey = 'jilin-token'
export const userInfoKey = 'jilin-userInfo' // ç”¨æˆ·ä¿¡æ¯key
export const appRefCode = 'jilinWebsite'
export const goodsStore = `defaultGoodsStore${appId}` // é»˜è®¤å•†å“åº“(书城)
export const publicStore = `defaultPublicStore${appId}` // é»˜è®¤èµ„源开放仓储
export const publicRepository = `defaultPublicRepository${appId}` // é»˜è®¤èµ„源开放库
export const digitalCourses = 'jsek_digitalCourses' //数字课程
export const digitalTextbooks = 'jsek_digitalTextbooks' //数字教材
export const seminar = 'jsek_seminar' //专题研讨
export const reg_tel =
  /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/ // ç”µè¯å·æ­£åˆ™
// refcode
const refCode = {
  // æ”¶è—èµ„源库
  FavoriteMathVideo: 'FavoriteMathVideo',
  FavoriteMathPicture: 'FavoriteMathPicture',
  FavoriteMathAudio: 'FavoriteMathAudio',
  FavoriteMathModel: 'FavoriteMathModel',
  // è½®æ’­å›¾
  bannerCode: 'jilin_banner\\jilin_digitalResource',
  // æ ‡å‡†
  criterion: 'jilin_criterion',
  // èµ„讯
  information: 'jilin_information',
  // å…³äºŽæˆ‘们
  aboutUs: 'jilin_aboutUs',
  // è£èª‰å¥–励
  honorAwards: 'jilin_honorAwards',
  // è”系我们
  contactUs: 'jilin_contactUs',
  // ä»“库库
  pictureCode: 'jilin_imgResourceLibrary',
  audioCode: 'jilin_audiosResourceLibrary',
  videoCode: 'jilin_videosResourceLibrary',
  modelCode: 'jilin_modelsResourceLibrary',
  // å•†å“åº“
  imageStore: 'jilin_imgLibrary\\jilin_imageStore',
  videoStore: 'jilin_videosLibrary\\jilin_videosStore',
  audiosStore: 'jilin_audiosLibrary\\jilin_audiosStore',
  modelStore: 'jilin_modelsLibrary\\jilin_modelsStore',
  // ä¼šå‘˜å•†å“åº“
  memberImage: 'jilin_imgLibrary\\jilin_memberImage',
  memberAudios: 'jilin_audiosLibrary\\jilin_memberAudios',
  memberVideos: 'jilin_videosLibrary\\jilin_memberVideos',
  memberModels: 'jilin_modelsLibrary\\jilin_memberModels',
  // æœ€æ–°èµ„源库
  newImageStore: 'jilin_imgLibrary\\jilin_newImageStore',
  newaudiosStore: 'jilin_audiosLibrary\\jilin_newaudiosStore',
  newVideosStore: 'jilin_videosLibrary\\jilin_newVideosStore',
  newModelsStore: 'jilin_modelsLibrary\\jilin_newModelsStore',
  // é¦–页推荐资源
  recommendImgStore:'jilin_imgLibrary\\jilin_recommendedImage',
  recommendAudioStore:'jilin_audiosLibrary\\jilin_recommendedAudio',
  recommendVideoStore:'jilin_videosLibrary\\jilin_recommendedVideo',
  recommendModelStore:'jilin_modelsLibrary\\jilin_recommendedModel',
}
const wxLogin = {
  appid: 'wx2b9d4a6308fd03d6',
  scope: 'snsapi_login',
  logInRedirectURL: encodeURIComponent(requestCtx + '/website'),
  authenRedirectURL:encodeURIComponent(requestCtx + '/website/#/userInfo')
}
const config = {
  requestCtx,
@@ -22,10 +74,9 @@
  userInfoKey,
  appRefCode,
  goodsStore,
  digitalCourses,
  digitalTextbooks,
  seminar,
  appId
  reg_tel,
  appId,
  refCode,
  wxLogin
}
export default config
src/assets/js/middleGround/WebMiddleGroundApi.js
@@ -9,6 +9,7 @@
import file from "./api/file.js";
import job from "./api/job.js";
import edu from "./api/edu.js";
import dps5 from "./api/dps5.js";
const WebMiddleGroundApi = {
  resource,
@@ -18,7 +19,8 @@
  app,
  file,
  job,
  edu
  edu,
  dps5
};
export default WebMiddleGroundApi;
src/assets/js/middleGround/api/app.js
@@ -1,82 +1,57 @@
import request from '@/plugin/axios/index.ts'
import request from "@/plugin/axios/index.ts";
const appApi = {
  // èŽ·å–ç”¨æˆ·æ¶ˆæ¯åˆ—è¡¨
  getAppMessageList(data) {
    return request({
      url: '/app/api/ApiGetAppMessageList',
      method: 'post',
      url: "/app/api/ApiGetAppMessageList",
      method: "post",
      data
    })
    });
  },
  // èŽ·å–ç”¨æˆ·æ¶ˆæ¯è¯¦æƒ…
  getMessage(data) {
    return request({
      url: '/app/api/ApiGetMessage',
      method: 'post',
      url: "/app/api/ApiGetMessage",
      method: "post",
      data
    })
    });
  },
  //获取凭证
  getTicketResult(data) {
    return request({
      url: '/app/api/ApiGetTicketResult',
      method: 'post',
      url: "/app/api/ApiGetTicketResult",
      method: "post",
      data
    })
    });
  },
  //使用凭证
  useTicket(data) {
    return request({
      url: '/app/api/ApiUseTicket',
      method: 'post',
      url:   "/app/api/ApiUseTicket",
      method: "post",
      data
    })
    });
  },
  // èŽ·å–CmsItem按照Event统计
  getEventRankList(data) {
    return request({
      url: '/app/api/ApiGetEventRankList',
      method: 'post',
      url: "/app/api/ApiGetEventRankList",
      method: "post",
      data
    })
    });
  },
  // èŽ·å–å­¦ä¹ æ—¶é•¿æŒ‰ç…§Event统计
  getStaticsSum(data) {
    return request({
      url: '/app/api/ApiGetUserStaticsSum',
      method: 'post',
      url: "/app/api/ApiGetUserStaticsSum",
      method: "post",
      data
    })
    });
  },
  // æ–°å»ºç”¨æˆ·è¡Œä¸º
  creatUserBehavior(data) {
    return request({
      url: '/app/api/NewUserBehavior',
      method: 'post',
      data
    })
  },
  // èŽ·å–ç”¨æˆ·è¡Œä¸ºè®°å½•
  getUserBehaviorList(data) {
    return request({
      url: '/app/api/GetUserBehaviorList',
      method: 'post',
      data
    })
  },
};
  //获取小程序二维码
  getWeChatAppQrCode(data) {
    return request({
      url: '/app/api/GetWeChatAppQrCode',
      method: 'post',
      data
    })
  }
}
export default appApi
export default appApi;
src/assets/js/middleGround/api/dps5.js
New file
@@ -0,0 +1,42 @@
import request from '@/plugin/axios/index.ts'
const dps5Api = {
    // é€šè¿‡ç”¨æˆ·åå¯†ç ç™»å½•
    LoginByLoginNameAndPassword(data) {
        return request({
            url: "/identity/Login/LoginByLoginNameAndPassword",
            method: "post",
            data
        });
    },
    // èŽ·å–ç”¨æˆ·ä¿¡æ¯
    GetCurrentUser(data) {
        return request({
            url: "/identity/User/GetCurrentUser",
            method: "post",
            data
        });
    },
    //用户获得App下所有数据仓库列表
    GetStoreList(data) {
        return request({
            url: "/resource/ResourceStore/GetStoreList",
            method: "post",
            data
        });
    },
    //获得资源仓库下所有资源库列表
    GetStoreRepositoryList(data) {
        return request({
            url: "/resource/ResourceRepository/GetStoreRepositoryList",
            method: "post",
            data
        });
    }
}
export default dps5Api;
src/assets/js/middleGround/api/edu.js
@@ -6,7 +6,7 @@
    return request({
      url: '/edu/api/ApiGetQuizConfigListByProduct',
      method: 'post',
      data
      data,
    })
  },
  // èŽ·å–ç»„å·ç»“æžœ
@@ -14,7 +14,7 @@
    return request({
      url: '/edu/api/ApiGetEduQuizConfigResult',
      method: 'post',
      data
      data,
    })
  },
@@ -23,16 +23,7 @@
    return request({
      url: '/edu/api/ApiApplyNewCourse',
      method: 'post',
      data
    })
  },
  //更新课程信息
  updateCourse(data) {
    return request({
      url: '/edu/api/ApiUpdateCourse',
      method: 'post',
      data
      data,
    })
  },
@@ -41,7 +32,7 @@
    return request({
      url: '/edu/api/ApiUpdateCourseApply',
      method: 'post',
      data
      data,
    })
  },
@@ -50,7 +41,7 @@
    return request({
      url: '/edu/api/ApiGetAppCourseList',
      method: 'post',
      data
      data,
    })
  },
@@ -59,7 +50,7 @@
    return request({
      url: '/edu/api/ApiGetCourseById',
      method: 'post',
      data
      data,
    })
  },
@@ -68,7 +59,7 @@
    return request({
      url: '/edu/api/ApiGetCourseClassList',
      method: 'post',
      data
      data,
    })
  },
@@ -77,7 +68,7 @@
    return request({
      url: '/edu/api/ApiNewCourseClass',
      method: 'post',
      data
      data,
    })
  },
@@ -86,7 +77,7 @@
    return request({
      url: '/edu/api/ApiDelCourseClass',
      method: 'post',
      data
      data,
    })
  },
@@ -95,25 +86,7 @@
    return request({
      url: '/edu/api/ApiUpdateCourseClass',
      method: 'post',
      data
    })
  },
  // èŽ·å–ç­çº§è¯¦æƒ…
  getCourseClass(data) {
    return request({
      url: '/edu/api/ApiGetCourseClass',
      method: 'post',
      data
    })
  },
  // èŽ·å–topic信息
  getClassTopic(data) {
    return request({
      url: '/edu/api/ApiGetClassTopic',
      method: 'post',
      data
      data,
    })
  },
@@ -122,7 +95,7 @@
    return request({
      url: '/store/api/CreateCourseOrder',
      method: 'post',
      data
      data,
    })
  },
@@ -131,7 +104,7 @@
    return request({
      url: '/store/api/MakeFreeOrderPay',
      method: 'post',
      data
      data,
    })
  },
@@ -140,7 +113,7 @@
    return request({
      url: '/edu/api/ApiGetRankingList',
      method: 'post',
      data
      data,
    })
  },
@@ -149,7 +122,7 @@
    return request({
      url: '/edu/api/ApiGetTopRanking',
      method: 'post',
      data
      data,
    })
  },
@@ -158,7 +131,7 @@
    return request({
      url: '/edu/api/ApiNewRanking',
      method: 'post',
      data
      data,
    })
  },
@@ -167,7 +140,7 @@
    return request({
      url: '/edu/admin/DelQuizConfig',
      method: 'post',
      data
      data,
    })
  },
@@ -176,7 +149,7 @@
    return request({
      url: '/edu/admin/UpdateQuizConfig',
      method: 'post',
      data
      data,
    })
  },
@@ -185,135 +158,9 @@
    return request({
      url: '/edu/admin/GetQuizConfig',
      method: 'post',
      data
      data,
    })
  },
  // ä¸ºç­çº§æ–°å»ºä»»åŠ¡
  newTask(data) {
    return request({
      url: '/edu/api/ApiNewTask',
      method: 'post',
      data
    })
  },
  // æ›´æ–°ä»»åŠ¡
  updateTask(data) {
    return request({
      url: '/edu/api/ApiUpdateTask',
      method: 'post',
      data
    })
  },
  // èŽ·å–ç­çº§ä»»åŠ¡åˆ—è¡¨
  getTaskList(data) {
    return request({
      url: '/edu/api/ApiGetTaskList',
      method: 'post',
      data
    })
  },
  // åˆ é™¤ç­çº§ä»»åŠ¡åˆ—è¡¨
  delTask(data) {
    return request({
      url: '/edu/api/ApiDelTask',
      method: 'post',
      data
    })
  },
  // ä¸ºä»»åŠ¡æ–°å»ºèµ„æº
  newTaskCmsItem(data) {
    return request({
      url: '/edu/api/ApiNewTaskCmsItem',
      method: 'post',
      data
    })
  },
  // èŽ·å–ä»»åŠ¡ä¸‹çš„èµ„æºåˆ—è¡¨
  getTaskCmsItem(data) {
    return request({
      url: '/edu/api/ApiGetTaskCmsItem',
      method: 'post',
      data
    })
  },
  // åˆ é™¤ä»»åŠ¡ä¸‹çš„èµ„æºåˆ—è¡¨
  removeTaskCmsItemList(data) {
    return request({
      url: '/edu/api/ApiRemoveTaskCmsItemList',
      method: 'post',
      data
    })
  },
  // ä¸ºä»»åŠ¡æ·»åŠ èµ„æº
  addTaskCmsItemList(data) {
    return request({
      url: '/edu/api/ApiAddTaskCmsItemList',
      method: 'post',
      data
    })
  },
  // èŽ·å–ä»»åŠ¡æäº¤åˆ—è¡¨
  getTaskSubmitList(data) {
    return request({
      url: '/edu/api/ApiGetTaskSubmitList',
      method: 'post',
      data
    })
  },
  // èŽ·å–æœªæäº¤ä»»åŠ¡åˆ—è¡¨
  getUnSubmitList(data) {
    return request({
      url: '/edu/api/ApiGetUnSubmitList',
      method: 'post',
      data
    })
  },
  // ä¸ºä»»åŠ¡æ–°å»ºæäº¤
  newTaskSubmit(data) {
    return request({
      url: '/edu/api/ApiNewTaskSubmit',
      method: 'post',
      data
    })
  },
  // æ›´æ–°ä»»åŠ¡æäº¤
  updateTaskSubmit(data) {
    return request({
      url: '/edu/api/ApiUpdateTaskSubmit',
      method: 'post',
      data
    })
  },
  // èŽ·å–ä»»åŠ¡æäº¤ç»Ÿè®¡
  getTaskStatistics(data) {
    return request({
      url: '/edu/api/ApiGetTaskStatistics',
      method: 'post',
      data
    })
  },
  // èŽ·å–ç”¨æˆ·æäº¤ç»Ÿè®¡åˆ—è¡¨
  getUserTaskList(data) {
    return request({
      url: '/edu/api/ApiGetUserTaskList',
      method: 'post',
      data
    })
  }
}
export default eduApi
src/assets/js/middleGround/api/identity.js
@@ -1,225 +1,181 @@
import request from '@/plugin/axios/index.ts'
import request from "@/plugin/axios/index.ts";
const identityApi = {
  // èŽ·å–å›¾å½¢éªŒè¯ç 
  getImgCode() {
    return request({
      url: '/identity/NewCaptcha',
      method: 'post'
    })
      url: "/identity/NewCaptcha",
      method: "post",
    });
  },
  // éªŒè¯å›¾å½¢éªŒè¯ç 
  verificationImgCode(data) {
    return request({
      url: '/identity/ValidCaptcha',
      method: 'post',
      data
    })
      url: "/identity/ValidCaptcha",
      method: "post",
      data,
    });
  },
  // èŽ·å–çŸ­ä¿¡éªŒè¯ç 
  getPhoneCode(data) {
    return request({
      url: '/identity/NewSms',
      method: 'post',
      data
    })
      url: "/identity/NewSms",
      method: "post",
      data,
    });
  },
  // éªŒè¯çŸ­ä¿¡éªŒè¯ç 
  verificationPhoneCode(data) {
    return request({
      url: '/identity/api/ApiValidMobilePhone',
      method: 'post',
      data
    })
      url: "/identity/api/ApiValidMobilePhone",
      method: "post",
      data,
    });
  },
  // é€šè¿‡æ‰‹æœºå·æ³¨å†Œç”¨æˆ·
  registerAppUserWithPhone(data) {
    return request({
      url: '/identity/api/RegisterAppUserWithPhone',
      method: 'post',
      data
    })
      url: "/identity/api/RegisterAppUserWithPhone",
      method: "post",
      data,
    });
  },
  // è´¦å·å¯†ç ç™»å½•
  loginByPassword(data) {
    return request({
      url: '/identity/api/LoginByPassword',
      method: 'post',
      data
    })
      url: "/identity/api/LoginByPassword",
      method: "post",
      data,
    });
  },
  // çŸ­ä¿¡éªŒè¯ç ç™»å½•
  loginByMobilePhone(data) {
    return request({
      url: '/identity/api/LoginByMobilePhone',
      method: 'post',
      data
    })
      url: "/identity/api/LoginByMobilePhone",
      method: "post",
      data,
    });
  },
  // è®¾ç½®ç”¨æˆ·key
  setUserKey(data) {
    return request({
      url: '/identity/api/ApiAppUserSetKey',
      method: 'post',
      data
    })
      url: "/identity/api/ApiAppUserSetKey",
      method: "post",
      data,
    });
  },
  // èŽ·å–ç”¨æˆ·key
  getUserKey(data) {
    return request({
      url: '/identity/api/ApiGetAppUserKey',
      method: 'post',
      data
    })
      url: "/identity/api/ApiGetAppUserKey",
      method: "post",
      data,
    });
  },
  // åˆ é™¤ç”¨æˆ·key
  delUserKey(data) {
    return request({
      url: '/identity/api/ApiDelAppUserKey',
      method: 'post',
      data
    })
      url: "/identity/api/ApiDelAppUserKey",
      method: "post",
      data,
    });
  },
  // èŽ·å–åŽ»å½“å‰ç”¨æˆ·ä¿¡æ¯
  getCurrentAppUser() {
    return request({
      url: '/identity/api/GetCurrentAppUser',
      method: 'post'
    })
      url: "/identity/api/GetCurrentAppUser",
      method: "post",
    });
  },
  // æ·»åŠ ç”¨æˆ·ä¿¡æ¯
  setAppUserInfo(data) {
    return request({
      url: '/identity/api/SetAppUserInfoRequest',
      method: 'post',
      data
    })
      url: "/identity/api/SetAppUserInfoRequest",
      method: "post",
      data,
    });
  },
  // ç”¨æˆ·æ›´æ¢ç»‘定手机号,如没有绑定手机则自动创建
  userSetPhoneNumber(data) {
    return request({
      url: '/identity/api/ApiUserSetPhoneNumber',
      method: 'post',
      data
    })
      url: "/identity/api/ApiUserSetPhoneNumber",
      method: "post",
      data,
    });
  },
  // æ£€æµ‹ç”¨æˆ·æ˜¯å¦ç»‘定微信
  checkBuildingWeChat(data) {
    return request({
      url: '/identity/api/ApiCheckBuildingWeChat',
      method: 'post',
      data
    })
      url: "/identity/api/ApiCheckBuildingWeChat",
      method: "post",
      data,
    });
  },
  // é€šè¿‡æ‰‹æœºå·é‡ç½®å¯†ç 
  changePasswordByMobilePhone(data) {
    return request({
      url: '/identity/api/ChangePasswordByMobilePhone',
      method: 'post',
      data
    })
      url: "/identity/api/ChangePasswordByMobilePhone",
      method: "post",
      data,
    });
  },
  // å¾®ä¿¡å¼€æ”¾å¹³å°æ‰«ç ç™»å½•
  loginByWeChatOpenCode(data) {
    return request({
      url: '/identity/api/LoginByWeChatOpenCode',
      method: 'post',
      data
    })
      url: "/identity/api/LoginByWeChatOpenCode",
      method: "post",
      data,
    });
  },
  // ç”¨æˆ·ç»‘定微信号
  bindingWeChat(data) {
    return request({
      url: '/identity/api/ApiBindingWeChat',
      method: 'post',
      data
    })
      url: "/identity/api/ApiBindingWeChat",
      method: "post",
      data,
    });
  },
  // è®¾ç½®ç™»å½•的用户名和密码,用户名和密码至少6位
  setLoginNameAndPassword(data) {
    return request({
      url: '/identity/api/ApiUserSetLoginNameAndPassword',
      method: 'post',
      data
    })
      url: "/identity/api/ApiUserSetLoginNameAndPassword",
      method: "post",
      data,
    });
  },
  // èŽ·å–é‚®ç®±éªŒè¯ç 
  getEmailCode(data) {
    return request({
      url: '/identity/api/SendVerifyEMail',
      method: 'post',
      data
    })
      url: "/identity/api/SendVerifyEMail",
      method: "post",
      data,
    });
  },
  // ç”¨æˆ·ç»‘定邮箱
  bindingEmail(data) {
    return request({
      url: '/identity/api/ApiBindEMail',
      method: 'post',
      data
    })
      url: "/identity/api/ApiBindEMail",
      method: "post",
      data,
    });
  },
};
  // é€šè¿‡refcode加入班级/组
  joinGroupByRefCode(data) {
    return request({
      url: '/identity/api/ApiJoinGroupByRefCode',
      method: 'post',
      data
    })
  },
  // èŽ·å–åŠ å…¥ç»„çš„åˆ—è¡¨ä¿¡æ¯
  joinedGroupByList(data) {
    return request({
      url: '/identity/api/ApiGetJoinedGroupByList',
      method: 'post',
      data
    })
  },
  // èŽ·å–ç»„æˆ–ç­çº§æˆå‘˜
  getGroupUserList(data) {
    return request({
      url: '/identity/api/ApiGetGroupUserList',
      method: 'post',
      data
    })
  },
  // æ›´æ–°ç»„成员或班级成员状态
  updateAppUserGroupLink(data) {
    return request({
      url: '/identity/api/ApiUpdateAppUserGroupLink',
      method: 'post',
      data
    })
  },
  // åˆ é™¤ç»„成员或班级成员状态
  removeAppUserFromGroup(data) {
    return request({
      url: '/identity/api/ApiRemoveAppUserFromGroup',
      method: 'post',
      data
    })
  }
}
export default identityApi
export default identityApi;
src/assets/js/middleGround/api/store.js
@@ -312,13 +312,13 @@
      method: 'post',
      data: body,
      cancelToken: source?.token
    }).then((resp) => {
    })
      .then((resp) => {
      if (resp.length > 0) {
        const data = resp[0]
        if (data.datas.length) {
          data.datas[0].subDatas = data.datas[0].cmsDatas
          const datas = handleDetailQueryRequestData({
            productId,
            item: data.datas[0],
            fields,
            itemFields: {
@@ -327,7 +327,8 @@
            },
            path,
            coverSize,
            handelEBooK
              handelEBooK,
          })
          return {
            datas,
@@ -511,13 +512,13 @@
      method: 'post',
      data: body,
      cancelToken: source?.token
    }).then((resp) => {
    })
      .then((resp) => {
      if (resp.length > 0) {
        const data = resp[0]
        if (data.datas.length) {
          data.datas[0].subDatas = data.datas[0].cmsDatas
          const datas = handleDetailQueryRequestData({
            productId,
            item: data.datas[0],
            fields,
            itemFields: {
@@ -526,7 +527,8 @@
            },
            path,
            coverSize,
            handelEBooK
              handelEBooK,
          })
          return {
            datas,
@@ -868,32 +870,6 @@
  getProductBySaleMethod(data) {
    return request({
      url: '/store/api/ApiGetProductBySaleMethod',
      method: 'post',
      data
    })
  },
  // ç§¯åˆ†å…‘换
  newOrderPay(data) {
    return request({
      url: '/store/api/NewOrderPay',
      method: 'post',
      data
    })
  },
  // åˆ é™¤ç§¯åˆ†è®¢å•
  delOrderPay(data) {
    return request({
      url: '/store/api/DelOrderPay',
      method: 'post',
      data
    })
  },
  // æ›´æ–°ç§¯åˆ†è®¢å•
  UpdateOrderPay(data) {
    return request({
      url: '/store/api/UpdateOrderPay',
      method: 'post',
      data
    })
src/assets/js/middleGround/api/ugc.js
@@ -1,83 +1,64 @@
import request from '@/plugin/axios/index.ts'
import { tokenKey } from '@/assets/js/config.js'
import toolClass from '@/assets/js/toolClass.js'
import request from "@/plugin/axios/index.ts";
import { tokenKey } from "@/assets/js/config.js";
import toolClass from "@/assets/js/toolClass.js";
const ugcApi = {
  // èŽ·å–å•†å“ç‚¹èµžTopic
  getProductLikesTopic(data) {
    return request({
      url: localStorage.getItem(tokenKey)
        ? '/ugc/api/ApiAppUserGetProductLikesTopic'
        : '/ugc/api/ApiGetProductLikesTopic',
      method: 'post',
      data
    })
        ? "/ugc/api/ApiAppUserGetProductLikesTopic"
        : "/ugc/api/ApiGetProductLikesTopic",
      method: "post",
      data,
    });
  },
  // èŽ·å–å•†å“è¯„è®ºTopic
  getProductCommentTopic(data) {
    return request({
      url: localStorage.getItem(tokenKey)
        ? '/ugc/api/ApiAppUserGetProductCommentTopic'
        : '/ugc/api/ApiGetProductCommentTopic',
      method: 'post',
      data
    })
        ? "/ugc/api/ApiAppUserGetProductCommentTopic"
        : "/ugc/api/ApiGetProductCommentTopic",
      method: "post",
      data,
    });
  },
  // èŽ·å–MessageList
  getTopicMessageList(data) {
    return request({
      url: localStorage.getItem(tokenKey)
        ? '/ugc/api/ApiAppUserGetTopicMessageList'
        : '/ugc/api/ApiGetTopicMessageList',
      method: 'post',
      data
    })
  },
  // èŽ·å–å­MessageList
  getTopicMessageSubList(data) {
    return request({
      url:'/ugc/api/ApiAppUserGetSubMessageList',
      method: 'post',
      data
    })
  },
  // èŽ·å–MessageList子message
  getChildTopicMessageList(data) {
    return request({
      url: '/ugc/api/ApiAppUserGetSubMessageList',
      method: 'post',
      data
    })
        ? "/ugc/api/ApiAppUserGetTopicMessageList"
        : "/ugc/api/ApiGetTopicMessageList",
      method: "post",
      data,
    });
  },
  // ç”¨æˆ·æ ¹æ®æ¶ˆæ¯ç±»åž‹èŽ·å–åˆ—è¡¨
  getMessageList(data) {
    return request({
      url: '/ugc/api/ApiGetMessageList',
      method: 'post',
      data
    })
      url: "/ugc/api/ApiGetMessageList",
      method: "post",
      data,
    });
  },
  // æ–°å»ºMessage
  newTopicMessage(data) {
    return request({
      url: '/ugc/api/ApiNewTopicMessage',
      method: 'post',
      data
    })
      url: "/ugc/api/ApiNewTopicMessage",
      method: "post",
      data,
    });
  },
  // åˆ é™¤Message
  delTopicMessage(data) {
    return request({
      url: '/ugc/api/ApiDelTopicMessage',
      method: 'post',
      data
    })
      url: "/ugc/api/ApiDelTopicMessage",
      method: "post",
      data,
    });
  },
  // æ›´æ–°message
  updateTopicMessage(data) {
@@ -90,19 +71,19 @@
  // èŽ·å–cms评论
  getCmsItemCommentTopic(data) {
    return request({
      url: '/ugc/api/ApiGetCmsItemCommentTopic',
      method: 'post',
      data
    })
      url: "/ugc/api/ApiGetCmsItemCommentTopic",
      method: "post",
      data,
    });
  },
  // èŽ·å–ç”¨æˆ·æäº¤çš„æ•™å­¦èµ„æº
  getProductUserSubmitTopic(data) {
    return request({
      url: '/ugc/api/ApiGetProductUserSubmitTopic',
      method: 'post',
      data
    })
  }
      url: "/ugc/api/ApiGetProductUserSubmitTopic",
      method: "post",
      data,
    });
  },
  //更新TOPICMESSAGE
  // updateTopicMessage(data) {
@@ -112,6 +93,6 @@
  //     data,
  //   });
  // },
}
};
export default ugcApi
export default ugcApi;
src/assets/js/middleGround/tool.js
@@ -1,10 +1,10 @@
import { requestCtx, appId } from "@/assets/js/config.js";
import defaultImg from "@/assets/images/default-book-img.png";
import defaultBookFair from "@/assets/images/default-bookFair.png"
import bookCover from "@/assets/images/book-cover.png";
import courseIcon from "@/assets/images/courseIcon.png";
import textBookIcon from "@/assets/images/textBookIcon.png";
import moment from "moment";
import { requestCtx, appId } from '@/assets/js/config.js'
import defaultImg from '@/assets/images/default-book-img.png'
import defaultBookFair from '@/assets/images/default-bookFair.png'
import bookCover from '@/assets/images/book-cover.png'
import defaultPub from '@/assets/images/math/default-pub.png'
import defaultAudio from '@/assets/images/math/default-audio.png'
import moment from 'moment'
// å¤„理列表查询结果
export function handleQueryResourceListData({
  datas,
@@ -13,34 +13,34 @@
  storeInfo,
  repositoryInfo,
  coverSize,
  handelEBooK,
  handelEBooK
}) {
  const dataList = [];
  const dataList = []
  for (let i = 0; i < datas.length; i++) {
    const item = datas[i];
    const item = datas[i]
    // å¤„理字段
    const _fields = {};
    const _fields = {}
    if (fields != null) {
      for (let fieldKey in fields) {
        if (item.datas[fieldKey]) {
          const values = JSON.parse(item.datas[fieldKey]);
          const values = JSON.parse(item.datas[fieldKey])
          if (values.length > 0) {
            // ç”¨å­—段名处理返回的字段值
            if (values[0].Value) {
              _fields[fieldKey] = values[0].Value;
              _fields[fieldKey] = values[0].Value
            } else if (values[0].Data) {
              _fields[fieldKey] = values[0].Data.Value;
              _fields[fieldKey] = values[0].Data.Value
            }
            item.datas[fieldKey] = values[0];
            item.datas[fieldKey] = values[0]
          }
        }
      }
    }
    const subDatas = {};
    const subDatas = {}
    if (item.subDatas) {
      for (let subData of item.subDatas) {
        const tag = subData.queryTag.replace("Query", "");
        subDatas[tag] = subData.datas;
        const tag = subData.queryTag.replace('Query', '')
        subDatas[tag] = subData.datas
      }
    }
@@ -48,113 +48,105 @@
      ...item,
      id: item.id,
      name: item.datas.Name,
      icon: getPublicImage(
        item.datas.Icon,
        coverSize?.width,
        coverSize?.height,
        storeInfo
      ),
      icon: getPublicImage(item.datas.Icon, coverSize?.width, coverSize?.height, storeInfo),
      repositoryInfo: repositoryInfo,
      refCode: item.datas.RefCode === "[]" ? null : item.datas.RefCode,
      refCode: item.datas.RefCode === '[]' ? null : item.datas.RefCode,
      state: item.datas.State,
      type: item.datas.Type,
      tag: item.datas.Tag,
      creator: item.datas.Creator ? JSON.parse(item.datas.Creator) : undefined,
      storeInfo: storeInfo,
      linkType: item.datas.LinkType,
      childrenCount: parseInt(item.datas.ChildrenCount ?? "0"),
      childrenFolderCount: parseInt(item.datas.ChildrenFolderCount ?? "0"),
      childrenChannelCount: parseInt(item.datas.ChildrenChannelCount ?? "0"),
      createDate: moment(item.datas.CreateDate).format("YYYY-MM-DD"),
      beginDate: moment(item.datas.BeginDate).format("YYYY-MM-DD"),
      endDate: moment(item.datas.EndDate).format("YYYY-MM-DD"),
      childrenCount: parseInt(item.datas.ChildrenCount ?? '0'),
      childrenFolderCount: parseInt(item.datas.ChildrenFolderCount ?? '0'),
      childrenChannelCount: parseInt(item.datas.ChildrenChannelCount ?? '0'),
      createDate: moment(item.datas.CreateDate).format('YYYY-MM-DD'),
      beginDate: moment(item.datas.BeginDate).format('YYYY-MM-DD'),
      endDate: moment(item.datas.EndDate).format('YYYY-MM-DD'),
      description: item.datas.Description,
      sysType: item.datas.SysType,
      idPath: path + "\\" + item.id,
      idPath: path + '\\' + item.id,
      typeId: parseInt(item.datas.TypeId),
      linkFile: JSON.parse(item.datas.LinkFile ?? "[]"),
      linkFile: JSON.parse(item.datas.LinkFile ?? '[]'),
      cmsItemType: item.datas.CmsItemType,
      allowDonate: item.datas.AllowDonate == "True",
      allowDonate: item.datas.AllowDonate == 'True',
      // donatePriceList: JSON.parse(item.datas.DonatePriceList ?? "[]"),
      productLinkInfo: item.datas.ProductLinkInfo ?? "[]",
      storeEvent: JSON.parse(item.datas.StoreEvent ?? "[]"),
      linkInfo: JSON.parse(item.datas.LinkInfo ?? "[]"),
      saleMethod: JSON.parse(item.datas.SaleMethod ?? "[]"),
      productLinkInfo: item.datas.ProductLinkInfo ?? '[]',
      storeEvent: JSON.parse(item.datas.StoreEvent ?? '[]'),
      linkInfo: JSON.parse(item.datas.LinkInfo ?? '[]'),
      saleMethod: JSON.parse(item.datas.SaleMethod ?? '[]'),
      subProductCount: parseInt(item.datas.SubProductCount),
      ..._fields,
      datas: item.datas,
      subDatas,
    };
      subDatas
    }
    // ç»Ÿä¸€å¤„理价格
    if (obj.defaultSaleMethod) {
      if (handelEBooK) {
        // èŽ·å–éšä¹¦èµ„æºçš„é”€å”®æ–¹å¼
        let saleMethod = [];
        let saleMethod = []
        try {
          saleMethod = obj.cmsDatas[0].datas.find(
            (item) => item.datas.RefCode == "tourism_accompanyingResources"
          ).datas.SaleMethod;
          saleMethod = JSON.parse(saleMethod);
            (item) => item.datas.RefCode == 'tourism_accompanyingResources'
          ).datas.SaleMethod
          saleMethod = JSON.parse(saleMethod)
        } catch (error) {
          saleMethod = [];
          saleMethod = []
        }
        if (saleMethod.length) {
          Object.keys(saleMethod[0]).map((key) => {
            let newKey = key.replace(key[0], key[0].toLowerCase());
            saleMethod[0][newKey] = saleMethod[0][key];
            delete saleMethod[0][key];
          });
          obj.defaultSaleMethod = saleMethod[0];
          obj.defaultSaleMethodId = saleMethod[0].id;
          obj.alreadyBuy =
            obj.purchasedSaleMethodIdList.indexOf(obj.defaultSaleMethodId) > -1;
            let newKey = key.replace(key[0], key[0].toLowerCase())
            saleMethod[0][newKey] = saleMethod[0][key]
            delete saleMethod[0][key]
          })
          obj.defaultSaleMethod = saleMethod[0]
          obj.defaultSaleMethodId = saleMethod[0].id
          obj.alreadyBuy = obj.purchasedSaleMethodIdList.indexOf(obj.defaultSaleMethodId) > -1
        }
      }
      if (obj.defaultSaleMethod.allowEvent && obj.storeEvent.length) {
        // å·²å‚加活动,获取有效活动并计算价格
        let time = new Date().getTime();
        let time = new Date().getTime()
        // è¿‡æ»¤è¿‡æœŸæ´»åЍ
        let event = obj.storeEvent.filter((item) => {
          let endTime = new Date(item.EndDate).getTime();
          return endTime > time;
        });
          let endTime = new Date(item.EndDate).getTime()
          return endTime > time
        })
        // åªå¤„理一条有效活动
        if (event.length) {
          obj.price = (obj.defaultSaleMethod.price * event[0].Value).toFixed(2);
          obj.oldPrice = obj.defaultSaleMethod.price;
          obj.storeEventId = event[0].Id;
          obj.price = (obj.defaultSaleMethod.price * event[0].Value).toFixed(2)
          obj.oldPrice = obj.defaultSaleMethod.price
          obj.storeEventId = event[0].Id
          if (
            moment().format("YYYY-MM-DD") <
            moment(obj.defaultSaleMethod.endDate).format("YYYY-MM-DD")
            moment().format('YYYY-MM-DD') <
            moment(obj.defaultSaleMethod.endDate).format('YYYY-MM-DD')
          ) {
            obj.defaultSaleMethodState = "Normal";
            obj.defaultSaleMethodState = 'Normal'
          } else {
            obj.defaultSaleMethodState = "Beyond";
            obj.defaultSaleMethodState = 'Beyond'
          }
        }
      } else {
        if (
          moment().format("YYYY-MM-DD") <
          moment(obj.defaultSaleMethod.endDate).format("YYYY-MM-DD")
          moment().format('YYYY-MM-DD') < moment(obj.defaultSaleMethod.endDate).format('YYYY-MM-DD')
        ) {
          obj.defaultSaleMethodState = "Normal";
          obj.defaultSaleMethodState = 'Normal'
        } else {
          obj.defaultSaleMethodState = "Beyond";
          obj.defaultSaleMethodState = 'Beyond'
        }
        obj.price = obj.defaultSaleMethod.price;
        obj.oldPrice = obj.defaultSaleMethod.virtualPrice;
        obj.price = obj.defaultSaleMethod.price
        obj.oldPrice = obj.defaultSaleMethod.virtualPrice
      }
    }
    dataList.push(obj);
    dataList.push(obj)
  }
  return dataList;
  return dataList
}
// å¤„理详情查询结果
export function handleDetailQueryRequestData({
  productId,
  item,
  fields,
  path,
@@ -262,11 +254,11 @@
          }
        }
        if (subItem.productLinkInfo && subItem.productLinkInfo.length) {
          let itemProductLinkInfo = subItem.productLinkInfo.find(citem => citem.ProductId == productId)
          let itemProductLinkInfo = subItem.productLinkInfo.find(citem => citem.Name == item.datas.Name)
          subItem.productLinkPath =
            itemProductLinkInfo?.LinkPath +
            itemProductLinkInfo.LinkPath +
            "\\" +
            itemProductLinkInfo?.CmsItemId;
            itemProductLinkInfo.CmsItemId;
        }
        if (subItem.linkInfo && subItem.linkInfo.length)
          subItem.linkPath =
@@ -282,9 +274,9 @@
}
const handleLinkFileInfo = (linkList) => {
  let linkFileMap = {};
  let linkFileMap = {}
  for (let z = 0; z < linkList.length; z++) {
    const linkItem = linkList[z];
    const linkItem = linkList[z]
    linkFileMap[linkItem.Md5] = {
      linkType: linkItem.LinkType,
      extension: linkItem.Extension,
@@ -295,154 +287,144 @@
      size: linkItem.Size,
      // metaData: JSON.parse(linkItem.MetaData ?? "{}"),
      order: linkItem.Order,
      protectType: linkItem.ProtectType,
    };
      protectType: linkItem.ProtectType
  }
  return linkFileMap;
};
  }
  return linkFileMap
}
const convertCmsItemBase = (item, coverSize, handelEBooK) => {
  item.name = item.datas.Name;
  item.description = item.datas.Description;
  item.refCode = item.datas.RefCode;
  item.state = item.datas.State;
  item.type = item.datas.Type;
  item.tag = item.datas.Tag;
  item.typeId = parseInt(item.datas.TypeId);
  item.icon = item.datas.Icon,
  // item.icon = getPublicImage(
  //   item.datas.Icon,
  //   coverSize?.width,
  //   coverSize?.height
  // );
  item.sysType = item.datas.SysType;
  item.linkFile = JSON.parse(item.datas.LinkFile ?? "[]");
  item.linkType = item.datas.LinkType;
  item.linkAppId = parseInt(item.datas.LinkAppId);
  item.linkStoreId = parseInt(item.datas.LinkStore);
  item.linkRepoId = item.datas.LinkRepository;
  item.childrenCount = parseInt(item.datas.ChildrenCount ?? "0");
  (item.childrenFolderCount = parseInt(item.datas.ChildrenFolderCount ?? "0")),
    (item.childrenChannelCount = parseInt(
      item.datas.ChildrenChannelCount ?? "0"
    )),
    (item.linkId = parseInt(item.datas.LinkId));
  item.linkOrg = JSON.parse(item.datas.LinkOrg ?? "[]")[0];
  item.linkDepartment = JSON.parse(item.datas.LinkDepartment ?? "[]")[0];
  item.linkInfo = JSON.parse(item.datas.LinkInfo ?? "[]");
  item.productLinkInfo = JSON.parse(item.datas.ProductLinkInfo ?? "[]");
  item.saleMethod = JSON.parse(item.datas.SaleMethod ?? "[]");
  item.allowDonate = item.datas.AllowDonate == "True";
  item.name = item.datas.Name
  item.description = item.datas.Description
  item.refCode = item.datas.RefCode
  item.state = item.datas.State
  item.type = item.datas.Type
  item.tag = item.datas.Tag
  item.typeId = parseInt(item.datas.TypeId)
  item.icon = getPublicImage(item.datas.Icon, coverSize?.width, coverSize?.height)
  item.sysType = item.datas.SysType
  item.linkFile = JSON.parse(item.datas.LinkFile ?? '[]')
  item.linkType = item.datas.LinkType
  item.linkAppId = parseInt(item.datas.LinkAppId)
  item.linkStoreId = parseInt(item.datas.LinkStore)
  item.linkRepoId = item.datas.LinkRepository
  item.childrenCount = parseInt(item.datas.ChildrenCount ?? '0')
  ;(item.childrenFolderCount = parseInt(item.datas.ChildrenFolderCount ?? '0')),
    (item.childrenChannelCount = parseInt(item.datas.ChildrenChannelCount ?? '0')),
    (item.linkId = parseInt(item.datas.LinkId))
  item.linkOrg = JSON.parse(item.datas.LinkOrg ?? '[]')[0]
  item.linkDepartment = JSON.parse(item.datas.LinkDepartment ?? '[]')[0]
  item.linkInfo = JSON.parse(item.datas.LinkInfo ?? '[]')
  item.productLinkInfo = JSON.parse(item.datas.ProductLinkInfo ?? '[]')
  item.saleMethod = JSON.parse(item.datas.SaleMethod ?? '[]')
  item.allowDonate = item.datas.AllowDonate == 'True'
  // item.donatePriceList = JSON.parse(item.datas.DonatePriceList ?? "[]");
  item.createDate = moment(item.datas.CreateDate).format("YYYY-MM-DD");
  item.beginDate = moment(item.datas.BeginDate).format("YYYY-MM-DD");
  item.endDate = moment(item.datas.EndDate).format("YYYY-MM-DD");
  item.storeEvent = JSON.parse(item.datas.StoreEvent ?? "[]");
  item.createDate = moment(item.datas.CreateDate).format('YYYY-MM-DD')
  item.beginDate = moment(item.datas.BeginDate).format('YYYY-MM-DD')
  item.endDate = moment(item.datas.EndDate).format('YYYY-MM-DD')
  item.storeEvent = JSON.parse(item.datas.StoreEvent ?? '[]')
  // ç»Ÿä¸€å¤„理价格
  if (item.defaultSaleMethod) {
    if (handelEBooK) {
      // èŽ·å–éšä¹¦èµ„æºçš„é”€å”®æ–¹å¼
      let saleMethod = item.cmsDatas[0].datas.find(
        (item) => item.refCode == "tourism_accompanyingResources"
      ).saleMethod;
        (item) => item.refCode == 'tourism_accompanyingResources'
      ).saleMethod
      if (saleMethod && saleMethod.length > 0) {
        Object.keys(saleMethod[0]).map((key) => {
          let newKey = key.replace(key[0], key[0].toLowerCase());
          saleMethod[0][newKey] = saleMethod[0][key];
          delete saleMethod[0][key];
        });
        item.defaultSaleMethod = saleMethod[0];
        item.defaultSaleMethodId = saleMethod[0].id;
        item.alreadyBuy =
          item.purchasedSaleMethodIdList.indexOf(item.defaultSaleMethodId) > -1;
          let newKey = key.replace(key[0], key[0].toLowerCase())
          saleMethod[0][newKey] = saleMethod[0][key]
          delete saleMethod[0][key]
        })
        item.defaultSaleMethod = saleMethod[0]
        item.defaultSaleMethodId = saleMethod[0].id
        item.alreadyBuy = item.purchasedSaleMethodIdList.indexOf(item.defaultSaleMethodId) > -1
      }
    }
    if (item.defaultSaleMethod.allowEvent && item.storeEvent.length) {
      // å·²å‚加活动,获取有效活动并计算价格
      let time = new Date().getTime();
      let time = new Date().getTime()
      // è¿‡æ»¤è¿‡æœŸæ´»åЍ
      let event = item.storeEvent.filter((item) => {
        let endTime = new Date(item.EndDate).getTime();
        return endTime > time;
      });
        let endTime = new Date(item.EndDate).getTime()
        return endTime > time
      })
      // åªå¤„理一条有效活动
      if (event.length) {
        item.price = (item.defaultSaleMethod.price * event[0].Value).toFixed(2);
        item.oldPrice = item.defaultSaleMethod.price;
        item.price = (item.defaultSaleMethod.price * event[0].Value).toFixed(2)
        item.oldPrice = item.defaultSaleMethod.price
        if (
          moment().format("YYYY-MM-DD") <
          moment(item.defaultSaleMethod.endDate).format("YYYY-MM-DD")
          moment().format('YYYY-MM-DD') <
          moment(item.defaultSaleMethod.endDate).format('YYYY-MM-DD')
        ) {
          item.defaultSaleMethodState = "Normal";
          item.defaultSaleMethodState = 'Normal'
        } else {
          item.defaultSaleMethodState = "Beyond";
          item.defaultSaleMethodState = 'Beyond'
        }
        item.storeEventId = event[0].Id;
        item.storeEventId = event[0].Id
      }
    } else {
      item.price = item.defaultSaleMethod.price;
      item.oldPrice = item.defaultSaleMethod.virtualPrice;
      item.price = item.defaultSaleMethod.price
      item.oldPrice = item.defaultSaleMethod.virtualPrice
      if (
        moment().format("YYYY-MM-DD") <
        moment(item.defaultSaleMethod.endDate).format("YYYY-MM-DD")
        moment().format('YYYY-MM-DD') < moment(item.defaultSaleMethod.endDate).format('YYYY-MM-DD')
      ) {
        item.defaultSaleMethodState = "Normal";
        item.defaultSaleMethodState = 'Normal'
      } else {
        item.defaultSaleMethodState = "Beyond";
        item.defaultSaleMethodState = 'Beyond'
      }
    }
  }
};
}
export function getTopicMsgCmsItemFile(fileType, fileList) {
  let obj = {};
  let obj = {}
  fileType.forEach((item) => {
    item.sequenceNum = item.config ? JSON.parse(item.config).uuid : "";
    item.sequenceNum = item.config ? JSON.parse(item.config).uuid : ''
    fileList.forEach((e) => {
      if (item.sequenceNum == e.sequenceNum) {
        try {
          if (e.fileLinkList.length > 0) {
            for (let i = 0; i < e.fileLinkList.length; i++) {
              const ele = e.fileLinkList[i];
              ele.name = ele.file.fileName;
              ele.md5 = ele.file.md5;
              ele.status = "success";
              const ele = e.fileLinkList[i]
              ele.name = ele.file.fileName
              ele.md5 = ele.file.md5
              ele.status = 'success'
            }
            obj[item.typeField.refCode] = e.fileLinkList;
            obj[item.typeField.refCode] = e.fileLinkList
          } else {
            const val = JSON.parse(e.value);
            obj[item.typeField.refCode] = val;
            const val = JSON.parse(e.value)
            obj[item.typeField.refCode] = val
          }
        } catch (error) {
          obj[item.typeField.refCode] = e.value;
          obj[item.typeField.refCode] = e.value
        }
      }
    });
  });
  return obj;
    })
  })
  return obj
}
// èŽ·å–ä¸å—ä¿æŠ¤çš„å›¾ç‰‡
export function getPublicImage(md5, width, height,storeInfo) {
  let src = null;
  let src = null
  if (md5) {
    src = requestCtx + `/file/GetPreViewImage?md5=${md5}`;
    src = requestCtx + `/file/GetPreViewImage?md5=${md5}`
  } else {
    if(storeInfo == 'jsek_bookFair') {
      // return defaultBookFair;
      return
    }else if(storeInfo == `defaultGoodsStore${appId}`){
      return bookCover;
    }else if(storeInfo == 'jsek_digitalCourses'){
      return courseIcon;
    }else if(storeInfo == 'jsek_digitalTextbooks'){
      return textBookIcon;
    }else{
      return ""
    } else if (storeInfo == 'jilin_imgResourceLibrary') {
      return defaultPub
    } else if (storeInfo == 'jilin_audiosResourceLibrary') {
      return defaultAudio
    } else if (storeInfo == 'jilin_videosResourceLibrary') {
      return defaultPub
    } else if (storeInfo == 'jilin_modelsResourceLibrary') {
      return defaultPub
    }
  }
  if (width) src += `&width=${width}`;
  if (height) src += `&height=${height}`;
  return src;
  if (width && src) src += `&width=${width}`
  if (height && src) src += `&height=${height}`
  return src
}
src/assets/js/toolClass.js
@@ -1,5 +1,6 @@
import SparkMD5 from 'spark-md5'
import { getPublicImage } from '@/assets/js/middleGround/tool.js'
import config from './config'
// import moment from "moment";
var tool = {
@@ -159,9 +160,7 @@
      nrr.push({
        linkProtectType: e.linkProtectType,
        linkType: e.linkType,
        md5: e.md5,
        fileName: e.fileName ?? '',
        extension: e.extension ?? ''
        md5: e.md5
      })
    )
  }
@@ -354,6 +353,23 @@
  })
}
// èŽ·å–æ–‡ä»¶
export function getPublicFile(md5, isToken) {
  const { tokenKey, requestCtx } = config
  let src = null
  let token = localStorage.getItem(tokenKey)
  if (md5) {
    if (isToken) {
      src = requestCtx + `/file/api/ApiDownloadForAuthorize?md5=${md5}&token=${token}`
    } else {
      src = requestCtx + `/file/api/ApiDownload?md5=${md5}`
    }
  } else {
    return ''
  }
  return src
}
// å¤„理时间,用于显示音视频当前时间
// export function realFormatSecond(time) {
//   let duration = parseInt(time);
@@ -462,6 +478,7 @@
  worksDataBytool,
  UpdateworksDataBytool,
  getPublicImage,
  worksData
  worksData,
  getPublicFile
  // parseHtml,
}
src/main.js
@@ -5,10 +5,17 @@
import * as ElementPlusIconsVue from "@element-plus/icons-vue";
import router from "./router";
import "./styles/global.less";
import pinia from '@/store/index'
import MG from "@/assets/js/middleGround/WebMiddleGroundApi.js"
import toolClass from '@/assets/js/toolClass.js'
import config from "@/assets/js/config.js"
const app = createApp(App);
app.provide('config', config)
app.provide('MG', MG)
app.provide('toolClass', toolClass)
// æ³¨å†Œæ‰€æœ‰å›¾æ ‡
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
@@ -16,6 +23,7 @@
}
// ä½¿ç”¨ Element Plus
app.use(pinia)
app.use(ElementPlus);
app.use(router);
src/plugin/axios/index.ts
@@ -1,85 +1,89 @@
import axios from 'axios'
import myConfig from '@/assets/js/config.js'
import toolClass from '@/assets/js/toolClass.js'
import router from '@/router'
import axios from "axios";
import myConfig from "@/assets/js/config.js";
import toolClass from "@/assets/js/toolClass.js";
import router from "@/router";
// åˆ›å»º axios å®žä¾‹
const service = axios.create({
  baseURL: myConfig.requestCtx,
  timeout: myConfig.requestTimeOut // è¯·æ±‚è¶…æ—¶æ—¶é—´
})
  timeout: myConfig.requestTimeOut, // è¯·æ±‚è¶…æ—¶æ—¶é—´
});
// è¯·æ±‚拦截器
service.interceptors.request.use(
  (config) => {
    let token = localStorage.getItem(myConfig.tokenKey)
    if (token) config.headers['Authorization'] = `bearer ${token}`
    return config
    let token = localStorage.getItem(myConfig.tokenKey);
    if (token) config.headers["Authorization"] = `bearer ${token}`;
    return config;
  },
  (error) => {
    // å‘送失败
    Promise.reject(error)
    Promise.reject(error);
  }
)
);
// å“åº”拦截器
service.interceptors.response.use(
  (response) => {
    console.log(response);
    // dataAxios æ˜¯ axios è¿”回数据中的 data
    const dataAxios = response.data
    if (typeof dataAxios.data === 'boolean') {
      return dataAxios.data
    const dataAxios = response.data;
    if (typeof dataAxios.data === "boolean") {
      return dataAxios.data;
    }
    if (response.config.responseType == 'blob') {
      return dataAxios
    if (response.config.responseType == "blob") {
      return dataAxios;
    }
    const { success } = dataAxios
    const { success } = dataAxios;
    if (dataAxios.currentDate) {
      sessionStorage.currentDate = new Date(dataAxios.currentDate).getTime()
      sessionStorage.currentDate = new Date(dataAxios.currentDate).getTime();
    }
    // æ ¹æ® code è¿›è¡Œåˆ¤æ–­
    if (success) {
      return dataAxios.data ? dataAxios.data : dataAxios
    if (response.status == 200 && response.statusText == "OK") {
      return dataAxios.data ? dataAxios.data : dataAxios;
    } else {
      // æç¤ºé”™è¯¯
    }
  },
  (error) => {
    if ((error.response && error.response.status == 401) || error.code == 'ERR_NETWORK') {
      localStorage.removeItem(myConfig.tokenKey)
      localStorage.removeItem('jesk-userInfo')
      localStorage.removeItem('alreadyElectronicBook')
      localStorage.removeItem('alreadyPaperBook')
      localStorage.removeItem('electronicBookList')
      localStorage.removeItem('paperBookList')
      sessionStorage.removeItem('cartNumber')
    if (
      (error.response && error.response.status == 401) ||
      error.code == "ERR_NETWORK"
    ) {
      localStorage.removeItem(myConfig.tokenKey);
      localStorage.removeItem("jesk-userInfo");
      localStorage.removeItem("alreadyElectronicBook");
      localStorage.removeItem("alreadyPaperBook");
      localStorage.removeItem("electronicBookList");
      localStorage.removeItem("paperBookList");
      sessionStorage.removeItem("cartNumber");
      // router.replace({
      //   path: '/home',
      //   query: {
      //     showLogin: '1'
      //   }
      // })
      const url = window.location.hash.slice(1)
      console.log(url, 'url')
      if (url.includes('showLogin=1')) {
        router.push(url)
      const url = window.location.hash.slice(1);
      console.log(url, "url");
      if (url.includes("showLogin=1")) {
        router.push(url);
      } else {
        // router.push(url)
        if (url.includes('?')) {
          console.log(url.includes('?'))
          router.push(url)
        if (url.includes("?")) {
          console.log(url.includes("?"));
          router.push(url);
        } else {
          router.push(url + '?showLogin=1')
          router.push(url + "?showLogin=1");
        }
      }
    } else {
      if (error.response && error.response.data && error.response.data.error) {
        console.error(error.response.data.error.msg)
        console.error(error.response.data.error.msg);
      } else {
        console.error('请求发生错误')
        console.error("请求发生错误");
      }
    }
    return Promise.reject(error)
    return Promise.reject(error);
  }
)
);
export default service
export default service;
src/router/index.ts
@@ -1,58 +1,63 @@
import { createRouter, createWebHistory } from 'vue-router'
import { createRouter, createWebHistory } from "vue-router";
const router = createRouter({
  history: createWebHistory(),
  routes: [
    {
      path: '/',
      redirect: '/model'
      path: "/",
      redirect: "/model",
    },
    {
      path: '/model',
      name: 'model',
      redirect: '/model/landerModel',
      component: () => import('../views/model/index.vue'),
      path: "/model",
      name: "model",
      redirect: "/model/landerModel",
      component: () => import("../views/model/index.vue"),
      children: [
        {
          path: '/model/landerModel',
          name: 'landerModel',
          component: () => import('../views/model/children/landerModel.vue')
          path: "/model/landerModel",
          name: "landerModel",
          component: () => import("@/views/model/children/landerModel.vue"),
        },
        {
          path: '/model/roverModel',
          name: 'roverModel',
          component: () => import('../views/model/children/roverModel.vue')
          path: "/model/roverModel",
          name: "roverModel",
          component: () => import("../views/model/children/roverModel.vue"),
        },
        {
          path: '/model/leapMachineModel',
          name: 'leapMachineModel',
          component: () => import('../views/model/children/leapMachineModel.vue')
          path: "/model/leapMachineModel",
          name: "leapMachineModel",
          component: () =>
            import("../views/model/children/leapMachineModel.vue"),
        },
      ]
        {
          path: "/simulation-config",
          name: "simulationConfig",
          component: () => import("../views/simulation/component/Config.vue"),
        },
        {
          path: "/simulation-result",
          name: "simulationResult",
          component: () => import("../views/simulation/component/Result.vue"),
        },
        {
          path: "/simulation-test",
          name: "simulationTest",
          component: () => import("../views/simulation/component/test.vue"),
        },
        {
          path: "/system/user",
          name: "systemUser",
          component: () => import("../views/system/User.vue"),
        },
      ],
    },
    {
      path: '/simulation-config',
      name: 'simulationConfig',
      component: () => import('../views/simulation/Config.vue')
      path: "/login",
      name: "login",
      component: () => import("../views/login/index.vue"),
    },
    {
      path: '/simulation-result',
      name: 'simulationResult',
      component: () => import('../views/simulation/Result.vue')
    },
    {
      path: '/simulation-test',
      name: 'simulationTest',
      component: () => import('../views/simulation/test.vue')
    },
    {
      path: '/system/user',
      name: 'systemUser',
      component: () => import('../views/system/User.vue')
    },
  ],
});
  ]
})
export default router
export default router;
src/store/index.Ts
New file
@@ -0,0 +1,8 @@
import { createPinia } from "pinia";
// åˆ›å»ºpinia实例
const pinia = createPinia()
export default pinia
export * from './modules/user'
src/store/modules/user.ts
New file
@@ -0,0 +1,41 @@
// ç”¨æˆ·ä¿¡æ¯
import {tokenKey,userInfoKey} from '@/assets/js/config.js'
import { defineStore } from 'pinia'
import { ref } from 'vue'
interface userInfoState {
  name:string
}
export const useUserStore = defineStore('user', () => {
  const token = localStorage.getItem(tokenKey) ? ref<string>(localStorage.getItem(tokenKey) as string) : ref<string>()
  const setToken = (value: string) => {
    token.value = value
    localStorage.setItem(tokenKey, value)
  }
  const userInfo = localStorage.getItem(userInfoKey) ? ref<userInfoState>(JSON.parse(localStorage.getItem(userInfoKey) as string)) : ref<userInfoState>()
  const setUserInfo = (value: userInfoState) => {
    userInfo.value = value
    localStorage.setItem(userInfoKey, JSON.stringify(value))
  }
  // é€€å‡ºç™»å½•
  const delteUserInfo = () => {
    token.value = '',
    userInfo.value = { name:''}
    localStorage.removeItem(tokenKey)
    localStorage.removeItem(userInfoKey)
  }
  // è´­ç‰©è½¦
  const shopCarNum = ref<number>(0)
  const updateShopCar = (num:number) => {
    shopCarNum.value = num
  }
  return {
    token,
    setToken,
    userInfo,
    setUserInfo,
    delteUserInfo,
    shopCarNum,
    updateShopCar
  }
})
src/views/login/index.vue
New file
@@ -0,0 +1,142 @@
<template>
  <div class="login-container">
    <el-card class="login-box">
      <h2 class="title">用户登录</h2>
      <el-form
        :model="formData"
        :rules="formRules"
        ref="loginForm"
        @submit.prevent="handleSubmit"
      >
        <el-form-item prop="username">
          <el-input
            v-model="formData.username"
            placeholder="请输入用户名"
            prefix-icon="User"
          />
        </el-form-item>
        <el-form-item prop="password">
          <el-input
            v-model="formData.password"
            type="password"
            placeholder="请输入密码"
            prefix-icon="Lock"
            show-password
          />
        </el-form-item>
        <el-form-item>
          <el-button
            type="primary"
            native-type="submit"
            class="submit-btn"
            :loading="isSubmitting"
          >
            ç«‹å³ç™»å½•
          </el-button>
        </el-form-item>
      </el-form>
    </el-card>
  </div>
</template>
<script setup lang="ts">
import { inject, reactive, ref } from "vue";
import { useRouter } from "vue-router";
import { ElMessage } from "element-plus";
import type { FormInstance, FormRules } from "element-plus";
const MG: any = inject("MG");
import { useUserStore } from "@/store/index";
const userStore = useUserStore();
interface LoginForm {
  username: string;
  password: string;
}
const router = useRouter();
const isSubmitting = ref(false);
const loginForm = ref<FormInstance>();
const formData = reactive<LoginForm>({
  username: "",
  password: "",
});
const formRules = reactive<FormRules<LoginForm>>({
  username: [
    { required: true, message: "用户名不能为空", trigger: "blur" },
    { min: 4, message: "用户名不能少于4个字符", trigger: "blur" },
  ],
  password: [
    { required: true, message: "密码不能为空", trigger: "blur" },
    { min: 6, message: "密码不能少于6个字符", trigger: "blur" },
  ],
});
// èŽ·å–å½“å‰ç™»å½•ç”¨æˆ·
const fetchUserInfo = async () => {
  const msg = await MG.dps5.GetCurrentUser();
  return msg;
};
const handleSubmit = async () => {
  if (!loginForm.value) return;
  try {
    await loginForm.value.validate();
    isSubmitting.value = true;
    MG.dps5
      .LoginByLoginNameAndPassword({
        loginName: formData.username,
        password: formData.password,
        platform: "WebPc",
        appId: "1051",
      })
      .then(async (res) => {
        if (res.status == "Ok" && res.token) {
          ElMessage.success("登录成功");
          userStore.setToken(res.token);
          const currentUser = await fetchUserInfo();
          console.log(currentUser, "currentUser");
          userStore.setUserInfo({
            ...currentUser,
          });
          router.push("/model");
        }
      })
      .catch(() => {});
  } catch (error) {
    ElMessage.error("用户名或密码错误");
  } finally {
    isSubmitting.value = false;
  }
};
</script>
<style scoped>
.login-container {
  display: flex;
  justify-content: center;
  align-items: center;
  min-height: 100vh;
  background: #f0f2f5;
}
.login-box {
  width: 400px;
  padding: 20px;
}
.title {
  text-align: center;
  color: #333;
  margin-bottom: 30px;
}
.submit-btn {
  width: 100%;
}
</style>
src/views/model/children/landerModel.vue
@@ -1,7 +1,7 @@
<template>
  <div class="landerBox">
    <div class="landerTopBox">
      <el-button :icon="Plus">新建</el-button>
      <el-button :icon="Plus" @click="dialogFormVisible = true">新建</el-button>
      <el-input
        v-model="input4"
        style="width: 300px"
@@ -23,14 +23,16 @@
        class="landerTable"
      >
        <el-table-column type="selection" width="55" />
        <el-table-column prop="index" label="序号" width="70" />
        <el-table-column prop="date" label="Date" width="180" />
        <el-table-column prop="name" label="Name" width="180" />
        <el-table-column prop="address" label="Address" />
        <el-table-column prop="id" label="序号" width="70" />
        <el-table-column prop="name" label="模型名称" width="180" />
        <el-table-column prop="joint" label="关节数据量" width="180" />
        <el-table-column prop="isSimulate" label="是否可仿真" width="180" />
        <el-table-column prop="createTime" label="创建时间" width="180" />
        <el-table-column prop="creator" label="创建人" />
      </el-table>
    </div>
    <div class="lander-pagination-block">
      <el-pagination
          style="width: 100%"
        v-model:current-page="currentPage"
        :page-size="pageSize"
        :size="size"
@@ -41,10 +43,33 @@
      />
    </div>
  </div>
    <el-dialog v-model="dialogFormVisible" title="Shipping address">
      <el-form :model="form">
        <el-form-item label="Promotion name" :label-width="formLabelWidth">
          <el-input v-model="form.name" autocomplete="off" />
        </el-form-item>
        <el-form-item label="Zones" :label-width="formLabelWidth">
          <el-select v-model="form.region" placeholder="Please select a zone">
            <el-option label="Zone No.1" value="shanghai" />
            <el-option label="Zone No.2" value="beijing" />
          </el-select>
        </el-form-item>
      </el-form>
      <template #footer>
        <span class="dialog-footer">
          <el-button @click="dialogFormVisible = false">Cancel</el-button>
          <el-button type="primary" @click="dialogFormVisible = false">
            Confirm
          </el-button>
        </span>
      </template>
    </el-dialog>
  </div>
</template>
<script setup lang="ts">
import { ref } from "vue";
import { reactive, ref } from "vue";
import { Plus } from "@element-plus/icons-vue";
import type { ComponentSize, TableInstance } from "element-plus";
@@ -54,53 +79,65 @@
// è¡¨æ ¼
const multipleTableRef = ref<TableInstance>();
const multipleSelection = ref<any[]>([]);
const dialogTableVisible = ref(false);
const dialogFormVisible = ref(false);
const formLabelWidth = "140px";
// åˆ†é¡µ
const currentPage = ref(4);
const pageSize = ref(20);
const size = ref<ComponentSize>("default");
const background = ref(true);
const form = reactive({
  name: "",
  region: "",
  date1: "",
  date2: "",
  delivery: false,
  type: [],
  resource: "",
  desc: "",
});
const tableData = [
  {
    id: 1,
    date: "2016-05-03",
    createTime: "2016-05-03",
    name: "Tom",
    address: "No. 189, Grove St, Los Angeles",
  },
  {
    id: 2,
    date: "2016-05-02",
    createTime: "2016-05-02",
    name: "Tom",
    address: "No. 189, Grove St, Los Angeles",
  },
  {
    id: 3,
    date: "2016-05-04",
    createTime: "2016-05-04",
    name: "Tom",
    address: "No. 189, Grove St, Los Angeles",
  },
  {
    id: 4,
    date: "2016-05-01",
    createTime: "2016-05-01",
    name: "Tom",
    address: "No. 189, Grove St, Los Angeles",
  },
  {
    id: 5,
    date: "2016-05-08",
    createTime: "2016-05-08",
    name: "Tom",
    address: "No. 189, Grove St, Los Angeles",
  },
  {
    id: 6,
    date: "2016-05-06",
    createTime: "2016-05-06",
    name: "Tom",
    address: "No. 189, Grove St, Los Angeles",
  },
  {
    id: 7,
    date: "2016-05-07",
    createTime: "2016-05-07",
    name: "Tom",
    address: "No. 189, Grove St, Los Angeles",
  },
src/views/model/index.vue
@@ -1,10 +1,72 @@
<template>
  <div class="modelContainer">
    <el-config-provider :locale="zhCn">
      <el-container class="common-layout">
        <el-header height="60px">
          <Header @selectMenu="handMenu" />
        </el-header>
        <el-container>
          <el-aside width="240px">
            <TreeMenu :menuItem="menuItem" />
          </el-aside>
          <el-main>
    <RouterView />
          </el-main>
        </el-container>
      </el-container>
    </el-config-provider>
  </div>
</template>
<script setup lang="ts">
import Header from "@/layout/Header.vue";
import TreeMenu from "@/components/TreeMenu.vue";
import { ElConfigProvider } from "element-plus";
import zhCn from "element-plus/es/locale/lang/zh-cn";
import { inject, onMounted, ref } from "vue";
const MG: any = inject("MG");
const menuItem = ref("/");
const storeList = ref([]);
const handMenu = (key: string) => {
  menuItem.value = key;
};
onMounted(async () => {
  MG.dps5.GetStoreList().then(async (res: any) => {
    if (res && res.length > 0) {
      const curList = res.map((item) => {
        return {
          ...item,
          ...item.resourceStoreLinkDto.resourceStore,
          storeId: item.resourceStoreLinkDto.resourceStore.id,
        };
      });
      const RepositoryList = await MG.dps5.GetStoreRepositoryList({
        storeIds: [curList[0].storeId],
      });
      for (let i = 0; i < curList.length; i++) {
        const storeItem = curList[i];
        const dataList = RepositoryList[i];
        const datas = dataList.map((item) => {
          return {
            ...item.resourceStoreAndRepositoryLinkDto.repository,
            icon: item.resourceStoreAndRepositoryLinkDto.repository.icon,
            storeId: item.resourceStoreAndRepositoryLinkDto.store.id,
            linkId: item.resourceStoreAndRepositoryLinkDto.id,
            linkType: item.resourceStoreAndRepositoryLinkDto.linkType,
            linkOrder: item.resourceStoreAndRepositoryLinkDto.order,
            childrenCount:
              item.resourceStoreAndRepositoryLinkDto.repository.rootChannel
                .childrenCount,
          };
        });
        storeItem.repositoryList = datas;
      }
      console.log(curList, "curList");
      storeList.value = curList;
    }
  });
});
</script>
<style lang="less" scoped>
src/views/simulation/component/Config.vue
src/views/simulation/component/Result.vue
src/views/simulation/component/Test.vue
src/views/simulation/index.vue
New file
@@ -0,0 +1,31 @@
<template>
  <el-config-provider :locale="zhCn">
    <el-container class="common-layout">
      <el-header height="60px">
        <Header @selectMenu="handMenu" />
      </el-header>
      <el-container>
        <el-aside width="240px">
          <TreeMenu :menuItem="menuItem" />
        </el-aside>
        <el-main>
          <RouterView />
        </el-main>
      </el-container>
    </el-container>
  </el-config-provider>
</template>
<script setup lang="ts">
import Header from "@/layout/Header.vue";
import TreeMenu from "@/components/TreeMenu.vue";
import { ElConfigProvider } from "element-plus";
import zhCn from "element-plus/es/locale/lang/zh-cn";
import { ref } from "vue";
const menuItem = ref("/");
const handMenu = (key: string) => {
  menuItem.value = key;
};
</script>
<style lang="less" scoped></style>