├── .gitignore ├── LICENSE ├── README.md ├── admin ├── .eslintrc.cjs ├── .gitignore ├── .vscode │ ├── extensions.json │ └── settings.json ├── README.md ├── global.d.ts ├── index.html ├── package-lock.json ├── package.json ├── postcss.config.js ├── scripts │ └── build.mjs ├── src │ ├── App.vue │ ├── api │ │ ├── app.ts │ │ ├── article.ts │ │ ├── channel │ │ │ ├── h5.ts │ │ │ ├── weapp.ts │ │ │ ├── wx_dev.ts │ │ │ └── wx_oa.ts │ │ ├── consumer.ts │ │ ├── decoration.ts │ │ ├── file.ts │ │ ├── message.ts │ │ ├── org │ │ │ ├── department.ts │ │ │ └── post.ts │ │ ├── perms │ │ │ ├── admin.ts │ │ │ ├── menu.ts │ │ │ └── role.ts │ │ ├── setting │ │ │ ├── dict.ts │ │ │ ├── search.ts │ │ │ ├── storage.ts │ │ │ ├── system.ts │ │ │ ├── user.ts │ │ │ └── website.ts │ │ ├── tools │ │ │ └── code.ts │ │ └── user.ts │ ├── assets │ │ ├── icons │ │ │ ├── Androidfanhui.svg │ │ │ ├── KMSguanli.svg │ │ │ ├── KTVyuding.svg │ │ │ ├── a-tixingdengpao.svg │ │ │ ├── anquan.svg │ │ │ ├── anquan_mian.svg │ │ │ ├── anquan_mian1.svg │ │ │ ├── banxing_mian.svg │ │ │ ├── baoxian.svg │ │ │ ├── bendishenghuodaxue.svg │ │ │ ├── bianji.svg │ │ │ ├── biaoqing.svg │ │ │ ├── bukejian.svg │ │ │ ├── caipinguanli.svg │ │ │ ├── caiwu.svg │ │ │ ├── caiwu_jifen.svg │ │ │ ├── caiwu_tixian.svg │ │ │ ├── canyinfuwu.svg │ │ │ ├── carryout.svg │ │ │ ├── chexiao.svg │ │ │ ├── chihuohongbao.svg │ │ │ ├── chuangyiwuliao.svg │ │ │ ├── close.svg │ │ │ ├── daiyunying.svg │ │ │ ├── danwei.svg │ │ │ ├── danxuankuang.svg │ │ │ ├── danxuanxuanzhong.svg │ │ │ ├── dayin.svg │ │ │ ├── dayin_mian.svg │ │ │ ├── del.svg │ │ │ ├── diancanshezhi.svg │ │ │ ├── dianhua.svg │ │ │ ├── dianhua_mian.svg │ │ │ ├── dianpu_fengge.svg │ │ │ ├── dianputuijian.svg │ │ │ ├── dianzifapiao.svg │ │ │ ├── dingcan.svg │ │ │ ├── dingdan.svg │ │ │ ├── dingdan1.svg │ │ │ ├── dingdan_mian.svg │ │ │ ├── dingwei.svg │ │ │ ├── dingwei_mian.svg │ │ │ ├── ditu.svg │ │ │ ├── ditu_mian.svg │ │ │ ├── duizhang.svg │ │ │ ├── elemo.svg │ │ │ ├── ezhanggui.svg │ │ │ ├── falvfuwubaoxiaohei.svg │ │ │ ├── fengniaopaotui.svg │ │ │ ├── fenxiang.svg │ │ │ ├── fukuan.svg │ │ │ ├── fukuan_mian.svg │ │ │ ├── fullscreen-exit.svg │ │ │ ├── fullscreen.svg │ │ │ ├── fuwushichang.svg │ │ │ ├── fuzhi.svg │ │ │ ├── gaode.svg │ │ │ ├── gengduo.svg │ │ │ ├── gengduoandroid.svg │ │ │ ├── gift.svg │ │ │ ├── gongyingshang.svg │ │ │ ├── goods.svg │ │ │ ├── gou.svg │ │ │ ├── gouwuche.svg │ │ │ ├── gouxuan.svg │ │ │ ├── gouxuan_mian.svg │ │ │ ├── guanbi.svg │ │ │ ├── guanli.svg │ │ │ ├── guanli_mian.svg │ │ │ ├── gukefapiao.svg │ │ │ ├── haibaosheji.svg │ │ │ ├── heshoujilu.svg │ │ │ ├── heshoujilu1.svg │ │ │ ├── hexiao_order.svg │ │ │ ├── hide-2.svg │ │ │ ├── hide.svg │ │ │ ├── hongbao.svg │ │ │ ├── huiche.svg │ │ │ ├── huiyuanyingxiao.svg │ │ │ ├── huodongbaoming.svg │ │ │ ├── huodongguanli.svg │ │ │ ├── huodongzhongxin.svg │ │ │ ├── huojian.svg │ │ │ ├── huojian_mian.svg │ │ │ ├── huolala.svg │ │ │ ├── iOSfanhui.svg │ │ │ ├── jia.svg │ │ │ ├── jia_mian.svg │ │ │ ├── jian.svg │ │ │ ├── jian_mian.svg │ │ │ ├── jianpan.svg │ │ │ ├── jianpanshanchu.svg │ │ │ ├── jianshao.svg │ │ │ ├── jiaopeiwangputong.svg │ │ │ ├── jiaoyi.svg │ │ │ ├── jiedan.svg │ │ │ ├── jiekuan.svg │ │ │ ├── jingshi.svg │ │ │ ├── jingshi_mian.svg │ │ │ ├── jingshi_mian1.svg │ │ │ ├── jingyin.svg │ │ │ ├── jingyin_mian.svg │ │ │ ├── jingying.svg │ │ │ ├── jingying_mian.svg │ │ │ ├── jingyinggonglve.svg │ │ │ ├── jingzhunyingxiao.svg │ │ │ ├── jinhuo.svg │ │ │ ├── kaitongwaimai.svg │ │ │ ├── kanjia.svg │ │ │ ├── kefu.svg │ │ │ ├── kejian.svg │ │ │ ├── kejian_mian.svg │ │ │ ├── keziyuyue.svg │ │ │ ├── kezizhongxin.svg │ │ │ ├── koubei.svg │ │ │ ├── kuaijiehuifu.svg │ │ │ ├── ladu_mian.svg │ │ │ ├── lanyadingwei.svg │ │ │ ├── list-2.svg │ │ │ ├── mendiandongtai.svg │ │ │ ├── mishiyuding.svg │ │ │ ├── mishiyuding1.svg │ │ │ ├── notice_buyer.svg │ │ │ ├── open.svg │ │ │ ├── paiduiquhao.svg │ │ │ ├── paimai.svg │ │ │ ├── pingjia.svg │ │ │ ├── pingtaifapiao.svg │ │ │ ├── pinpai.svg │ │ │ ├── qianbao.svg │ │ │ ├── qianbao_mian.svg │ │ │ ├── qiehuan.svg │ │ │ ├── qingchu.svg │ │ │ ├── qingchu_mian.svg │ │ │ ├── qishoupeisong.svg │ │ │ ├── qiyedingcan.svg │ │ │ ├── qiyedingcan1.svg │ │ │ ├── quanbu.svg │ │ │ ├── quanping.svg │ │ │ ├── qudao.svg │ │ │ ├── qudao_xiaochengxu.svg │ │ │ ├── rencaizhaopin.svg │ │ │ ├── rili.svg │ │ │ ├── rili2.svg │ │ │ ├── rizhi.svg │ │ │ ├── saoma.svg │ │ │ ├── set_pay.svg │ │ │ ├── set_peisong.svg │ │ │ ├── set_user.svg │ │ │ ├── set_weihu.svg │ │ │ ├── shanchu.svg │ │ │ ├── shanchu_mian.svg │ │ │ ├── shangchuan.svg │ │ │ ├── shangchuanzhaopian.svg │ │ │ ├── shangpinguanli.svg │ │ │ ├── shangpinzhushou.svg │ │ │ ├── shangpuyuding.svg │ │ │ ├── shebeiguanli.svg │ │ │ ├── shengfuwangputong.svg │ │ │ ├── shengyin.svg │ │ │ ├── shengyin_mian.svg │ │ │ ├── shezhi.svg │ │ │ ├── shezhi_mian.svg │ │ │ ├── shichang.svg │ │ │ ├── shichang_mian.svg │ │ │ ├── shijian.svg │ │ │ ├── shijian_mian.svg │ │ │ ├── shoudan.svg │ │ │ ├── shouqi.svg │ │ │ ├── shouqi_mian.svg │ │ │ ├── shouye.svg │ │ │ ├── shouye_mian.svg │ │ │ ├── shouyiren.svg │ │ │ ├── show.svg │ │ │ ├── shuangjiantouxiangyou.svg │ │ │ ├── shuangjiantouxiangzuo.svg │ │ │ ├── shuaxin.svg │ │ │ ├── shuju.svg │ │ │ ├── shuju2.svg │ │ │ ├── shuju_liuliang.svg │ │ │ ├── shuju_mian.svg │ │ │ ├── sort.svg │ │ │ ├── sousuo.svg │ │ │ ├── sucai.svg │ │ │ ├── tianjia.svg │ │ │ ├── tishi.svg │ │ │ ├── tishi_mian.svg │ │ │ ├── tongxunlu_mian.svg │ │ │ ├── tongzhi.svg │ │ │ ├── tongzhi_mian.svg │ │ │ ├── tuichuquanping.svg │ │ │ ├── tuiguang.svg │ │ │ ├── tuiguang_mian.svg │ │ │ ├── tupian.svg │ │ │ ├── tupian_mian.svg │ │ │ ├── user_biaoqian.svg │ │ │ ├── user_gaikuang.svg │ │ │ ├── user_guanli.svg │ │ │ ├── wangpudiandan.svg │ │ │ ├── weixin.svg │ │ │ ├── weixin_mian.svg │ │ │ ├── wode.svg │ │ │ ├── wode_mian.svg │ │ │ ├── xiangji.svg │ │ │ ├── xiaoxi.svg │ │ │ ├── xiazai.svg │ │ │ ├── xitongquanxian.svg │ │ │ ├── yingxiao_qipao.svg │ │ │ ├── yingyezizhi.svg │ │ │ ├── yinhangka.svg │ │ │ ├── yiwen.svg │ │ │ ├── youhui.svg │ │ │ ├── youjian.svg │ │ │ ├── youjiantou.svg │ │ │ ├── yulibao.svg │ │ │ ├── yuyin.svg │ │ │ ├── yuyueguanli.svg │ │ │ ├── yuyueguanlishezhi.svg │ │ │ ├── zhankai.svg │ │ │ ├── zhankai_mian.svg │ │ │ ├── zhibo.svg │ │ │ ├── zhibo_mian.svg │ │ │ ├── zhuangxiu.svg │ │ │ ├── zhuangxiu_mian.svg │ │ │ ├── zhuoweiguanli.svg │ │ │ ├── zichanzhuanrang.svg │ │ │ ├── zuliao.svg │ │ │ └── zuliaoyuding.svg │ │ └── images │ │ │ ├── icon_folder.png │ │ │ ├── no_perms.png │ │ │ ├── theme_black.png │ │ │ └── theme_white.png │ ├── components │ │ ├── app-link │ │ │ └── index.vue │ │ ├── color-picker │ │ │ └── index.vue │ │ ├── daterange-picker │ │ │ └── index.vue │ │ ├── del-wrap │ │ │ └── index.vue │ │ ├── dict-value │ │ │ └── index.vue │ │ ├── editor │ │ │ └── index.vue │ │ ├── footer-btns │ │ │ └── index.vue │ │ ├── icon │ │ │ ├── index.ts │ │ │ ├── index.vue │ │ │ ├── picker.vue │ │ │ └── svg-icon.vue │ │ ├── image-contain │ │ │ └── index.vue │ │ ├── link │ │ │ ├── custom-link.vue │ │ │ ├── index.ts │ │ │ ├── index.vue │ │ │ ├── picker.vue │ │ │ └── shop-pages.vue │ │ ├── material │ │ │ ├── file.vue │ │ │ ├── hook.ts │ │ │ ├── index.vue │ │ │ ├── picker.vue │ │ │ └── preview.vue │ │ ├── overflow-tooltip │ │ │ └── index.vue │ │ ├── pagination │ │ │ └── index.vue │ │ ├── popover-input │ │ │ └── index.vue │ │ ├── popup │ │ │ └── index.vue │ │ ├── upload │ │ │ └── index.vue │ │ └── video-player │ │ │ └── index.vue │ ├── config │ │ ├── index.ts │ │ └── setting.ts │ ├── enums │ │ ├── appEnums.ts │ │ ├── cacheEnums.ts │ │ ├── pageEnum.ts │ │ └── requestEnums.ts │ ├── hooks │ │ ├── useDictOptions.ts │ │ ├── useLockFn.ts │ │ ├── useMultipleTabs.ts │ │ ├── usePaging.ts │ │ └── useWatchRoute.ts │ ├── install │ │ ├── directives │ │ │ ├── copy.ts │ │ │ └── perms.ts │ │ ├── index.ts │ │ └── plugins │ │ │ ├── echart.ts │ │ │ ├── element.ts │ │ │ ├── hljs.ts │ │ │ ├── pinia.ts │ │ │ └── router.ts │ ├── layout │ │ ├── components │ │ │ └── footer.vue │ │ └── default │ │ │ ├── components │ │ │ ├── header │ │ │ │ ├── breadcrumb.vue │ │ │ │ ├── fold.vue │ │ │ │ ├── full-screen.vue │ │ │ │ ├── index.vue │ │ │ │ ├── multiple-tabs.vue │ │ │ │ ├── refresh.vue │ │ │ │ └── user-drop-down.vue │ │ │ ├── main.vue │ │ │ ├── setting │ │ │ │ ├── drawer.vue │ │ │ │ └── index.vue │ │ │ └── sidebar │ │ │ │ ├── index.vue │ │ │ │ ├── logo.vue │ │ │ │ ├── menu-item.vue │ │ │ │ ├── menu.vue │ │ │ │ └── side.vue │ │ │ └── index.vue │ ├── likeadmin_python.code-workspace │ ├── main.ts │ ├── permission.ts │ ├── router │ │ ├── index.ts │ │ └── routes.ts │ ├── stores │ │ ├── index.ts │ │ └── modules │ │ │ ├── app.ts │ │ │ ├── multipleTabs.ts │ │ │ ├── setting.ts │ │ │ └── user.ts │ ├── styles │ │ ├── dark.css │ │ ├── element.scss │ │ ├── index.scss │ │ ├── public.scss │ │ ├── tailwind.css │ │ └── var.css │ ├── utils │ │ ├── auth.ts │ │ ├── cache.ts │ │ ├── env.ts │ │ ├── feedback.ts │ │ ├── file.ts │ │ ├── request │ │ │ ├── axios.ts │ │ │ ├── cancel.ts │ │ │ ├── index.ts │ │ │ └── type.d.ts │ │ ├── theme.ts │ │ ├── util.ts │ │ └── validate.ts │ └── views │ │ ├── account │ │ ├── images │ │ │ └── login_bg.png │ │ └── login.vue │ │ ├── article │ │ ├── column │ │ │ ├── edit.vue │ │ │ └── index.vue │ │ └── lists │ │ │ ├── edit.vue │ │ │ └── index.vue │ │ ├── channel │ │ ├── h5.vue │ │ ├── weapp.vue │ │ ├── wx_dev.vue │ │ └── wx_oa │ │ │ ├── config.vue │ │ │ ├── menu.vue │ │ │ ├── menu_com │ │ │ ├── oa-attr.vue │ │ │ ├── oa-menu-form-edit.vue │ │ │ ├── oa-menu-form.vue │ │ │ ├── oa-phone.vue │ │ │ └── useMenuOa.ts │ │ │ └── reply │ │ │ ├── default_reply.vue │ │ │ ├── edit.vue │ │ │ ├── follow_reply.vue │ │ │ └── keyword_reply.vue │ │ ├── consumer │ │ └── lists │ │ │ ├── detail.vue │ │ │ └── index.vue │ │ ├── decoration │ │ ├── component │ │ │ ├── add-nav.vue │ │ │ ├── decoration-img.vue │ │ │ ├── pages │ │ │ │ ├── attr-setting.vue │ │ │ │ ├── menu.vue │ │ │ │ └── preview.vue │ │ │ └── widgets │ │ │ │ ├── banner │ │ │ │ ├── attr.vue │ │ │ │ ├── content.vue │ │ │ │ ├── index.ts │ │ │ │ └── options.ts │ │ │ │ ├── customer-service │ │ │ │ ├── attr.vue │ │ │ │ ├── content.vue │ │ │ │ ├── index.ts │ │ │ │ └── options.ts │ │ │ │ ├── index.ts │ │ │ │ ├── my-service │ │ │ │ ├── attr.vue │ │ │ │ ├── content.vue │ │ │ │ ├── index.ts │ │ │ │ └── options.ts │ │ │ │ ├── nav │ │ │ │ ├── attr.vue │ │ │ │ ├── content.vue │ │ │ │ ├── index.ts │ │ │ │ └── options.ts │ │ │ │ ├── news │ │ │ │ ├── attr.vue │ │ │ │ ├── content.vue │ │ │ │ ├── index.ts │ │ │ │ └── options.ts │ │ │ │ ├── search │ │ │ │ ├── attr.vue │ │ │ │ ├── content.vue │ │ │ │ ├── index.ts │ │ │ │ └── options.ts │ │ │ │ ├── user-banner │ │ │ │ ├── attr.vue │ │ │ │ ├── content.vue │ │ │ │ ├── index.ts │ │ │ │ └── options.ts │ │ │ │ └── user-info │ │ │ │ ├── attr.vue │ │ │ │ ├── content.vue │ │ │ │ ├── images │ │ │ │ ├── default_avatar.png │ │ │ │ └── my_topbg.png │ │ │ │ ├── index.ts │ │ │ │ └── options.ts │ │ ├── pages │ │ │ └── index.vue │ │ └── tabbar.vue │ │ ├── dev_tools │ │ ├── code │ │ │ ├── edit.vue │ │ │ └── index.vue │ │ └── components │ │ │ ├── code-preview.vue │ │ │ └── data-table.vue │ │ ├── error │ │ ├── 403.vue │ │ ├── 404.vue │ │ └── components │ │ │ └── error.vue │ │ ├── material │ │ └── index.vue │ │ ├── message │ │ ├── notice │ │ │ ├── edit.vue │ │ │ └── index.vue │ │ └── short_letter │ │ │ ├── edit.vue │ │ │ └── index.vue │ │ ├── organization │ │ ├── department │ │ │ ├── edit.vue │ │ │ └── index.vue │ │ └── post │ │ │ ├── edit.vue │ │ │ └── index.vue │ │ ├── permission │ │ ├── admin │ │ │ ├── edit.vue │ │ │ └── index.vue │ │ ├── menu │ │ │ ├── edit.vue │ │ │ └── index.vue │ │ └── role │ │ │ ├── auth.vue │ │ │ ├── edit.vue │ │ │ └── index.vue │ │ ├── setting │ │ ├── dict │ │ │ ├── data │ │ │ │ ├── edit.vue │ │ │ │ └── index.vue │ │ │ └── type │ │ │ │ ├── edit.vue │ │ │ │ └── index.vue │ │ ├── search │ │ │ └── index.vue │ │ ├── storage │ │ │ ├── edit.vue │ │ │ └── index.vue │ │ ├── system │ │ │ ├── cache.vue │ │ │ ├── environment.vue │ │ │ └── journal.vue │ │ ├── user │ │ │ ├── login_register.vue │ │ │ └── setup.vue │ │ └── website │ │ │ ├── filing.vue │ │ │ ├── information.vue │ │ │ └── protocol.vue │ │ ├── user │ │ └── setting.vue │ │ └── workbench │ │ ├── image │ │ ├── BrowserPreview_tmp.png │ │ ├── menu_admin.png │ │ ├── menu_auth.png │ │ ├── menu_dept.png │ │ ├── menu_dict.png │ │ ├── menu_file.png │ │ ├── menu_generator.png │ │ ├── menu_role.png │ │ ├── menu_web.png │ │ └── qq_group.png │ │ └── index.vue ├── tailwind.config.js ├── tsconfig.config.json ├── tsconfig.json ├── typings │ ├── index.d.ts │ └── router.d.ts └── vite.config.ts ├── docker ├── .gitignore ├── config │ └── mysql │ │ └── mysqld.cnf └── docker-compose.yml ├── frontend ├── assets │ ├── 403.883c569e.js │ ├── 404.154d0f45.js │ ├── @ctrl.fd318bfa.js │ ├── @element-plus.3660753f.js │ ├── @floating-ui.dd8b295f.js │ ├── @highlightjs.7fc78ec7.js │ ├── @popperjs.36402333.js │ ├── @vue.a137a740.js │ ├── @vueuse.07613b64.js │ ├── @wangeditor.501cf061.css │ ├── @wangeditor.e356e69e.js │ ├── BrowserPreview_tmp.f88b03df.png │ ├── add-nav.c9eb04eb.js │ ├── add-nav.vue_vue_type_script_setup_true_lang.4eccb1b5.js │ ├── article.eeed3520.js │ ├── async-validator.fb49d0f5.js │ ├── attr-setting.07c0c703.js │ ├── attr-setting.vue_vue_type_script_setup_true_lang.79deee70.js │ ├── attr.15bf174a.js │ ├── attr.487363e2.js │ ├── attr.7438b6b3.js │ ├── attr.8ec14385.js │ ├── attr.ad012d89.js │ ├── attr.d3150e80.js │ ├── attr.db9092b2.js │ ├── attr.ea47640a.js │ ├── attr.vue_vue_type_script_setup_true_lang.0af4da96.js │ ├── attr.vue_vue_type_script_setup_true_lang.286479e2.js │ ├── attr.vue_vue_type_script_setup_true_lang.42469fb3.js │ ├── attr.vue_vue_type_script_setup_true_lang.9653ec08.js │ ├── attr.vue_vue_type_script_setup_true_lang.9820b9a5.js │ ├── attr.vue_vue_type_script_setup_true_lang.a6ae21ee.js │ ├── attr.vue_vue_type_script_setup_true_lang.e5ff36d3.js │ ├── attr.vue_vue_type_script_setup_true_lang.ed995f26.js │ ├── auth.675f9d7a.js │ ├── auth.vue_vue_type_script_setup_true_lang.8abe420c.js │ ├── axios.317db7a7.js │ ├── balanced-match.d2a36341.js │ ├── cache.b08e0053.css │ ├── cache.c16fd5bf.js │ ├── clipboard.e9b83688.js │ ├── clone.a10503d0.js │ ├── code-preview.6cd1c185.js │ ├── code-preview.vue_vue_type_script_setup_true_lang.557f935e.js │ ├── code.34d3c9c5.js │ ├── color-convert.755d189f.js │ ├── color-name.e7a4e1d3.js │ ├── color-string.e356f5de.js │ ├── color.3683ba49.js │ ├── config.9da612b1.js │ ├── consumer.e63bb0ad.js │ ├── content.05a5ad66.js │ ├── content.08aa6061.js │ ├── content.34a1bf06.js │ ├── content.58f7c7c8.js │ ├── content.75595e09.css │ ├── content.7a3c8721.js │ ├── content.946314b3.js │ ├── content.9f244b19.css │ ├── content.c1421a4b.js │ ├── content.c40e4b89.css │ ├── content.c9a2d497.css │ ├── content.d2e6e515.js │ ├── content.efb8af20.css │ ├── content.vue_vue_type_script_setup_true_lang.12563a6c.js │ ├── content.vue_vue_type_script_setup_true_lang.43e08694.js │ ├── content.vue_vue_type_script_setup_true_lang.c47a6b69.js │ ├── css-color-function.32b8b184.js │ ├── data-table.c712dccf.js │ ├── data-table.vue_vue_type_script_setup_true_lang.3118650f.js │ ├── dayjs.4eb0747d.js │ ├── decoration-img.a64d82f7.css │ ├── decoration-img.e2c4084c.js │ ├── decoration.ab9ddaa9.js │ ├── default_avatar.fa19527b.png │ ├── default_reply.85746eb6.js │ ├── department.a2353fbd.js │ ├── detail.4417cbc6.js │ ├── dict.7219bd74.js │ ├── echarts.7e912674.js │ ├── edit.068b4bd6.js │ ├── edit.07cfb7c1.js │ ├── edit.090fe7f5.js │ ├── edit.1205cc58.js │ ├── edit.1bd0002d.js │ ├── edit.1f7db440.js │ ├── edit.32d42425.js │ ├── edit.35cc3413.js │ ├── edit.55dec7e2.js │ ├── edit.8390afed.js │ ├── edit.8ca3862c.js │ ├── edit.90219ae5.js │ ├── edit.e44b7d72.js │ ├── edit.e45d328d.js │ ├── edit.vue_vue_type_script_setup_true_lang.049939c0.js │ ├── edit.vue_vue_type_script_setup_true_lang.21575a13.js │ ├── edit.vue_vue_type_script_setup_true_lang.3c212956.js │ ├── edit.vue_vue_type_script_setup_true_lang.48339522.js │ ├── edit.vue_vue_type_script_setup_true_lang.657c933f.js │ ├── edit.vue_vue_type_script_setup_true_lang.70088f77.js │ ├── edit.vue_vue_type_script_setup_true_lang.77cf5016.js │ ├── edit.vue_vue_type_script_setup_true_lang.79e5ce2b.js │ ├── edit.vue_vue_type_script_setup_true_lang.7b7cba97.js │ ├── edit.vue_vue_type_script_setup_true_lang.c9b47d4c.js │ ├── edit.vue_vue_type_script_setup_true_lang.fe50cbb8.js │ ├── element-plus.41b212f5.css │ ├── element-plus.ef27c94c.js │ ├── environment.06dead9b.js │ ├── error.be93caf8.css │ ├── error.fb025926.js │ ├── escape-html.e5dfadb9.js │ ├── filing.581fce73.js │ ├── follow_reply.486c794e.js │ ├── h5.50d13726.js │ ├── highlight.5f5db245.css │ ├── highlight.js.7165574c.js │ ├── index.00854a6a.js │ ├── index.0a86536b.js │ ├── index.0b1bf1d7.js │ ├── index.0d25a475.css │ ├── index.118ecd42.css │ ├── index.15f50578.css │ ├── index.184539bc.css │ ├── index.1ea053f4.js │ ├── index.2a55a6b3.css │ ├── index.2ace3fcf.css │ ├── index.2f038234.js │ ├── index.304c54fe.js │ ├── index.310dbf76.js │ ├── index.40e4ece8.js │ ├── index.4914356c.js │ ├── index.5459dbed.js │ ├── index.65e4d753.js │ ├── index.68592469.js │ ├── index.6fd6879a.js │ ├── index.796a76b8.js │ ├── index.7e7fd4b4.js │ ├── index.8ba3e691.js │ ├── index.9066eeb6.js │ ├── index.9bce7fe7.css │ ├── index.9eba779b.js │ ├── index.a318de61.css │ ├── index.aecdfa78.css │ ├── index.b60a26c4.js │ ├── index.b96eee8c.js │ ├── index.be29c95e.css │ ├── index.c29414e6.js │ ├── index.d37c8696.js │ ├── index.e908ee62.js │ ├── index.fd5ca83c.js │ ├── index.vue_vue_type_script_setup_true_lang.406be744.js │ ├── index.vue_vue_type_script_setup_true_lang.c58ce5d0.js │ ├── index.vue_vue_type_style_index_0_lang.bf6ba2fa.js │ ├── information.b0f4a18d.js │ ├── journal.00b2c9ff.js │ ├── keyword_reply.9005b1a5.js │ ├── lodash-es.a31ceab4.js │ ├── lodash-unified.d120b703.js │ ├── lodash.329a9ebf.js │ ├── login.343b5475.css │ ├── login.67cf91dd.js │ ├── login_bg.2f630cea.png │ ├── login_register.0f5c5c70.js │ ├── memoize-one.5eaee740.js │ ├── menu.05665f74.js │ ├── menu.2c5749e7.js │ ├── menu.52becb26.js │ ├── menu.a050bec6.css │ ├── menu_role.4823a023.png │ ├── message.8c01f477.js │ ├── ms.564e106c.js │ ├── my_topbg.137a6c56.png │ ├── no_perms.a56e95a5.png │ ├── normalize-wheel-es.8aeb3683.js │ ├── nprogress.c50c242d.js │ ├── nprogress.f5128a35.css │ ├── oa-attr.efe92cd1.js │ ├── oa-menu-form-edit.1323994e.js │ ├── oa-menu-form-edit.vue_vue_type_script_setup_true_lang.dfb5b938.js │ ├── oa-menu-form.fa03fb29.js │ ├── oa-menu-form.vue_vue_type_script_setup_true_lang.c6ba9302.js │ ├── oa-phone.26486266.js │ ├── oa-phone.8b9170e2.css │ ├── picker.05436930.css │ ├── picker.34f033cd.js │ ├── picker.5357a91f.css │ ├── picker.c2491a62.js │ ├── pinia.9b4180ce.js │ ├── post.2ca46716.js │ ├── preview.3b66704b.js │ ├── preview.6e931073.css │ ├── protocol.961b1e27.js │ ├── qq_group.3084d316.png │ ├── resize-detector.4e96b72b.js │ ├── role.6aeb8c72.js │ ├── setting.4f75ad07.js │ ├── setup.44af3385.js │ ├── sortablejs.cffe02b4.js │ ├── system.1b516774.js │ ├── tabbar.75f7a8d8.css │ ├── tabbar.c0b0c422.js │ ├── tslib.60310f1a.js │ ├── useDictOptions.b9a39236.js │ ├── useMenuOa.4d1e2306.js │ ├── usePaging.c15919e0.js │ ├── user.883bd654.js │ ├── vue-clipboard3.51d666ae.js │ ├── vue-echarts.ab8d3915.js │ ├── vue-router.9605b890.js │ ├── vue.de363efb.js │ ├── vue3-video-play.74881f83.css │ ├── vue3-video-play.b1eef99b.js │ ├── vuedraggable.0ebeab5f.js │ ├── weapp.901acff4.js │ ├── website.67499d41.js │ ├── wx_dev.29d7c05e.js │ ├── wx_oa.29fa83b3.js │ └── zrender.754e8e90.js └── index.html ├── h5 ├── assets │ ├── account.55f2d7a8.js │ ├── appEnums.a2ba827b.js │ ├── as_us.a2f8b82c.css │ ├── bind_mobile.883a800d.css │ ├── change_password.426e67e4.css │ ├── client.68d036db.js │ ├── collection.c4157529.css │ ├── forget_pwd.c3cfcc99.css │ ├── icon_visit.21b6ed3b.js │ ├── icon_wx.a848c744.png │ ├── index.40995080.css │ ├── index.cfa79457.js │ ├── index.d7cfcc94.css │ ├── login.01e52ca6.css │ ├── news-card.1c7f3f5c.js │ ├── news-card.9d2e9b2e.css │ ├── news.c70d38d5.js │ ├── news.cf577e19.css │ ├── news_detail.3a6411e3.css │ ├── pages-agreement-agreement.950d45dd.js │ ├── pages-as_us-as_us.0f4583ac.js │ ├── pages-bind_mobile-bind_mobile.8c0984e5.js │ ├── pages-change_password-change_password.368fada0.js │ ├── pages-collection-collection.be226c68.js │ ├── pages-customer_service-customer_service.1c74b460.js │ ├── pages-empty-empty.b0d17a0b.js │ ├── pages-forget_pwd-forget_pwd.ec83f574.js │ ├── pages-index-index.228a7b41.js │ ├── pages-login-login.d8908ca6.js │ ├── pages-news-news.bd6814fc.js │ ├── pages-news_detail-news_detail.b6624deb.js │ ├── pages-register-register.0ed93c7a.js │ ├── pages-search-search.cdeefc74.js │ ├── pages-user-user.a7047c05.js │ ├── pages-user_data-user_data.207ce7db.js │ ├── pages-user_set-user_set.ef11c266.js │ ├── pages-webview-webview.3ceac09f.js │ ├── plugin-vue_export-helper.21dcd24c.js │ ├── register.7aa73084.css │ ├── search.5426327c.css │ ├── shop.1aa20054.js │ ├── tabbar.0b704f32.js │ ├── tabbar.7dfafcaa.css │ ├── u-avatar-cropper.91a54bb1.css │ ├── u-avatar.462c9953.js │ ├── u-avatar.dfe1b6cb.css │ ├── u-button.3c53a2f3.js │ ├── u-button.48af928a.css │ ├── u-checkbox.4f7151e8.js │ ├── u-checkbox.c93b1db2.css │ ├── u-form-item.e55e5c90.css │ ├── u-form-item.fa4e8c2b.js │ ├── u-form.bc14ea02.js │ ├── u-icon.48804dd6.js │ ├── u-icon.81bcc25e.css │ ├── u-image.a2832593.js │ ├── u-image.a7813cd9.css │ ├── u-parse.09d7a9f1.js │ ├── u-parse.93f983af.css │ ├── u-popup.399adda1.js │ ├── u-popup.3b64afbe.css │ ├── u-search.35cfd0ff.css │ ├── u-search.bfe2ddde.js │ ├── u-verification-code.bee3c9e7.js │ ├── u-verification-code.e967c1e9.css │ ├── uni.da0b3986.css │ ├── uni_modules-vk-uview-ui-components-u-avatar-cropper-u-avatar-cropper.05e3bd31.js │ ├── user.4b21793f.css │ ├── user_data.d05d0eea.css │ ├── user_set.e61ca628.css │ ├── util.f31571a8.js │ ├── z-paging.7a94f2f9.css │ └── z-paging.7b1a9879.js ├── index.html └── static │ └── images │ ├── icon │ ├── icon_code.png │ ├── icon_mobile.png │ ├── icon_password.png │ ├── icon_user.png │ ├── icon_visit.png │ └── icon_wx.png │ ├── tabs │ ├── home.png │ ├── home_s.png │ ├── news.png │ ├── news_s.png │ ├── user.png │ └── user_s.png │ └── user │ ├── default_avatar.png │ └── my_topbg.png ├── public ├── admin │ ├── assets │ │ ├── 403.883c569e.js │ │ ├── 404.154d0f45.js │ │ ├── @ctrl.fd318bfa.js │ │ ├── @element-plus.3660753f.js │ │ ├── @floating-ui.dd8b295f.js │ │ ├── @highlightjs.7fc78ec7.js │ │ ├── @popperjs.36402333.js │ │ ├── @vue.a137a740.js │ │ ├── @vueuse.07613b64.js │ │ ├── @wangeditor.501cf061.css │ │ ├── @wangeditor.e356e69e.js │ │ ├── BrowserPreview_tmp.f88b03df.png │ │ ├── add-nav.c9eb04eb.js │ │ ├── add-nav.vue_vue_type_script_setup_true_lang.4eccb1b5.js │ │ ├── article.eeed3520.js │ │ ├── async-validator.fb49d0f5.js │ │ ├── attr-setting.07c0c703.js │ │ ├── attr-setting.vue_vue_type_script_setup_true_lang.79deee70.js │ │ ├── attr.15bf174a.js │ │ ├── attr.487363e2.js │ │ ├── attr.7438b6b3.js │ │ ├── attr.8ec14385.js │ │ ├── attr.ad012d89.js │ │ ├── attr.d3150e80.js │ │ ├── attr.db9092b2.js │ │ ├── attr.ea47640a.js │ │ ├── attr.vue_vue_type_script_setup_true_lang.0af4da96.js │ │ ├── attr.vue_vue_type_script_setup_true_lang.286479e2.js │ │ ├── attr.vue_vue_type_script_setup_true_lang.42469fb3.js │ │ ├── attr.vue_vue_type_script_setup_true_lang.9653ec08.js │ │ ├── attr.vue_vue_type_script_setup_true_lang.9820b9a5.js │ │ ├── attr.vue_vue_type_script_setup_true_lang.a6ae21ee.js │ │ ├── attr.vue_vue_type_script_setup_true_lang.e5ff36d3.js │ │ ├── attr.vue_vue_type_script_setup_true_lang.ed995f26.js │ │ ├── auth.675f9d7a.js │ │ ├── auth.vue_vue_type_script_setup_true_lang.8abe420c.js │ │ ├── axios.317db7a7.js │ │ ├── balanced-match.d2a36341.js │ │ ├── cache.b08e0053.css │ │ ├── cache.c16fd5bf.js │ │ ├── clipboard.e9b83688.js │ │ ├── clone.a10503d0.js │ │ ├── code-preview.6cd1c185.js │ │ ├── code-preview.vue_vue_type_script_setup_true_lang.557f935e.js │ │ ├── code.34d3c9c5.js │ │ ├── color-convert.755d189f.js │ │ ├── color-name.e7a4e1d3.js │ │ ├── color-string.e356f5de.js │ │ ├── color.3683ba49.js │ │ ├── config.9da612b1.js │ │ ├── consumer.e63bb0ad.js │ │ ├── content.05a5ad66.js │ │ ├── content.08aa6061.js │ │ ├── content.34a1bf06.js │ │ ├── content.58f7c7c8.js │ │ ├── content.75595e09.css │ │ ├── content.7a3c8721.js │ │ ├── content.946314b3.js │ │ ├── content.9f244b19.css │ │ ├── content.c1421a4b.js │ │ ├── content.c40e4b89.css │ │ ├── content.c9a2d497.css │ │ ├── content.d2e6e515.js │ │ ├── content.efb8af20.css │ │ ├── content.vue_vue_type_script_setup_true_lang.12563a6c.js │ │ ├── content.vue_vue_type_script_setup_true_lang.43e08694.js │ │ ├── content.vue_vue_type_script_setup_true_lang.c47a6b69.js │ │ ├── css-color-function.32b8b184.js │ │ ├── data-table.c712dccf.js │ │ ├── data-table.vue_vue_type_script_setup_true_lang.3118650f.js │ │ ├── dayjs.4eb0747d.js │ │ ├── decoration-img.a64d82f7.css │ │ ├── decoration-img.e2c4084c.js │ │ ├── decoration.ab9ddaa9.js │ │ ├── default_avatar.fa19527b.png │ │ ├── default_reply.85746eb6.js │ │ ├── department.a2353fbd.js │ │ ├── detail.4417cbc6.js │ │ ├── dict.7219bd74.js │ │ ├── echarts.7e912674.js │ │ ├── edit.068b4bd6.js │ │ ├── edit.07cfb7c1.js │ │ ├── edit.090fe7f5.js │ │ ├── edit.1205cc58.js │ │ ├── edit.1bd0002d.js │ │ ├── edit.1f7db440.js │ │ ├── edit.32d42425.js │ │ ├── edit.35cc3413.js │ │ ├── edit.55dec7e2.js │ │ ├── edit.8390afed.js │ │ ├── edit.8ca3862c.js │ │ ├── edit.90219ae5.js │ │ ├── edit.e44b7d72.js │ │ ├── edit.e45d328d.js │ │ ├── edit.vue_vue_type_script_setup_true_lang.049939c0.js │ │ ├── edit.vue_vue_type_script_setup_true_lang.21575a13.js │ │ ├── edit.vue_vue_type_script_setup_true_lang.3c212956.js │ │ ├── edit.vue_vue_type_script_setup_true_lang.48339522.js │ │ ├── edit.vue_vue_type_script_setup_true_lang.657c933f.js │ │ ├── edit.vue_vue_type_script_setup_true_lang.70088f77.js │ │ ├── edit.vue_vue_type_script_setup_true_lang.77cf5016.js │ │ ├── edit.vue_vue_type_script_setup_true_lang.79e5ce2b.js │ │ ├── edit.vue_vue_type_script_setup_true_lang.7b7cba97.js │ │ ├── edit.vue_vue_type_script_setup_true_lang.c9b47d4c.js │ │ ├── edit.vue_vue_type_script_setup_true_lang.fe50cbb8.js │ │ ├── element-plus.41b212f5.css │ │ ├── element-plus.ef27c94c.js │ │ ├── environment.06dead9b.js │ │ ├── error.be93caf8.css │ │ ├── error.fb025926.js │ │ ├── escape-html.e5dfadb9.js │ │ ├── filing.581fce73.js │ │ ├── follow_reply.486c794e.js │ │ ├── h5.50d13726.js │ │ ├── highlight.5f5db245.css │ │ ├── highlight.js.7165574c.js │ │ ├── index.00854a6a.js │ │ ├── index.0a86536b.js │ │ ├── index.0b1bf1d7.js │ │ ├── index.0d25a475.css │ │ ├── index.118ecd42.css │ │ ├── index.15f50578.css │ │ ├── index.184539bc.css │ │ ├── index.1ea053f4.js │ │ ├── index.2a55a6b3.css │ │ ├── index.2ace3fcf.css │ │ ├── index.2f038234.js │ │ ├── index.304c54fe.js │ │ ├── index.310dbf76.js │ │ ├── index.40e4ece8.js │ │ ├── index.4914356c.js │ │ ├── index.5459dbed.js │ │ ├── index.65e4d753.js │ │ ├── index.68592469.js │ │ ├── index.6fd6879a.js │ │ ├── index.796a76b8.js │ │ ├── index.7e7fd4b4.js │ │ ├── index.8ba3e691.js │ │ ├── index.9066eeb6.js │ │ ├── index.9bce7fe7.css │ │ ├── index.9eba779b.js │ │ ├── index.a318de61.css │ │ ├── index.aecdfa78.css │ │ ├── index.b60a26c4.js │ │ ├── index.b96eee8c.js │ │ ├── index.be29c95e.css │ │ ├── index.c29414e6.js │ │ ├── index.d37c8696.js │ │ ├── index.e908ee62.js │ │ ├── index.fd5ca83c.js │ │ ├── index.vue_vue_type_script_setup_true_lang.406be744.js │ │ ├── index.vue_vue_type_script_setup_true_lang.c58ce5d0.js │ │ ├── index.vue_vue_type_style_index_0_lang.bf6ba2fa.js │ │ ├── information.b0f4a18d.js │ │ ├── journal.00b2c9ff.js │ │ ├── keyword_reply.9005b1a5.js │ │ ├── lodash-es.a31ceab4.js │ │ ├── lodash-unified.d120b703.js │ │ ├── lodash.329a9ebf.js │ │ ├── login.343b5475.css │ │ ├── login.67cf91dd.js │ │ ├── login_bg.2f630cea.png │ │ ├── login_register.0f5c5c70.js │ │ ├── memoize-one.5eaee740.js │ │ ├── menu.05665f74.js │ │ ├── menu.2c5749e7.js │ │ ├── menu.52becb26.js │ │ ├── menu.a050bec6.css │ │ ├── menu_role.4823a023.png │ │ ├── message.8c01f477.js │ │ ├── ms.564e106c.js │ │ ├── my_topbg.137a6c56.png │ │ ├── no_perms.a56e95a5.png │ │ ├── normalize-wheel-es.8aeb3683.js │ │ ├── nprogress.c50c242d.js │ │ ├── nprogress.f5128a35.css │ │ ├── oa-attr.efe92cd1.js │ │ ├── oa-menu-form-edit.1323994e.js │ │ ├── oa-menu-form-edit.vue_vue_type_script_setup_true_lang.dfb5b938.js │ │ ├── oa-menu-form.fa03fb29.js │ │ ├── oa-menu-form.vue_vue_type_script_setup_true_lang.c6ba9302.js │ │ ├── oa-phone.26486266.js │ │ ├── oa-phone.8b9170e2.css │ │ ├── picker.05436930.css │ │ ├── picker.34f033cd.js │ │ ├── picker.5357a91f.css │ │ ├── picker.c2491a62.js │ │ ├── pinia.9b4180ce.js │ │ ├── post.2ca46716.js │ │ ├── preview.3b66704b.js │ │ ├── preview.6e931073.css │ │ ├── protocol.961b1e27.js │ │ ├── qq_group.3084d316.png │ │ ├── resize-detector.4e96b72b.js │ │ ├── role.6aeb8c72.js │ │ ├── setting.4f75ad07.js │ │ ├── setup.44af3385.js │ │ ├── sortablejs.cffe02b4.js │ │ ├── system.1b516774.js │ │ ├── tabbar.75f7a8d8.css │ │ ├── tabbar.c0b0c422.js │ │ ├── tslib.60310f1a.js │ │ ├── useDictOptions.b9a39236.js │ │ ├── useMenuOa.4d1e2306.js │ │ ├── usePaging.c15919e0.js │ │ ├── user.883bd654.js │ │ ├── vue-clipboard3.51d666ae.js │ │ ├── vue-echarts.ab8d3915.js │ │ ├── vue-router.9605b890.js │ │ ├── vue.de363efb.js │ │ ├── vue3-video-play.74881f83.css │ │ ├── vue3-video-play.b1eef99b.js │ │ ├── vuedraggable.0ebeab5f.js │ │ ├── weapp.901acff4.js │ │ ├── website.67499d41.js │ │ ├── wx_dev.29d7c05e.js │ │ ├── wx_oa.29fa83b3.js │ │ └── zrender.754e8e90.js │ └── index.html ├── index.html ├── mobile │ ├── assets │ │ ├── account.55f2d7a8.js │ │ ├── appEnums.a2ba827b.js │ │ ├── as_us.a2f8b82c.css │ │ ├── bind_mobile.883a800d.css │ │ ├── change_password.426e67e4.css │ │ ├── client.68d036db.js │ │ ├── collection.c4157529.css │ │ ├── forget_pwd.c3cfcc99.css │ │ ├── icon_visit.21b6ed3b.js │ │ ├── icon_wx.a848c744.png │ │ ├── index.40995080.css │ │ ├── index.cfa79457.js │ │ ├── index.d7cfcc94.css │ │ ├── login.01e52ca6.css │ │ ├── news-card.1c7f3f5c.js │ │ ├── news-card.9d2e9b2e.css │ │ ├── news.c70d38d5.js │ │ ├── news.cf577e19.css │ │ ├── news_detail.3a6411e3.css │ │ ├── pages-agreement-agreement.950d45dd.js │ │ ├── pages-as_us-as_us.0f4583ac.js │ │ ├── pages-bind_mobile-bind_mobile.8c0984e5.js │ │ ├── pages-change_password-change_password.368fada0.js │ │ ├── pages-collection-collection.be226c68.js │ │ ├── pages-customer_service-customer_service.1c74b460.js │ │ ├── pages-empty-empty.b0d17a0b.js │ │ ├── pages-forget_pwd-forget_pwd.ec83f574.js │ │ ├── pages-index-index.228a7b41.js │ │ ├── pages-login-login.d8908ca6.js │ │ ├── pages-news-news.bd6814fc.js │ │ ├── pages-news_detail-news_detail.b6624deb.js │ │ ├── pages-register-register.0ed93c7a.js │ │ ├── pages-search-search.cdeefc74.js │ │ ├── pages-user-user.a7047c05.js │ │ ├── pages-user_data-user_data.207ce7db.js │ │ ├── pages-user_set-user_set.ef11c266.js │ │ ├── pages-webview-webview.3ceac09f.js │ │ ├── plugin-vue_export-helper.21dcd24c.js │ │ ├── register.7aa73084.css │ │ ├── search.5426327c.css │ │ ├── shop.1aa20054.js │ │ ├── tabbar.0b704f32.js │ │ ├── tabbar.7dfafcaa.css │ │ ├── u-avatar-cropper.91a54bb1.css │ │ ├── u-avatar.462c9953.js │ │ ├── u-avatar.dfe1b6cb.css │ │ ├── u-button.3c53a2f3.js │ │ ├── u-button.48af928a.css │ │ ├── u-checkbox.4f7151e8.js │ │ ├── u-checkbox.c93b1db2.css │ │ ├── u-form-item.e55e5c90.css │ │ ├── u-form-item.fa4e8c2b.js │ │ ├── u-form.bc14ea02.js │ │ ├── u-icon.48804dd6.js │ │ ├── u-icon.81bcc25e.css │ │ ├── u-image.a2832593.js │ │ ├── u-image.a7813cd9.css │ │ ├── u-parse.09d7a9f1.js │ │ ├── u-parse.93f983af.css │ │ ├── u-popup.399adda1.js │ │ ├── u-popup.3b64afbe.css │ │ ├── u-search.35cfd0ff.css │ │ ├── u-search.bfe2ddde.js │ │ ├── u-verification-code.bee3c9e7.js │ │ ├── u-verification-code.e967c1e9.css │ │ ├── uni.da0b3986.css │ │ ├── uni_modules-vk-uview-ui-components-u-avatar-cropper-u-avatar-cropper.05e3bd31.js │ │ ├── user.4b21793f.css │ │ ├── user_data.d05d0eea.css │ │ ├── user_set.e61ca628.css │ │ ├── util.f31571a8.js │ │ ├── z-paging.7a94f2f9.css │ │ └── z-paging.7b1a9879.js │ ├── index.html │ └── static │ │ └── images │ │ ├── icon │ │ ├── icon_code.png │ │ ├── icon_mobile.png │ │ ├── icon_password.png │ │ ├── icon_user.png │ │ ├── icon_visit.png │ │ └── icon_wx.png │ │ ├── tabs │ │ ├── home.png │ │ ├── home_s.png │ │ ├── news.png │ │ ├── news_s.png │ │ ├── user.png │ │ └── user_s.png │ │ └── user │ │ ├── default_avatar.png │ │ └── my_topbg.png └── uploads │ └── index.html ├── server ├── .example.env ├── .gitignore ├── __init__.py ├── asgi.py ├── asgi_front.py ├── cli │ ├── __init__.py │ ├── db_helper.py │ └── env.py ├── like │ ├── __init__.py │ ├── admin │ │ ├── __init__.py │ │ ├── config.py │ │ ├── routers │ │ │ ├── __init__.py │ │ │ ├── article.py │ │ │ ├── channel.py │ │ │ ├── common.py │ │ │ ├── decorate.py │ │ │ ├── monitor.py │ │ │ ├── setting.py │ │ │ ├── system.py │ │ │ └── user.py │ │ ├── schemas │ │ │ ├── __init__.py │ │ │ ├── article.py │ │ │ ├── channel.py │ │ │ ├── common.py │ │ │ ├── decorate.py │ │ │ ├── setting.py │ │ │ ├── system.py │ │ │ └── user.py │ │ └── service │ │ │ ├── __init__.py │ │ │ ├── article │ │ │ ├── __init__.py │ │ │ ├── article.py │ │ │ └── article_cate.py │ │ │ ├── channel │ │ │ ├── __init__.py │ │ │ ├── h5.py │ │ │ ├── mp.py │ │ │ ├── oa.py │ │ │ ├── oa_menu.py │ │ │ ├── oa_reply_default.py │ │ │ ├── oa_reply_follow.py │ │ │ ├── oa_reply_keyword.py │ │ │ └── wx.py │ │ │ ├── common │ │ │ ├── __init__.py │ │ │ ├── album.py │ │ │ ├── index.py │ │ │ └── upload.py │ │ │ ├── decorate │ │ │ ├── __init__.py │ │ │ ├── data_article.py │ │ │ ├── page.py │ │ │ └── tabbar.py │ │ │ ├── setting │ │ │ ├── __init__.py │ │ │ ├── copyright.py │ │ │ ├── dict_manager.py │ │ │ ├── login.py │ │ │ ├── notice.py │ │ │ ├── protocol.py │ │ │ ├── search.py │ │ │ ├── sms.py │ │ │ ├── storage_service.py │ │ │ ├── user.py │ │ │ └── website.py │ │ │ ├── system │ │ │ ├── __init__.py │ │ │ ├── auth_admin.py │ │ │ ├── auth_dept.py │ │ │ ├── auth_menu.py │ │ │ ├── auth_perm.py │ │ │ ├── auth_post.py │ │ │ ├── auth_role.py │ │ │ ├── login.py │ │ │ └── logs.py │ │ │ └── user │ │ │ ├── __init__.py │ │ │ └── user.py │ ├── app.py │ ├── common │ │ ├── enums.py │ │ └── sms_captcha.py │ ├── config.py │ ├── dependencies │ │ ├── __init__.py │ │ ├── cache.py │ │ ├── database.py │ │ ├── log.py │ │ └── verify.py │ ├── exceptions │ │ ├── __init__.py │ │ ├── base.py │ │ └── global_exc.py │ ├── front │ │ ├── __init__.py │ │ ├── config.py │ │ ├── routers │ │ │ ├── __init__.py │ │ │ ├── article.py │ │ │ ├── index.py │ │ │ ├── login.py │ │ │ ├── sms.py │ │ │ ├── upload.py │ │ │ └── user.py │ │ ├── schemas │ │ │ ├── article.py │ │ │ ├── index.py │ │ │ ├── login.py │ │ │ ├── sms.py │ │ │ └── user.py │ │ └── service │ │ │ ├── __init__.py │ │ │ ├── article.py │ │ │ ├── index.py │ │ │ ├── login.py │ │ │ ├── sms.py │ │ │ └── user.py │ ├── generator │ │ ├── __init__.py │ │ ├── config.py │ │ ├── constants.py │ │ ├── routers │ │ │ ├── __init__.py │ │ │ └── gen.py │ │ ├── schemas │ │ │ ├── __init__.py │ │ │ └── generate.py │ │ ├── service │ │ │ ├── __init__.py │ │ │ └── generate.py │ │ ├── templates │ │ │ ├── py │ │ │ │ ├── models.py.tpl │ │ │ │ ├── routes.py.tpl │ │ │ │ ├── schemas.py.tpl │ │ │ │ └── service.py.tpl │ │ │ └── vue │ │ │ │ ├── api.ts.tpl │ │ │ │ ├── edit.vue.tpl │ │ │ │ ├── index-tree.vue.tpl │ │ │ │ └── index.vue.tpl │ │ ├── tpl_util.py │ │ └── utils │ │ │ ├── __init__.py │ │ │ └── gen.py │ ├── http_base.py │ ├── middlewares.py │ ├── models │ │ ├── __init__.py │ │ ├── article.py │ │ ├── base.py │ │ ├── common.py │ │ ├── decorate.py │ │ ├── gen.py │ │ ├── notice.py │ │ ├── reply.py │ │ ├── setting.py │ │ ├── system.py │ │ └── user.py │ ├── plugins │ │ ├── __init__.py │ │ ├── notice │ │ │ ├── __init__.py │ │ │ ├── engine │ │ │ │ └── sms_notice.py │ │ │ ├── notice_driver.py │ │ │ └── template │ │ │ │ └── sms_template.py │ │ ├── sms │ │ │ ├── __init__.py │ │ │ ├── engine │ │ │ │ ├── __init__.py │ │ │ │ ├── aliyun_sms.py │ │ │ │ ├── sms_base.py │ │ │ │ └── tencent_sms.py │ │ │ └── sms_driver.py │ │ └── storage │ │ │ ├── __init__.py │ │ │ ├── engine │ │ │ ├── __init__.py │ │ │ ├── aliyun.py │ │ │ ├── local.py │ │ │ ├── qcloud.py │ │ │ └── qiniu.py │ │ │ └── storage_driver.py │ ├── schema_base.py │ ├── server_info.py │ └── utils │ │ ├── __init__.py │ │ ├── array.py │ │ ├── config.py │ │ ├── datetime.py │ │ ├── ip.py │ │ ├── redis.py │ │ ├── singleton_abstract_class_utils.py │ │ ├── string.py │ │ ├── tools.py │ │ ├── urls.py │ │ └── wechat.py ├── migrations │ └── __init__.py ├── requirements.txt ├── run_admin.sh ├── run_front.sh ├── static │ ├── ad01.jpg │ ├── article01.png │ ├── article02.jpeg │ ├── article03.png │ ├── backend_avatar.png │ ├── backend_backdrop.png │ ├── backend_favicon.ico │ ├── backend_logo.png │ ├── banner01.png │ ├── banner02.png │ ├── default_avatar.png │ ├── nav01.png │ ├── nav02.png │ ├── nav03.png │ ├── nav04.png │ ├── nav05.png │ ├── pc_favicon.ico │ ├── pc_logo.png │ ├── shop_logo.png │ ├── tabbar_home.png │ ├── tabbar_home_sel.png │ ├── tabbar_me.png │ ├── tabbar_me_sel.png │ ├── tabbar_text.png │ ├── tabbar_text_sel.png │ ├── user_about.png │ ├── user_collect.png │ ├── user_kefu.png │ └── user_setting.png └── tests │ └── __init__.py ├── sql └── install.sql └── uniapp ├── .env.development.example ├── .env.production.example ├── .eslintrc.js ├── .gitignore ├── .vscode ├── extensions.json └── settings.json ├── index.html ├── package-lock.json ├── package.json ├── scripts └── build.h5.mjs ├── src ├── App.vue ├── api │ ├── account.ts │ ├── app.ts │ ├── news.ts │ ├── shop.ts │ └── user.ts ├── components │ ├── app │ │ └── app.vue │ ├── news-card │ │ └── news-card.vue │ ├── tab │ │ └── tab.vue │ ├── tabbar │ │ └── tabbar.vue │ ├── tabs │ │ └── tabs.vue │ └── widgets │ │ ├── banner │ │ └── banner.vue │ │ ├── customer-service │ │ └── customer-service.vue │ │ ├── my-service │ │ └── my-service.vue │ │ ├── nav │ │ └── nav.vue │ │ ├── search │ │ └── search.vue │ │ ├── user-banner │ │ └── user-banner.vue │ │ └── user-info │ │ └── user-info.vue ├── enums │ ├── agreementEnums.ts │ ├── appEnums.ts │ ├── cacheEnums.ts │ └── requestEnums.ts ├── hooks │ ├── useCopy.ts │ ├── useLockFn.ts │ └── useTouch.ts ├── main.ts ├── manifest.json ├── pages.json ├── pages │ ├── agreement │ │ └── agreement.vue │ ├── as_us │ │ └── as_us.vue │ ├── bind_mobile │ │ └── bind_mobile.vue │ ├── change_password │ │ └── change_password.vue │ ├── collection │ │ └── collection.vue │ ├── customer_service │ │ └── customer_service.vue │ ├── empty │ │ └── empty.vue │ ├── forget_pwd │ │ └── forget_pwd.vue │ ├── index │ │ └── index.vue │ ├── login │ │ └── login.vue │ ├── news │ │ ├── component │ │ │ └── news-list.vue │ │ └── news.vue │ ├── news_detail │ │ └── news_detail.vue │ ├── register │ │ └── register.vue │ ├── search │ │ ├── component │ │ │ └── suggest.vue │ │ └── search.vue │ ├── user │ │ └── user.vue │ ├── user_data │ │ └── user_data.vue │ ├── user_set │ │ └── user_set.vue │ └── webview │ │ └── webview.vue ├── plugins │ ├── index.ts │ └── modules │ │ ├── pinia.ts │ │ ├── uview.ts │ │ └── vconsole.ts ├── router │ ├── index.ts │ └── routes.ts ├── static │ └── images │ │ ├── icon │ │ ├── icon_code.png │ │ ├── icon_mobile.png │ │ ├── icon_password.png │ │ ├── icon_user.png │ │ ├── icon_visit.png │ │ └── icon_wx.png │ │ ├── tabs │ │ ├── home.png │ │ ├── home_s.png │ │ ├── news.png │ │ ├── news_s.png │ │ ├── user.png │ │ └── user_s.png │ │ └── user │ │ ├── default_avatar.png │ │ └── my_topbg.png ├── stores │ ├── app.ts │ └── user.ts ├── styles │ ├── index.scss │ ├── public.scss │ ├── tailwind.css │ └── var.css ├── uni.scss ├── uni_modules │ └── vk-uview-ui │ │ ├── changelog.md │ │ ├── components │ │ ├── u-action-sheet │ │ │ └── u-action-sheet.vue │ │ ├── u-alert-tips │ │ │ └── u-alert-tips.vue │ │ ├── u-avatar-cropper │ │ │ ├── u-avatar-cropper.vue │ │ │ └── weCropper.js │ │ ├── u-avatar │ │ │ └── u-avatar.vue │ │ ├── u-back-top │ │ │ └── u-back-top.vue │ │ ├── u-badge │ │ │ └── u-badge.vue │ │ ├── u-button │ │ │ └── u-button.vue │ │ ├── u-calendar │ │ │ └── u-calendar.vue │ │ ├── u-car-keyboard │ │ │ └── u-car-keyboard.vue │ │ ├── u-card │ │ │ └── u-card.vue │ │ ├── u-cell-group │ │ │ └── u-cell-group.vue │ │ ├── u-cell-item │ │ │ └── u-cell-item.vue │ │ ├── u-checkbox-group │ │ │ └── u-checkbox-group.vue │ │ ├── u-checkbox │ │ │ └── u-checkbox.vue │ │ ├── u-circle-progress │ │ │ └── u-circle-progress.vue │ │ ├── u-col │ │ │ └── u-col.vue │ │ ├── u-collapse-item │ │ │ └── u-collapse-item.vue │ │ ├── u-collapse │ │ │ └── u-collapse.vue │ │ ├── u-column-notice │ │ │ └── u-column-notice.vue │ │ ├── u-count-down │ │ │ ├── u-count-down.vue │ │ │ └── utils.js │ │ ├── u-count-to │ │ │ └── u-count-to.vue │ │ ├── u-divider │ │ │ └── u-divider.vue │ │ ├── u-dropdown-item │ │ │ └── u-dropdown-item.vue │ │ ├── u-dropdown │ │ │ └── u-dropdown.vue │ │ ├── u-empty │ │ │ └── u-empty.vue │ │ ├── u-field │ │ │ └── u-field.vue │ │ ├── u-form-item │ │ │ └── u-form-item.vue │ │ ├── u-form │ │ │ └── u-form.vue │ │ ├── u-full-screen │ │ │ └── u-full-screen.vue │ │ ├── u-gap │ │ │ └── u-gap.vue │ │ ├── u-grid-item │ │ │ └── u-grid-item.vue │ │ ├── u-grid │ │ │ └── u-grid.vue │ │ ├── u-icon │ │ │ └── u-icon.vue │ │ ├── u-image │ │ │ └── u-image.vue │ │ ├── u-index-anchor │ │ │ └── u-index-anchor.vue │ │ ├── u-index-list │ │ │ └── u-index-list.vue │ │ ├── u-input │ │ │ └── u-input.vue │ │ ├── u-keyboard │ │ │ └── u-keyboard.vue │ │ ├── u-lazy-load │ │ │ └── u-lazy-load.vue │ │ ├── u-line-progress │ │ │ └── u-line-progress.vue │ │ ├── u-line │ │ │ └── u-line.vue │ │ ├── u-link │ │ │ └── u-link.vue │ │ ├── u-loading-page │ │ │ └── u-loading-page.vue │ │ ├── u-loading │ │ │ └── u-loading.vue │ │ ├── u-loadmore │ │ │ └── u-loadmore.vue │ │ ├── u-mask │ │ │ └── u-mask.vue │ │ ├── u-message-input │ │ │ └── u-message-input.vue │ │ ├── u-modal │ │ │ └── u-modal.vue │ │ ├── u-navbar │ │ │ └── u-navbar.vue │ │ ├── u-no-network │ │ │ └── u-no-network.vue │ │ ├── u-notice-bar │ │ │ └── u-notice-bar.vue │ │ ├── u-number-box │ │ │ └── u-number-box.vue │ │ ├── u-number-keyboard │ │ │ └── u-number-keyboard.vue │ │ ├── u-parse │ │ │ ├── libs │ │ │ │ ├── CssHandler.js │ │ │ │ ├── MpHtmlParser.js │ │ │ │ ├── config.js │ │ │ │ └── trees.vue │ │ │ └── u-parse.vue │ │ ├── u-picker │ │ │ └── u-picker.vue │ │ ├── u-popup │ │ │ └── u-popup.vue │ │ ├── u-radio-group │ │ │ └── u-radio-group.vue │ │ ├── u-radio │ │ │ └── u-radio.vue │ │ ├── u-rate │ │ │ └── u-rate.vue │ │ ├── u-read-more │ │ │ └── u-read-more.vue │ │ ├── u-row-notice │ │ │ └── u-row-notice.vue │ │ ├── u-row │ │ │ └── u-row.vue │ │ ├── u-search │ │ │ └── u-search.vue │ │ ├── u-section │ │ │ └── u-section.vue │ │ ├── u-select │ │ │ └── u-select.vue │ │ ├── u-skeleton │ │ │ └── u-skeleton.vue │ │ ├── u-slider │ │ │ └── u-slider.vue │ │ ├── u-steps │ │ │ └── u-steps.vue │ │ ├── u-sticky │ │ │ └── u-sticky.vue │ │ ├── u-subsection │ │ │ └── u-subsection.vue │ │ ├── u-swipe-action │ │ │ └── u-swipe-action.vue │ │ ├── u-swiper │ │ │ └── u-swiper.vue │ │ ├── u-switch │ │ │ └── u-switch.vue │ │ ├── u-tabbar │ │ │ └── u-tabbar.vue │ │ ├── u-table │ │ │ └── u-table.vue │ │ ├── u-tabs-swiper │ │ │ └── u-tabs-swiper.vue │ │ ├── u-tabs │ │ │ └── u-tabs.vue │ │ ├── u-tag │ │ │ └── u-tag.vue │ │ ├── u-td │ │ │ └── u-td.vue │ │ ├── u-th │ │ │ └── u-th.vue │ │ ├── u-time-line-item │ │ │ └── u-time-line-item.vue │ │ ├── u-time-line │ │ │ └── u-time-line.vue │ │ ├── u-toast │ │ │ └── u-toast.vue │ │ ├── u-top-tips │ │ │ └── u-top-tips.vue │ │ ├── u-tr │ │ │ └── u-tr.vue │ │ ├── u-upload │ │ │ └── u-upload.vue │ │ ├── u-verification-code │ │ │ └── u-verification-code.vue │ │ ├── u-waterfall │ │ │ └── u-waterfall.vue │ │ └── vk-uview-ui │ │ │ └── vk-uview-ui.vue │ │ ├── iconfont.css │ │ ├── index.js │ │ ├── index.scss │ │ ├── libs │ │ ├── address │ │ │ ├── areas.json │ │ │ ├── citys.json │ │ │ └── provinces.json │ │ ├── config │ │ │ ├── config.js │ │ │ └── zIndex.js │ │ ├── css │ │ │ ├── color.scss │ │ │ ├── common.scss │ │ │ ├── style.components.scss │ │ │ ├── style.h5.scss │ │ │ ├── style.mp.scss │ │ │ ├── style.nvue.scss │ │ │ └── style.vue.scss │ │ ├── function │ │ │ ├── $parent.js │ │ │ ├── addUnit.js │ │ │ ├── bem.js │ │ │ ├── color.js │ │ │ ├── colorGradient.js │ │ │ ├── debounce.js │ │ │ ├── deepClone.js │ │ │ ├── deepMerge.js │ │ │ ├── getParent.js │ │ │ ├── guid.js │ │ │ ├── md5.js │ │ │ ├── queryParams.js │ │ │ ├── random.js │ │ │ ├── randomArray.js │ │ │ ├── route.js │ │ │ ├── sys.js │ │ │ ├── test.js │ │ │ ├── throttle.js │ │ │ ├── timeFormat.js │ │ │ ├── timeFrom.js │ │ │ ├── toast.js │ │ │ ├── trim.js │ │ │ └── type2icon.js │ │ ├── mixin │ │ │ ├── mixin.js │ │ │ └── mpShare.js │ │ ├── request │ │ │ └── index.js │ │ ├── store │ │ │ └── index.js │ │ └── util │ │ │ ├── async-validator.js │ │ │ └── emitter.js │ │ ├── package.json │ │ ├── readme.md │ │ └── theme.scss └── utils │ ├── auth.ts │ ├── cache.ts │ ├── client.ts │ ├── env.ts │ ├── file.ts │ ├── request │ ├── cancel.ts │ ├── http.ts │ ├── index.ts │ └── type.d.ts │ ├── util.ts │ └── wechat.ts ├── tailwind.config.js ├── tsconfig.json ├── typings ├── env.d.ts └── uni.d.ts └── vite.config.ts /.gitignore: -------------------------------------------------------------------------------- 1 | .fleet 2 | .idea 3 | env.production 4 | -------------------------------------------------------------------------------- /admin/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | .DS_Store 12 | dist 13 | dist-ssr 14 | coverage 15 | *.local 16 | 17 | # unplugin-auto-import 18 | auto-imports.d.ts 19 | components.d.ts 20 | .eslintrc-auto-import.json 21 | 22 | /cypress/videos/ 23 | /cypress/screenshots/ 24 | 25 | # Editor directories and files 26 | .idea 27 | *.suo 28 | *.ntvs* 29 | *.njsproj 30 | *.sln 31 | *.sw? 32 | 33 | # .env 34 | .env.development 35 | .env.production 36 | -------------------------------------------------------------------------------- /admin/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"] 3 | } 4 | -------------------------------------------------------------------------------- /admin/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.detectIndentation": false, 3 | "editor.tabSize": 4, 4 | "editor.formatOnSave": true, 5 | "editor.codeActionsOnSave": { 6 | "source.fixAll.eslint": true 7 | }, 8 | "css.validate": false, 9 | "less.validate": false, 10 | "scss.validate": false 11 | } 12 | -------------------------------------------------------------------------------- /admin/global.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /admin/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {} 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /admin/src/api/app.ts: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | // 配置 4 | export function getConfig() { 5 | return request.get({ url: '/common/index/config' }) 6 | } 7 | 8 | // 工作台主页 9 | export function getWorkbench() { 10 | return request.get({ url: '/common/index/console' }) 11 | } 12 | -------------------------------------------------------------------------------- /admin/src/api/channel/h5.ts: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | // H5渠道配置保存 4 | export function setH5Config(params: any) { 5 | return request.post({ url: '/channel/h5/save', params }) 6 | } 7 | 8 | // H5渠道配置详情 9 | export function getH5Config() { 10 | return request.get({ url: '/channel/h5/detail' }) 11 | } 12 | -------------------------------------------------------------------------------- /admin/src/api/channel/weapp.ts: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | // 微信小程序配置保存 4 | export function setWeappConfig(params: any) { 5 | return request.post({ url: '/channel/mp/save', params }) 6 | } 7 | 8 | // 微信小程序配置详情 9 | export function getWeappConfig() { 10 | return request.get({ url: '/channel/mp/detail' }) 11 | } 12 | -------------------------------------------------------------------------------- /admin/src/api/channel/wx_dev.ts: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | // 微信开发平台配置保存 4 | export function setWxDevConfig(params: any) { 5 | return request.post({ url: '/channel/wx/save', params }) 6 | } 7 | 8 | // 微信开发平台配置详情 9 | export function getWxDevConfig() { 10 | return request.get({ url: '/channel/wx/detail' }) 11 | } 12 | -------------------------------------------------------------------------------- /admin/src/api/consumer.ts: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | // 用户列表 4 | export function getUserList(params: any) { 5 | return request.get({ url: '/user/list', params }) 6 | } 7 | 8 | // 用户详情 9 | export function getUserDetail(params: any) { 10 | return request.get({ url: '/user/detail', params }) 11 | } 12 | 13 | // 用户编辑 14 | export function userEdit(params: any) { 15 | return request.post({ url: '/user/edit', params }) 16 | } 17 | -------------------------------------------------------------------------------- /admin/src/api/org/department.ts: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | // 部门列表 4 | export function deptLists(params?: any) { 5 | return request.get({ url: '/system/dept/list', params }) 6 | } 7 | 8 | // 添加部门 9 | export function deptAdd(params: any) { 10 | return request.post({ url: '/system/dept/add', params }) 11 | } 12 | 13 | // 编辑部门 14 | export function deptEdit(params: any) { 15 | return request.post({ url: '/system/dept/edit', params }) 16 | } 17 | 18 | // 删除部门 19 | export function deptDelete(params: any) { 20 | return request.post({ url: '/system/dept/del', params }) 21 | } 22 | 23 | // 部门详情 24 | export function deptDetail(params?: any) { 25 | return request.get({ url: '/system/dept/detail', params }) 26 | } 27 | -------------------------------------------------------------------------------- /admin/src/api/setting/search.ts: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | /** 4 | * @return { Promise } 5 | * @description 获取热门搜索数据 6 | */ 7 | export function getSearch() { 8 | return request.get({ url: '/setting/search/detail' }) 9 | } 10 | 11 | export interface List { 12 | name: string // 搜索关键字 13 | sort: number // 热门搜索排序 14 | } 15 | 16 | export interface Search { 17 | isHotSearch: number // 是否开启搜索0/1 18 | list: List[] 19 | } 20 | /** 21 | * @return { Promise } 22 | * @param { Search } Search 23 | * @description 设置热门搜索 24 | */ 25 | export function setSearch(params: Search) { 26 | return request.post({ url: '/setting/search/save', params }) 27 | } 28 | -------------------------------------------------------------------------------- /admin/src/api/setting/storage.ts: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | // 获取存储引擎列表 4 | export function storageLists() { 5 | return request.get({ url: '/setting/storage/list' }) 6 | } 7 | 8 | // 设置存储引擎信息 9 | export function storageChange(params: any) { 10 | return request.post({ url: '/setting/storage/change', params }) 11 | } 12 | 13 | // 设置存储引擎信息 14 | export function storageSetup(params: any) { 15 | return request.post({ url: '/setting/storage/edit', params }) 16 | } 17 | 18 | // 获取存储配置信息 19 | export function storageDetail(params: any) { 20 | return request.get({ url: '/setting/storage/detail', params }) 21 | } 22 | -------------------------------------------------------------------------------- /admin/src/api/setting/system.ts: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | // 获取系统环境 4 | export function systemInfo() { 5 | return request.get({ url: '/monitor/server' }) 6 | } 7 | 8 | // 获取系统日志列表 9 | export function systemLogLists(params: any) { 10 | return request.get({ url: '/system/log/operate', params }) 11 | } 12 | 13 | // 系统缓存监控 14 | export function systemCache() { 15 | return request.get({ url: '/monitor/cache' }) 16 | } 17 | -------------------------------------------------------------------------------- /admin/src/api/user.ts: -------------------------------------------------------------------------------- 1 | import config from '@/config' 2 | import request from '@/utils/request' 3 | 4 | // 登录 5 | export function login(params: Record) { 6 | return request.post({ url: '/system/login', params: { ...params, terminal: config.terminal } }) 7 | } 8 | 9 | // 退出登录 10 | export function logout() { 11 | return request.post({ url: '/system/logout' }) 12 | } 13 | 14 | // 用户信息 15 | export function getUserInfo() { 16 | return request.get({ url: '/system/admin/self' }) 17 | } 18 | 19 | // 菜单路由 20 | export function getMenu() { 21 | return request.get({ url: '/system/menu/route' }) 22 | } 23 | 24 | // 编辑管理员信息 25 | export function setUserInfo(params: any) { 26 | return request.post({ url: '/system/admin/upInfo', params }) 27 | } 28 | -------------------------------------------------------------------------------- /admin/src/assets/icons/Androidfanhui.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/banxing_mian.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/carryout.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/close.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/danxuankuang.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/dingdan_mian.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/dingwei_mian.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/fullscreen.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/gengduo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/gengduoandroid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/gou.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/guanbi.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/haibaosheji.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/iOSfanhui.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/jia_mian.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/jian.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/jian_mian.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/jianshao.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/jingshi_mian.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/jingshi_mian1.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/jingyinggonglve.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/jinhuo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/kejian_mian.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/list-2.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/open.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/qingchu_mian.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/set_pay.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/set_weihu.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/shezhi_mian.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/shijian.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/shijian_mian.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/shouqi.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/shouqi_mian.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/shouye_mian.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/shuju.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/shuju_liuliang.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/tianjia.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/tishi_mian.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/wode_mian.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/yingxiao_qipao.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/youjiantou.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/zhankai.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/icons/zhankai_mian.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /admin/src/assets/images/icon_folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/admin/src/assets/images/icon_folder.png -------------------------------------------------------------------------------- /admin/src/assets/images/no_perms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/admin/src/assets/images/no_perms.png -------------------------------------------------------------------------------- /admin/src/assets/images/theme_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/admin/src/assets/images/theme_black.png -------------------------------------------------------------------------------- /admin/src/assets/images/theme_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/admin/src/assets/images/theme_white.png -------------------------------------------------------------------------------- /admin/src/components/footer-btns/index.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 17 | 18 | 31 | -------------------------------------------------------------------------------- /admin/src/components/icon/index.ts: -------------------------------------------------------------------------------- 1 | import * as ElementPlusIcons from '@element-plus/icons-vue' 2 | //@ts-ignore 3 | import localIconsName from 'virtual:svg-icons-names' 4 | 5 | export const LOCAL_ICON_PREFIX = 'local-icon-' 6 | export const EL_ICON_PREFIX = 'el-icon-' 7 | 8 | const elIconsName: string[] = [] 9 | 10 | for (const [, component] of Object.entries(ElementPlusIcons)) { 11 | elIconsName.push(`${EL_ICON_PREFIX}${component.name}`) 12 | } 13 | 14 | export function getElementPlusIconNames() { 15 | return elIconsName 16 | } 17 | export function getLocalIconNames() { 18 | return localIconsName 19 | } 20 | -------------------------------------------------------------------------------- /admin/src/components/link/index.ts: -------------------------------------------------------------------------------- 1 | export enum LinkTypeEnum { 2 | 'SHOP_PAGES' = 'shop', 3 | 'CUSTOM_LINK' = 'custom' 4 | } 5 | 6 | export interface Link { 7 | path: string 8 | name?: string 9 | type: string 10 | query?: Record 11 | } 12 | -------------------------------------------------------------------------------- /admin/src/config/index.ts: -------------------------------------------------------------------------------- 1 | const config = { 2 | terminal: 1, //终端 3 | title: '后台管理系统', //网站默认标题 4 | version: '1.3.3', //版本号 5 | baseUrl: `${import.meta.env.VITE_APP_BASE_URL || ''}/`, //请求接口域名 6 | urlPrefix: 'api', //请求默认前缀 7 | timeout: 10 * 1000 //请求超时时长 8 | } 9 | 10 | export default config 11 | -------------------------------------------------------------------------------- /admin/src/config/setting.ts: -------------------------------------------------------------------------------- 1 | const defaultSetting = { 2 | showCrumb: true, // 是否显示面包屑 3 | showLogo: true, // 是否显示logo 4 | isUniqueOpened: false, //只展开一个一级菜单 5 | sideWidth: 200, //侧边栏宽度 6 | sideTheme: 'light', //侧边栏主题 7 | sideDarkColor: '#1d2124', //侧边栏深色主题颜色 8 | openMultipleTabs: true, // 是否开启多标签tab栏 9 | theme: '#4A5DFF', //主题色 10 | successTheme: '#67c23a', //成功主题色 11 | warningTheme: '#e6a23c', //警告主题色 12 | dangerTheme: '#f56c6c', //危险主题色 13 | errorTheme: '#f56c6c', //错误主题色 14 | infoTheme: '#909399' //信息主题色 15 | } 16 | //以上各种主题色分别对应element-plus的几种行为主题 17 | 18 | export default defaultSetting 19 | -------------------------------------------------------------------------------- /admin/src/enums/cacheEnums.ts: -------------------------------------------------------------------------------- 1 | // 本地缓冲key 2 | 3 | //token 4 | export const TOKEN_KEY = 'token' 5 | //账号 6 | export const ACCOUNT_KEY = 'account' 7 | //设置 8 | export const SETTING_KEY = 'setting' 9 | -------------------------------------------------------------------------------- /admin/src/enums/pageEnum.ts: -------------------------------------------------------------------------------- 1 | export enum PageEnum { 2 | //登录页面 3 | LOGIN = '/login', 4 | //无权限页面 5 | ERROR_403 = '/403', 6 | // 404 7 | ERROR_404 = '/:pathMatch(.*)*', 8 | INDEX = '/' 9 | } 10 | -------------------------------------------------------------------------------- /admin/src/hooks/useLockFn.ts: -------------------------------------------------------------------------------- 1 | import { ref } from 'vue' 2 | 3 | export function useLockFn(fn: (...args: any[]) => Promise) { 4 | const isLock = ref(false) 5 | const lockFn = async (...args: any[]) => { 6 | if (isLock.value) return 7 | isLock.value = true 8 | try { 9 | const res = await fn(...args) 10 | isLock.value = false 11 | return res 12 | } catch (e) { 13 | isLock.value = false 14 | throw e 15 | } 16 | } 17 | return { 18 | isLock, 19 | lockFn 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /admin/src/hooks/useWatchRoute.ts: -------------------------------------------------------------------------------- 1 | import type { RouteLocationNormalizedLoaded } from 'vue-router' 2 | 3 | export function useWatchRoute(callback: (route: RouteLocationNormalizedLoaded) => void) { 4 | const route = useRoute() 5 | watch( 6 | route, 7 | () => { 8 | callback(route) 9 | }, 10 | { 11 | immediate: true 12 | } 13 | ) 14 | return { 15 | route 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /admin/src/install/plugins/element.ts: -------------------------------------------------------------------------------- 1 | import * as ElementPlusIcons from '@element-plus/icons-vue' 2 | import type { App } from 'vue' 3 | //https://github.com/element-plus/element-plus/issues/7293 4 | import 'element-plus/es/components/dialog/style/css' 5 | 6 | export default (app: App) => { 7 | // 全局注册ElementPlus图标 8 | for (const [key, component] of Object.entries(ElementPlusIcons)) { 9 | app.component(key, component) 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /admin/src/install/plugins/hljs.ts: -------------------------------------------------------------------------------- 1 | import type { App } from 'vue' 2 | import 'highlight.js/styles/github.css' 3 | import hljs from 'highlight.js/lib/common' 4 | import hljsVuePlugin from '@highlightjs/vue-plugin' 5 | console.log(hljs) 6 | export default (app: App) => { 7 | app.use(hljsVuePlugin) 8 | } 9 | -------------------------------------------------------------------------------- /admin/src/install/plugins/pinia.ts: -------------------------------------------------------------------------------- 1 | import store from '@/stores' 2 | import type { App } from 'vue' 3 | 4 | export default (app: App) => { 5 | app.use(store) 6 | } 7 | -------------------------------------------------------------------------------- /admin/src/install/plugins/router.ts: -------------------------------------------------------------------------------- 1 | import router from '@/router' 2 | import type { App } from 'vue' 3 | 4 | export default (app: App) => { 5 | app.use(router) 6 | } 7 | -------------------------------------------------------------------------------- /admin/src/layout/components/footer.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 23 | -------------------------------------------------------------------------------- /admin/src/layout/default/components/header/fold.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 16 | -------------------------------------------------------------------------------- /admin/src/layout/default/components/header/full-screen.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 11 | -------------------------------------------------------------------------------- /admin/src/layout/default/components/header/refresh.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 15 | -------------------------------------------------------------------------------- /admin/src/layout/default/components/setting/index.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 20 | -------------------------------------------------------------------------------- /admin/src/layout/default/index.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 23 | -------------------------------------------------------------------------------- /admin/src/likeadmin_python.code-workspace: -------------------------------------------------------------------------------- 1 | { 2 | "folders": [ 3 | { 4 | "path": "../.." 5 | }, 6 | { 7 | "path": "../../../../study" 8 | } 9 | ], 10 | "settings": {} 11 | } -------------------------------------------------------------------------------- /admin/src/main.ts: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue' 2 | import App from './App.vue' 3 | import install from './install' 4 | import './permission' 5 | import './styles/index.scss' 6 | import 'virtual:svg-icons-register' 7 | 8 | const app = createApp(App) 9 | app.use(install) 10 | app.mount('#app') 11 | -------------------------------------------------------------------------------- /admin/src/stores/index.ts: -------------------------------------------------------------------------------- 1 | import { createPinia } from 'pinia' 2 | const store = createPinia() 3 | export default store 4 | -------------------------------------------------------------------------------- /admin/src/styles/index.scss: -------------------------------------------------------------------------------- 1 | 2 | @import 'element.scss'; 3 | @import 'dark.css'; 4 | @import 'var.css'; 5 | @import 'tailwind.css'; 6 | @import 'public.scss'; 7 | -------------------------------------------------------------------------------- /admin/src/styles/public.scss: -------------------------------------------------------------------------------- 1 | body { 2 | @apply text-base text-tx-primary overflow-hidden min-w-[375px]; 3 | } 4 | .form-tips { 5 | @apply text-tx-secondary text-xs leading-6 mt-1; 6 | } 7 | 8 | .clearfix:after { 9 | content: ''; 10 | display: block; 11 | clear: both; 12 | visibility: hidden; 13 | } 14 | 15 | /* NProgress */ 16 | #nprogress .bar { 17 | @apply bg-primary #{!important}; 18 | } 19 | -------------------------------------------------------------------------------- /admin/src/styles/tailwind.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; -------------------------------------------------------------------------------- /admin/src/utils/auth.ts: -------------------------------------------------------------------------------- 1 | import { TOKEN_KEY } from '@/enums/cacheEnums' 2 | import { resetRouter } from '@/router' 3 | import useTabsStore from '@/stores/modules/multipleTabs' 4 | import useUserStore from '@/stores/modules/user' 5 | import cache from './cache' 6 | 7 | export function getToken() { 8 | return cache.get(TOKEN_KEY) 9 | } 10 | 11 | export function clearAuthInfo() { 12 | const userStore = useUserStore() 13 | const tabsStore = useTabsStore() 14 | userStore.resetState() 15 | tabsStore.$reset() 16 | cache.remove(TOKEN_KEY) 17 | resetRouter() 18 | } 19 | -------------------------------------------------------------------------------- /admin/src/utils/env.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @description: 开发模式 3 | */ 4 | export function isDevMode(): boolean { 5 | return import.meta.env.DEV 6 | } 7 | 8 | /** 9 | * @description: 生成模式 10 | */ 11 | export function isProdMode(): boolean { 12 | return import.meta.env.PROD 13 | } 14 | -------------------------------------------------------------------------------- /admin/src/utils/file.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @description 3 | * @param file 4 | */ 5 | export function streamFileDownload(file: any, fileName = '文件名称.zip') { 6 | const blob = new Blob([file], { type: 'application/octet-stream;charset=UTF-8' }) 7 | const url = window.URL.createObjectURL(blob) 8 | const link = document.createElement('a') 9 | link.style.display = 'none' 10 | link.href = url 11 | link.setAttribute('download', fileName) 12 | document.body.appendChild(link) 13 | link.click() 14 | document.body.removeChild(link) // 下载完成移除元素 15 | window.URL.revokeObjectURL(url) 16 | } 17 | -------------------------------------------------------------------------------- /admin/src/utils/validate.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @param {string} path 3 | * @returns {Boolean} 4 | */ 5 | export function isExternal(path: string) { 6 | return /^(https?:|mailto:|tel:)/.test(path) 7 | } 8 | -------------------------------------------------------------------------------- /admin/src/views/account/images/login_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/admin/src/views/account/images/login_bg.png -------------------------------------------------------------------------------- /admin/src/views/decoration/component/widgets/banner/index.ts: -------------------------------------------------------------------------------- 1 | import attr from './attr.vue' 2 | import content from './content.vue' 3 | import options from './options' 4 | export default { 5 | attr, 6 | content, 7 | options 8 | } 9 | -------------------------------------------------------------------------------- /admin/src/views/decoration/component/widgets/banner/options.ts: -------------------------------------------------------------------------------- 1 | export default () => ({ 2 | title: '首页轮播图', 3 | name: 'banner', 4 | content: { 5 | enabled: 1, 6 | data: [ 7 | { 8 | image: '', 9 | name: '', 10 | link: {} 11 | } 12 | ] 13 | }, 14 | styles: {} 15 | }) 16 | -------------------------------------------------------------------------------- /admin/src/views/decoration/component/widgets/customer-service/index.ts: -------------------------------------------------------------------------------- 1 | import attr from './attr.vue' 2 | import content from './content.vue' 3 | import options from './options' 4 | export default { 5 | attr, 6 | content, 7 | options 8 | } 9 | -------------------------------------------------------------------------------- /admin/src/views/decoration/component/widgets/customer-service/options.ts: -------------------------------------------------------------------------------- 1 | export default () => ({ 2 | title: '客服设置', 3 | name: 'customer-service', 4 | content: { 5 | title: '添加客服二维码', 6 | time: '', 7 | mobile: '', 8 | qrcode: '' 9 | }, 10 | styles: {} 11 | }) 12 | -------------------------------------------------------------------------------- /admin/src/views/decoration/component/widgets/index.ts: -------------------------------------------------------------------------------- 1 | const widgets: Record = import.meta.glob('./**/index.ts', { eager: true }) 2 | interface Widget { 3 | attr: any 4 | content: any 5 | options: any 6 | } 7 | console.log(widgets) 8 | const exportWidgets: Record = {} 9 | Object.keys(widgets).forEach((key) => { 10 | const widgetName = key.replace(/^\.\/([\w-]+).*/gi, '$1') 11 | exportWidgets[widgetName] = widgets[key]?.default 12 | }) 13 | 14 | export default exportWidgets 15 | -------------------------------------------------------------------------------- /admin/src/views/decoration/component/widgets/my-service/index.ts: -------------------------------------------------------------------------------- 1 | import attr from './attr.vue' 2 | import content from './content.vue' 3 | import options from './options' 4 | export default { 5 | attr, 6 | content, 7 | options 8 | } 9 | -------------------------------------------------------------------------------- /admin/src/views/decoration/component/widgets/my-service/options.ts: -------------------------------------------------------------------------------- 1 | export default () => ({ 2 | title: '我的服务', 3 | name: 'my-service', 4 | content: { 5 | style: 1, 6 | title: '我的服务', 7 | data: [ 8 | { 9 | image: '', 10 | name: '导航名称', 11 | link: {} 12 | } 13 | ] 14 | }, 15 | styles: {} 16 | }) 17 | -------------------------------------------------------------------------------- /admin/src/views/decoration/component/widgets/nav/index.ts: -------------------------------------------------------------------------------- 1 | import attr from './attr.vue' 2 | import content from './content.vue' 3 | import options from './options' 4 | export default { 5 | attr, 6 | content, 7 | options 8 | } 9 | -------------------------------------------------------------------------------- /admin/src/views/decoration/component/widgets/nav/options.ts: -------------------------------------------------------------------------------- 1 | export default () => ({ 2 | title: '导航菜单', 3 | name: 'nav', 4 | content: { 5 | enabled: 1, 6 | data: [ 7 | { 8 | image: '', 9 | name: '导航名称', 10 | link: {} 11 | } 12 | ] 13 | }, 14 | styles: {} 15 | }) 16 | -------------------------------------------------------------------------------- /admin/src/views/decoration/component/widgets/news/attr.vue: -------------------------------------------------------------------------------- 1 | 4 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /admin/src/views/decoration/component/widgets/news/index.ts: -------------------------------------------------------------------------------- 1 | import attr from './attr.vue' 2 | import content from './content.vue' 3 | import options from './options' 4 | export default { 5 | attr, 6 | content, 7 | options 8 | } 9 | -------------------------------------------------------------------------------- /admin/src/views/decoration/component/widgets/news/options.ts: -------------------------------------------------------------------------------- 1 | export default () => ({ 2 | title: '资讯', 3 | name: 'news', 4 | disabled: 1, 5 | content: {}, 6 | styles: {} 7 | }) 8 | -------------------------------------------------------------------------------- /admin/src/views/decoration/component/widgets/search/attr.vue: -------------------------------------------------------------------------------- 1 | 4 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /admin/src/views/decoration/component/widgets/search/content.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | 24 | -------------------------------------------------------------------------------- /admin/src/views/decoration/component/widgets/search/index.ts: -------------------------------------------------------------------------------- 1 | import attr from './attr.vue' 2 | import content from './content.vue' 3 | import options from './options' 4 | export default { 5 | attr, 6 | content, 7 | options 8 | } 9 | -------------------------------------------------------------------------------- /admin/src/views/decoration/component/widgets/search/options.ts: -------------------------------------------------------------------------------- 1 | export default () => ({ 2 | title: '搜索', 3 | name: 'search', 4 | disabled: 1, 5 | content: {}, 6 | styles: {} 7 | }) 8 | -------------------------------------------------------------------------------- /admin/src/views/decoration/component/widgets/user-banner/index.ts: -------------------------------------------------------------------------------- 1 | import attr from './attr.vue' 2 | import content from './content.vue' 3 | import options from './options' 4 | export default { 5 | attr, 6 | content, 7 | options 8 | } 9 | -------------------------------------------------------------------------------- /admin/src/views/decoration/component/widgets/user-banner/options.ts: -------------------------------------------------------------------------------- 1 | export default () => ({ 2 | title: '个人中心广告图', 3 | name: 'user-banner', 4 | content: { 5 | enabled: 1, 6 | data: [ 7 | { 8 | image: '', 9 | name: '', 10 | link: {} 11 | } 12 | ] 13 | }, 14 | styles: {} 15 | }) 16 | -------------------------------------------------------------------------------- /admin/src/views/decoration/component/widgets/user-info/attr.vue: -------------------------------------------------------------------------------- 1 | 4 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /admin/src/views/decoration/component/widgets/user-info/content.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 17 | -------------------------------------------------------------------------------- /admin/src/views/decoration/component/widgets/user-info/images/default_avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/admin/src/views/decoration/component/widgets/user-info/images/default_avatar.png -------------------------------------------------------------------------------- /admin/src/views/decoration/component/widgets/user-info/images/my_topbg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/admin/src/views/decoration/component/widgets/user-info/images/my_topbg.png -------------------------------------------------------------------------------- /admin/src/views/decoration/component/widgets/user-info/index.ts: -------------------------------------------------------------------------------- 1 | import attr from './attr.vue' 2 | import content from './content.vue' 3 | import options from './options' 4 | export default { 5 | attr, 6 | content, 7 | options 8 | } 9 | -------------------------------------------------------------------------------- /admin/src/views/decoration/component/widgets/user-info/options.ts: -------------------------------------------------------------------------------- 1 | export default () => ({ 2 | title: '用户信息', 3 | name: 'user-info', 4 | disabled: 1, 5 | content: {}, 6 | styles: {} 7 | }) 8 | -------------------------------------------------------------------------------- /admin/src/views/error/403.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 16 | -------------------------------------------------------------------------------- /admin/src/views/error/404.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /admin/src/views/workbench/image/BrowserPreview_tmp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/admin/src/views/workbench/image/BrowserPreview_tmp.png -------------------------------------------------------------------------------- /admin/src/views/workbench/image/menu_admin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/admin/src/views/workbench/image/menu_admin.png -------------------------------------------------------------------------------- /admin/src/views/workbench/image/menu_auth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/admin/src/views/workbench/image/menu_auth.png -------------------------------------------------------------------------------- /admin/src/views/workbench/image/menu_dept.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/admin/src/views/workbench/image/menu_dept.png -------------------------------------------------------------------------------- /admin/src/views/workbench/image/menu_dict.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/admin/src/views/workbench/image/menu_dict.png -------------------------------------------------------------------------------- /admin/src/views/workbench/image/menu_file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/admin/src/views/workbench/image/menu_file.png -------------------------------------------------------------------------------- /admin/src/views/workbench/image/menu_generator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/admin/src/views/workbench/image/menu_generator.png -------------------------------------------------------------------------------- /admin/src/views/workbench/image/menu_role.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/admin/src/views/workbench/image/menu_role.png -------------------------------------------------------------------------------- /admin/src/views/workbench/image/menu_web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/admin/src/views/workbench/image/menu_web.png -------------------------------------------------------------------------------- /admin/src/views/workbench/image/qq_group.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/admin/src/views/workbench/image/qq_group.png -------------------------------------------------------------------------------- /admin/tsconfig.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@vue/tsconfig/tsconfig.node.json", 3 | "include": ["vite.config.*"], 4 | "compilerOptions": { 5 | "composite": true, 6 | "types": ["node"] 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /admin/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@vue/tsconfig/tsconfig.web.json", 3 | "include": [ 4 | "global.d.ts", 5 | "src/**/*", 6 | "src/**/*.vue", 7 | "components.d.ts", 8 | "auto-imports.d.ts", 9 | "typings/**/*.d.ts" 10 | ], 11 | "compilerOptions": { 12 | "isolatedModules": true, 13 | "baseUrl": ".", 14 | "paths": { 15 | "@/*": ["./src/*"] 16 | } 17 | }, 18 | "references": [ 19 | { 20 | "path": "./tsconfig.config.json" 21 | } 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /admin/typings/index.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'vue3-video-play' 2 | 3 | declare module 'css-color-function' 4 | 5 | type PromiseFun = (...arg: any[]) => Promise 6 | -------------------------------------------------------------------------------- /admin/typings/router.d.ts: -------------------------------------------------------------------------------- 1 | import 'vue-router' 2 | declare module 'vue-router' { 3 | // 扩展 RouteMeta 4 | interface RouteMeta { 5 | type?: string 6 | perms?: string 7 | title?: string 8 | icon?: string 9 | hidden?: boolean 10 | activeMenu?: string 11 | hideTab?: boolean 12 | keepAlive?: boolean 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /docker/.gitignore: -------------------------------------------------------------------------------- 1 | /data 2 | /log -------------------------------------------------------------------------------- /frontend/assets/@floating-ui.dd8b295f.js: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /frontend/assets/BrowserPreview_tmp.f88b03df.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/frontend/assets/BrowserPreview_tmp.f88b03df.png -------------------------------------------------------------------------------- /frontend/assets/attr-setting.vue_vue_type_script_setup_true_lang.79deee70.js: -------------------------------------------------------------------------------- 1 | import{w as i}from"./index.310dbf76.js";import{d as l,o as t,c as d,a as m,V as f,O as c,S as p,u as g,aI as b}from"./@vue.a137a740.js";const u={class:"pages-setting"},w={class:"title flex items-center before:w-[3px] before:h-[14px] before:block before:bg-primary before:mr-2"},k=l({__name:"attr-setting",props:{widget:{type:Object,default:()=>({})}},setup(e){return(y,x)=>{var s,a,n,o,r;return t(),d("div",u,[m("div",w,f((s=e.widget)==null?void 0:s.title),1),(t(),c(b,null,[(t(),c(p((n=g(i)[(a=e.widget)==null?void 0:a.name])==null?void 0:n.attr),{class:"pt-5 pr-4",content:(o=e.widget)==null?void 0:o.content,styles:(r=e.widget)==null?void 0:r.styles},null,8,["content","styles"]))],1024))])}}});export{k as _}; 2 | -------------------------------------------------------------------------------- /frontend/assets/attr.15bf174a.js: -------------------------------------------------------------------------------- 1 | import"./attr.vue_vue_type_script_setup_true_lang.a6ae21ee.js";import{_ as t}from"./attr.vue_vue_type_script_setup_true_lang.a6ae21ee.js";import"./@vue.a137a740.js";export{t as default}; 2 | -------------------------------------------------------------------------------- /frontend/assets/attr.d3150e80.js: -------------------------------------------------------------------------------- 1 | import"./attr.vue_vue_type_script_setup_true_lang.9653ec08.js";import{_ as t}from"./attr.vue_vue_type_script_setup_true_lang.9653ec08.js";import"./@vue.a137a740.js";export{t as default}; 2 | -------------------------------------------------------------------------------- /frontend/assets/attr.db9092b2.js: -------------------------------------------------------------------------------- 1 | import"./attr.vue_vue_type_script_setup_true_lang.9820b9a5.js";import{_ as t}from"./attr.vue_vue_type_script_setup_true_lang.9820b9a5.js";import"./@vue.a137a740.js";export{t as default}; 2 | -------------------------------------------------------------------------------- /frontend/assets/attr.vue_vue_type_script_setup_true_lang.9653ec08.js: -------------------------------------------------------------------------------- 1 | import{d as e,o as t,c as o}from"./@vue.a137a740.js";const r=e({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(c){return(n,a)=>(t(),o("div"))}});export{r as _}; 2 | -------------------------------------------------------------------------------- /frontend/assets/attr.vue_vue_type_script_setup_true_lang.9820b9a5.js: -------------------------------------------------------------------------------- 1 | import{d as e,o as t,c as o}from"./@vue.a137a740.js";const r=e({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(c){return(n,a)=>(t(),o("div"))}});export{r as _}; 2 | -------------------------------------------------------------------------------- /frontend/assets/attr.vue_vue_type_script_setup_true_lang.a6ae21ee.js: -------------------------------------------------------------------------------- 1 | import{d as e,o as t,c as o}from"./@vue.a137a740.js";const r=e({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(c){return(n,a)=>(t(),o("div"))}});export{r as _}; 2 | -------------------------------------------------------------------------------- /frontend/assets/balanced-match.d2a36341.js: -------------------------------------------------------------------------------- 1 | var l=function(r,a,e){for(var s=0,t={},n=0;n1?e.substring(t.start+r.length,t.end):"",t.post=e.slice(t.end+a.length),t};export{l as b}; 2 | -------------------------------------------------------------------------------- /frontend/assets/cache.b08e0053.css: -------------------------------------------------------------------------------- 1 | .el-table .el-table__cell[data-v-4f669e5f]{min-width:120px} 2 | -------------------------------------------------------------------------------- /frontend/assets/consumer.e63bb0ad.js: -------------------------------------------------------------------------------- 1 | import{r as t}from"./index.b60a26c4.js";function u(r){return t.get({url:"/user/list",params:r})}function s(r){return t.get({url:"/user/detail",params:r})}function i(r){return t.post({url:"/user/edit",params:r})}export{u as a,s as g,i as u}; 2 | -------------------------------------------------------------------------------- /frontend/assets/content.75595e09.css: -------------------------------------------------------------------------------- 1 | .search[data-v-6fb29c10]{background-color:#fff;padding:7px 12px}.search .search-con[data-v-6fb29c10]{height:100%;height:36px;border-radius:36px;background:#f4f4f4;color:#999} 2 | -------------------------------------------------------------------------------- /frontend/assets/content.9f244b19.css: -------------------------------------------------------------------------------- 1 | .customer-service[data-v-74f49970]{margin:10px 18px;border-radius:10px;padding:50px 55px 80px;background:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center} 2 | -------------------------------------------------------------------------------- /frontend/assets/content.c40e4b89.css: -------------------------------------------------------------------------------- 1 | .news .news-title[data-v-6445a67e]:before{content:"";width:4px;height:17px;display:block;margin-right:5px;background:#4173ff} 2 | -------------------------------------------------------------------------------- /frontend/assets/content.c9a2d497.css: -------------------------------------------------------------------------------- 1 | .user-info[data-v-cdcc3d15]{background:url(/assets/my_topbg.137a6c56.png);height:115px;background-position:bottom;background-size:100% auto} 2 | -------------------------------------------------------------------------------- /frontend/assets/content.efb8af20.css: -------------------------------------------------------------------------------- 1 | .my-service[data-v-a7e52d47]{margin:10px 10px 0;background-color:#fff;border-radius:7px}.my-service .title[data-v-a7e52d47]{border-bottom:1px solid #e5e5e5;font-size:16px;font-weight:500} 2 | -------------------------------------------------------------------------------- /frontend/assets/content.vue_vue_type_script_setup_true_lang.12563a6c.js: -------------------------------------------------------------------------------- 1 | import o from"./decoration-img.e2c4084c.js";import{d as s,e as c,o as r,c as i,a as p,X as m,u as d}from"./@vue.a137a740.js";const u={class:"banner mx-[10px] mt-[10px]"},_={class:"banner-image"},h=s({__name:"content",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(t){const n=t,a=c(()=>{const{data:e}=n.content;return Array.isArray(e)&&e[0]?e[0].image:""});return(e,l)=>(r(),i("div",u,[p("div",_,[m(o,{width:"100%",height:"100px",src:d(a),fit:"contain"},null,8,["src"])])]))}});export{h as _}; 2 | -------------------------------------------------------------------------------- /frontend/assets/content.vue_vue_type_script_setup_true_lang.43e08694.js: -------------------------------------------------------------------------------- 1 | import o from"./decoration-img.e2c4084c.js";import{d as r,o as e,c as t,a,W as l,a8 as p,X as i,V as d}from"./@vue.a137a740.js";const m={class:"nav bg-white pt-[15px] pb-[8px]"},_={class:"flex flex-wrap"},x={class:"mt-[7px]"},b=r({__name:"content",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(n){return(f,u)=>(e(),t("div",m,[a("div",_,[(e(!0),t(l,null,p(n.content.data,(s,c)=>(e(),t("div",{key:c,class:"flex flex-col items-center w-1/5 mb-[15px]"},[i(o,{width:"41px",height:"41px",src:s.image,alt:""},null,8,["src"]),a("div",x,d(s.name),1)]))),128))])]))}});export{b as _}; 2 | -------------------------------------------------------------------------------- /frontend/assets/content.vue_vue_type_script_setup_true_lang.c47a6b69.js: -------------------------------------------------------------------------------- 1 | import o from"./decoration-img.e2c4084c.js";import{d as s,e as c,o as r,c as i,a as p,X as d,u as m}from"./@vue.a137a740.js";const u={class:"banner"},_={class:"banner-image"},h=s({__name:"content",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(t){const n=t,a=c(()=>{const{data:e}=n.content;return Array.isArray(e)&&e[0]?e[0].image:""});return(e,l)=>(r(),i("div",u,[p("div",_,[d(o,{width:"100%",height:"170px",src:m(a),fit:"contain"},null,8,["src"])])]))}});export{h as _}; 2 | -------------------------------------------------------------------------------- /frontend/assets/decoration-img.a64d82f7.css: -------------------------------------------------------------------------------- 1 | .el-image[data-v-73b9b608]{display:block}.el-image .image-slot[data-v-73b9b608]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;background:#fafafa;color:#909399} 2 | -------------------------------------------------------------------------------- /frontend/assets/decoration.ab9ddaa9.js: -------------------------------------------------------------------------------- 1 | import{r as t}from"./index.b60a26c4.js";function a(e){return t.get({url:"/decorate/pages/detail",params:e},{ignoreCancelToken:!0})}function o(e){return t.post({url:"/decorate/pages/save",params:e})}function c(e){return t.get({url:"/decorate/data/article",params:e})}function n(e){return t.get({url:"/decorate/tabbar/detail",params:e})}function s(e){return t.post({url:"/decorate/tabbar/save",params:e})}export{a,n as b,s as c,c as g,o as s}; 2 | -------------------------------------------------------------------------------- /frontend/assets/default_avatar.fa19527b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/frontend/assets/default_avatar.fa19527b.png -------------------------------------------------------------------------------- /frontend/assets/department.a2353fbd.js: -------------------------------------------------------------------------------- 1 | import{r as e}from"./index.b60a26c4.js";function r(t){return e.get({url:"/system/dept/list",params:t})}function d(t){return e.post({url:"/system/dept/add",params:t})}function u(t){return e.post({url:"/system/dept/edit",params:t})}function n(t){return e.post({url:"/system/dept/del",params:t})}function p(t){return e.get({url:"/system/dept/detail",params:t})}export{u as a,d as b,p as c,r as d,n as e}; 2 | -------------------------------------------------------------------------------- /frontend/assets/dict.7219bd74.js: -------------------------------------------------------------------------------- 1 | import{r as e}from"./index.b60a26c4.js";function n(t){return e.get({url:"/setting/dict/type/list",params:t})}function d(t){return e.get({url:"/setting/dict/type/all",params:t})}function r(t){return e.post({url:"/setting/dict/type/add",params:t})}function s(t){return e.post({url:"/setting/dict/type/edit",params:t})}function a(t){return e.post({url:"/setting/dict/type/del",params:t})}function c(t){return e.get({url:"/setting/dict/data/list",params:t},{ignoreCancelToken:!0})}function u(t){return e.post({url:"/setting/dict/data/add",params:t})}function l(t){return e.post({url:"/setting/dict/data/edit",params:t})}function o(t){return e.post({url:"/setting/dict/data/del",params:t})}export{l as a,u as b,o as c,d,c as e,s as f,r as g,a as h,n as i}; 2 | -------------------------------------------------------------------------------- /frontend/assets/error.be93caf8.css: -------------------------------------------------------------------------------- 1 | .error[data-v-a47523cc]{text-align:center;height:100vh;display:flex;justify-content:center;align-items:center}.error .error-code[data-v-a47523cc]{color:var(--el-color-primary);font-size:150px}.error .el-button[data-v-a47523cc]{width:176px} 2 | -------------------------------------------------------------------------------- /frontend/assets/escape-html.e5dfadb9.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * escape-html 3 | * Copyright(c) 2012-2013 TJ Holowaychuk 4 | * Copyright(c) 2015 Andreas Lubbe 5 | * Copyright(c) 2015 Tiancheng "Timothy" Gu 6 | * MIT Licensed 7 | */var i=/["'&<>]/,u=l;function l(n){var a=""+n,c=i.exec(a);if(!c)return a;var r,s="",e=0,t=0;for(e=c.index;e(s(),n("div",c,[_("div",{class:"footer-btns__content",style:d(e.fixed?"position: fixed":"")},[a(o.$slots,"default",{},void 0,!0)],4)]))}});const u=r(i,[["__scopeId","data-v-0b44b424"]]);export{u as _}; 2 | -------------------------------------------------------------------------------- /frontend/assets/index.0d25a475.css: -------------------------------------------------------------------------------- 1 | .w-e-full-screen-container{z-index:999}.w-e-text-container [data-slate-editor] ul{list-style:disc}.w-e-text-container [data-slate-editor] ol{list-style:decimal}h1{font-size:2em}h2{font-size:1.5em}h3{font-size:1.17em}h4{font-size:1em}h5{font-size:.83em}h1,h2,h3,h4,h5{font-weight:700} 2 | -------------------------------------------------------------------------------- /frontend/assets/index.15f50578.css: -------------------------------------------------------------------------------- 1 | .decoration-pages[data-v-a4bc0153]{min-height:calc(100vh - var(--navbar-height) - 80px);display:flex;flex-direction:column} 2 | -------------------------------------------------------------------------------- /frontend/assets/index.2a55a6b3.css: -------------------------------------------------------------------------------- 1 | .hot-search .hot-search-phone[data-v-2eb25184]{width:300px}.hot-search .hot-search-phone-content[data-v-2eb25184]{width:100%;height:530px;padding:12px;border-radius:10px;border:1px solid #e6e6e6}.hot-search .hot-search-phone-content .search-com .search-con[data-v-2eb25184]{height:100%;height:36px;border-radius:36px;background:#f4f4f4;color:#999}.hot-search .hot-search-phone-content .hot-search-title[data-v-2eb25184]{padding:10px 0;font-size:13px}.hot-search .hot-search-phone-content .hot-search-text span[data-v-2eb25184]{font-size:12px;border-radius:100px;padding:5px 10px;margin:0 6px 6px 0;display:inline-block;background-color:#f4f4f4} 2 | -------------------------------------------------------------------------------- /frontend/assets/index.2ace3fcf.css: -------------------------------------------------------------------------------- 1 | .footer-btns[data-v-0b44b424]{height:60px}.footer-btns__content[data-v-0b44b424]{bottom:0;height:60px;right:0;left:0;z-index:99;display:flex;align-items:center;justify-content:center;background-color:var(--el-bg-color);--tw-shadow: var(--el-box-shadow);--tw-shadow-colored: var(--el-box-shadow);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)} 2 | -------------------------------------------------------------------------------- /frontend/assets/index.796a76b8.js: -------------------------------------------------------------------------------- 1 | import{d,b as r}from"./index.b60a26c4.js";import{d as c,o as s,c as n,K as p,$ as _,X as i,T as m}from"./@vue.a137a740.js";const u=c({props:{showClose:{type:Boolean,default:!0}},emits:["close"],setup(e,{emit:o}){return{handleClose:()=>{o("close")}}}});const f={class:"del-wrap"};function C(e,o,t,h,$,v){const a=r;return s(),n("div",f,[p(e.$slots,"default",{},void 0,!0),e.showClose?(s(),n("div",{key:0,class:"icon-close",onClick:o[0]||(o[0]=_((...l)=>e.handleClose&&e.handleClose(...l),["stop"]))},[i(a,{size:12,name:"el-icon-CloseBold"})])):m("",!0)])}const y=d(u,[["render",C],["__scopeId","data-v-2a98aa67"]]);export{y as _}; 2 | -------------------------------------------------------------------------------- /frontend/assets/index.9bce7fe7.css: -------------------------------------------------------------------------------- 1 | .del-wrap[data-v-2a98aa67]{position:relative}.del-wrap:hover>.icon-close[data-v-2a98aa67]{display:flex}.del-wrap .icon-close[data-v-2a98aa67]{display:none;position:absolute;top:-8px;right:-8px;width:16px;height:16px;background-color:#0000004d;justify-content:center;align-items:center;border-radius:50%;color:#fff;cursor:pointer} 2 | -------------------------------------------------------------------------------- /frontend/assets/index.a318de61.css: -------------------------------------------------------------------------------- 1 | .dialog-body[data-v-b8e715d9]{white-space:pre-line} 2 | -------------------------------------------------------------------------------- /frontend/assets/index.aecdfa78.css: -------------------------------------------------------------------------------- 1 | .text_hidden[data-v-c0cb4eb2]{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;overflow:hidden} 2 | -------------------------------------------------------------------------------- /frontend/assets/index.be29c95e.css: -------------------------------------------------------------------------------- 1 | .material-index[data-v-15a46c2f]{min-width:700px}.material-index[data-v-15a46c2f] .el-tabs{height:calc(100vh - 180px);display:flex;flex-direction:column}.material-index[data-v-15a46c2f] .el-tabs .el-tabs__header{margin-bottom:0!important}.material-index[data-v-15a46c2f] .el-tabs .el-tabs__content,.material-index[data-v-15a46c2f] .el-tabs .el-tab-pane{min-height:0;flex:1;display:flex;flex-direction:column} 2 | -------------------------------------------------------------------------------- /frontend/assets/lodash-unified.d120b703.js: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /frontend/assets/login.343b5475.css: -------------------------------------------------------------------------------- 1 | .login[data-v-0e999780]{background-image:url(/assets/login_bg.2f630cea.png);min-height:100vh;background-size:cover;background-position:center;background-repeat:no-repeat}.login .login-card[data-v-0e999780]{height:400px} 2 | -------------------------------------------------------------------------------- /frontend/assets/login_bg.2f630cea.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/frontend/assets/login_bg.2f630cea.png -------------------------------------------------------------------------------- /frontend/assets/memoize-one.5eaee740.js: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /frontend/assets/menu.52becb26.js: -------------------------------------------------------------------------------- 1 | import{r as t}from"./index.b60a26c4.js";function n(e){return t.get({url:"/system/menu/list",params:e})}function s(e){return t.post({url:"/system/menu/add",params:e})}function r(e){return t.post({url:"/system/menu/edit",params:e})}function m(e){return t.post({url:"/system/menu/del",params:e})}function i(e){return t.get({url:"/system/menu/detail",params:e})}export{r as a,s as b,i as c,m as d,n as m}; 2 | -------------------------------------------------------------------------------- /frontend/assets/menu.a050bec6.css: -------------------------------------------------------------------------------- 1 | .pages-menu[data-v-a5360079] .el-menu-item{border-color:transparent}.pages-menu[data-v-a5360079] .el-menu-item.is-active{border-right-width:2px;border-color:var(--el-color-primary);background-color:var(--el-color-primary-light-9)} 2 | -------------------------------------------------------------------------------- /frontend/assets/menu_role.4823a023.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/frontend/assets/menu_role.4823a023.png -------------------------------------------------------------------------------- /frontend/assets/message.8c01f477.js: -------------------------------------------------------------------------------- 1 | import{r as s}from"./index.b60a26c4.js";function n(t){return s.get({url:"/setting/notice/list",params:t})}function i(t){return s.get({url:"/setting/notice/detail",params:t})}function r(t){return s.post({url:"/setting/notice/save",params:t})}function o(){return s.get({url:"/setting/sms/list"})}function u(t){return s.get({url:"/setting/sms/detail",params:t})}function a(t){return s.post({url:"/setting/sms/save",params:t})}export{n as a,a as b,u as c,o as d,i as n,r as s}; 2 | -------------------------------------------------------------------------------- /frontend/assets/my_topbg.137a6c56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/frontend/assets/my_topbg.137a6c56.png -------------------------------------------------------------------------------- /frontend/assets/no_perms.a56e95a5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/frontend/assets/no_perms.a56e95a5.png -------------------------------------------------------------------------------- /frontend/assets/picker.05436930.css: -------------------------------------------------------------------------------- 1 | .link-menu[data-v-2f26c0ad]{--el-menu-item-height: 40px}.link-menu[data-v-2f26c0ad] .el-menu-item{border-color:transparent}.link-menu[data-v-2f26c0ad] .el-menu-item.is-active{border-right-width:2px;border-color:var(--el-color-primary);background-color:var(--el-color-primary-light-9)}.link-picker[data-v-a42918e4] .el-input.is-disabled .el-input__inner,.link-picker[data-v-a42918e4] .el-input.is-disabled .el-input__suffix{cursor:not-allowed}.link-picker[data-v-a42918e4] .el-input .el-input__inner,.link-picker[data-v-a42918e4] .el-input .el-input__suffix{cursor:pointer} 2 | -------------------------------------------------------------------------------- /frontend/assets/post.2ca46716.js: -------------------------------------------------------------------------------- 1 | import{r as s}from"./index.b60a26c4.js";function o(t){return s.get({url:"/system/post/list",params:t})}function r(t){return s.get({url:"/system/post/all",params:t})}function u(t){return s.post({url:"/system/post/add",params:t})}function n(t){return s.post({url:"/system/post/edit",params:t})}function p(t){return s.post({url:"/system/post/del",params:t})}function l(t){return s.get({url:"/system/post/detail",params:t})}export{u as a,l as b,p as c,o as d,r as e,n as p}; 2 | -------------------------------------------------------------------------------- /frontend/assets/preview.6e931073.css: -------------------------------------------------------------------------------- 1 | .pages-preview[data-v-d63d893f]{background-color:#f8f8f8;width:360px;height:615px;color:#333}.pages-preview .select[data-v-d63d893f]{border-style:solid;border-color:var(--el-color-primary)} 2 | -------------------------------------------------------------------------------- /frontend/assets/qq_group.3084d316.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/frontend/assets/qq_group.3084d316.png -------------------------------------------------------------------------------- /frontend/assets/role.6aeb8c72.js: -------------------------------------------------------------------------------- 1 | import{r}from"./index.b60a26c4.js";function l(e){return r.get({url:"/system/role/list",params:e})}function s(e){return r.get({url:"/system/role/all",params:e})}function o(e){return r.get({url:"/system/role/detail",params:e})}function u(e){return r.post({url:"/system/role/add",params:e})}function n(e){return r.post({url:"/system/role/edit",params:e})}function i(e){return r.post({url:"/system/role/del",params:e})}export{n as a,o as b,u as c,i as d,l as e,s as r}; 2 | -------------------------------------------------------------------------------- /frontend/assets/system.1b516774.js: -------------------------------------------------------------------------------- 1 | import{r as t}from"./index.b60a26c4.js";function s(){return t.get({url:"/monitor/server"})}function o(e){return t.get({url:"/system/log/operate",params:e})}function n(){return t.get({url:"/monitor/cache"})}export{s as a,o as b,n as s}; 2 | -------------------------------------------------------------------------------- /frontend/assets/tabbar.75f7a8d8.css: -------------------------------------------------------------------------------- 1 | .decoration-tabbar[data-v-6338a705]{min-height:calc(100vh - var(--navbar-height) - 80px);display:flex;flex-direction:column}.decoration-tabbar .pages-preview[data-v-6338a705]{background-color:#f7f7f7;width:360px;height:615px;color:#333;position:relative}.decoration-tabbar .pages-preview .tabbar[data-v-6338a705]{position:absolute;height:50px;background-color:#fff;bottom:0;width:100%;border:2px solid var(--el-color-primary)} 2 | -------------------------------------------------------------------------------- /frontend/assets/useDictOptions.b9a39236.js: -------------------------------------------------------------------------------- 1 | import"./index.b60a26c4.js";import{a1 as p,t as f}from"./@vue.a137a740.js";function d(a){const s=p({}),e=Object.keys(a),i=e.map(o=>{const t=a[o];return s[o]=[],()=>t.api(f(t.params)||{})}),r=async()=>{(await Promise.allSettled(i.map(t=>t()))).forEach((t,u)=>{const n=e[u];if(t.status=="fulfilled"){const{transformData:c}=a[n],l=c?c(t.value):t.value;s[n]=l}})};return r(),{optionsData:s,refresh:r}}export{d as u}; 2 | -------------------------------------------------------------------------------- /frontend/assets/user.883bd654.js: -------------------------------------------------------------------------------- 1 | import{r as t}from"./index.b60a26c4.js";function s(){return t.get({url:"/setting/user/detail"})}function n(e){return t.post({url:"/setting/user/save",params:e})}function u(){return t.get({url:"/setting/login/detail"})}function i(e){return t.post({url:"/setting/login/save",params:e})}export{s as a,n as b,u as g,i as s}; 2 | -------------------------------------------------------------------------------- /frontend/assets/vue-clipboard3.51d666ae.js: -------------------------------------------------------------------------------- 1 | import{C as a}from"./clipboard.e9b83688.js";const l=o=>{const r=(o==null?void 0:o.appendToBody)===void 0?!0:o.appendToBody;return{toClipboard(c,t){return new Promise((i,u)=>{const e=document.createElement("button"),d=new a(e,{text:()=>c,action:()=>"copy",container:t!==void 0?t:document.body});d.on("success",n=>{d.destroy(),i(n)}),d.on("error",n=>{d.destroy(),u(n)}),r&&document.body.appendChild(e),e.click(),r&&document.body.removeChild(e)})}}};export{l as u}; 2 | -------------------------------------------------------------------------------- /frontend/assets/website.67499d41.js: -------------------------------------------------------------------------------- 1 | import{r as t}from"./index.b60a26c4.js";function o(){return t.get({url:"/setting/copyright/detail"})}function s(e){return t.post({url:"/setting/copyright/save",params:e})}function i(){return t.get({url:"/setting/website/detail"})}function n(e){return t.post({url:"/setting/website/save",params:e})}function u(){return t.get({url:"/setting/protocol/detail"})}function g(e){return t.post({url:"/setting/protocol/save",params:e})}export{i as a,n as b,u as c,g as d,o as g,s}; 2 | -------------------------------------------------------------------------------- /h5/assets/account.55f2d7a8.js: -------------------------------------------------------------------------------- 1 | import{c as t}from"./client.68d036db.js";import{C as r}from"./index.cfa79457.js";function n(n){return r.post({url:"/login/check",data:{...n,client:t}})}function o(n){return r.post({url:"/login/register",data:{...n,client:t}})}function a(t){return r.post({url:"/login/forgotPassword",data:t})}function i(){return r.get({url:"/login/codeUrl",data:{url:location.href}})}function e(t){return r.get({url:"/login/oaLogin",data:t})}export{e as O,a as f,i as g,n as l,o as r}; 2 | -------------------------------------------------------------------------------- /h5/assets/appEnums.a2ba827b.js: -------------------------------------------------------------------------------- 1 | var I=(I=>(I[I.MP_WEIXIN=1]="MP_WEIXIN",I[I.OA_WEIXIN=2]="OA_WEIXIN",I[I.H5=3]="H5",I[I.IOS=5]="IOS",I[I.ANDROID=6]="ANDROID",I))(I||{}),N=(I=>(I[I.LOGIN=101]="LOGIN",I[I.BIND_MOBILE=102]="BIND_MOBILE",I[I.CHANGE_MOBILE=103]="CHANGE_MOBILE",I[I.FIND_PASSWORD=104]="FIND_PASSWORD",I))(N||{}),E=(I=>(I.NONE="",I.AVATAR="avatar",I.USERNAME="username",I.NICKNAME="nickname",I.SEX="sex",I))(E||{});export{I as C,E as F,N as S}; 2 | -------------------------------------------------------------------------------- /h5/assets/as_us.a2f8b82c.css: -------------------------------------------------------------------------------- 1 | .as-us .img[data-v-31e0ee28]{width:5rem;height:5rem;border-radius:.625rem;margin-top:3rem} 2 | -------------------------------------------------------------------------------- /h5/assets/bind_mobile.883a800d.css: -------------------------------------------------------------------------------- 1 | uni-page-body[data-v-3b29402b]{height:100%} 2 | -------------------------------------------------------------------------------- /h5/assets/change_password.426e67e4.css: -------------------------------------------------------------------------------- 1 | uni-page-body[data-v-6d296437]{height:100%} 2 | -------------------------------------------------------------------------------- /h5/assets/client.68d036db.js: -------------------------------------------------------------------------------- 1 | import{C as I}from"./appEnums.a2ba827b.js";const n=()=>/MicroMessenger/i.test(navigator.userAgent);function s(){const I=navigator.userAgent;return I.indexOf("Android")>-1||I.indexOf("Adr")>-1}const r=(({MP_WEIXIN:I,OA_WEIXIN:s,H5:r,IOS:t,ANDROID:O,OTHER:a})=>n()?s():r())({MP_WEIXIN:()=>I.MP_WEIXIN,OA_WEIXIN:()=>I.OA_WEIXIN,H5:()=>I.H5,IOS:()=>I.IOS,ANDROID:()=>I.ANDROID,OTHER:()=>null});export{n as a,r as c,s as i}; 2 | -------------------------------------------------------------------------------- /h5/assets/collection.c4157529.css: -------------------------------------------------------------------------------- 1 | .u-swipe-action[data-v-d0fdd334]{width:auto;height:initial;position:relative;overflow:hidden}.u-swipe-view[data-v-d0fdd334]{display:flex;flex-direction:row;height:initial;position:relative}.u-swipe-content[data-v-d0fdd334]{flex:1}.u-swipe-del[data-v-d0fdd334]{position:relative;font-size:.9375rem;color:#fff}.u-btn-text[data-v-d0fdd334]{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)} 2 | -------------------------------------------------------------------------------- /h5/assets/forget_pwd.c3cfcc99.css: -------------------------------------------------------------------------------- 1 | uni-page-body[data-v-1fdc250a]{height:100%} 2 | -------------------------------------------------------------------------------- /h5/assets/icon_visit.21b6ed3b.js: -------------------------------------------------------------------------------- 1 | var i="/mobile/static/images/icon/icon_visit.png";export{i as _}; 2 | -------------------------------------------------------------------------------- /h5/assets/icon_wx.a848c744.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/h5/assets/icon_wx.a848c744.png -------------------------------------------------------------------------------- /h5/assets/index.40995080.css: -------------------------------------------------------------------------------- 1 | .article-title[data-v-074bd20a]:before{content:"";width:.25rem;height:1.0625rem;display:block;margin-right:.3125rem;background:#4173ff} 2 | -------------------------------------------------------------------------------- /h5/assets/news-card.9d2e9b2e.css: -------------------------------------------------------------------------------- 1 | .news-card[data-v-125d567f]{border-bottom:1px solid #f8f8f8}.news-card-content-title[data-v-125d567f]{-webkit-line-clamp:2;overflow:hidden;word-break:break-all;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical}.news-card-content-intro[data-v-125d567f]{-webkit-line-clamp:1;overflow:hidden;word-break:break-all;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical} 2 | -------------------------------------------------------------------------------- /h5/assets/news.c70d38d5.js: -------------------------------------------------------------------------------- 1 | import{C as t}from"./index.cfa79457.js";function r(){return t.get({url:"/article/category"})}function a(r){return t.get({url:"/article/list",data:r})}function e(r){return t.get({url:"/article/detail",data:r})}function c(r){return t.post({url:"/article/addCollect",data:r},{isAuth:!0})}function l(r){return t.post({url:"/article/cancelCollect",data:r},{isAuth:!0})}function n(){return t.get({url:"/article/collect"})}export{r as a,e as b,l as c,c as d,n as e,a as g}; 2 | -------------------------------------------------------------------------------- /h5/assets/news_detail.3a6411e3.css: -------------------------------------------------------------------------------- 1 | .news-detail[data-v-3a16a61e]{height:100%}.news-detail-header[data-v-3a16a61e]{border-bottom:.0625rem solid #f8f8f8}.news-detail-section .summary[data-v-3a16a61e]{border-radius:.375rem;background-color:#f7f7f7}.news-detail .panel-btn[data-v-3a16a61e]{position:fixed;right:.9375rem;height:2.5rem;bottom:2.5rem;border-radius:1.25rem;background:rgba(255,255,255,.95);box-shadow:0 0 10px rgba(0,0,0,.16)} 2 | -------------------------------------------------------------------------------- /h5/assets/pages-agreement-agreement.950d45dd.js: -------------------------------------------------------------------------------- 1 | import{d as a,z as s,Y as e,o as t,c as n,w as r,b as o,au as l,an as p,r as u,a as c,k as m}from"./index.cfa79457.js";import{_ as d}from"./u-parse.09d7a9f1.js";import"./plugin-vue_export-helper.21dcd24c.js";const i=a({__name:"agreement",setup(a){let i=s("");const f=s("");return e((a=>{a.type&&(i=a.type,(async a=>{const s=await l({type:a});console.log(s,"res"),f.value=s.content,p({title:s.name})})(i))})),(a,s)=>{const e=u(c("u-parse"),d),l=m;return t(),n(l,{class:""},{default:r((()=>[o(e,{html:f.value},null,8,["html"])])),_:1})}}});export{i as default}; 2 | -------------------------------------------------------------------------------- /h5/assets/pages-as_us-as_us.0f4583ac.js: -------------------------------------------------------------------------------- 1 | import{d as s,u as e,o as a,c as t,w as o,b as c,g as r,l,t as n,n as u,k as f}from"./index.cfa79457.js";import{_ as d}from"./plugin-vue_export-helper.21dcd24c.js";var i=d(s({__name:"as_us",setup(s){const d=e();return(s,e)=>{const i=u,m=f;return a(),t(m,{class:"as-us flex flex-1 flex-col items-center"},{default:o((()=>[c(i,{src:r(d).config.website.logo,mode:"",class:"img"},null,8,["src"]),c(m,{class:"text-content mt-[20rpx]"},{default:o((()=>[l("当前版本"+n(r(d).config.version),1)])),_:1})])),_:1})}}}),[["__scopeId","data-v-31e0ee28"]]);export{i as default}; 2 | -------------------------------------------------------------------------------- /h5/assets/pages-empty-empty.b0d17a0b.js: -------------------------------------------------------------------------------- 1 | import{o as r,e}from"./index.cfa79457.js";import{_ as o}from"./plugin-vue_export-helper.21dcd24c.js";var a=o({},[["render",function(o,a){return r(),e("div")}]]);export{a as default}; 2 | -------------------------------------------------------------------------------- /h5/assets/pages-webview-webview.3ceac09f.js: -------------------------------------------------------------------------------- 1 | import{d as e,z as s,Y as a,o as n,c as o,aF as r}from"./index.cfa79457.js";const t=e({__name:"webview",setup(e){const t=s("");return a((e=>{t.value=decodeURIComponent(e.url)})),(e,s)=>{const a=r;return n(),o(a,{src:t.value},null,8,["src"])}}});export{t as default}; 2 | -------------------------------------------------------------------------------- /h5/assets/plugin-vue_export-helper.21dcd24c.js: -------------------------------------------------------------------------------- 1 | var o=(o,r)=>{const t=o.__vccOpts||o;for(const[c,s]of r)t[c]=s;return t};export{o as _}; 2 | -------------------------------------------------------------------------------- /h5/assets/register.7aa73084.css: -------------------------------------------------------------------------------- 1 | uni-page-body[data-v-b7aa7a3e]{height:100%} 2 | -------------------------------------------------------------------------------- /h5/assets/search.5426327c.css: -------------------------------------------------------------------------------- 1 | .suggest[data-v-6b91f383]{height:100%}.suggest .keyword[data-v-6b91f383]{display:inline-block;margin:.75rem .5rem 0 0;padding:.25rem .75rem;border-radius:.8125rem;background-color:#f4f4f4}.search-content[data-v-629a231d]{height:calc(100vh - 46px - env(safe-area-inset-bottom))}.search-content-s[data-v-629a231d]{height:100%} 2 | -------------------------------------------------------------------------------- /h5/assets/shop.1aa20054.js: -------------------------------------------------------------------------------- 1 | import{C as r}from"./index.cfa79457.js";function t(){return r.get({url:"/index"})}function e(t){return r.get({url:"/decorate",data:t})}function a(){return r.get({url:"/hotSearch"})}function n(t){return r.get({url:"/search",data:t})}export{e as a,a as b,n as c,t as g}; 2 | -------------------------------------------------------------------------------- /h5/assets/u-image.a7813cd9.css: -------------------------------------------------------------------------------- 1 | .u-image[data-v-48a6dea4]{position:relative;transition:opacity .5s ease-in-out}.u-image__image[data-v-48a6dea4]{width:100%;height:100%}.u-image__loading[data-v-48a6dea4],.u-image__error[data-v-48a6dea4]{position:absolute;top:0;left:0;width:100%;height:100%;display:flex;flex-direction:row;align-items:center;justify-content:center;background-color:#f3f4f6;color:#999;font-size:1.4375rem} 2 | -------------------------------------------------------------------------------- /h5/assets/u-parse.93f983af.css: -------------------------------------------------------------------------------- 1 | @-webkit-keyframes _show-49097824{0%{opacity:0}to{opacity:1}}@keyframes _show-49097824{0%{opacity:0}to{opacity:1}} 2 | -------------------------------------------------------------------------------- /h5/assets/u-search.35cfd0ff.css: -------------------------------------------------------------------------------- 1 | .u-search[data-v-47eb8750]{display:flex;flex-direction:row;align-items:center;flex:1}.u-content[data-v-47eb8750]{display:flex;flex-direction:row;align-items:center;padding:0 .5625rem;flex:1}.u-clear-icon[data-v-47eb8750]{display:flex;flex-direction:row;align-items:center}.u-input[data-v-47eb8750]{flex:1;font-size:.875rem;line-height:1;margin:0 .3125rem;color:#999}.u-close-wrap[data-v-47eb8750]{width:1.25rem;height:100%;display:flex;flex-direction:row;align-items:center;justify-content:center;border-radius:50%}.u-placeholder-class[data-v-47eb8750]{color:#999}.u-action[data-v-47eb8750]{font-size:.875rem;color:#333;width:0;overflow:hidden;transition:all .3s;white-space:nowrap;text-align:center}.u-action-active[data-v-47eb8750]{width:2.5rem;margin-left:.3125rem} 2 | -------------------------------------------------------------------------------- /h5/assets/u-verification-code.e967c1e9.css: -------------------------------------------------------------------------------- 1 | .u-code-wrap[data-v-1cef9d0f]{width:0;height:0;position:fixed;z-index:-1} 2 | -------------------------------------------------------------------------------- /h5/assets/user.4b21793f.css: -------------------------------------------------------------------------------- 1 | .user-info[data-v-0f3174a2]{background:url(/static/images/user/my_topbg.png);height:115px;background-position:bottom;background-size:100% auto} 2 | -------------------------------------------------------------------------------- /h5/assets/user_set.e61ca628.css: -------------------------------------------------------------------------------- 1 | .u-tips[data-v-72a4be36]{font-size:.8125rem;text-align:center;padding:1.0625rem 0;line-height:1.5;color:#999}.u-action-sheet-item[data-v-72a4be36]{display:flex;flex-direction:row;line-height:1;justify-content:center;align-items:center;font-size:1rem;padding:1.0625rem 0;flex-direction:column}.u-action-sheet-item__subtext[data-v-72a4be36]{font-size:.75rem;color:#999;margin-top:.625rem}.u-gab[data-v-72a4be36]{height:.375rem;background-color:#eaeaec}.u-actionsheet-cancel[data-v-72a4be36]{color:#333}.user-set .item[data-v-8f36ed3e]{padding:.9375rem}.user-set .btn-border[data-v-8f36ed3e]{border-bottom:.0625rem solid #f8f8f8} 2 | -------------------------------------------------------------------------------- /h5/static/images/icon/icon_code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/h5/static/images/icon/icon_code.png -------------------------------------------------------------------------------- /h5/static/images/icon/icon_mobile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/h5/static/images/icon/icon_mobile.png -------------------------------------------------------------------------------- /h5/static/images/icon/icon_password.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/h5/static/images/icon/icon_password.png -------------------------------------------------------------------------------- /h5/static/images/icon/icon_user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/h5/static/images/icon/icon_user.png -------------------------------------------------------------------------------- /h5/static/images/icon/icon_visit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/h5/static/images/icon/icon_visit.png -------------------------------------------------------------------------------- /h5/static/images/icon/icon_wx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/h5/static/images/icon/icon_wx.png -------------------------------------------------------------------------------- /h5/static/images/tabs/home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/h5/static/images/tabs/home.png -------------------------------------------------------------------------------- /h5/static/images/tabs/home_s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/h5/static/images/tabs/home_s.png -------------------------------------------------------------------------------- /h5/static/images/tabs/news.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/h5/static/images/tabs/news.png -------------------------------------------------------------------------------- /h5/static/images/tabs/news_s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/h5/static/images/tabs/news_s.png -------------------------------------------------------------------------------- /h5/static/images/tabs/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/h5/static/images/tabs/user.png -------------------------------------------------------------------------------- /h5/static/images/tabs/user_s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/h5/static/images/tabs/user_s.png -------------------------------------------------------------------------------- /h5/static/images/user/default_avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/h5/static/images/user/default_avatar.png -------------------------------------------------------------------------------- /h5/static/images/user/my_topbg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/h5/static/images/user/my_topbg.png -------------------------------------------------------------------------------- /public/admin/assets/@floating-ui.dd8b295f.js: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /public/admin/assets/BrowserPreview_tmp.f88b03df.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/public/admin/assets/BrowserPreview_tmp.f88b03df.png -------------------------------------------------------------------------------- /public/admin/assets/attr-setting.vue_vue_type_script_setup_true_lang.79deee70.js: -------------------------------------------------------------------------------- 1 | import{w as i}from"./index.310dbf76.js";import{d as l,o as t,c as d,a as m,V as f,O as c,S as p,u as g,aI as b}from"./@vue.a137a740.js";const u={class:"pages-setting"},w={class:"title flex items-center before:w-[3px] before:h-[14px] before:block before:bg-primary before:mr-2"},k=l({__name:"attr-setting",props:{widget:{type:Object,default:()=>({})}},setup(e){return(y,x)=>{var s,a,n,o,r;return t(),d("div",u,[m("div",w,f((s=e.widget)==null?void 0:s.title),1),(t(),c(b,null,[(t(),c(p((n=g(i)[(a=e.widget)==null?void 0:a.name])==null?void 0:n.attr),{class:"pt-5 pr-4",content:(o=e.widget)==null?void 0:o.content,styles:(r=e.widget)==null?void 0:r.styles},null,8,["content","styles"]))],1024))])}}});export{k as _}; 2 | -------------------------------------------------------------------------------- /public/admin/assets/attr.15bf174a.js: -------------------------------------------------------------------------------- 1 | import"./attr.vue_vue_type_script_setup_true_lang.a6ae21ee.js";import{_ as t}from"./attr.vue_vue_type_script_setup_true_lang.a6ae21ee.js";import"./@vue.a137a740.js";export{t as default}; 2 | -------------------------------------------------------------------------------- /public/admin/assets/attr.d3150e80.js: -------------------------------------------------------------------------------- 1 | import"./attr.vue_vue_type_script_setup_true_lang.9653ec08.js";import{_ as t}from"./attr.vue_vue_type_script_setup_true_lang.9653ec08.js";import"./@vue.a137a740.js";export{t as default}; 2 | -------------------------------------------------------------------------------- /public/admin/assets/attr.db9092b2.js: -------------------------------------------------------------------------------- 1 | import"./attr.vue_vue_type_script_setup_true_lang.9820b9a5.js";import{_ as t}from"./attr.vue_vue_type_script_setup_true_lang.9820b9a5.js";import"./@vue.a137a740.js";export{t as default}; 2 | -------------------------------------------------------------------------------- /public/admin/assets/attr.vue_vue_type_script_setup_true_lang.9653ec08.js: -------------------------------------------------------------------------------- 1 | import{d as e,o as t,c as o}from"./@vue.a137a740.js";const r=e({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(c){return(n,a)=>(t(),o("div"))}});export{r as _}; 2 | -------------------------------------------------------------------------------- /public/admin/assets/attr.vue_vue_type_script_setup_true_lang.9820b9a5.js: -------------------------------------------------------------------------------- 1 | import{d as e,o as t,c as o}from"./@vue.a137a740.js";const r=e({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(c){return(n,a)=>(t(),o("div"))}});export{r as _}; 2 | -------------------------------------------------------------------------------- /public/admin/assets/attr.vue_vue_type_script_setup_true_lang.a6ae21ee.js: -------------------------------------------------------------------------------- 1 | import{d as e,o as t,c as o}from"./@vue.a137a740.js";const r=e({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(c){return(n,a)=>(t(),o("div"))}});export{r as _}; 2 | -------------------------------------------------------------------------------- /public/admin/assets/balanced-match.d2a36341.js: -------------------------------------------------------------------------------- 1 | var l=function(r,a,e){for(var s=0,t={},n=0;n1?e.substring(t.start+r.length,t.end):"",t.post=e.slice(t.end+a.length),t};export{l as b}; 2 | -------------------------------------------------------------------------------- /public/admin/assets/cache.b08e0053.css: -------------------------------------------------------------------------------- 1 | .el-table .el-table__cell[data-v-4f669e5f]{min-width:120px} 2 | -------------------------------------------------------------------------------- /public/admin/assets/consumer.e63bb0ad.js: -------------------------------------------------------------------------------- 1 | import{r as t}from"./index.b60a26c4.js";function u(r){return t.get({url:"/user/list",params:r})}function s(r){return t.get({url:"/user/detail",params:r})}function i(r){return t.post({url:"/user/edit",params:r})}export{u as a,s as g,i as u}; 2 | -------------------------------------------------------------------------------- /public/admin/assets/content.75595e09.css: -------------------------------------------------------------------------------- 1 | .search[data-v-6fb29c10]{background-color:#fff;padding:7px 12px}.search .search-con[data-v-6fb29c10]{height:100%;height:36px;border-radius:36px;background:#f4f4f4;color:#999} 2 | -------------------------------------------------------------------------------- /public/admin/assets/content.9f244b19.css: -------------------------------------------------------------------------------- 1 | .customer-service[data-v-74f49970]{margin:10px 18px;border-radius:10px;padding:50px 55px 80px;background:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center} 2 | -------------------------------------------------------------------------------- /public/admin/assets/content.c40e4b89.css: -------------------------------------------------------------------------------- 1 | .news .news-title[data-v-6445a67e]:before{content:"";width:4px;height:17px;display:block;margin-right:5px;background:#4173ff} 2 | -------------------------------------------------------------------------------- /public/admin/assets/content.c9a2d497.css: -------------------------------------------------------------------------------- 1 | .user-info[data-v-cdcc3d15]{background:url(/assets/my_topbg.137a6c56.png);height:115px;background-position:bottom;background-size:100% auto} 2 | -------------------------------------------------------------------------------- /public/admin/assets/content.efb8af20.css: -------------------------------------------------------------------------------- 1 | .my-service[data-v-a7e52d47]{margin:10px 10px 0;background-color:#fff;border-radius:7px}.my-service .title[data-v-a7e52d47]{border-bottom:1px solid #e5e5e5;font-size:16px;font-weight:500} 2 | -------------------------------------------------------------------------------- /public/admin/assets/content.vue_vue_type_script_setup_true_lang.12563a6c.js: -------------------------------------------------------------------------------- 1 | import o from"./decoration-img.e2c4084c.js";import{d as s,e as c,o as r,c as i,a as p,X as m,u as d}from"./@vue.a137a740.js";const u={class:"banner mx-[10px] mt-[10px]"},_={class:"banner-image"},h=s({__name:"content",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(t){const n=t,a=c(()=>{const{data:e}=n.content;return Array.isArray(e)&&e[0]?e[0].image:""});return(e,l)=>(r(),i("div",u,[p("div",_,[m(o,{width:"100%",height:"100px",src:d(a),fit:"contain"},null,8,["src"])])]))}});export{h as _}; 2 | -------------------------------------------------------------------------------- /public/admin/assets/content.vue_vue_type_script_setup_true_lang.43e08694.js: -------------------------------------------------------------------------------- 1 | import o from"./decoration-img.e2c4084c.js";import{d as r,o as e,c as t,a,W as l,a8 as p,X as i,V as d}from"./@vue.a137a740.js";const m={class:"nav bg-white pt-[15px] pb-[8px]"},_={class:"flex flex-wrap"},x={class:"mt-[7px]"},b=r({__name:"content",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(n){return(f,u)=>(e(),t("div",m,[a("div",_,[(e(!0),t(l,null,p(n.content.data,(s,c)=>(e(),t("div",{key:c,class:"flex flex-col items-center w-1/5 mb-[15px]"},[i(o,{width:"41px",height:"41px",src:s.image,alt:""},null,8,["src"]),a("div",x,d(s.name),1)]))),128))])]))}});export{b as _}; 2 | -------------------------------------------------------------------------------- /public/admin/assets/content.vue_vue_type_script_setup_true_lang.c47a6b69.js: -------------------------------------------------------------------------------- 1 | import o from"./decoration-img.e2c4084c.js";import{d as s,e as c,o as r,c as i,a as p,X as d,u as m}from"./@vue.a137a740.js";const u={class:"banner"},_={class:"banner-image"},h=s({__name:"content",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(t){const n=t,a=c(()=>{const{data:e}=n.content;return Array.isArray(e)&&e[0]?e[0].image:""});return(e,l)=>(r(),i("div",u,[p("div",_,[d(o,{width:"100%",height:"170px",src:m(a),fit:"contain"},null,8,["src"])])]))}});export{h as _}; 2 | -------------------------------------------------------------------------------- /public/admin/assets/decoration-img.a64d82f7.css: -------------------------------------------------------------------------------- 1 | .el-image[data-v-73b9b608]{display:block}.el-image .image-slot[data-v-73b9b608]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;background:#fafafa;color:#909399} 2 | -------------------------------------------------------------------------------- /public/admin/assets/decoration.ab9ddaa9.js: -------------------------------------------------------------------------------- 1 | import{r as t}from"./index.b60a26c4.js";function a(e){return t.get({url:"/decorate/pages/detail",params:e},{ignoreCancelToken:!0})}function o(e){return t.post({url:"/decorate/pages/save",params:e})}function c(e){return t.get({url:"/decorate/data/article",params:e})}function n(e){return t.get({url:"/decorate/tabbar/detail",params:e})}function s(e){return t.post({url:"/decorate/tabbar/save",params:e})}export{a,n as b,s as c,c as g,o as s}; 2 | -------------------------------------------------------------------------------- /public/admin/assets/default_avatar.fa19527b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/public/admin/assets/default_avatar.fa19527b.png -------------------------------------------------------------------------------- /public/admin/assets/department.a2353fbd.js: -------------------------------------------------------------------------------- 1 | import{r as e}from"./index.b60a26c4.js";function r(t){return e.get({url:"/system/dept/list",params:t})}function d(t){return e.post({url:"/system/dept/add",params:t})}function u(t){return e.post({url:"/system/dept/edit",params:t})}function n(t){return e.post({url:"/system/dept/del",params:t})}function p(t){return e.get({url:"/system/dept/detail",params:t})}export{u as a,d as b,p as c,r as d,n as e}; 2 | -------------------------------------------------------------------------------- /public/admin/assets/dict.7219bd74.js: -------------------------------------------------------------------------------- 1 | import{r as e}from"./index.b60a26c4.js";function n(t){return e.get({url:"/setting/dict/type/list",params:t})}function d(t){return e.get({url:"/setting/dict/type/all",params:t})}function r(t){return e.post({url:"/setting/dict/type/add",params:t})}function s(t){return e.post({url:"/setting/dict/type/edit",params:t})}function a(t){return e.post({url:"/setting/dict/type/del",params:t})}function c(t){return e.get({url:"/setting/dict/data/list",params:t},{ignoreCancelToken:!0})}function u(t){return e.post({url:"/setting/dict/data/add",params:t})}function l(t){return e.post({url:"/setting/dict/data/edit",params:t})}function o(t){return e.post({url:"/setting/dict/data/del",params:t})}export{l as a,u as b,o as c,d,c as e,s as f,r as g,a as h,n as i}; 2 | -------------------------------------------------------------------------------- /public/admin/assets/error.be93caf8.css: -------------------------------------------------------------------------------- 1 | .error[data-v-a47523cc]{text-align:center;height:100vh;display:flex;justify-content:center;align-items:center}.error .error-code[data-v-a47523cc]{color:var(--el-color-primary);font-size:150px}.error .el-button[data-v-a47523cc]{width:176px} 2 | -------------------------------------------------------------------------------- /public/admin/assets/escape-html.e5dfadb9.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * escape-html 3 | * Copyright(c) 2012-2013 TJ Holowaychuk 4 | * Copyright(c) 2015 Andreas Lubbe 5 | * Copyright(c) 2015 Tiancheng "Timothy" Gu 6 | * MIT Licensed 7 | */var i=/["'&<>]/,u=l;function l(n){var a=""+n,c=i.exec(a);if(!c)return a;var r,s="",e=0,t=0;for(e=c.index;e(s(),n("div",c,[_("div",{class:"footer-btns__content",style:d(e.fixed?"position: fixed":"")},[a(o.$slots,"default",{},void 0,!0)],4)]))}});const u=r(i,[["__scopeId","data-v-0b44b424"]]);export{u as _}; 2 | -------------------------------------------------------------------------------- /public/admin/assets/index.0d25a475.css: -------------------------------------------------------------------------------- 1 | .w-e-full-screen-container{z-index:999}.w-e-text-container [data-slate-editor] ul{list-style:disc}.w-e-text-container [data-slate-editor] ol{list-style:decimal}h1{font-size:2em}h2{font-size:1.5em}h3{font-size:1.17em}h4{font-size:1em}h5{font-size:.83em}h1,h2,h3,h4,h5{font-weight:700} 2 | -------------------------------------------------------------------------------- /public/admin/assets/index.15f50578.css: -------------------------------------------------------------------------------- 1 | .decoration-pages[data-v-a4bc0153]{min-height:calc(100vh - var(--navbar-height) - 80px);display:flex;flex-direction:column} 2 | -------------------------------------------------------------------------------- /public/admin/assets/index.2a55a6b3.css: -------------------------------------------------------------------------------- 1 | .hot-search .hot-search-phone[data-v-2eb25184]{width:300px}.hot-search .hot-search-phone-content[data-v-2eb25184]{width:100%;height:530px;padding:12px;border-radius:10px;border:1px solid #e6e6e6}.hot-search .hot-search-phone-content .search-com .search-con[data-v-2eb25184]{height:100%;height:36px;border-radius:36px;background:#f4f4f4;color:#999}.hot-search .hot-search-phone-content .hot-search-title[data-v-2eb25184]{padding:10px 0;font-size:13px}.hot-search .hot-search-phone-content .hot-search-text span[data-v-2eb25184]{font-size:12px;border-radius:100px;padding:5px 10px;margin:0 6px 6px 0;display:inline-block;background-color:#f4f4f4} 2 | -------------------------------------------------------------------------------- /public/admin/assets/index.2ace3fcf.css: -------------------------------------------------------------------------------- 1 | .footer-btns[data-v-0b44b424]{height:60px}.footer-btns__content[data-v-0b44b424]{bottom:0;height:60px;right:0;left:0;z-index:99;display:flex;align-items:center;justify-content:center;background-color:var(--el-bg-color);--tw-shadow: var(--el-box-shadow);--tw-shadow-colored: var(--el-box-shadow);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)} 2 | -------------------------------------------------------------------------------- /public/admin/assets/index.796a76b8.js: -------------------------------------------------------------------------------- 1 | import{d,b as r}from"./index.b60a26c4.js";import{d as c,o as s,c as n,K as p,$ as _,X as i,T as m}from"./@vue.a137a740.js";const u=c({props:{showClose:{type:Boolean,default:!0}},emits:["close"],setup(e,{emit:o}){return{handleClose:()=>{o("close")}}}});const f={class:"del-wrap"};function C(e,o,t,h,$,v){const a=r;return s(),n("div",f,[p(e.$slots,"default",{},void 0,!0),e.showClose?(s(),n("div",{key:0,class:"icon-close",onClick:o[0]||(o[0]=_((...l)=>e.handleClose&&e.handleClose(...l),["stop"]))},[i(a,{size:12,name:"el-icon-CloseBold"})])):m("",!0)])}const y=d(u,[["render",C],["__scopeId","data-v-2a98aa67"]]);export{y as _}; 2 | -------------------------------------------------------------------------------- /public/admin/assets/index.9bce7fe7.css: -------------------------------------------------------------------------------- 1 | .del-wrap[data-v-2a98aa67]{position:relative}.del-wrap:hover>.icon-close[data-v-2a98aa67]{display:flex}.del-wrap .icon-close[data-v-2a98aa67]{display:none;position:absolute;top:-8px;right:-8px;width:16px;height:16px;background-color:#0000004d;justify-content:center;align-items:center;border-radius:50%;color:#fff;cursor:pointer} 2 | -------------------------------------------------------------------------------- /public/admin/assets/index.a318de61.css: -------------------------------------------------------------------------------- 1 | .dialog-body[data-v-b8e715d9]{white-space:pre-line} 2 | -------------------------------------------------------------------------------- /public/admin/assets/index.aecdfa78.css: -------------------------------------------------------------------------------- 1 | .text_hidden[data-v-c0cb4eb2]{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;overflow:hidden} 2 | -------------------------------------------------------------------------------- /public/admin/assets/index.be29c95e.css: -------------------------------------------------------------------------------- 1 | .material-index[data-v-15a46c2f]{min-width:700px}.material-index[data-v-15a46c2f] .el-tabs{height:calc(100vh - 180px);display:flex;flex-direction:column}.material-index[data-v-15a46c2f] .el-tabs .el-tabs__header{margin-bottom:0!important}.material-index[data-v-15a46c2f] .el-tabs .el-tabs__content,.material-index[data-v-15a46c2f] .el-tabs .el-tab-pane{min-height:0;flex:1;display:flex;flex-direction:column} 2 | -------------------------------------------------------------------------------- /public/admin/assets/lodash-unified.d120b703.js: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /public/admin/assets/login.343b5475.css: -------------------------------------------------------------------------------- 1 | .login[data-v-0e999780]{background-image:url(/assets/login_bg.2f630cea.png);min-height:100vh;background-size:cover;background-position:center;background-repeat:no-repeat}.login .login-card[data-v-0e999780]{height:400px} 2 | -------------------------------------------------------------------------------- /public/admin/assets/login_bg.2f630cea.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/public/admin/assets/login_bg.2f630cea.png -------------------------------------------------------------------------------- /public/admin/assets/memoize-one.5eaee740.js: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /public/admin/assets/menu.52becb26.js: -------------------------------------------------------------------------------- 1 | import{r as t}from"./index.b60a26c4.js";function n(e){return t.get({url:"/system/menu/list",params:e})}function s(e){return t.post({url:"/system/menu/add",params:e})}function r(e){return t.post({url:"/system/menu/edit",params:e})}function m(e){return t.post({url:"/system/menu/del",params:e})}function i(e){return t.get({url:"/system/menu/detail",params:e})}export{r as a,s as b,i as c,m as d,n as m}; 2 | -------------------------------------------------------------------------------- /public/admin/assets/menu.a050bec6.css: -------------------------------------------------------------------------------- 1 | .pages-menu[data-v-a5360079] .el-menu-item{border-color:transparent}.pages-menu[data-v-a5360079] .el-menu-item.is-active{border-right-width:2px;border-color:var(--el-color-primary);background-color:var(--el-color-primary-light-9)} 2 | -------------------------------------------------------------------------------- /public/admin/assets/menu_role.4823a023.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/public/admin/assets/menu_role.4823a023.png -------------------------------------------------------------------------------- /public/admin/assets/message.8c01f477.js: -------------------------------------------------------------------------------- 1 | import{r as s}from"./index.b60a26c4.js";function n(t){return s.get({url:"/setting/notice/list",params:t})}function i(t){return s.get({url:"/setting/notice/detail",params:t})}function r(t){return s.post({url:"/setting/notice/save",params:t})}function o(){return s.get({url:"/setting/sms/list"})}function u(t){return s.get({url:"/setting/sms/detail",params:t})}function a(t){return s.post({url:"/setting/sms/save",params:t})}export{n as a,a as b,u as c,o as d,i as n,r as s}; 2 | -------------------------------------------------------------------------------- /public/admin/assets/my_topbg.137a6c56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/public/admin/assets/my_topbg.137a6c56.png -------------------------------------------------------------------------------- /public/admin/assets/no_perms.a56e95a5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/public/admin/assets/no_perms.a56e95a5.png -------------------------------------------------------------------------------- /public/admin/assets/picker.05436930.css: -------------------------------------------------------------------------------- 1 | .link-menu[data-v-2f26c0ad]{--el-menu-item-height: 40px}.link-menu[data-v-2f26c0ad] .el-menu-item{border-color:transparent}.link-menu[data-v-2f26c0ad] .el-menu-item.is-active{border-right-width:2px;border-color:var(--el-color-primary);background-color:var(--el-color-primary-light-9)}.link-picker[data-v-a42918e4] .el-input.is-disabled .el-input__inner,.link-picker[data-v-a42918e4] .el-input.is-disabled .el-input__suffix{cursor:not-allowed}.link-picker[data-v-a42918e4] .el-input .el-input__inner,.link-picker[data-v-a42918e4] .el-input .el-input__suffix{cursor:pointer} 2 | -------------------------------------------------------------------------------- /public/admin/assets/post.2ca46716.js: -------------------------------------------------------------------------------- 1 | import{r as s}from"./index.b60a26c4.js";function o(t){return s.get({url:"/system/post/list",params:t})}function r(t){return s.get({url:"/system/post/all",params:t})}function u(t){return s.post({url:"/system/post/add",params:t})}function n(t){return s.post({url:"/system/post/edit",params:t})}function p(t){return s.post({url:"/system/post/del",params:t})}function l(t){return s.get({url:"/system/post/detail",params:t})}export{u as a,l as b,p as c,o as d,r as e,n as p}; 2 | -------------------------------------------------------------------------------- /public/admin/assets/preview.6e931073.css: -------------------------------------------------------------------------------- 1 | .pages-preview[data-v-d63d893f]{background-color:#f8f8f8;width:360px;height:615px;color:#333}.pages-preview .select[data-v-d63d893f]{border-style:solid;border-color:var(--el-color-primary)} 2 | -------------------------------------------------------------------------------- /public/admin/assets/qq_group.3084d316.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/public/admin/assets/qq_group.3084d316.png -------------------------------------------------------------------------------- /public/admin/assets/role.6aeb8c72.js: -------------------------------------------------------------------------------- 1 | import{r}from"./index.b60a26c4.js";function l(e){return r.get({url:"/system/role/list",params:e})}function s(e){return r.get({url:"/system/role/all",params:e})}function o(e){return r.get({url:"/system/role/detail",params:e})}function u(e){return r.post({url:"/system/role/add",params:e})}function n(e){return r.post({url:"/system/role/edit",params:e})}function i(e){return r.post({url:"/system/role/del",params:e})}export{n as a,o as b,u as c,i as d,l as e,s as r}; 2 | -------------------------------------------------------------------------------- /public/admin/assets/system.1b516774.js: -------------------------------------------------------------------------------- 1 | import{r as t}from"./index.b60a26c4.js";function s(){return t.get({url:"/monitor/server"})}function o(e){return t.get({url:"/system/log/operate",params:e})}function n(){return t.get({url:"/monitor/cache"})}export{s as a,o as b,n as s}; 2 | -------------------------------------------------------------------------------- /public/admin/assets/tabbar.75f7a8d8.css: -------------------------------------------------------------------------------- 1 | .decoration-tabbar[data-v-6338a705]{min-height:calc(100vh - var(--navbar-height) - 80px);display:flex;flex-direction:column}.decoration-tabbar .pages-preview[data-v-6338a705]{background-color:#f7f7f7;width:360px;height:615px;color:#333;position:relative}.decoration-tabbar .pages-preview .tabbar[data-v-6338a705]{position:absolute;height:50px;background-color:#fff;bottom:0;width:100%;border:2px solid var(--el-color-primary)} 2 | -------------------------------------------------------------------------------- /public/admin/assets/useDictOptions.b9a39236.js: -------------------------------------------------------------------------------- 1 | import"./index.b60a26c4.js";import{a1 as p,t as f}from"./@vue.a137a740.js";function d(a){const s=p({}),e=Object.keys(a),i=e.map(o=>{const t=a[o];return s[o]=[],()=>t.api(f(t.params)||{})}),r=async()=>{(await Promise.allSettled(i.map(t=>t()))).forEach((t,u)=>{const n=e[u];if(t.status=="fulfilled"){const{transformData:c}=a[n],l=c?c(t.value):t.value;s[n]=l}})};return r(),{optionsData:s,refresh:r}}export{d as u}; 2 | -------------------------------------------------------------------------------- /public/admin/assets/user.883bd654.js: -------------------------------------------------------------------------------- 1 | import{r as t}from"./index.b60a26c4.js";function s(){return t.get({url:"/setting/user/detail"})}function n(e){return t.post({url:"/setting/user/save",params:e})}function u(){return t.get({url:"/setting/login/detail"})}function i(e){return t.post({url:"/setting/login/save",params:e})}export{s as a,n as b,u as g,i as s}; 2 | -------------------------------------------------------------------------------- /public/admin/assets/vue-clipboard3.51d666ae.js: -------------------------------------------------------------------------------- 1 | import{C as a}from"./clipboard.e9b83688.js";const l=o=>{const r=(o==null?void 0:o.appendToBody)===void 0?!0:o.appendToBody;return{toClipboard(c,t){return new Promise((i,u)=>{const e=document.createElement("button"),d=new a(e,{text:()=>c,action:()=>"copy",container:t!==void 0?t:document.body});d.on("success",n=>{d.destroy(),i(n)}),d.on("error",n=>{d.destroy(),u(n)}),r&&document.body.appendChild(e),e.click(),r&&document.body.removeChild(e)})}}};export{l as u}; 2 | -------------------------------------------------------------------------------- /public/admin/assets/website.67499d41.js: -------------------------------------------------------------------------------- 1 | import{r as t}from"./index.b60a26c4.js";function o(){return t.get({url:"/setting/copyright/detail"})}function s(e){return t.post({url:"/setting/copyright/save",params:e})}function i(){return t.get({url:"/setting/website/detail"})}function n(e){return t.post({url:"/setting/website/save",params:e})}function u(){return t.get({url:"/setting/protocol/detail"})}function g(e){return t.post({url:"/setting/protocol/save",params:e})}export{i as a,n as b,u as c,g as d,o as g,s}; 2 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Document 9 | 10 | 11 | 12 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /public/mobile/assets/account.55f2d7a8.js: -------------------------------------------------------------------------------- 1 | import{c as t}from"./client.68d036db.js";import{C as r}from"./index.cfa79457.js";function n(n){return r.post({url:"/login/check",data:{...n,client:t}})}function o(n){return r.post({url:"/login/register",data:{...n,client:t}})}function a(t){return r.post({url:"/login/forgotPassword",data:t})}function i(){return r.get({url:"/login/codeUrl",data:{url:location.href}})}function e(t){return r.get({url:"/login/oaLogin",data:t})}export{e as O,a as f,i as g,n as l,o as r}; 2 | -------------------------------------------------------------------------------- /public/mobile/assets/appEnums.a2ba827b.js: -------------------------------------------------------------------------------- 1 | var I=(I=>(I[I.MP_WEIXIN=1]="MP_WEIXIN",I[I.OA_WEIXIN=2]="OA_WEIXIN",I[I.H5=3]="H5",I[I.IOS=5]="IOS",I[I.ANDROID=6]="ANDROID",I))(I||{}),N=(I=>(I[I.LOGIN=101]="LOGIN",I[I.BIND_MOBILE=102]="BIND_MOBILE",I[I.CHANGE_MOBILE=103]="CHANGE_MOBILE",I[I.FIND_PASSWORD=104]="FIND_PASSWORD",I))(N||{}),E=(I=>(I.NONE="",I.AVATAR="avatar",I.USERNAME="username",I.NICKNAME="nickname",I.SEX="sex",I))(E||{});export{I as C,E as F,N as S}; 2 | -------------------------------------------------------------------------------- /public/mobile/assets/as_us.a2f8b82c.css: -------------------------------------------------------------------------------- 1 | .as-us .img[data-v-31e0ee28]{width:5rem;height:5rem;border-radius:.625rem;margin-top:3rem} 2 | -------------------------------------------------------------------------------- /public/mobile/assets/bind_mobile.883a800d.css: -------------------------------------------------------------------------------- 1 | uni-page-body[data-v-3b29402b]{height:100%} 2 | -------------------------------------------------------------------------------- /public/mobile/assets/change_password.426e67e4.css: -------------------------------------------------------------------------------- 1 | uni-page-body[data-v-6d296437]{height:100%} 2 | -------------------------------------------------------------------------------- /public/mobile/assets/client.68d036db.js: -------------------------------------------------------------------------------- 1 | import{C as I}from"./appEnums.a2ba827b.js";const n=()=>/MicroMessenger/i.test(navigator.userAgent);function s(){const I=navigator.userAgent;return I.indexOf("Android")>-1||I.indexOf("Adr")>-1}const r=(({MP_WEIXIN:I,OA_WEIXIN:s,H5:r,IOS:t,ANDROID:O,OTHER:a})=>n()?s():r())({MP_WEIXIN:()=>I.MP_WEIXIN,OA_WEIXIN:()=>I.OA_WEIXIN,H5:()=>I.H5,IOS:()=>I.IOS,ANDROID:()=>I.ANDROID,OTHER:()=>null});export{n as a,r as c,s as i}; 2 | -------------------------------------------------------------------------------- /public/mobile/assets/collection.c4157529.css: -------------------------------------------------------------------------------- 1 | .u-swipe-action[data-v-d0fdd334]{width:auto;height:initial;position:relative;overflow:hidden}.u-swipe-view[data-v-d0fdd334]{display:flex;flex-direction:row;height:initial;position:relative}.u-swipe-content[data-v-d0fdd334]{flex:1}.u-swipe-del[data-v-d0fdd334]{position:relative;font-size:.9375rem;color:#fff}.u-btn-text[data-v-d0fdd334]{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)} 2 | -------------------------------------------------------------------------------- /public/mobile/assets/forget_pwd.c3cfcc99.css: -------------------------------------------------------------------------------- 1 | uni-page-body[data-v-1fdc250a]{height:100%} 2 | -------------------------------------------------------------------------------- /public/mobile/assets/icon_visit.21b6ed3b.js: -------------------------------------------------------------------------------- 1 | var i="/mobile/static/images/icon/icon_visit.png";export{i as _}; 2 | -------------------------------------------------------------------------------- /public/mobile/assets/icon_wx.a848c744.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/public/mobile/assets/icon_wx.a848c744.png -------------------------------------------------------------------------------- /public/mobile/assets/index.40995080.css: -------------------------------------------------------------------------------- 1 | .article-title[data-v-074bd20a]:before{content:"";width:.25rem;height:1.0625rem;display:block;margin-right:.3125rem;background:#4173ff} 2 | -------------------------------------------------------------------------------- /public/mobile/assets/news-card.9d2e9b2e.css: -------------------------------------------------------------------------------- 1 | .news-card[data-v-125d567f]{border-bottom:1px solid #f8f8f8}.news-card-content-title[data-v-125d567f]{-webkit-line-clamp:2;overflow:hidden;word-break:break-all;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical}.news-card-content-intro[data-v-125d567f]{-webkit-line-clamp:1;overflow:hidden;word-break:break-all;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical} 2 | -------------------------------------------------------------------------------- /public/mobile/assets/news.c70d38d5.js: -------------------------------------------------------------------------------- 1 | import{C as t}from"./index.cfa79457.js";function r(){return t.get({url:"/article/category"})}function a(r){return t.get({url:"/article/list",data:r})}function e(r){return t.get({url:"/article/detail",data:r})}function c(r){return t.post({url:"/article/addCollect",data:r},{isAuth:!0})}function l(r){return t.post({url:"/article/cancelCollect",data:r},{isAuth:!0})}function n(){return t.get({url:"/article/collect"})}export{r as a,e as b,l as c,c as d,n as e,a as g}; 2 | -------------------------------------------------------------------------------- /public/mobile/assets/news_detail.3a6411e3.css: -------------------------------------------------------------------------------- 1 | .news-detail[data-v-3a16a61e]{height:100%}.news-detail-header[data-v-3a16a61e]{border-bottom:.0625rem solid #f8f8f8}.news-detail-section .summary[data-v-3a16a61e]{border-radius:.375rem;background-color:#f7f7f7}.news-detail .panel-btn[data-v-3a16a61e]{position:fixed;right:.9375rem;height:2.5rem;bottom:2.5rem;border-radius:1.25rem;background:rgba(255,255,255,.95);box-shadow:0 0 10px rgba(0,0,0,.16)} 2 | -------------------------------------------------------------------------------- /public/mobile/assets/pages-agreement-agreement.950d45dd.js: -------------------------------------------------------------------------------- 1 | import{d as a,z as s,Y as e,o as t,c as n,w as r,b as o,au as l,an as p,r as u,a as c,k as m}from"./index.cfa79457.js";import{_ as d}from"./u-parse.09d7a9f1.js";import"./plugin-vue_export-helper.21dcd24c.js";const i=a({__name:"agreement",setup(a){let i=s("");const f=s("");return e((a=>{a.type&&(i=a.type,(async a=>{const s=await l({type:a});console.log(s,"res"),f.value=s.content,p({title:s.name})})(i))})),(a,s)=>{const e=u(c("u-parse"),d),l=m;return t(),n(l,{class:""},{default:r((()=>[o(e,{html:f.value},null,8,["html"])])),_:1})}}});export{i as default}; 2 | -------------------------------------------------------------------------------- /public/mobile/assets/pages-as_us-as_us.0f4583ac.js: -------------------------------------------------------------------------------- 1 | import{d as s,u as e,o as a,c as t,w as o,b as c,g as r,l,t as n,n as u,k as f}from"./index.cfa79457.js";import{_ as d}from"./plugin-vue_export-helper.21dcd24c.js";var i=d(s({__name:"as_us",setup(s){const d=e();return(s,e)=>{const i=u,m=f;return a(),t(m,{class:"as-us flex flex-1 flex-col items-center"},{default:o((()=>[c(i,{src:r(d).config.website.logo,mode:"",class:"img"},null,8,["src"]),c(m,{class:"text-content mt-[20rpx]"},{default:o((()=>[l("当前版本"+n(r(d).config.version),1)])),_:1})])),_:1})}}}),[["__scopeId","data-v-31e0ee28"]]);export{i as default}; 2 | -------------------------------------------------------------------------------- /public/mobile/assets/pages-empty-empty.b0d17a0b.js: -------------------------------------------------------------------------------- 1 | import{o as r,e}from"./index.cfa79457.js";import{_ as o}from"./plugin-vue_export-helper.21dcd24c.js";var a=o({},[["render",function(o,a){return r(),e("div")}]]);export{a as default}; 2 | -------------------------------------------------------------------------------- /public/mobile/assets/pages-webview-webview.3ceac09f.js: -------------------------------------------------------------------------------- 1 | import{d as e,z as s,Y as a,o as n,c as o,aF as r}from"./index.cfa79457.js";const t=e({__name:"webview",setup(e){const t=s("");return a((e=>{t.value=decodeURIComponent(e.url)})),(e,s)=>{const a=r;return n(),o(a,{src:t.value},null,8,["src"])}}});export{t as default}; 2 | -------------------------------------------------------------------------------- /public/mobile/assets/plugin-vue_export-helper.21dcd24c.js: -------------------------------------------------------------------------------- 1 | var o=(o,r)=>{const t=o.__vccOpts||o;for(const[c,s]of r)t[c]=s;return t};export{o as _}; 2 | -------------------------------------------------------------------------------- /public/mobile/assets/register.7aa73084.css: -------------------------------------------------------------------------------- 1 | uni-page-body[data-v-b7aa7a3e]{height:100%} 2 | -------------------------------------------------------------------------------- /public/mobile/assets/search.5426327c.css: -------------------------------------------------------------------------------- 1 | .suggest[data-v-6b91f383]{height:100%}.suggest .keyword[data-v-6b91f383]{display:inline-block;margin:.75rem .5rem 0 0;padding:.25rem .75rem;border-radius:.8125rem;background-color:#f4f4f4}.search-content[data-v-629a231d]{height:calc(100vh - 46px - env(safe-area-inset-bottom))}.search-content-s[data-v-629a231d]{height:100%} 2 | -------------------------------------------------------------------------------- /public/mobile/assets/shop.1aa20054.js: -------------------------------------------------------------------------------- 1 | import{C as r}from"./index.cfa79457.js";function t(){return r.get({url:"/index"})}function e(t){return r.get({url:"/decorate",data:t})}function a(){return r.get({url:"/hotSearch"})}function n(t){return r.get({url:"/search",data:t})}export{e as a,a as b,n as c,t as g}; 2 | -------------------------------------------------------------------------------- /public/mobile/assets/u-image.a7813cd9.css: -------------------------------------------------------------------------------- 1 | .u-image[data-v-48a6dea4]{position:relative;transition:opacity .5s ease-in-out}.u-image__image[data-v-48a6dea4]{width:100%;height:100%}.u-image__loading[data-v-48a6dea4],.u-image__error[data-v-48a6dea4]{position:absolute;top:0;left:0;width:100%;height:100%;display:flex;flex-direction:row;align-items:center;justify-content:center;background-color:#f3f4f6;color:#999;font-size:1.4375rem} 2 | -------------------------------------------------------------------------------- /public/mobile/assets/u-parse.93f983af.css: -------------------------------------------------------------------------------- 1 | @-webkit-keyframes _show-49097824{0%{opacity:0}to{opacity:1}}@keyframes _show-49097824{0%{opacity:0}to{opacity:1}} 2 | -------------------------------------------------------------------------------- /public/mobile/assets/u-verification-code.e967c1e9.css: -------------------------------------------------------------------------------- 1 | .u-code-wrap[data-v-1cef9d0f]{width:0;height:0;position:fixed;z-index:-1} 2 | -------------------------------------------------------------------------------- /public/mobile/assets/user.4b21793f.css: -------------------------------------------------------------------------------- 1 | .user-info[data-v-0f3174a2]{background:url(/static/images/user/my_topbg.png);height:115px;background-position:bottom;background-size:100% auto} 2 | -------------------------------------------------------------------------------- /public/mobile/assets/user_set.e61ca628.css: -------------------------------------------------------------------------------- 1 | .u-tips[data-v-72a4be36]{font-size:.8125rem;text-align:center;padding:1.0625rem 0;line-height:1.5;color:#999}.u-action-sheet-item[data-v-72a4be36]{display:flex;flex-direction:row;line-height:1;justify-content:center;align-items:center;font-size:1rem;padding:1.0625rem 0;flex-direction:column}.u-action-sheet-item__subtext[data-v-72a4be36]{font-size:.75rem;color:#999;margin-top:.625rem}.u-gab[data-v-72a4be36]{height:.375rem;background-color:#eaeaec}.u-actionsheet-cancel[data-v-72a4be36]{color:#333}.user-set .item[data-v-8f36ed3e]{padding:.9375rem}.user-set .btn-border[data-v-8f36ed3e]{border-bottom:.0625rem solid #f8f8f8} 2 | -------------------------------------------------------------------------------- /public/mobile/static/images/icon/icon_code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/public/mobile/static/images/icon/icon_code.png -------------------------------------------------------------------------------- /public/mobile/static/images/icon/icon_mobile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/public/mobile/static/images/icon/icon_mobile.png -------------------------------------------------------------------------------- /public/mobile/static/images/icon/icon_password.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/public/mobile/static/images/icon/icon_password.png -------------------------------------------------------------------------------- /public/mobile/static/images/icon/icon_user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/public/mobile/static/images/icon/icon_user.png -------------------------------------------------------------------------------- /public/mobile/static/images/icon/icon_visit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/public/mobile/static/images/icon/icon_visit.png -------------------------------------------------------------------------------- /public/mobile/static/images/icon/icon_wx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/public/mobile/static/images/icon/icon_wx.png -------------------------------------------------------------------------------- /public/mobile/static/images/tabs/home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/public/mobile/static/images/tabs/home.png -------------------------------------------------------------------------------- /public/mobile/static/images/tabs/home_s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/public/mobile/static/images/tabs/home_s.png -------------------------------------------------------------------------------- /public/mobile/static/images/tabs/news.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/public/mobile/static/images/tabs/news.png -------------------------------------------------------------------------------- /public/mobile/static/images/tabs/news_s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/public/mobile/static/images/tabs/news_s.png -------------------------------------------------------------------------------- /public/mobile/static/images/tabs/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/public/mobile/static/images/tabs/user.png -------------------------------------------------------------------------------- /public/mobile/static/images/tabs/user_s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/public/mobile/static/images/tabs/user_s.png -------------------------------------------------------------------------------- /public/mobile/static/images/user/default_avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/public/mobile/static/images/user/default_avatar.png -------------------------------------------------------------------------------- /public/mobile/static/images/user/my_topbg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/public/mobile/static/images/user/my_topbg.png -------------------------------------------------------------------------------- /public/uploads/index.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/public/uploads/index.html -------------------------------------------------------------------------------- /server/.example.env: -------------------------------------------------------------------------------- 1 | # 数据库 DATABASE_URL='mysql+pymysql://account:password@127.0.0.1:3306/name?charset=utf8mb4' # 上传目录 UPLOAD_DIRECTORY='../public/uploads/' # REDIS REDIS_URL='redis://:password@127.0.0.1:6379/0' # 服务端资源文件 DOMAIN='https://127.0.0.1:80' -------------------------------------------------------------------------------- /server/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/__init__.py -------------------------------------------------------------------------------- /server/asgi.py: -------------------------------------------------------------------------------- 1 | from like.app import create_app 2 | 3 | # 容器运行入口 4 | app = create_app() 5 | 6 | if __name__ == '__main__': 7 | import uvicorn 8 | 9 | uvicorn.run(app, host='0.0.0.0', port=8000) 10 | -------------------------------------------------------------------------------- /server/asgi_front.py: -------------------------------------------------------------------------------- 1 | from like.app import create_front 2 | 3 | # 容器运行入口 4 | app = create_front() 5 | 6 | if __name__ == '__main__': 7 | import uvicorn 8 | 9 | uvicorn.run(app, host='0.0.0.0', port=8002) 10 | -------------------------------------------------------------------------------- /server/cli/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/cli/__init__.py -------------------------------------------------------------------------------- /server/cli/db_helper.py: -------------------------------------------------------------------------------- 1 | import typer 2 | from sqlalchemy import create_engine 3 | 4 | from env import build_env 5 | 6 | build_env(__file__) 7 | 8 | 9 | def create_all_tables(): 10 | from like.config import get_settings 11 | from like.models.base import Base 12 | Base.metadata.create_all(bind=create_engine(get_settings().database_url)) 13 | 14 | 15 | if __name__ == '__main__': 16 | typer.run(create_all_tables) 17 | -------------------------------------------------------------------------------- /server/cli/env.py: -------------------------------------------------------------------------------- 1 | import sys 2 | from os import path 3 | from dotenv import load_dotenv 4 | 5 | 6 | def build_env(cur_path: str): 7 | root_path = path.abspath(path.join(cur_path, '../..')) 8 | sys.path.append(root_path) 9 | load_dotenv(dotenv_path=path.join(root_path, '.env')) 10 | load_dotenv(dotenv_path=path.join(root_path, '.env.prod')) 11 | -------------------------------------------------------------------------------- /server/like/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/like/__init__.py -------------------------------------------------------------------------------- /server/like/admin/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/like/admin/__init__.py -------------------------------------------------------------------------------- /server/like/admin/routers/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/like/admin/routers/__init__.py -------------------------------------------------------------------------------- /server/like/admin/schemas/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/like/admin/schemas/__init__.py -------------------------------------------------------------------------------- /server/like/admin/service/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/like/admin/service/__init__.py -------------------------------------------------------------------------------- /server/like/admin/service/article/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/like/admin/service/article/__init__.py -------------------------------------------------------------------------------- /server/like/admin/service/channel/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/like/admin/service/channel/__init__.py -------------------------------------------------------------------------------- /server/like/admin/service/common/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/like/admin/service/common/__init__.py -------------------------------------------------------------------------------- /server/like/admin/service/decorate/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/like/admin/service/decorate/__init__.py -------------------------------------------------------------------------------- /server/like/admin/service/setting/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/like/admin/service/setting/__init__.py -------------------------------------------------------------------------------- /server/like/admin/service/system/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/like/admin/service/system/__init__.py -------------------------------------------------------------------------------- /server/like/admin/service/user/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/like/admin/service/user/__init__.py -------------------------------------------------------------------------------- /server/like/dependencies/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/like/dependencies/__init__.py -------------------------------------------------------------------------------- /server/like/dependencies/database.py: -------------------------------------------------------------------------------- 1 | from databases import Database 2 | 3 | from ..config import get_settings 4 | 5 | __all__ = ['db'] 6 | 7 | # 数据库实例 8 | db: Database = Database( 9 | get_settings().database_url, 10 | min_size=get_settings().database_pool_min_size, 11 | max_size=get_settings().database_pool_max_size, 12 | pool_recycle=get_settings().database_pool_recycle) 13 | -------------------------------------------------------------------------------- /server/like/exceptions/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/like/exceptions/__init__.py -------------------------------------------------------------------------------- /server/like/front/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/like/front/__init__.py -------------------------------------------------------------------------------- /server/like/front/routers/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/like/front/routers/__init__.py -------------------------------------------------------------------------------- /server/like/front/routers/sms.py: -------------------------------------------------------------------------------- 1 | """ 2 | 短信发送 3 | """ 4 | 5 | from fastapi import APIRouter, Depends 6 | 7 | from like.front.schemas.sms import SmsSendIn 8 | from like.front.service.sms import ISmsSendService, SmsSendService 9 | from like.http_base import unified_resp 10 | 11 | router = APIRouter(prefix='/sms') 12 | 13 | 14 | @router.post('/send') 15 | @unified_resp 16 | async def sms_send(sms_in: SmsSendIn, sms_service: ISmsSendService = Depends(SmsSendService)): 17 | """ 18 | pass 19 | :param file_in: 20 | :return: 21 | """ 22 | return await sms_service.send(sms_in) 23 | -------------------------------------------------------------------------------- /server/like/front/routers/upload.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | from fastapi import APIRouter, UploadFile, Form 4 | 5 | from like.http_base import unified_resp 6 | from like.plugins.storage.storage_driver import StorageDriver 7 | 8 | router = APIRouter(prefix='/upload') 9 | 10 | 11 | @router.post('/image') 12 | @unified_resp 13 | async def upload_image(file: UploadFile, dir: str = Form(default='')): 14 | """上传图片""" 15 | folder = 'image' 16 | if dir: 17 | folder = os.path.join(folder, dir) 18 | res = await StorageDriver.upload(file, folder, 10) 19 | return res 20 | -------------------------------------------------------------------------------- /server/like/front/schemas/sms.py: -------------------------------------------------------------------------------- 1 | from fastapi import Query 2 | from pydantic import BaseModel 3 | 4 | 5 | class SmsSendIn(BaseModel): 6 | """ 7 | 短信发送 入参 8 | """ 9 | scene: int # 场景 [101=登录验证码, 102=绑定手机验证码, 103=变更手机验证码, 104=找回登录密码验证码] 10 | mobile: str = Query(max_length=11, min_length=11, regex="^[1][3,4,5,6,7,8,9][0-9]{9}$") 11 | -------------------------------------------------------------------------------- /server/like/front/service/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/like/front/service/__init__.py -------------------------------------------------------------------------------- /server/like/generator/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/like/generator/__init__.py -------------------------------------------------------------------------------- /server/like/generator/config.py: -------------------------------------------------------------------------------- 1 | from typing_extensions import Final 2 | 3 | 4 | class GenConfig: 5 | """代码生成器公共配置""" 6 | 7 | # 基础包名 8 | package_name: Final[str] = 'like' 9 | # 后台包名 10 | admin_package: Final[str] = 'like.admin' 11 | # 实体包名 12 | models_package: Final[str] = 'like.models' 13 | # 是否去除表前缀 14 | is_remove_table_prefix: Final[bool] = True 15 | # 生成代码根路径 16 | gen_root_path: Final[str] = 'target' 17 | -------------------------------------------------------------------------------- /server/like/generator/routers/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/like/generator/routers/__init__.py -------------------------------------------------------------------------------- /server/like/generator/schemas/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/like/generator/schemas/__init__.py -------------------------------------------------------------------------------- /server/like/generator/service/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/like/generator/service/__init__.py -------------------------------------------------------------------------------- /server/like/generator/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/like/generator/utils/__init__.py -------------------------------------------------------------------------------- /server/like/models/__init__.py: -------------------------------------------------------------------------------- 1 | from .user import * 2 | from .setting import * 3 | from .system import * 4 | from .common import * 5 | from .gen import * 6 | from .reply import * 7 | from .notice import * 8 | from .article import * 9 | -------------------------------------------------------------------------------- /server/like/models/base.py: -------------------------------------------------------------------------------- 1 | from sqlalchemy.ext.declarative import declarative_base 2 | from sqlalchemy import Column, text 3 | from sqlalchemy.dialects.mysql import INTEGER 4 | 5 | __all__ = ['Base', 'TimestampMixin'] 6 | 7 | # 数据库模型基类 8 | Base = declarative_base() 9 | 10 | 11 | class TimestampMixin: 12 | create_time = Column(INTEGER(10, unsigned=True), nullable=False, server_default=text('0'), comment='创建时间') 13 | update_time = Column(INTEGER(10, unsigned=True), nullable=False, server_default=text('0'), comment='更新时间') 14 | delete_time = Column(INTEGER(10, unsigned=True), nullable=False, server_default=text('0'), comment='删除时间') 15 | -------------------------------------------------------------------------------- /server/like/plugins/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/like/plugins/__init__.py -------------------------------------------------------------------------------- /server/like/plugins/notice/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/like/plugins/notice/__init__.py -------------------------------------------------------------------------------- /server/like/plugins/notice/template/sms_template.py: -------------------------------------------------------------------------------- 1 | from like.utils.tools import ToolsUtil 2 | 3 | 4 | class SmsTemplate(object): 5 | 6 | def __init__(self, sms_type, sms_notice): 7 | self.sms_type = sms_type 8 | config = ToolsUtil.json_to_map(sms_notice) 9 | self.template_id = config.get("template_id", "") 10 | self.content = config.get("content", "") 11 | self.status = int(config.get("status", 0)) 12 | -------------------------------------------------------------------------------- /server/like/plugins/sms/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/like/plugins/sms/__init__.py -------------------------------------------------------------------------------- /server/like/plugins/sms/engine/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/like/plugins/sms/engine/__init__.py -------------------------------------------------------------------------------- /server/like/plugins/sms/engine/sms_base.py: -------------------------------------------------------------------------------- 1 | from six import with_metaclass 2 | 3 | from like.utils.singleton_abstract_class_utils import AbstractFactoryClass 4 | 5 | 6 | class SmsBase(with_metaclass(AbstractFactoryClass)): 7 | """ 8 | SMS 抽象工厂类 9 | """ 10 | engine = '' 11 | 12 | def send(self, **kwargs): 13 | raise NotImplementedError 14 | 15 | def get_status(self): 16 | raise NotImplementedError 17 | 18 | @classmethod 19 | def init(cls): 20 | from like.plugins.sms.engine.aliyun_sms import AliyunSms 21 | from like.plugins.sms.engine.tencent_sms import TencentSms 22 | _ = AliyunSms, TencentSms 23 | for sub_class in cls.__subclasses__(): 24 | SmsBase.register(sub_class.engine, sub_class) 25 | -------------------------------------------------------------------------------- /server/like/plugins/storage/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/like/plugins/storage/__init__.py -------------------------------------------------------------------------------- /server/like/plugins/storage/engine/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/like/plugins/storage/engine/__init__.py -------------------------------------------------------------------------------- /server/like/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/like/utils/__init__.py -------------------------------------------------------------------------------- /server/like/utils/ip.py: -------------------------------------------------------------------------------- 1 | import logging 2 | import socket 3 | 4 | logger = logging.getLogger(__name__) 5 | 6 | 7 | class IpUtil: 8 | """IP工具类""" 9 | 10 | @staticmethod 11 | def get_host_name() -> str: 12 | """获取本地IP地址""" 13 | return socket.gethostname() 14 | 15 | @staticmethod 16 | def get_host_ip() -> str: 17 | """获取本地主机名""" 18 | s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 19 | try: 20 | s.connect(('10.0.0.0', 0)) 21 | ip = s.getsockname()[0] 22 | except Exception as _: 23 | ip = '127.0.0.1' 24 | finally: 25 | s.close() 26 | return ip 27 | -------------------------------------------------------------------------------- /server/like/utils/string.py: -------------------------------------------------------------------------------- 1 | import re 2 | 3 | 4 | class StringUtil: 5 | """字符串工具类""" 6 | to_snake_pattern = re.compile(r'(? str: 10 | """驼峰命名转蛇形命名""" 11 | return cls.to_snake_pattern.sub('_', name).lower() 12 | 13 | @classmethod 14 | def to_camel_case(cls, name: str, is_upper=True) -> str: 15 | """蛇形命名转驼峰命名 16 | is_upper: 为True则首字母大写, 否则首字母小写 17 | """ 18 | if not name: 19 | return name 20 | res = ''.join(word.title() for word in name.split('_')) 21 | if not is_upper: 22 | res = f'{res[0].lower()}{res[1:]}' 23 | return res 24 | -------------------------------------------------------------------------------- /server/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/migrations/__init__.py -------------------------------------------------------------------------------- /server/run_admin.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # 运行服务 4 | python3 -m uvicorn asgi:app --port 8000 --reload 5 | -------------------------------------------------------------------------------- /server/run_front.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # 运行服务 4 | python3 -m uvicorn asgi-front:app --port 8002 --reload 5 | -------------------------------------------------------------------------------- /server/static/ad01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/static/ad01.jpg -------------------------------------------------------------------------------- /server/static/article01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/static/article01.png -------------------------------------------------------------------------------- /server/static/article02.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/static/article02.jpeg -------------------------------------------------------------------------------- /server/static/article03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/static/article03.png -------------------------------------------------------------------------------- /server/static/backend_avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/static/backend_avatar.png -------------------------------------------------------------------------------- /server/static/backend_backdrop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/static/backend_backdrop.png -------------------------------------------------------------------------------- /server/static/backend_favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/static/backend_favicon.ico -------------------------------------------------------------------------------- /server/static/backend_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/static/backend_logo.png -------------------------------------------------------------------------------- /server/static/banner01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/static/banner01.png -------------------------------------------------------------------------------- /server/static/banner02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/static/banner02.png -------------------------------------------------------------------------------- /server/static/default_avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/static/default_avatar.png -------------------------------------------------------------------------------- /server/static/nav01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/static/nav01.png -------------------------------------------------------------------------------- /server/static/nav02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/static/nav02.png -------------------------------------------------------------------------------- /server/static/nav03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/static/nav03.png -------------------------------------------------------------------------------- /server/static/nav04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/static/nav04.png -------------------------------------------------------------------------------- /server/static/nav05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/static/nav05.png -------------------------------------------------------------------------------- /server/static/pc_favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/static/pc_favicon.ico -------------------------------------------------------------------------------- /server/static/pc_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/static/pc_logo.png -------------------------------------------------------------------------------- /server/static/shop_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/static/shop_logo.png -------------------------------------------------------------------------------- /server/static/tabbar_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/static/tabbar_home.png -------------------------------------------------------------------------------- /server/static/tabbar_home_sel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/static/tabbar_home_sel.png -------------------------------------------------------------------------------- /server/static/tabbar_me.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/static/tabbar_me.png -------------------------------------------------------------------------------- /server/static/tabbar_me_sel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/static/tabbar_me_sel.png -------------------------------------------------------------------------------- /server/static/tabbar_text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/static/tabbar_text.png -------------------------------------------------------------------------------- /server/static/tabbar_text_sel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/static/tabbar_text_sel.png -------------------------------------------------------------------------------- /server/static/user_about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/static/user_about.png -------------------------------------------------------------------------------- /server/static/user_collect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/static/user_collect.png -------------------------------------------------------------------------------- /server/static/user_kefu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/static/user_kefu.png -------------------------------------------------------------------------------- /server/static/user_setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/static/user_setting.png -------------------------------------------------------------------------------- /server/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/server/tests/__init__.py -------------------------------------------------------------------------------- /uniapp/.env.development.example: -------------------------------------------------------------------------------- 1 | 2 | # 请求域名 3 | VITE_APP_BASE_URL='' -------------------------------------------------------------------------------- /uniapp/.env.production.example: -------------------------------------------------------------------------------- 1 | 2 | # 请求域名 3 | VITE_APP_BASE_URL='https://python-front.likeadmin.cn' -------------------------------------------------------------------------------- /uniapp/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | .DS_Store 12 | dist 13 | dist-ssr 14 | coverage 15 | *.local 16 | 17 | 18 | /cypress/videos/ 19 | /cypress/screenshots/ 20 | 21 | # Editor directories and files 22 | .idea 23 | *.suo 24 | *.ntvs* 25 | *.njsproj 26 | *.sln 27 | *.sw? 28 | .hbuilderx 29 | # .env 30 | .env.development 31 | .env.production 32 | -------------------------------------------------------------------------------- /uniapp/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"] 3 | } 4 | -------------------------------------------------------------------------------- /uniapp/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.detectIndentation": false, 3 | "editor.tabSize": 4, 4 | "editor.formatOnSave": true, 5 | "editor.codeActionsOnSave": { 6 | "source.fixAll.eslint": true 7 | }, 8 | "css.validate": false, 9 | "less.validate": false, 10 | "scss.validate": false 11 | } 12 | -------------------------------------------------------------------------------- /uniapp/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /uniapp/src/App.vue: -------------------------------------------------------------------------------- 1 | 20 | 23 | -------------------------------------------------------------------------------- /uniapp/src/api/app.ts: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | //发送短信 4 | export function smsSend(data: any) { 5 | return request.post({ url: '/sms/send', data: data }) 6 | } 7 | 8 | export function getConfig() { 9 | return request.get({ url: '/config' }) 10 | } 11 | 12 | export function getPolicy(data: any) { 13 | return request.get({ url: '/policy', data: data }) 14 | } 15 | -------------------------------------------------------------------------------- /uniapp/src/api/shop.ts: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | //首页数据 4 | export function getIndex() { 5 | return request.get({ url: '/index' }) 6 | } 7 | 8 | // 装修页面 9 | export function getDecorate(data: any) { 10 | return request.get({ url: '/decorate', data }) 11 | } 12 | 13 | /** 14 | * @description 热门搜索 15 | * @return { Promise } 16 | */ 17 | export function getHotSearch() { 18 | return request.get({ url: '/hotSearch' }) 19 | } 20 | 21 | /** 22 | * @description 搜索 23 | * @param { string } keyword 关键词 24 | * @return { Promise } 25 | */ 26 | export function getSearch(data: { keyword: string; pageNo: number; pageSize: number }) { 27 | return request.get({ url: '/search', data }) 28 | } 29 | -------------------------------------------------------------------------------- /uniapp/src/components/app/app.vue: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/uniapp/src/components/app/app.vue -------------------------------------------------------------------------------- /uniapp/src/components/widgets/search/search.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /uniapp/src/enums/agreementEnums.ts: -------------------------------------------------------------------------------- 1 | //菜单主题类型 2 | export enum AgreementEnum { 3 | PRIVACY = 'privacy', 4 | SERVICE = 'service' 5 | } 6 | -------------------------------------------------------------------------------- /uniapp/src/enums/appEnums.ts: -------------------------------------------------------------------------------- 1 | //菜单主题类型 2 | export enum ThemeEnum { 3 | LIGHT = 'light', 4 | DARK = 'dark' 5 | } 6 | 7 | // 客户端 8 | export enum ClientEnum { 9 | MP_WEIXIN = 1, // 微信-小程序 10 | OA_WEIXIN = 2, // 微信-公众号 11 | H5 = 3, // H5 12 | IOS = 5, //苹果 13 | ANDROID = 6 //安卓 14 | } 15 | 16 | export enum SMSEnum { 17 | LOGIN = 101, 18 | BIND_MOBILE = 102, 19 | CHANGE_MOBILE = 103, 20 | FIND_PASSWORD = 104 21 | } 22 | 23 | export enum SearchTypeEnum { 24 | HISTORY = 'history' 25 | } 26 | 27 | // 用户资料 28 | export enum FieldType { 29 | NONE = '', 30 | AVATAR = 'avatar', 31 | USERNAME = 'username', 32 | NICKNAME = 'nickname', 33 | SEX = 'sex' 34 | } 35 | -------------------------------------------------------------------------------- /uniapp/src/enums/cacheEnums.ts: -------------------------------------------------------------------------------- 1 | // 本地缓冲key 2 | 3 | //token 4 | export const TOKEN_KEY = 'token' 5 | 6 | // 搜索历史记录 7 | export const HISTORY = 'history' 8 | 9 | export const BACK_URL = 'back_url' 10 | -------------------------------------------------------------------------------- /uniapp/src/hooks/useCopy.ts: -------------------------------------------------------------------------------- 1 | export function useCopy() { 2 | const copy = (text: string) => { 3 | uni.setClipboardData({ 4 | data: String(text) 5 | }) 6 | } 7 | return { 8 | copy 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /uniapp/src/hooks/useLockFn.ts: -------------------------------------------------------------------------------- 1 | import { ref } from 'vue' 2 | 3 | export function useLockFn(fn: (...args: any[]) => Promise) { 4 | const isLock = ref(false) 5 | const lockFn = async (...args: any[]) => { 6 | if (isLock.value) return 7 | isLock.value = true 8 | try { 9 | const res = await fn(...args) 10 | isLock.value = false 11 | return res 12 | } catch (e) { 13 | isLock.value = false 14 | throw e 15 | } 16 | } 17 | return { 18 | isLock, 19 | lockFn 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /uniapp/src/main.ts: -------------------------------------------------------------------------------- 1 | import { createSSRApp } from 'vue' 2 | import App from './App.vue' 3 | import plugins from './plugins' 4 | import { setupRouter } from './router' 5 | import './styles/index.scss' 6 | export function createApp() { 7 | const app = createSSRApp(App) 8 | 9 | Promise.resolve().then(() => { 10 | setupRouter() 11 | }) 12 | app.use(plugins) 13 | return { 14 | app 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /uniapp/src/pages/as_us/as_us.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 12 | 13 | 23 | -------------------------------------------------------------------------------- /uniapp/src/pages/empty/empty.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /uniapp/src/pages/webview/webview.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /uniapp/src/plugins/index.ts: -------------------------------------------------------------------------------- 1 | import { isFunction } from '@vue/shared' 2 | import { App } from 'vue' 3 | const modules = import.meta.globEager('./modules/**/*.ts') 4 | 5 | export default { 6 | install: (app: App) => { 7 | for (const module of Object.values(modules)) { 8 | const fun = module.default 9 | isFunction(fun) && fun(app) 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /uniapp/src/plugins/modules/pinia.ts: -------------------------------------------------------------------------------- 1 | import { App } from 'vue' 2 | import { createPinia } from 'pinia' 3 | const pinia = createPinia() 4 | export default (app: App) => { 5 | app.use(pinia) 6 | } 7 | -------------------------------------------------------------------------------- /uniapp/src/plugins/modules/uview.ts: -------------------------------------------------------------------------------- 1 | import { App } from 'vue' 2 | import uView from '@/uni_modules/vk-uview-ui' 3 | 4 | export default (app: App) => { 5 | // 使用 uView UI 6 | app.use(uView) 7 | } 8 | -------------------------------------------------------------------------------- /uniapp/src/plugins/modules/vconsole.ts: -------------------------------------------------------------------------------- 1 | // #ifdef H5 2 | // 提交前需要注释 本地调试使用 3 | import Vconsole from 'vconsole' 4 | import { isDevMode } from '@/utils/env' 5 | // #endif 6 | 7 | export default () => { 8 | // #ifdef H5 9 | if (isDevMode()) { 10 | const vConsole = new Vconsole() 11 | return vConsole 12 | } 13 | // #endif 14 | } 15 | -------------------------------------------------------------------------------- /uniapp/src/static/images/icon/icon_code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/uniapp/src/static/images/icon/icon_code.png -------------------------------------------------------------------------------- /uniapp/src/static/images/icon/icon_mobile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/uniapp/src/static/images/icon/icon_mobile.png -------------------------------------------------------------------------------- /uniapp/src/static/images/icon/icon_password.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/uniapp/src/static/images/icon/icon_password.png -------------------------------------------------------------------------------- /uniapp/src/static/images/icon/icon_user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/uniapp/src/static/images/icon/icon_user.png -------------------------------------------------------------------------------- /uniapp/src/static/images/icon/icon_visit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/uniapp/src/static/images/icon/icon_visit.png -------------------------------------------------------------------------------- /uniapp/src/static/images/icon/icon_wx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/uniapp/src/static/images/icon/icon_wx.png -------------------------------------------------------------------------------- /uniapp/src/static/images/tabs/home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/uniapp/src/static/images/tabs/home.png -------------------------------------------------------------------------------- /uniapp/src/static/images/tabs/home_s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/uniapp/src/static/images/tabs/home_s.png -------------------------------------------------------------------------------- /uniapp/src/static/images/tabs/news.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/uniapp/src/static/images/tabs/news.png -------------------------------------------------------------------------------- /uniapp/src/static/images/tabs/news_s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/uniapp/src/static/images/tabs/news_s.png -------------------------------------------------------------------------------- /uniapp/src/static/images/tabs/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/uniapp/src/static/images/tabs/user.png -------------------------------------------------------------------------------- /uniapp/src/static/images/tabs/user_s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/uniapp/src/static/images/tabs/user_s.png -------------------------------------------------------------------------------- /uniapp/src/static/images/user/default_avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/uniapp/src/static/images/user/default_avatar.png -------------------------------------------------------------------------------- /uniapp/src/static/images/user/my_topbg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/uniapp/src/static/images/user/my_topbg.png -------------------------------------------------------------------------------- /uniapp/src/styles/index.scss: -------------------------------------------------------------------------------- 1 | @import './tailwind.css'; 2 | @import './public.scss'; 3 | @import '../uni_modules/vk-uview-ui/index.scss'; 4 | -------------------------------------------------------------------------------- /uniapp/src/styles/public.scss: -------------------------------------------------------------------------------- 1 | page { 2 | background-color: $u-bg-color; 3 | font-size: 28rpx; 4 | } 5 | -------------------------------------------------------------------------------- /uniapp/src/styles/tailwind.css: -------------------------------------------------------------------------------- 1 | /* #ifdef H5 */ 2 | @tailwind base; 3 | /* #endif */ 4 | 5 | @tailwind utilities; 6 | -------------------------------------------------------------------------------- /uniapp/src/styles/var.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/likeadmin-likeshop/likeadmin_python/0f487c83376e82d52dcea9aa64290355451c1272/uniapp/src/styles/var.css -------------------------------------------------------------------------------- /uniapp/src/uni_modules/vk-uview-ui/components/u-loading-page/u-loading-page.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 22 | 23 | 26 | -------------------------------------------------------------------------------- /uniapp/src/uni_modules/vk-uview-ui/components/u-tr/u-tr.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 18 | 19 | 26 | -------------------------------------------------------------------------------- /uniapp/src/uni_modules/vk-uview-ui/components/vk-uview-ui/vk-uview-ui.vue: -------------------------------------------------------------------------------- 1 | 3 | 4 | 7 | 8 | 13 | 14 | 16 | -------------------------------------------------------------------------------- /uniapp/src/uni_modules/vk-uview-ui/index.scss: -------------------------------------------------------------------------------- 1 | // 引入公共基础类 2 | @import "./libs/css/common.scss"; 3 | @import "./libs/css/color.scss"; 4 | 5 | // 非nvue的样式 6 | /* #ifndef APP-NVUE */ 7 | @import "./libs/css/style.vue.scss"; 8 | /* #endif */ 9 | 10 | // nvue的特有样式 11 | /* #ifdef APP-NVUE */ 12 | @import "./libs/css/style.nvue.scss"; 13 | /* #endif */ 14 | 15 | // 小程序特有的样式 16 | /* #ifdef MP */ 17 | @import "./libs/css/style.mp.scss"; 18 | /* #endif */ 19 | 20 | // H5特有的样式 21 | /* #ifdef H5 */ 22 | @import "./libs/css/style.h5.scss"; 23 | /* #endif */ -------------------------------------------------------------------------------- /uniapp/src/uni_modules/vk-uview-ui/libs/config/config.js: -------------------------------------------------------------------------------- 1 | // 第一版 1.10.1 版本发布于2021-11-18 2 | let version = '1.10.1'; 3 | 4 | export default { 5 | v: version, 6 | version: version, 7 | // 主题名称 8 | type: [ 9 | 'primary', 10 | 'success', 11 | 'info', 12 | 'error', 13 | 'warning' 14 | ] 15 | } -------------------------------------------------------------------------------- /uniapp/src/uni_modules/vk-uview-ui/libs/config/zIndex.js: -------------------------------------------------------------------------------- 1 | // uniapp在H5中各API的z-index值如下: 2 | /** 3 | * actionsheet: 999 4 | * modal: 999 5 | * navigate: 998 6 | * tabbar: 998 7 | * toast: 999 8 | */ 9 | 10 | export default { 11 | toast: 10090, 12 | noNetwork: 10080, 13 | // popup包含popup,actionsheet,keyboard,picker的值 14 | popup: 10075, 15 | mask: 10070, 16 | navbar: 980, 17 | topTips: 975, 18 | sticky: 970, 19 | indexListSticky: 965, 20 | } -------------------------------------------------------------------------------- /uniapp/src/uni_modules/vk-uview-ui/libs/css/style.components.scss: -------------------------------------------------------------------------------- 1 | // 定义混入指令,用于在非nvue环境下的flex定义,因为nvue没有display属性,会报错 2 | @mixin vue-flex($direction: row) { 3 | /* #ifndef APP-NVUE */ 4 | display: flex; 5 | flex-direction: $direction; 6 | /* #endif */ 7 | } -------------------------------------------------------------------------------- /uniapp/src/uni_modules/vk-uview-ui/libs/css/style.h5.scss: -------------------------------------------------------------------------------- 1 | /* H5的时候,隐藏滚动条 */ 2 | ::-webkit-scrollbar { 3 | display: none; 4 | width: 0 !important; 5 | height: 0 !important; 6 | -webkit-appearance: none; 7 | background: transparent; 8 | } 9 | -------------------------------------------------------------------------------- /uniapp/src/uni_modules/vk-uview-ui/libs/css/style.nvue.scss: -------------------------------------------------------------------------------- 1 | .nvue { 2 | font-size: 24rpx; 3 | } -------------------------------------------------------------------------------- /uniapp/src/uni_modules/vk-uview-ui/libs/function/$parent.js: -------------------------------------------------------------------------------- 1 | // 获取父组件的参数,因为支付宝小程序不支持provide/inject的写法 2 | // this.$parent在非H5中,可以准确获取到父组件,但是在H5中,需要多次this.$parent.$parent.xxx 3 | // 这里默认值等于undefined有它的含义,因为最顶层元素(组件)的$parent就是undefined,意味着不传name 4 | // 值(默认为undefined),就是查找最顶层的$parent 5 | export default function $parent(name = undefined) { 6 | let parent = this.$parent; 7 | // 通过while历遍,这里主要是为了H5需要多层解析的问题 8 | while (parent) { 9 | // 父组件 10 | if (parent.$options && parent.$options.name !== name) { 11 | // 如果组件的name不相等,继续上一级寻找 12 | parent = parent.$parent; 13 | } else { 14 | return parent; 15 | } 16 | } 17 | return false; 18 | } -------------------------------------------------------------------------------- /uniapp/src/uni_modules/vk-uview-ui/libs/function/addUnit.js: -------------------------------------------------------------------------------- 1 | import validation from './test.js'; 2 | 3 | // 添加单位,如果有rpx,%,px等单位结尾或者值为auto,直接返回,否则加上rpx单位结尾 4 | export default function addUnit(value = 'auto', unit = 'rpx') { 5 | value = String(value); 6 | // 用uView内置验证规则中的number判断是否为数值 7 | return validation.number(value) ? `${value}${unit}` : value; 8 | } -------------------------------------------------------------------------------- /uniapp/src/uni_modules/vk-uview-ui/libs/function/bem.js: -------------------------------------------------------------------------------- 1 | function bem(name, conf) { 2 | 3 | } 4 | export default { bem } 5 | -------------------------------------------------------------------------------- /uniapp/src/uni_modules/vk-uview-ui/libs/function/deepClone.js: -------------------------------------------------------------------------------- 1 | // 判断arr是否为一个数组,返回一个bool值 2 | function isArray (arr) { 3 | return Object.prototype.toString.call(arr) === '[object Array]'; 4 | } 5 | 6 | // 深度克隆 7 | function deepClone (obj) { 8 | // 对常见的“非”值,直接返回原来值 9 | if([null, undefined, NaN, false].includes(obj)) return obj; 10 | if(typeof obj !== "object" && typeof obj !== 'function') { 11 | //原始类型直接返回 12 | return obj; 13 | } 14 | var o = isArray(obj) ? [] : {}; 15 | for(let i in obj) { 16 | if(obj.hasOwnProperty(i)){ 17 | o[i] = typeof obj[i] === "object" ? deepClone(obj[i]) : obj[i]; 18 | } 19 | } 20 | return o; 21 | } 22 | 23 | export default deepClone; 24 | -------------------------------------------------------------------------------- /uniapp/src/uni_modules/vk-uview-ui/libs/function/random.js: -------------------------------------------------------------------------------- 1 | function random(min, max) { 2 | if (min >= 0 && max > 0 && max >= min) { 3 | let gab = max - min + 1; 4 | return Math.floor(Math.random() * gab + min); 5 | } else { 6 | return 0; 7 | } 8 | } 9 | 10 | export default random; 11 | -------------------------------------------------------------------------------- /uniapp/src/uni_modules/vk-uview-ui/libs/function/randomArray.js: -------------------------------------------------------------------------------- 1 | // 打乱数组 2 | function randomArray(array = []) { 3 | // 原理是sort排序,Math.random()产生0<= x < 1之间的数,会导致x-0.05大于或者小于0 4 | return array.sort(() => Math.random() - 0.5); 5 | } 6 | 7 | export default randomArray 8 | -------------------------------------------------------------------------------- /uniapp/src/uni_modules/vk-uview-ui/libs/function/sys.js: -------------------------------------------------------------------------------- 1 | export function os() { 2 | return uni.getSystemInfoSync().platform; 3 | }; 4 | 5 | export function sys() { 6 | return uni.getSystemInfoSync(); 7 | } 8 | 9 | 10 | -------------------------------------------------------------------------------- /uniapp/src/uni_modules/vk-uview-ui/libs/function/toast.js: -------------------------------------------------------------------------------- 1 | function toast(title, duration = 1500) { 2 | uni.showToast({ 3 | title: title, 4 | icon: 'none', 5 | duration: duration 6 | }) 7 | } 8 | 9 | export default toast 10 | -------------------------------------------------------------------------------- /uniapp/src/uni_modules/vk-uview-ui/libs/function/trim.js: -------------------------------------------------------------------------------- 1 | function trim(str, pos = 'both') { 2 | if (pos == 'both') { 3 | return str.replace(/^\s+|\s+$/g, ""); 4 | } else if (pos == "left") { 5 | return str.replace(/^\s*/, ''); 6 | } else if (pos == 'right') { 7 | return str.replace(/(\s*$)/g, ""); 8 | } else if (pos == 'all') { 9 | return str.replace(/\s+/g, ""); 10 | } else { 11 | return str; 12 | } 13 | } 14 | 15 | export default trim 16 | -------------------------------------------------------------------------------- /uniapp/src/uni_modules/vk-uview-ui/libs/mixin/mpShare.js: -------------------------------------------------------------------------------- 1 | export default { 2 | onLoad() { 3 | // 设置默认的转发参数 4 | this.$u.mpShare = { 5 | title: '', // 默认为小程序名称 6 | path: '', // 默认为当前页面路径 7 | imageUrl: '' // 默认为当前页面的截图 8 | } 9 | }, 10 | onShareAppMessage() { 11 | return this.$u.mpShare 12 | }, 13 | // #ifdef MP-WEIXIN 14 | onShareTimeline() { 15 | return this.$u.mpShare 16 | } 17 | // #endif 18 | } 19 | -------------------------------------------------------------------------------- /uniapp/src/uni_modules/vk-uview-ui/libs/store/index.js: -------------------------------------------------------------------------------- 1 | // 暂时不用vuex模块方式实现,将该方法直接放入到/store/index.js中 2 | const module = { 3 | actions: { 4 | $uStore({rootState}, params) { 5 | let nameArr = params.name.split('.'); 6 | if(nameArr.length >= 2) { 7 | let obj = rootState[nameArr[0]]; 8 | for(let i = 1; i < nameArr.length - 1; i ++) { 9 | obj = obj[nameArr[i]]; 10 | } 11 | obj[nameArr[nameArr.length - 1]] = params.value; 12 | } else { 13 | rootState[params.name] = params.value; 14 | } 15 | } 16 | } 17 | } 18 | 19 | export default module -------------------------------------------------------------------------------- /uniapp/src/utils/auth.ts: -------------------------------------------------------------------------------- 1 | import { TOKEN_KEY } from '@/enums/cacheEnums' 2 | import cache from './cache' 3 | 4 | export function getToken() { 5 | return cache.get(TOKEN_KEY) 6 | } 7 | -------------------------------------------------------------------------------- /uniapp/src/utils/env.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @description: 开发模式 3 | */ 4 | export function isDevMode(): boolean { 5 | return import.meta.env.DEV 6 | } 7 | 8 | /** 9 | * @description: 生成模式 10 | */ 11 | export function isProdMode(): boolean { 12 | return import.meta.env.PROD 13 | } 14 | -------------------------------------------------------------------------------- /uniapp/src/utils/file.ts: -------------------------------------------------------------------------------- 1 | export async function saveImageToPhotosAlbum(url: string) { 2 | if (!url) return uni.$u.toast('图片错误') 3 | //#ifdef H5 4 | uni.$u.toast('长按图片保存') 5 | //#endif 6 | //#ifndef H5 7 | try { 8 | const res: any = await uni.downloadFile({ url, timeout: 10000 }) 9 | await uni.saveImageToPhotosAlbum({ 10 | filePath: res.tempFilePath 11 | }) 12 | uni.showToast({ 13 | title: '保存成功', 14 | icon: 'success' 15 | }) 16 | } catch (error: any) { 17 | uni.$u.toast(error.errMsg || '保存失败') 18 | } 19 | //#endif 20 | } 21 | -------------------------------------------------------------------------------- /uniapp/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "esnext", 4 | "useDefineForClassFields": true, 5 | "module": "esnext", 6 | "moduleResolution": "node", 7 | "strict": true, 8 | "jsx": "preserve", 9 | "sourceMap": true, 10 | "resolveJsonModule": true, 11 | "esModuleInterop": true, 12 | "lib": ["esnext", "dom"], 13 | "types": ["@dcloudio/types"], 14 | "isolatedModules": true, 15 | "baseUrl": ".", 16 | "paths": { 17 | "@/*": ["./src/*"] 18 | } 19 | }, 20 | "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue", "typings/**/*.d.ts"] 21 | } 22 | -------------------------------------------------------------------------------- /uniapp/typings/env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | declare module '*.vue' { 4 | import { DefineComponent } from 'vue' 5 | // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types 6 | const component: DefineComponent<{}, {}, any> 7 | export default component 8 | } 9 | 10 | declare interface Window { 11 | signLink: string 12 | } 13 | 14 | declare module 'uview-plus' 15 | declare module 'weixin-js-sdk' 16 | -------------------------------------------------------------------------------- /uniapp/typings/uni.d.ts: -------------------------------------------------------------------------------- 1 | interface Uni { 2 | $u: any 3 | } 4 | --------------------------------------------------------------------------------