169 Komitmen 1148a4f9da ... a6c4cb303d

Pembuat SHA1 Pesan Tanggal
  332777428@qq.com a6c4cb303d Merge branch 'develop/3.2.9' of http://60.205.190.38:9000/zhaoheqing/ohplay_system into develop/3.2.9 1 bulan lalu
  332777428@qq.com 4a27a82b5e feat: 处理多频多台点击编辑跳转后取消,顺序错乱的问题 1 bulan lalu
  zeng.chen 59494419bd feature:增加nvm的版本日志 1 bulan lalu
  zeng.chen 8bc3cec97f feature:新增设备增加1天后的选项 1 bulan lalu
  332777428@qq.com 969f5bbfba feat: 处理查看/编辑非【广播】大类中的频道,关闭页面再次打开,频道内容显示的是【广播】中的内容信息 1 bulan lalu
  zeng.chen 97361b915d fix:去掉新增设备页的自动出现的删除按钮 1 bulan lalu
  332777428@qq.com d0fea505c6 feat: 解决会员套餐,获取详情数据连续多次的问题 1 bulan lalu
  332777428@qq.com e019e7b658 feat: 解决会员套餐,点击取消出现404错误的问题 1 bulan lalu
  332777428@qq.com b29ff60e6e feat: 解决查看历史记录,第一次进入查看,页面异常显示 1 bulan lalu
  332777428@qq.com b2f793d4fd Merge branch 'develop/3.2.9' of http://60.205.190.38:9000/zhaoheqing/ohplay_system into develop/3.2.9 1 bulan lalu
  332777428@qq.com ddc6d6de02 feat: 解决详情页面切换不自动刷新的问题 1 bulan lalu
  zeng.chen ec5e589aad fix:音乐套餐增加报错提示 1 bulan lalu
  332777428@qq.com 61385cc253 feat: 解决导出文件还未创建或失败不能下载的问题 1 bulan lalu
  332777428@qq.com f77df14d66 Merge branch 'develop/3.2.9' of http://60.205.190.38:9000/zhaoheqing/ohplay_system into develop/3.2.9 1 bulan lalu
  332777428@qq.com 21f40cf844 feat: 解决导出文件还未创建或失败不能下载的问题 1 bulan lalu
  zeng.chen 0c7350b670 feature:去掉旧的设备会员收费时间 1 bulan lalu
  zeng.chen 8d325997bf feature:增加音乐-博客专辑的序号功能 1 bulan lalu
  332777428@qq.com 538c94807f feat: 解决部分频道,跳转到详情界面出现黑屏的问题 1 bulan lalu
  332777428@qq.com fd59ccc1da feat: 解决报错问题 1 bulan lalu
  332777428@qq.com 124765e6e3 feat: 去掉多频多台和定制频道最外层的序号 1 bulan lalu
  332777428@qq.com ff4691ee0f feat: 解决多频多台序号输入框无法出现的问题 1 bulan lalu
  332777428@qq.com a672c3affd feat: 解决定制频道序号输入框无法出现的问题 1 bulan lalu
  332777428@qq.com 25d76737ad feat: 对定多频多台详情序号编辑符号隐现处理 1 bulan lalu
  zeng.chen 0812e6d0ac feature:修改编辑排序不受disabled影响 1 bulan lalu
  zeng.chen ef3acfb084 feature:修改不能排序的不显示编辑按钮 1 bulan lalu
  zeng.chen 53437da790 feature:修改音乐专辑只有一个的修改序号问题 1 bulan lalu
  332777428@qq.com 12f4f20662 feat: 对定多频多台详情序号处理 1 bulan lalu
  332777428@qq.com c9832d755a Merge branch 'develop/3.2.9' of http://60.205.190.38:9000/zhaoheqing/ohplay_system into develop/3.2.9 1 bulan lalu
  332777428@qq.com afeca9db1e feat: 对定制频道详情序号处理 1 bulan lalu
  zeng.chen 36cc41f7e5 feature:修改音乐专辑插入下标的规则 1 bulan lalu
  zeng.chen 35c2625057 feature:去掉回车键的方法 1 bulan lalu
  zeng.chen feed25fd1c feature:音乐专辑的序号挪到新增里 1 bulan lalu
  zeng.chen 4f9fe740fa feature:增加设备的资源平台的唯一性校验 1 bulan lalu
  332777428@qq.com f6955f9a6e feat: 对定制频道和多频多台enter键处理 1 bulan lalu
  332777428@qq.com 280187c6d5 feat: 对定制频道和多频多台enter键处理 1 bulan lalu
  332777428@qq.com b4aa643425 feat: 定制频道编辑交换位置本地处理 1 bulan lalu
  332777428@qq.com 5289f030c2 Merge branch 'develop/3.2.9' of http://60.205.190.38:9000/zhaoheqing/ohplay_system into develop/3.2.9 1 bulan lalu
  332777428@qq.com 497b2950ff feat: 多频多台编辑交换位置本地处理 1 bulan lalu
  zeng.chen c3c03450dc feature:修改添加设备的资源平台的编辑刷新 1 bulan lalu
  332777428@qq.com 53a4b23c31 feat: 定制频道和多频多台编辑序号修改效果处理 1 bulan lalu
  332777428@qq.com af65070d7f feat: 处理定制频道和多频多台编辑序号没变化情况处理 1 bulan lalu
  332777428@qq.com eef0eb328f feat: 优化定制频道和多频多台展示处理 1 bulan lalu
  332777428@qq.com 0a29bd31b4 feat: 处理结果定制频道添加添加序号和编辑图标 1 bulan lalu
  332777428@qq.com 89ea5cd47b feat: 处理结果多频多台添加添加序号和编辑图标 1 bulan lalu
  332777428@qq.com 047e47a237 feat: 多频多台添加添加序号和编辑图标 1 bulan lalu
  zeng.chen 81a46cad3d feature:修改设备详情资源的资源文案,数据源获取方法 1 bulan lalu
  zeng.chen be41378371 feature:修改音乐专辑的下标选择 1 bulan lalu
  zeng.chen 5fa2214823 feature:设备详情页新增资源平台选项 1 bulan lalu
  332777428@qq.com 0c75825cbd Merge branch 'develop/3.2.9' of http://60.205.190.38:9000/zhaoheqing/ohplay_system into develop/3.2.9 1 bulan lalu
  332777428@qq.com bfb23358be feat: 解决实现编辑后回到上一个界面出现的问题 1 bulan lalu
  zeng.chen c74186a82e fix:优化序号的选择功能 1 bulan lalu
  zeng.chen dd94c09d47 feature:增加音乐专辑的编辑按钮 1 bulan lalu
  332777428@qq.com 8bffd2e3c7 feat: 修复音乐套餐和流量套餐名称没对应上问题 1 bulan lalu
  332777428@qq.com ab6d565694 feat: 解决,系统管理,语音管理,翻页面,回到之前界面数据不刷新 1 bulan lalu
  332777428@qq.com 1823fe1839 feat: 解决,系统管理,通知公告,翻页面,回到之前界面数据不刷新 1 bulan lalu
  332777428@qq.com 4062b2a47a feat: 解决,系统管理,参数设置,翻页面,回到之前界面数据不刷新 1 bulan lalu
  332777428@qq.com a0d1f8ece1 feat: 解决,系统管理,字典管理详情,翻页面,回到之前界面数据不刷新 1 bulan lalu
  332777428@qq.com 1f138ad62b feat: 解决,系统管理,字典管理,翻页面,回到之前界面数据不刷新 1 bulan lalu
  332777428@qq.com 6ab2118774 feat: 解决,系统管理,岗位管理,翻页面,回到之前界面数据不刷新 1 bulan lalu
  332777428@qq.com 99431e6dde feat: 解决,系统管理,部门管理,翻页面,回到之前界面数据不刷新 1 bulan lalu
  332777428@qq.com e157075412 feat: 解决,系统管理,菜单管理,翻页面,回到之前界面数据不刷新 1 bulan lalu
  332777428@qq.com 893a119e8c feat: 解决,系统管理,角色管理,翻页面,回到之前界面数据不刷新 1 bulan lalu
  332777428@qq.com 8fd6acfa2a feat: 解决,项目管理,用户管理,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 1e15662b3d feat: 解决,项目管理,项目列表详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com af3b0a06a0 feat: 解决,项目管理,项目列表,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 272c6ef869 feat: 解决,用户管理,仓库账号,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com b3f074d132 feat: 解决,用户管理,用户账号,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 19e263b3e5 feat: 解决,订单管理,流量订单,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 0e41e40865 feat: 解决,订单管理,商品订单,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com b5f4100c5b feat: 解决,商品管理,商品推荐详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 40e6ba2eb6 feat: 解决,商品管理,商品推荐,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 013623fb1a feat: 解决,推送管理,推送弹窗详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com db4ef42005 feat: 解决,推送管理,推送弹窗,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 1e8f209fc9 feat: 解决,推送管理,APP升级详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 530d4c33bd feat: 解决,推送管理,APP升级,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 57b81bce02 feat: 解决,推送管理,消息推送,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 9f98c41623 feat: 解决,签到管理,兑换订单,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 738b6a3f46 feat: 解决,签到管理,兑换配置详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 421fa4e652 feat: 解决,签到管理,兑换配置,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com a25586545c feat: 解决,签到管理,内容配置详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com ba5af0771e feat: 解决,签到管理,内容配置,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 3e93ad8c4d feat: 解决,签到管理,抽奖统计详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 18b8e0f3c2 feat: 解决,签到管理,抽奖统计,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 9d24752351 feat: 解决,签到管理,抽奖配置,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 108bf3ac63 feat: 解决,签到管理,签到配置,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com c35deae479 feat: 解决,猫舍管理,栏目管理,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 0299c2c363 feat: 解决,猫舍管理,运营管理,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 53d4afb407 feat: 解决,猫舍管理,内容推荐,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 71fd558a93 feat: 解决,猫舍管理,内容列表,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 04578e03ef feat: 解决,服务管理,内容视频和文章,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 7e5d89a695 feat: 解决,服务管理,微信轮播图详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 38d7cea4c9 feat: 解决,服务管理,微信轮播图,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 939ddd0e8d feat: 解决,服务管理,上传壁纸,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com ada6e36bca feat: 解决,服务管理,说明书管理详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com b66a8fdd1c feat: 解决,服务管理,说明书管理,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 6b8d27e676 feat: 解决,服务管理,门店管理详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 78cd111006 feat: 解决,服务管理,门店管理,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 83ad450cbb feat: 解决,服务管理,反馈类型,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com abf2fec93a feat: 解决,服务管理,反馈列表详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 6b87bb7b53 feat: 解决,服务管理,反馈列表,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 2f868c5843 feat: 解决,服务管理,活动管理详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 72b9a70d73 feat: 解决,服务管理,活动管理,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 9d98e5530b feat: 解决,服务管理,协议管理详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com e32298c243 feat: 解决,服务管理,协议管理,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 6daa0c76c8 feat: 解决,服务管理,场景专区详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com d52ad4b6ff feat: 解决,服务管理,场景专区,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 24e544e1a1 feat: 解决,服务管理,唤醒音详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 9ba5d2efa4 feat: 解决,服务管理,唤醒音,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 1e416ceb66 feat: 解决,服务管理,爱听弹窗,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 274135fcd3 feat: 解决,服务管理,标签分类详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com b9d31c27b1 feat: 解决,服务管理,标签分类,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com d0561ea058 feat: 解决,服务管理,多频多台详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com f974371551 feat: 解决,服务管理,多频多台,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 26752218a0 feat: 解决,服务管理,定制频道详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 721893e589 feat: 解决,服务管理,定制频道,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 941350b35b feat: 解决,服务管理,场景时间,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 8bb5899c17 feat: 解决,服务管理,模块配置,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 3524ac87c7 feat: 解决,服务管理,推荐管理详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 00cf452bcd feat: 解决,服务管理,推荐管理,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com a77eded867 feat: 解决,服务管理,启动页详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com d9a708b462 feat: 解决,服务管理,启动页,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com cfc36b6502 feat: 解决,服务管理,回收记录,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com ccca06a6e4 feat: 解决,服务管理,兑换码,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 58262e6e15 feat: 解决,服务管理,音乐套餐和流量套餐详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 04497e5853 feat: 解决,服务管理,音乐套餐和流量套餐,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 8bfdd5ad2d feat: 解决,服务管理,音乐套餐详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com b14a0f7ac7 feat: 解决,服务管理,音乐套餐,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 2191f989e9 feat: 解决,服务管理,平台管理,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com f9c2c7ec74 feat: 解决,音频管理,异常监控,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com d42c8431c8 feat: 解决,音频管理,播客分类,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com d0b2d5c953 feat: 解决,音频管理,广播分类,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 7cb06ac4ce feat: 解决,音频管理,资源平台,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com a6d35386fa feat: 解决,音频管理,猫王精选电台详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com d31d4f16e9 feat: 解决,音频管理,猫王精选电台,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com ab76d3cb7e feat: 解决,音频管理,广播电台详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 6132f1bfa5 feat: 解决,音频管理,广播电台,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 260c0791be feat: 解决,音频管理,主播详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com c6d99b0adc feat: 解决,音频管理,主播,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com dab1290648 feat: 解决,音频管理,节目详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com f17e07e491 feat: 解决,音频管理,节目,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 271e9323dd feat: 解决,音频管理,播客专辑详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 499a11a9da feat: 解决,音频管理,播客专辑,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 2989dd071d feat: 解决,音频管理,音乐专辑详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 8bc276ec8b feat: 解决,音频管理,音乐专辑,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 664ab27336 feat: 解决,音频管理,歌单详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 25612b880f feat: 解决,音频管理,歌单,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com c470b82309 feat: 解决,音频管理,歌曲详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 6994b347d0 feat: 解决,音频管理,歌曲,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com a6d3080fcd feat: 解决,音频管理,歌手详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 2b6f7300d3 feat: 解决,音频管理,歌手,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com efd0158d15 feat: 解决,设备管理,预警管理,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 7d6fb4f0ea feat: 解决,设备管理,云小微,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com d5fc08f94e feat: 解决,设备管理,功能权限,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 2840839783 feat: 解决,设备管理,设备分类,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com f36804f6ad feat: 解决,设备管理,设备音乐,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com feb5ad5432 feat: 解决,设备管理,设备文章详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com ef6c98a3e3 feat: 解决,设备管理,设备文章,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com f1764bb592 feat: 解决,设备管理,设备升级详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 5f34096ba8 feat: 解决,设备管理,设备升级,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com e90a3e6918 feat: 解决,设备管理,设备大类详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 545e3c810b feat: 解决,设备管理,设备大类,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com b9823a918b feat: 解决,设备管理,设备列表详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 0594977289 feat: 解决,设备管理,设备列表,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com b4b9217d53 feat: 解决,内容管理,文章管理详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 5695327c5e feat: 解决,内容管理,文章管理,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 164a23c770 feat: 解决,内容管理,视频管理详情,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com a20d16585a feat: 解决,服务管理,音乐套餐,翻页面,回到之前界面数据不刷新 2 bulan lalu
  332777428@qq.com 14223c8ba3 Merge branch 'develop/3.2.8' of http://60.205.190.38:9000/zhaoheqing/ohplay_system into develop/3.2.8 2 bulan lalu
  332777428@qq.com 44b1cfb78f feat: 解决内容管理视频管理,翻页面,回到之前界面数据不刷新 2 bulan lalu
100 mengubah file dengan 3285 tambahan dan 1946 penghapusan
  1. 3 0
      README.md
  2. 1 1
      src/api/operation/channels.js
  3. 2 1
      src/api/service/package.js
  4. 1 1
      src/mixin/index.js
  5. 929 795
      src/router/index.js
  6. 2 0
      src/utils/request.js
  7. 559 235
      src/views/content/article/detail.vue
  8. 1 0
      src/views/content/article/index.vue
  9. 50 29
      src/views/content/video/detail.vue
  10. 1 0
      src/views/content/video/index.vue
  11. 114 62
      src/views/device/article/detail.vue
  12. 3 3
      src/views/device/article/index.vue
  13. 2 1
      src/views/device/category/index.vue
  14. 289 112
      src/views/device/class/detail.vue
  15. 1 0
      src/views/device/class/index.vue
  16. 2 0
      src/views/device/function/index.vue
  17. 92 5
      src/views/device/list/detail.vue
  18. 6 5
      src/views/device/list/index.vue
  19. 3 1
      src/views/device/music/index.vue
  20. 3 3
      src/views/device/version/detail.vue
  21. 2 1
      src/views/device/version/index.vue
  22. 1 0
      src/views/device/warning/index.vue
  23. 101 32
      src/views/device/yxw/index.vue
  24. 1 0
      src/views/goods/list/detail.vue
  25. 3 1
      src/views/goods/list/index.vue
  26. 113 164
      src/views/music/album/detail.vue
  27. 39 156
      src/views/music/album/index.vue
  28. 3 2
      src/views/music/anchor/detail.vue
  29. 1 0
      src/views/music/anchor/index.vue
  30. 126 221
      src/views/music/blog/detail.vue
  31. 1 0
      src/views/music/blog/index.vue
  32. 1 0
      src/views/music/blogclass/index.vue
  33. 2 1
      src/views/music/choiceness/detail.vue
  34. 1 0
      src/views/music/choiceness/index.vue
  35. 1 0
      src/views/music/list/detail.vue
  36. 2 1
      src/views/music/list/index.vue
  37. 1 0
      src/views/music/menu/detail.vue
  38. 1 0
      src/views/music/menu/index.vue
  39. 3 0
      src/views/music/monitor/index.vue
  40. 1 0
      src/views/music/platform/index.vue
  41. 4 3
      src/views/music/program/detail.vue
  42. 1 0
      src/views/music/program/index.vue
  43. 4 3
      src/views/music/radio/detail.vue
  44. 1 0
      src/views/music/radio/index.vue
  45. 1 0
      src/views/music/radioclass/index.vue
  46. 3 2
      src/views/music/singer/detail.vue
  47. 1 0
      src/views/music/singer/index.vue
  48. 3 0
      src/views/ohplay/content/index.vue
  49. 3 0
      src/views/ohplay/operation/index.vue
  50. 3 0
      src/views/ohplay/programa/index.vue
  51. 3 0
      src/views/ohplay/recommend/index.vue
  52. 2 1
      src/views/operation/activity/detail.vue
  53. 1 0
      src/views/operation/activity/index.vue
  54. 3 2
      src/views/operation/agreement/detail.vue
  55. 1 0
      src/views/operation/agreement/index.vue
  56. 110 1
      src/views/operation/channel/detail.vue
  57. 83 3
      src/views/operation/channel/index.vue
  58. 108 1
      src/views/operation/channels/detail.vue
  59. 102 1
      src/views/operation/channels/index.vue
  60. 2 1
      src/views/operation/dialog/index.vue
  61. 2 1
      src/views/operation/explain/detail.vue
  62. 1 0
      src/views/operation/explain/index.vue
  63. 2 1
      src/views/operation/feedbacklist/detail.vue
  64. 2 0
      src/views/operation/feedbacklist/index.vue
  65. 1 0
      src/views/operation/feedbacktype/index.vue
  66. 2 1
      src/views/operation/map/detail.vue
  67. 1 0
      src/views/operation/map/index.vue
  68. 1 0
      src/views/operation/module/index.vue
  69. 1 0
      src/views/operation/piano/index.vue
  70. 10 9
      src/views/operation/recommend/detail.vue
  71. 3 0
      src/views/operation/recommend/index.vue
  72. 3 2
      src/views/operation/scene/detail.vue
  73. 2 1
      src/views/operation/scene/index.vue
  74. 3 0
      src/views/operation/sceneTime/index.vue
  75. 3 2
      src/views/operation/startPage/detail.vue
  76. 1 0
      src/views/operation/startPage/index.vue
  77. 2 1
      src/views/operation/tag/detail.vue
  78. 2 1
      src/views/operation/tag/index.vue
  79. 2 1
      src/views/operation/waken/detail.vue
  80. 1 0
      src/views/operation/waken/index.vue
  81. 3 2
      src/views/operation/wxbanner/detail.vue
  82. 1 0
      src/views/operation/wxbanner/index.vue
  83. 292 63
      src/views/order/list/index.vue
  84. 2 1
      src/views/project/list/detail.vue
  85. 3 0
      src/views/project/list/index.vue
  86. 2 1
      src/views/push/dialog/detail.vue
  87. 3 1
      src/views/push/dialog/index.vue
  88. 3 0
      src/views/push/message/index.vue
  89. 2 1
      src/views/push/update/detail.vue
  90. 3 1
      src/views/push/update/index.vue
  91. 3 2
      src/views/registration/content/detail.vue
  92. 1 0
      src/views/registration/content/index.vue
  93. 2 1
      src/views/registration/exchange/detail.vue
  94. 2 0
      src/views/registration/exchange/index.vue
  95. 3 2
      src/views/registration/lottery/detail.vue
  96. 1 0
      src/views/registration/lottery/index.vue
  97. 3 0
      src/views/registration/lotteryStat/index.vue
  98. 3 0
      src/views/registration/order/index.vue
  99. 1 0
      src/views/registration/regConfig/index.vue
  100. 0 0
      src/views/service/code/index.vue

+ 3 - 0
README.md

@@ -13,7 +13,10 @@ npm install
 # 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题
 npm install --registry=https://registry.npm.taobao.org
 
+#node版本 8.19.4
 # 启动服务
+# nvm 切换版本 16.20.2
+nvm use 16.20.2
 npm run dev
 ```
 

+ 1 - 1
src/api/operation/channels.js

@@ -83,7 +83,7 @@ export function channelDetail(data) {
   })
 }
 
-// 编辑频道
+// 编辑外层频道数据 最外层
 export function channeledit(data) {
   return request({
     url: `/admin/config/channel/edit`,

+ 2 - 1
src/api/service/package.js

@@ -69,6 +69,7 @@ export function newGoodsList(type, businessType) {
 // 查询设备下对应的赠送的商品列表
 export function deviceGoodsList(type, businessType, deviceIds) {
   // /?deviceIds=${deviceIds}&businessType=${businessType}&type=${type}
+  console.log("获取请求链接=00=");
   return request({
     url: `/admin/goods/listByDevice`,
     method: 'post',
@@ -78,4 +79,4 @@ export function deviceGoodsList(type, businessType, deviceIds) {
       "businessType": businessType,
     }
   })
-}
+}

+ 1 - 1
src/mixin/index.js

@@ -469,7 +469,7 @@ const platformMixin = {
               );
               e ? (this.platformTypeOptions = this.platformOptions) : "";
               res.data.map((i) => {
-                console.log("获取对应平台====" + Number(i.id) + "==" + i.name + "==" + i.joinType);
+//                console.log("获取对应平台====" + Number(i.id) + "==" + i.name + "==" + i.joinType);
                 return i;
               });
 

File diff ditekan karena terlalu besar
+ 929 - 795
src/router/index.js


+ 2 - 0
src/utils/request.js

@@ -71,6 +71,8 @@ service.interceptors.request.use(config => {
         interval = 2000;
       } else if (config.url === "/admin/program/list") {
         interval = 0;
+      } else if (config.url === "/admin/goods/listByDevice") {
+        interval = 0;
       } else {
         interval = 500;
       }

File diff ditekan karena terlalu besar
+ 559 - 235
src/views/content/article/detail.vue


+ 1 - 0
src/views/content/article/index.vue

@@ -115,6 +115,7 @@ import { change, list } from "@/api/content/article";
 import { dialogCallBack } from "@/utils/DialogUtil";
 import VueQr from "vue-qr";
 export default {
+  name: "ContentArticle",
   components: {
     VueQr,
   },

+ 50 - 29
src/views/content/video/detail.vue

@@ -1,81 +1,102 @@
 <template>
-  <div class='app-container'>
-    <el-form :model="form" ref="form" :rules="rules" label-width="auto" :disabled="disabled">
+  <div class="app-container">
+    <el-form
+      :model="form"
+      ref="form"
+      :rules="rules"
+      label-width="auto"
+      :disabled="disabled"
+    >
       <el-form-item label="视频宣传名称:" prop="name">
         <el-input v-model="form.name" placeholder="请输入视频宣传名称" />
       </el-form-item>
       <el-form-item label="设备型号:">
-        <el-input v-model="form.clientType" placeholder="请输入设备型号" disabled />
+        <el-input
+          v-model="form.clientType"
+          placeholder="请输入设备型号"
+          disabled
+        />
       </el-form-item>
       <el-form-item label="视频宣传内容:" prop="content">
         <Editor v-model="form.content" :min-height="250" :readOnly="disabled" />
       </el-form-item>
     </el-form>
-    <div style="margin-left: 120px;">
+    <div style="margin-left: 120px">
       <el-button @click="close">取消</el-button>
-      <el-button v-if="!disabled" type="primary" @click="getSubmit">确定</el-button>
+      <el-button v-if="!disabled" type="primary" @click="getSubmit"
+        >确定</el-button
+      >
     </div>
   </div>
 </template>
 
 <script>
-import { submit, detail } from '@/api/content/video'
+import { detail, submit } from "@/api/content/video";
 export default {
+  // name: "videoDetail",
   data() {
     return {
       form: {
-        id: this.$route.query.id
+        id: this.$route.query.id,
       },
       // 只读
       disabled: Boolean(this.$route.query.boolean),
       // 校验
       rules: {
-        name: [{
-          required: true, message: '请输入视频宣传名称', trigger: 'blur'
-        }],
-        content: [{
-          required: true, message: '请输入视频宣传内容', trigger: 'blur'
-        }]
-      }
-    }
+        name: [
+          {
+            required: true,
+            message: "请输入视频宣传名称",
+            trigger: "blur",
+          },
+        ],
+        content: [
+          {
+            required: true,
+            message: "请输入视频宣传内容",
+            trigger: "blur",
+          },
+        ],
+      },
+    };
   },
   mounted() {
     if (this.form.id) {
-      this.getDetail()
+      this.getDetail();
     }
   },
   methods: {
     // 详情
     getDetail() {
-      detail(this.form.id).then(res => {
+      detail(this.form.id).then((res) => {
         if (res.code === 0) {
-          this.form = res.data
+          this.form = res.data;
         }
-      })
+      });
     },
 
     // 确定
     getSubmit() {
       this.$refs.form.validate((valid) => {
         if (valid) {
-          submit(this.form).then(res => {
+          submit(this.form).then((res) => {
             if (res.code === 0) {
-              this.$message.success('提交成功!')
-              this.close()
+              this.$message.success("提交成功!");
+              this.close();
             }
-          })
+          });
         } else {
-          return false
+          return false;
         }
-      })
+      });
     },
 
     // 取消
     close() {
-      this.$tab.closeOpenPage("/content/video");
-    }
-  }
-}
+      this.$tab.closeOpenPage("/content/contentVideo");
+    },
+  },
+};
 </script>
 
 <style lang="scss" scoped>

+ 1 - 0
src/views/content/video/index.vue

@@ -98,6 +98,7 @@ import { change, list } from "@/api/content/video";
 import { dialogCallBack } from "@/utils/DialogUtil";
 import VueQr from "vue-qr";
 export default {
+  name: "ContentVideo",
   components: {
     VueQr,
   },

+ 114 - 62
src/views/device/article/detail.vue

@@ -2,8 +2,18 @@
   <div class="app-container">
     <el-form label-width="100px" :model="form" :rules="rules" ref="form">
       <el-form-item label="关联设备:" prop="linkDevice">
-        <el-select v-model="form.linkDevice" filterable multiple placeholder="请选择关联设备">
-          <el-option v-for="item in devOptions" :key="item.value" :label="item.label" :value="item.value.toString()" />
+        <el-select
+          v-model="form.linkDevice"
+          filterable
+          multiple
+          placeholder="请选择关联设备"
+        >
+          <el-option
+            v-for="item in devOptions"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value.toString()"
+          />
         </el-select>
       </el-form-item>
       <el-form-item label="文章标题:" prop="title">
@@ -13,14 +23,27 @@
         <Editor v-model="form.content" :min-height="250" />
       </el-form-item>
       <el-form-item label="背景图:" prop="pic">
-        <Upload listType="picture-card" :url="form.pic" @upload="upload($event, 'pic')" />
+        <Upload
+          listType="picture-card"
+          :url="form.pic"
+          @upload="upload($event, 'pic')"
+        />
       </el-form-item>
       <el-form-item label="分享图:" prop="shareIcon">
-        <Upload listType="picture-card" :url="form.shareIcon" @upload="upload($event, 'shareIcon')" />
+        <Upload
+          listType="picture-card"
+          :url="form.shareIcon"
+          @upload="upload($event, 'shareIcon')"
+        />
       </el-form-item>
       <el-form-item label="文章状态:" prop="status" v-if="this.form.id">
         <el-select v-model="form.status" placeholder="请选择文章状态">
-          <el-option v-for="item in disabledOptions" :key="item.value" :label="item.label" :value="item.value" />
+          <el-option
+            v-for="item in disabledOptions"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          />
         </el-select>
       </el-form-item>
     </el-form>
@@ -32,103 +55,132 @@
 </template>
 
 <script>
-import { create, detail, edit } from '@/api/device/article'
-import { devMixin, disabledMixin } from '@/mixin/index'
-import Editor from '@/components/Editor/index'
+import { create, detail, edit } from "@/api/device/article";
+import Editor from "@/components/Editor/index";
+import { devMixin, disabledMixin } from "@/mixin/index";
 export default {
+  // name: "deviceArticleDetail",
   mixins: [devMixin, disabledMixin],
   components: {
-    Editor
+    Editor,
   },
   data() {
     return {
       // 表单
       form: {
-        linkDevice: []
+        linkDevice: [],
       },
       // 校验
       rules: {
-        linkDevice: [{
-          required: true, message: '请选择关联设备', trigger: 'change'
-        }],
-        title: [{
-          required: true, message: '请输入文章标题', trigger: 'blur'
-        }],
-        pic: [{
-          required: true, message: '请上传文章背景图', trigger: 'change'
-        }],
-        content: [{
-          required: true, message: '请输入文章内容', trigger: 'blur'
-        }],
-        shareIcon: [{
-          required: true, message: '请上传文章分享图', trigger: 'change'
-        }],
-        status: [{
-          required: true, message: '请选择文章状态', trigger: 'change'
-        }]
-      }
-    }
+        linkDevice: [
+          {
+            required: true,
+            message: "请选择关联设备",
+            trigger: "change",
+          },
+        ],
+        title: [
+          {
+            required: true,
+            message: "请输入文章标题",
+            trigger: "blur",
+          },
+        ],
+        pic: [
+          {
+            required: true,
+            message: "请上传文章背景图",
+            trigger: "change",
+          },
+        ],
+        content: [
+          {
+            required: true,
+            message: "请输入文章内容",
+            trigger: "blur",
+          },
+        ],
+        shareIcon: [
+          {
+            required: true,
+            message: "请上传文章分享图",
+            trigger: "change",
+          },
+        ],
+        status: [
+          {
+            required: true,
+            message: "请选择文章状态",
+            trigger: "change",
+          },
+        ],
+      },
+    };
   },
   mounted() {
-    this.getDevList()
+    this.getDevList();
     if (this.$route.query.id) {
-      this.form.id = this.$route.query.id
-      this.getList()
+      this.form.id = this.$route.query.id;
+      this.getList();
     }
   },
   methods: {
     // 详情
     getList() {
       detail({
-        id: this.form.id
-      }).then(res => {
+        id: this.form.id,
+      }).then((res) => {
         if (res.code === 0) {
-          this.form = res.data
-          this.form.linkDevice = res.data.linkDevice.split(',')
+          this.form = res.data;
+          this.form.linkDevice = res.data.linkDevice.split(",");
         }
-      })
+      });
     },
 
     // 上传
     upload(e, key) {
-      this.form[key] = e.file
+      this.form[key] = e.file;
     },
 
     // 提交
     getSubmit() {
       this.$refs.form.validate((valid) => {
         if (valid) {
-          this.form.linkDevice = this.form.linkDevice.join(',')
+          this.form.linkDevice = this.form.linkDevice.join(",");
           if (this.form.id) {
-            edit(this.form).then(res => {
-              if (res.code === 0) {
-                this.$message.success('修改成功!')
-                this.cancel()
-              }
-            }).catch(err => {
-              this.form.linkDevice = this.form.linkDevice.split(',')
-            })
+            edit(this.form)
+              .then((res) => {
+                if (res.code === 0) {
+                  this.$message.success("修改成功!");
+                  this.cancel();
+                }
+              })
+              .catch((err) => {
+                this.form.linkDevice = this.form.linkDevice.split(",");
+              });
           } else {
-            create(this.form).then(res => {
-              if (res.code === 0) {
-                this.$message.success('新增成功!')
-                this.cancel()
-              }
-            }).catch(err => {
-              this.form.linkDevice = this.form.linkDevice.split(',')
-            })
+            create(this.form)
+              .then((res) => {
+                if (res.code === 0) {
+                  this.$message.success("新增成功!");
+                  this.cancel();
+                }
+              })
+              .catch((err) => {
+                this.form.linkDevice = this.form.linkDevice.split(",");
+              });
           }
         } else {
-          return false
+          return false;
         }
-      })
+      });
     },
     // 取消
     cancel() {
-      this.$tab.closeOpenPage("/device/article");
-    }
-  }
-}
+      this.$tab.closeOpenPage("/device/deviceArticle");
+    },
+  },
+};
 </script>
 
 <style lang="scss" scoped>

+ 3 - 3
src/views/device/article/index.vue

@@ -1,5 +1,5 @@
 
-<!-- 设备文章 -->
+<!--设备管理 设备文章 -->
 <template>
   <div class="app-container">
     <!-- 搜索 -->
@@ -101,7 +101,7 @@ import { list, remove } from "@/api/device/article";
 import { devMixin, disabledMixin } from "@/mixin/index";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
-  name: "Article",
+  name: "DeviceArticle",
   mixins: [devMixin, disabledMixin],
   data() {
     return {
@@ -212,4 +212,4 @@ export default {
     },
   },
 };
-</script>
+</script>

+ 2 - 1
src/views/device/category/index.vue

@@ -1,4 +1,4 @@
-<!-- 设备分类 详情 -->
+<!--设备管理 设备分类 -->
 <template>
   <div class="app-container">
     <!-- 搜索 -->
@@ -87,6 +87,7 @@
 import { create, edit, list, remove } from "@/api/device/category";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name: "DeviceCategory",
   data() {
     return {
       // 遮罩层

+ 289 - 112
src/views/device/class/detail.vue

@@ -1,32 +1,68 @@
 <template>
-  <div class='app-container'>
-    <el-form :model="form" ref="form" :rules="rules" label-width="auto" :disabled="disabled">
+  <div class="app-container">
+    <el-form
+      :model="form"
+      ref="form"
+      :rules="rules"
+      label-width="auto"
+      :disabled="disabled"
+    >
       <el-form-item label="大类名称:" prop="name">
         <el-input v-model="form.name" placeholder="请输入大类名称" />
       </el-form-item>
       <el-form-item label="设备分类:" prop="categoryId">
         <el-select v-model="form.categoryId" placeholder="请选择设备分类">
-          <el-option v-for="item in categoryOptions" :key="item.value" :value="item.value" :label="item.label" />
+          <el-option
+            v-for="item in categoryOptions"
+            :key="item.value"
+            :value="item.value"
+            :label="item.label"
+          />
         </el-select>
       </el-form-item>
       <el-form-item label="设备类型:" prop="type">
         <el-select v-model="form.type" placeholder="请选择设备类型">
-          <el-option v-for="item in devTypeOptions" :key="item.value" :value="item.value" :label="item.label" />
+          <el-option
+            v-for="item in devTypeOptions"
+            :key="item.value"
+            :value="item.value"
+            :label="item.label"
+          />
         </el-select>
       </el-form-item>
       <el-form-item label="是否热门:" prop="isHot">
         <el-select v-model="form.isHot" placeholder="请选择是否热门">
-          <el-option v-for="item in yesOrNoOptions" :key="item.value" :value="item.value" :label="item.label" />
+          <el-option
+            v-for="item in yesOrNoOptions"
+            :key="item.value"
+            :value="item.value"
+            :label="item.label"
+          />
         </el-select>
       </el-form-item>
       <el-form-item label="关联设备:" prop="deviceIds">
-        <el-select v-model="form.deviceIds" filterable multiple placeholder="请选择关联的设备">
-          <el-option v-for="item in devOptions" :key="item.clientTypeId" :value="item.clientTypeId" :label="item.name" />
+        <el-select
+          v-model="form.deviceIds"
+          filterable
+          multiple
+          placeholder="请选择关联的设备"
+        >
+          <el-option
+            v-for="item in devOptions"
+            :key="item.clientTypeId"
+            :value="item.clientTypeId"
+            :label="item.name"
+          />
         </el-select>
       </el-form-item>
       <el-form-item label="可见用户:" prop="userType">
         <el-select v-model="form.userType" placeholder="请选择可见用户">
-          <el-option v-for="item in pushOptions" :key="item.value" :value="item.value" :label="item.label" />
+          <el-option
+            v-for="item in pushOptions"
+            :key="item.value"
+            :value="item.value"
+            :label="item.label"
+          />
         </el-select>
       </el-form-item>
       <el-form-item v-if="form.userType === 3" label="指定用户:" prop="user">
@@ -35,153 +71,292 @@
       <el-row :gutter="70">
         <el-col :span="12">
           <el-form-item label="在线图片:" prop="img">
-            <Upload listType="picture-card" :url="form.img" @upload="upload($event, 'img')" :disabled="disabled" />
+            <Upload
+              listType="picture-card"
+              :url="form.img"
+              @upload="upload($event, 'img')"
+              :disabled="disabled"
+            />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="离线图片:" prop="offlineImg">
-            <Upload listType="picture-card" :url="form.offlineImg" @upload="upload($event, 'offlineImg')"
-              :disabled="disabled" />
+            <Upload
+              listType="picture-card"
+              :url="form.offlineImg"
+              @upload="upload($event, 'offlineImg')"
+              :disabled="disabled"
+            />
           </el-form-item>
         </el-col>
       </el-row>
-      <el-button v-if="disabled === false && form.typeList.length < 4" type="primary" icon="el-icon-plus"
-        @click="getAdd">新增</el-button>
+      <el-button
+        v-if="disabled === false && form.typeList.length < 4"
+        type="primary"
+        icon="el-icon-plus"
+        @click="getAdd"
+        >新增</el-button
+      >
       <div class="sub-form" v-for="(i, index) in form.typeList" :key="i.id">
-        <el-form-item label="设备模式:" :prop="`typeList.${index}.type`"
-          :rules="{ required: true, message: '请选择设备模式', trigger: 'change' }">
-          <el-select v-model="i.type" placeholder="请选择设备模式" @change="getTypeChange(i)">
-            <el-option v-for="item in devModeOptions" :key="item.value" :value="item.value" :label="item.label"
-              :disabled="item.disabled" />
+        <el-form-item
+          label="设备模式:"
+          :prop="`typeList.${index}.type`"
+          :rules="{
+            required: true,
+            message: '请选择设备模式',
+            trigger: 'change',
+          }"
+        >
+          <el-select
+            v-model="i.type"
+            placeholder="请选择设备模式"
+            @change="getTypeChange(i)"
+          >
+            <el-option
+              v-for="item in devModeOptions"
+              :key="item.value"
+              :value="item.value"
+              :label="item.label"
+              :disabled="item.disabled"
+            />
           </el-select>
         </el-form-item>
-        <el-form-item v-if="i.type !== 3" label="功能权限:" :prop="`typeList.${index}.functionList`"
-          :rules="{ type: 'array', required: true, message: '请选择功能权限', trigger: 'change' }">
-          <el-select v-model="i.functionList" multiple placeholder="请选择功能权限">
-            <el-option v-for="item in devFucOptions" :key="item.value" :value="item.value.toString()"
-              :label="item.label" />
+        <el-form-item
+          v-if="i.type !== 3"
+          label="功能权限:"
+          :prop="`typeList.${index}.functionList`"
+          :rules="{
+            type: 'array',
+            required: true,
+            message: '请选择功能权限',
+            trigger: 'change',
+          }"
+        >
+          <el-select
+            v-model="i.functionList"
+            multiple
+            placeholder="请选择功能权限"
+          >
+            <el-option
+              v-for="item in devFucOptions"
+              :key="item.value"
+              :value="item.value.toString()"
+              :label="item.label"
+            />
           </el-select>
         </el-form-item>
-        <el-form-item v-if="i.type == 2" label="连接方式:" :prop="`typeList.${index}.connectType`"
-          :rules="{ required: true, message: '请选择连接方式', trigger: 'change' }">
+        <el-form-item
+          v-if="i.type == 2"
+          label="连接方式:"
+          :prop="`typeList.${index}.connectType`"
+          :rules="{
+            required: true,
+            message: '请选择连接方式',
+            trigger: 'change',
+          }"
+        >
           <el-select v-model="i.connectType" placeholder="请选择连接方式">
-            <el-option v-for="item in connectOptions" :key="item.value" :value="item.value" :label="item.label" />
+            <el-option
+              v-for="item in connectOptions"
+              :key="item.value"
+              :value="item.value"
+              :label="item.label"
+            />
           </el-select>
         </el-form-item>
         <el-row :gutter="20">
           <el-col :span="12">
-            <el-form-item :label="[1, 3].includes(i.type) ? '连接引导图:' : '开机引导图:'" :prop="`typeList.${index}.icon1`"
-              :rules="{ required: true, message: '请上传引导图', trigger: 'change' }">
-              <Upload listType="picture-card" :url="i.icon1" @upload="upload($event, 'icon1', index)"
-                :disabled="disabled" />
+            <el-form-item
+              :label="[1, 3].includes(i.type) ? '连接引导图:' : '开机引导图:'"
+              :prop="`typeList.${index}.icon1`"
+              :rules="{
+                required: true,
+                message: '请上传引导图',
+                trigger: 'change',
+              }"
+            >
+              <Upload
+                listType="picture-card"
+                :url="i.icon1"
+                @upload="upload($event, 'icon1', index)"
+                :disabled="disabled"
+              />
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="配对引导图:" :prop="`typeList.${index}.icon2`"
-              :rules="{ required: true, message: '请上传引导图', trigger: 'change' }">
-              <Upload listType="picture-card" :url="i.icon2" @upload="upload($event, 'icon2', index)"
-                :disabled="disabled" />
+            <el-form-item
+              label="配对引导图:"
+              :prop="`typeList.${index}.icon2`"
+              :rules="{
+                required: true,
+                message: '请上传引导图',
+                trigger: 'change',
+              }"
+            >
+              <Upload
+                listType="picture-card"
+                :url="i.icon2"
+                @upload="upload($event, 'icon2', index)"
+                :disabled="disabled"
+              />
             </el-form-item>
           </el-col>
         </el-row>
         <el-form-item v-if="[1, 3].includes(i.type)" label="引导页:">
-          <Editor v-model="i.guidePageContent" :min-height="250" :readOnly="disabled" />
+          <Editor
+            v-model="i.guidePageContent"
+            :min-height="250"
+            :readOnly="disabled"
+          />
         </el-form-item>
-        <el-form-item v-else label="引导图:" :prop="`typeList.${index}.icon`"
-          :rules="{ required: true, message: '请上传引导图', trigger: 'change' }">
-          <Upload listType="picture-card" :url="i.icon" @upload="upload($event, 'icon', index)" :disabled='disabled' />
+        <el-form-item
+          v-else
+          label="引导图:"
+          :prop="`typeList.${index}.icon`"
+          :rules="{
+            required: true,
+            message: '请上传引导图',
+            trigger: 'change',
+          }"
+        >
+          <Upload
+            listType="picture-card"
+            :url="i.icon"
+            @upload="upload($event, 'icon', index)"
+            :disabled="disabled"
+          />
         </el-form-item>
-        <el-link class="el-icon-close" v-if="form.typeList.length > 1" :underline="false"
-          @click="getDelete(i.type, index)" :disabled="disabled" />
+        <el-link
+          class="el-icon-close"
+          v-if="form.typeList.length > 1"
+          :underline="false"
+          @click="getDelete(i.type, index)"
+          :disabled="disabled"
+        />
       </div>
     </el-form>
     <div>
       <el-button @click="close">取消</el-button>
-      <el-button v-if="!disabled" type="primary" @click="getSubmit">确定</el-button>
+      <el-button v-if="!disabled" type="primary" @click="getSubmit"
+        >确定</el-button
+      >
     </div>
   </div>
 </template>
 
 <script>
-import { devList, submit, detail } from '@/api/device/class'
-import { devModeMixin, yesOrNoMixin, devTypeMixin, devCategoryMixin, devFucMixin } from '@/mixin/index'
+import { detail, devList, submit } from "@/api/device/class";
+import {
+devCategoryMixin,
+devFucMixin,
+devModeMixin,
+devTypeMixin,
+yesOrNoMixin,
+} from "@/mixin/index";
 export default {
-  mixins: [devModeMixin, yesOrNoMixin, devTypeMixin, devCategoryMixin, devFucMixin],
+  // name: "deviceClassDetail",
+  mixins: [
+    devModeMixin,
+    yesOrNoMixin,
+    devTypeMixin,
+    devCategoryMixin,
+    devFucMixin,
+  ],
   data() {
     return {
       // 表单
       form: {
         id: this.$route.query.id,
         deviceIds: [],
-        typeList: [{
-          functionList: [],
-        }],
+        typeList: [
+          {
+            functionList: [],
+          },
+        ],
       },
       // 校验
       rules: {
-        name: [{ required: true, message: '请输入大类名称', trigger: 'blur' }],
-        categoryId: [{ required: true, message: '请选择设备分类', trigger: 'chang' }],
-        type: [{ required: true, message: '请选择设备类型', trigger: 'change' }],
-        isHot: [{ required: true, message: '请选择是否热门', trigger: 'change' }],
-        deviceIds: [{ required: true, message: '请选择关联的设备', trigger: 'change' }],
-        userType: [{ required: true, message: '请选择可见用户', trigger: 'change' }],
-        user: [{ required: true, message: '请输入指定用户', trigger: 'blur' }],
-        img: [{ required: true, message: '请上传在线图片', trigger: 'change' }],
-        offlineImg: [{ required: true, message: '请上传离线图片', trigger: 'change' }]
+        name: [{ required: true, message: "请输入大类名称", trigger: "blur" }],
+        categoryId: [
+          { required: true, message: "请选择设备分类", trigger: "chang" },
+        ],
+        type: [
+          { required: true, message: "请选择设备类型", trigger: "change" },
+        ],
+        isHot: [
+          { required: true, message: "请选择是否热门", trigger: "change" },
+        ],
+        deviceIds: [
+          { required: true, message: "请选择关联的设备", trigger: "change" },
+        ],
+        userType: [
+          { required: true, message: "请选择可见用户", trigger: "change" },
+        ],
+        user: [{ required: true, message: "请输入指定用户", trigger: "blur" }],
+        img: [{ required: true, message: "请上传在线图片", trigger: "change" }],
+        offlineImg: [
+          { required: true, message: "请上传离线图片", trigger: "change" },
+        ],
       },
       // 设备列表
       devOptions: [],
       // 可见用户
-      pushOptions: [{
-        value: 1,
-        label: '全部'
-      }, {
-        value: 3,
-        label: '指定'
-      }],
+      pushOptions: [
+        {
+          value: 1,
+          label: "全部",
+        },
+        {
+          value: 3,
+          label: "指定",
+        },
+      ],
       // 设备连接
-      connectOptions: [{
-        value: 2,
-        label: 'UPnP'
-      }, {
-        value: 3,
-        label: 'MQTT'
-      }],
+      connectOptions: [
+        {
+          value: 2,
+          label: "UPnP",
+        },
+        {
+          value: 3,
+          label: "MQTT",
+        },
+      ],
       // 只读
-      disabled: Boolean(this.$route.query.boolean)
-    }
+      disabled: Boolean(this.$route.query.boolean),
+    };
   },
   mounted() {
-    this.getCateGory(1)
-    this.getDevList()
+    this.getCateGory(1);
+    this.getDevList();
     if (this.form.id) {
-      this.getDetail()
+      this.getDetail();
     }
   },
   methods: {
     // 详情
     getDetail() {
-      detail(this.form.id).then(res => {
+      detail(this.form.id).then((res) => {
         if (res.code === 0) {
-          this.form = res.data
-          this.form.deviceIds = res.data.deviceIds.split(',')
+          this.form = res.data;
+          this.form.deviceIds = res.data.deviceIds.split(",");
           this.form.typeList.map((i) => {
             this.devModeOptions[i.type - 1].disabled = true;
-          })
+          });
         }
-      })
+      });
     },
 
     // 设备列表
     getDevList() {
       devList({
         type: 2,
-        id: this.form.id
-      }).then(res => {
+        id: this.form.id,
+      }).then((res) => {
         if (res.code === 0) {
-          this.devOptions = res.data
+          this.devOptions = res.data;
         }
-      })
+      });
     },
 
     // 新增子表单
@@ -190,46 +365,48 @@ export default {
         type: null,
         functionList: [],
         connectType: null,
-        icon1: '',
-        icon2: '',
-        guidePageContent: ''
-      })
+        icon1: "",
+        icon2: "",
+        guidePageContent: "",
+      });
     },
 
     // 删除子表单
     getDelete(type, index) {
-      this.form.typeList.splice(index, 1)
+      this.form.typeList.splice(index, 1);
       if (type) {
-        this.devModeOptions.find(i => i.value == type).disabled = false
+        this.devModeOptions.find((i) => i.value == type).disabled = false;
       }
     },
 
     // 修改设备模式
     getTypeChange(i) {
       for (let key in this.devModeOptions) {
-        this.devModeOptions[key].disabled = false
+        this.devModeOptions[key].disabled = false;
       }
       // 选中的设备模式禁止再选
-      this.form.typeList.map(item => {
+      this.form.typeList.map((item) => {
         if (item.type) {
-          let index = this.devModeOptions.findIndex(j => j.value == item.type)
-          this.devModeOptions[index].disabled = true
+          let index = this.devModeOptions.findIndex(
+            (j) => j.value == item.type
+          );
+          this.devModeOptions[index].disabled = true;
         }
-      })
+      });
       // 除了设备模式都为空
-      Object.keys(i).map(e => {
-        if (!['type', 'icon'].includes(e)) {
-          i[e] = e === 'functionList' ? [] : null
+      Object.keys(i).map((e) => {
+        if (!["type", "icon"].includes(e)) {
+          i[e] = e === "functionList" ? [] : null;
         }
-      })
+      });
     },
 
     // 上传图片
     upload(e, key, index) {
       if (index == undefined) {
-        this.form[key] = e.file
+        this.form[key] = e.file;
       } else {
-        this.form.typeList[index][key] = e.file
+        this.form.typeList[index][key] = e.file;
       }
     },
 
@@ -237,25 +414,25 @@ export default {
     getSubmit() {
       this.$refs.form.validate((valid) => {
         if (valid) {
-          this.form.deviceIds = this.form.deviceIds.join(',')
-          submit(this.form).then(res => {
+          this.form.deviceIds = this.form.deviceIds.join(",");
+          submit(this.form).then((res) => {
             if (res.code === 0) {
-              this.$message.success('提交成功!')
-              this.close()
+              this.$message.success("提交成功!");
+              this.close();
             }
-          })
+          });
         } else {
-          return false
+          return false;
         }
-      })
+      });
     },
 
     // 取消
     close() {
-      this.$tab.closeOpenPage('/device/class')
-    }
-  }
-}
+      this.$tab.closeOpenPage("/device/deviceClass");
+    },
+  },
+};
 </script>
 
 <style lang="scss" scoped>

+ 1 - 0
src/views/device/class/index.vue

@@ -177,6 +177,7 @@ yesOrNoMixin,
 } from "@/mixin/index";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name: "DeviceClass",
   mixins: [
     devCategoryMixin,
     devMixin,

+ 2 - 0
src/views/device/function/index.vue

@@ -1,3 +1,4 @@
+<!--设备管理 功能权限 -->
 <template>
   <div class="app-container">
     <!-- 搜索 -->
@@ -82,6 +83,7 @@
 import { create, edit, list } from "@/api/device/function";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name: "DeviceFunction",
   dicts: ["sys_normal_disable"],
   data() {
     return {

+ 92 - 5
src/views/device/list/detail.vue

@@ -70,12 +70,35 @@
           <el-option v-for="item in yesOrNoOptions" :key="item.value" :label="item.label" :value="Number(item.value)" />
         </el-select>
       </el-form-item>
-      <el-form-item label="设备会员收费时间:" prop="contentVip">
+      <el-form-item label="资源平台:">
+        <el-button @click="clickAddPlatform" size="mini">新增+</el-button>
+      </el-form-item>
+      <el-form-item v-if="isShowPlatform">
+        <el-table :data="contentVipPlatformList" border style="width: min-content">
+          <el-table-column prop="platformId" label="资源平台" width="180">
+            <template slot-scope="scope">
+              <el-select v-model="scope.row.platformId" placeholder="请选择流量平台"
+                @change="handlePlatformChange(scope.row, scope.$index)">
+                <el-option v-for="item in platformOptions" :key="item.value" :label="item.label" :value="item.value" />
+              </el-select>
+            </template>
+          </el-table-column>
+          <el-table-column prop="contentVip" label="设备会员收费时间" width="180">
+            <template slot-scope="scope">
+              <el-select v-model="scope.row.contentVip" placeholder="默认关闭">
+                <el-option v-for="item in contentVipOptions" :key="item.value" :label="item.label"
+                  :value="item.value" />
+              </el-select>
+            </template>
+          </el-table-column>
+        </el-table>
+      </el-form-item>
+      <!-- <el-form-item label="设备会员收费时间:" prop="contentVip">
         <el-select v-model="form.contentVip" placeholder="默认关闭">
           <el-option v-for="item in contentVipOptions" :key="item.value" :label="item.label"
             :value="Number(item.value)" />
         </el-select>
-      </el-form-item>
+      </el-form-item> -->
       <el-row>
         <el-col :span="12">
           <el-form-item label="在线图片:" prop="img">
@@ -187,7 +210,9 @@ import {
   devTypeMixin,
   yesOrNoMixin,
 } from "@/mixin/index";
+
 export default {
+  // name: "deviceListDetail",
   mixins: [
     devModeMixin,
     devTypeMixin,
@@ -199,7 +224,15 @@ export default {
     return {
       isChecked1: false,
       isChecked2: false,
+      isShowPlatform: false,
+      contentVipPlatformList: [
 
+      ],
+      platformOptions: [
+        { label: "QQ音乐", value: 6 },
+        { label: "喜马拉雅", value: 12 },
+      ],
+      platformContentVipOptions: [],
       // 表单
       form: {
         typeList: [
@@ -208,6 +241,7 @@ export default {
           },
         ],
         bluetoothNames: [],
+        contentVipPlatformList: [],
       },
       // 显示蓝牙输入框
       inputVisible: false,
@@ -241,7 +275,6 @@ export default {
         offlineImg: [
           { required: true, message: "请上传离线图片", trigger: "change" },
         ],
-
       },
       contentVipOptions: [
         {
@@ -251,16 +284,21 @@ export default {
         {
           value: 1,
           label: "开机激活收取",
-        }, {
+        },
+        {
           value: 2,
           label: "1年后",
         },
         {
           value: 3,
           label: "2年后",
-        }, {
+        },
+        {
           value: 4,
           label: "3年后",
+        }, {
+          value: 5,
+          label: "1天后",
         },
       ],
       // 设备连接
@@ -328,6 +366,21 @@ export default {
     this.getList();
   },
   methods: {
+    handlePlatformChange(row, index) {
+      // 检查是否有重复的platformId
+      const value = row.platformId;
+      if (!value) return;
+
+      const exists = this.contentVipPlatformList.some(
+        (item, idx) => item.platformId === value && idx !== index
+      );
+
+      if (exists) {
+        // 如果存在重复,清空当前选择并提示
+        this.$set(row, 'platformId', null);
+        this.$message.warning('该资源平台已存在,请选择其他平台');
+      }
+    },
     // 详情
     getList() {
       if (this.$route.query.id) {
@@ -336,6 +389,15 @@ export default {
         }).then((res) => {
           if (res.code === 0) {
             this.form = res.data;
+            this.form.contentVipPlatformList.forEach((item) => {
+              if (item.platformId > 0) {
+                this.contentVipPlatformList.push({
+                  platformId: item.platformId,
+                  contentVip: item.contentVip,
+                });
+              }
+            });
+            this.isShowPlatform = this.contentVipPlatformList.length > 0;
             this.form.typeList.map((i) => {
               this.devModeOptions[i.type - 1].disabled = true;
             });
@@ -473,6 +535,21 @@ export default {
         this.form.applicationType = "[0]";
       }
 
+      // 替换成下面的资源平台了
+      this.form.contentVip = null;
+
+      this.form.contentVipPlatformList = []
+      this.contentVipPlatformList.forEach(element => {
+        if (element.platformId != null) {
+          this.form.contentVipPlatformList.push({
+            contentVip: element.contentVip ?? 0,
+            platformId: element.platformId,
+          })
+        }
+      });
+
+      // console.log("this.contentVipPlatformList===", JSON.stringify(this.contentVipPlatformList), JSON.stringify(this.form.contentVipPlatformList));
+
       this.$refs.form.validate((valid) => {
         if (valid) {
           if (this.$route.query.id) {
@@ -498,6 +575,16 @@ export default {
         }
       });
     },
+    clickAddPlatform() {
+      this.isShowPlatform = true;
+      if (this.platformOptions.length != 0 && this.contentVipPlatformList.length < this.platformOptions.length) {
+
+        this.contentVipPlatformList.push({ "contentVip": null, "platformId": null, });
+      } else {
+        let tips = `最多只能添加${this.platformOptions.length}个平台`;
+        this.$message.warning(tips);
+      }
+    },
   },
 };
 </script>

+ 6 - 5
src/views/device/list/index.vue

@@ -172,14 +172,15 @@
 <script>
 import { change, list, remove } from "@/api/device/list";
 import {
-  devCategoryMixin,
-  devMixin,
-  devTypeMixin,
-  onOrOffMixin,
-  yesOrNoMixin,
+devCategoryMixin,
+devMixin,
+devTypeMixin,
+onOrOffMixin,
+yesOrNoMixin,
 } from "@/mixin/index";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name: "DeviceList",
   mixins: [
     devMixin,
     onOrOffMixin,

+ 3 - 1
src/views/device/music/index.vue

@@ -1,4 +1,4 @@
-<!-- 设备音乐 -->
+<!-- 设备管理 设备音乐 -->
 <template>
   <div class="app-container">
     <!-- 搜索 -->
@@ -208,7 +208,9 @@ import { list as sceneList } from "@/api/operation/scene";
 import { disabledMixin } from "@/mixin/index";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name: "DeviceMusic",
   mixins: [disabledMixin],
+  
   data() {
     return {
       // 遮罩层

+ 3 - 3
src/views/device/version/detail.vue

@@ -1,4 +1,3 @@
-<!-- 设备升级 -->
 <template>
   <div class="app-container" v-loading="loading">
     <el-form :model="form" :rules="rules" ref="form" label-width="100px">
@@ -127,6 +126,7 @@
 import { getDetailInfo, getVersionAdd, updateEdit } from "@/api/device/version";
 import { devMixin, devModeMixin } from "@/mixin/index";
 export default {
+  // name: "deviceVersionDetail",
   mixins: [devMixin, devModeMixin],
   data() {
     return {
@@ -307,7 +307,7 @@ export default {
     },
     // 取消
     getCancel() {
-      this.$tab.closeOpenPage("/device/version");
+      this.$tab.closeOpenPage("/device/deviceVersion");
     },
   },
 };
@@ -317,4 +317,4 @@ export default {
 .el-form {
   width: 500px;
 }
-</style>
+</style>

+ 2 - 1
src/views/device/version/index.vue

@@ -1,6 +1,6 @@
 
 
-<!-- 设备升级 -->
+<!--设备管理 设备升级 -->
 <template>
   <div class="app-container">
     <!-- 搜索 -->
@@ -114,6 +114,7 @@ import { getPageList, getVersionDelete } from "@/api/device/version";
 import { devMixin, devModeMixin } from "@/mixin/index";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name: "DeviceVersion",
   mixins: [devMixin, devModeMixin],
   data() {
     return {

+ 1 - 0
src/views/device/warning/index.vue

@@ -83,6 +83,7 @@
 import { change, detail, list, submit } from "@/api/device/warning";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name:"DeviceWarning",
   data() {
     var reg = /^1[3|4|5|6|7|8|9][0-9]\d{8}$/;
     var checkPhone = (rule, value, callback) => {

+ 101 - 32
src/views/device/yxw/index.vue

@@ -1,3 +1,4 @@
+<!-- 设备管理 云小微 -->
 <template>
   <div class="app-container">
     <!-- 搜索 -->
@@ -6,43 +7,100 @@
         <el-input v-model="form.dsn" placeholder="请输入设备号" clearable />
       </el-form-item>
       <el-form-item label="设备型号:">
-        <el-input v-model="form.clientType" placeholder="请输入设备型号" clearable />
+        <el-input
+          v-model="form.clientType"
+          placeholder="请输入设备型号"
+          clearable
+        />
       </el-form-item>
       <el-form-item label="设备标识:">
-        <el-input v-model="form.deviceMac" placeholder="请输入设备标识" clearable />
+        <el-input
+          v-model="form.deviceMac"
+          placeholder="请输入设备标识"
+          clearable
+        />
       </el-form-item>
       <el-form-item label="设备模式:">
-        <el-select v-model="form.deviceType" placeholder="请选择设备类型" clearable>
-          <el-option v-for="item in devModeOptions" :key="item.value" :label="item.label" :value="item.value" />
+        <el-select
+          v-model="form.deviceType"
+          placeholder="请选择设备类型"
+          clearable
+        >
+          <el-option
+            v-for="item in devModeOptions"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          />
         </el-select>
       </el-form-item>
       <el-form-item label="当前状态:">
         <el-select v-model="form.status" placeholder="请选择当前状态" clearable>
-          <el-option v-for="item in statusOptions" :key="item.value" :label="item.label" :value="item.value" />
+          <el-option
+            v-for="item in statusOptions"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          />
         </el-select>
       </el-form-item>
       <el-form-item label="创建时间:">
-        <el-date-picker v-model="createTime" type="datetimerange" start-placeholder="开始日期" end-placeholder="结束日期"
-          value-format="yyyy-MM-dd HH:mm:ss" clearable />
+        <el-date-picker
+          v-model="createTime"
+          type="datetimerange"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          value-format="yyyy-MM-dd HH:mm:ss"
+          clearable
+        />
       </el-form-item>
       <el-form-item label="激活时间:">
-        <el-date-picker v-model="updateTime" type="datetimerange" start-placeholder="开始日期" end-placeholder="结束日期"
-          value-format="yyyy-MM-dd HH:mm:ss" clearable />
+        <el-date-picker
+          v-model="updateTime"
+          type="datetimerange"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          value-format="yyyy-MM-dd HH:mm:ss"
+          clearable
+        />
       </el-form-item>
       <el-form-item>
-        <el-button icon="el-icon-search" type="primary" @click="getSearch">搜索</el-button>
+        <el-button icon="el-icon-search" type="primary" @click="getSearch"
+          >搜索</el-button
+        >
         <el-button icon="el-icon-refresh" @click="getRefresh">重置</el-button>
-        <el-button icon="el-icon-plus" type="primary" plain @click="dialogVisible = true"
-          v-hasPermi="['device:yxw:add']">新增</el-button>
-        <el-button icon="el-icon-download" type="primary" @click="getDownLoadNo"
-          v-hasPermi="['device:yxw:downloadDev']">导出设备号</el-button>
-        <el-button icon="el-icon-download" type="primary" @click="getDownLoadData"
-          v-hasPermi="['device:yxw:download']">导出数据</el-button>
+        <el-button
+          icon="el-icon-plus"
+          type="primary"
+          plain
+          @click="dialogVisible = true"
+          v-hasPermi="['device:yxw:add']"
+          >新增</el-button
+        >
+        <el-button
+          icon="el-icon-download"
+          type="primary"
+          @click="getDownLoadNo"
+          v-hasPermi="['device:yxw:downloadDev']"
+          >导出设备号</el-button
+        >
+        <el-button
+          icon="el-icon-download"
+          type="primary"
+          @click="getDownLoadData"
+          v-hasPermi="['device:yxw:download']"
+          >导出数据</el-button
+        >
       </el-form-item>
     </el-form>
     <!-- 列表 -->
     <el-table :data="tableData" v-loading="loading">
-      <el-table-column prop="id" label="设备号" align="center" show-overflow-tooltip />
+      <el-table-column
+        prop="id"
+        label="设备号"
+        align="center"
+        show-overflow-tooltip
+      />
       <el-table-column prop="deviceMac" label="设备标识" align="center" />
       <el-table-column prop="clientType" label="设备型号" align="center" />
       <el-table-column prop="type" label="设备模式" align="center" />
@@ -50,12 +108,23 @@
       <el-table-column prop="updateTimeStr" label="激活时间" align="center" />
       <el-table-column prop="statusStr" label="当前状态" align="center" />
     </el-table>
-    <pagination v-show="total > 0" :total="total" :page.sync="form.pageIndex" :limit.sync="form.pageSize"
-      @pagination="getList" />
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="form.pageIndex"
+      :limit.sync="form.pageSize"
+      @pagination="getList"
+    />
     <!-- 弹窗 -->
     <el-dialog title="新增" :visible.sync="dialogVisible" width="500px">
       <el-form :model="dialogForm" ref="form" label-width="100px">
-        <el-form-item prop="num" label="设备数量:" :rules="[{ required: true, message: '请输入设备数量', trigger: 'blur' }]">
+        <el-form-item
+          prop="num"
+          label="设备数量:"
+          :rules="[
+            { required: true, message: '请输入设备数量', trigger: 'blur' },
+          ]"
+        >
           <el-input v-model="dialogForm.num" placeholder="请输入设备数量" />
         </el-form-item>
       </el-form>
@@ -68,9 +137,10 @@
 </template>
 
 <script>
-import { getYxwPage, getYxwAdd } from "@/api/device/yxw";
-import { devModeMixin } from '@/mixin/index'
+import { getYxwAdd, getYxwPage } from "@/api/device/yxw";
+import { devModeMixin } from "@/mixin/index";
 export default {
+  name:"DeviceYXW",
   mixins: [devModeMixin],
   data() {
     return {
@@ -104,18 +174,18 @@ export default {
       dialogVisible: false,
       // 新增设备数量
       dialogForm: {
-        num: ""
-      }
+        num: "",
+      },
     };
   },
   watch: {
     createTime(val) {
-      this.form.startCreateTime = val[0]
-      this.form.endCreateTime = val[1]
+      this.form.startCreateTime = val[0];
+      this.form.endCreateTime = val[1];
     },
     updateTime(val) {
-      this.form.startUpdateTime = val[0]
-      this.form.endUpdateTime = val[1]
+      this.form.startUpdateTime = val[0];
+      this.form.endUpdateTime = val[1];
     },
   },
   mounted() {
@@ -162,10 +232,9 @@ export default {
             }
           });
         } else {
-          return false
+          return false;
         }
-      })
-
+      });
     },
 
     // 导出设备号
@@ -184,7 +253,7 @@ export default {
         this.form,
         `云小微设备数据.xlsx`
       );
-    }
+    },
   },
 };
 </script>

+ 1 - 0
src/views/goods/list/detail.vue

@@ -41,6 +41,7 @@
 import { create, detail, edit } from '@/api/goods/list'
 import { locMixin } from './mixin'
 export default {
+  // name:"goodsListDetail",
   mixins: [locMixin],
   data() {
     return {

+ 3 - 1
src/views/goods/list/index.vue

@@ -1,4 +1,5 @@
-<!-- 商品推荐 -->
+<!-- 商品管理 商品推荐 -->
+
 <template>
   <div class="app-container">
     <!-- 搜索 -->
@@ -118,6 +119,7 @@ import { currentMixin } from "@/mixin/index";
 import { dialogCallBack } from "@/utils/DialogUtil";
 import { locMixin } from "./mixin";
 export default {
+  name:"GoodsList",
   mixins: [locMixin, currentMixin],
   data() {
     return {

+ 113 - 164
src/views/music/album/detail.vue

@@ -1,145 +1,77 @@
 <!-- 音乐专辑 详情 -->
 <template>
   <div class="app-container">
-    <el-form
-      class="form"
-      :model="form"
-      ref="form"
-      :rules="rules"
-      label-width="100px"
-      :disabled="disabled"
-    >
+    <el-form class="form" :model="form" ref="form" :rules="rules" label-width="100px" :disabled="disabled">
       <el-form-item label="专辑名称:" prop="name">
         <el-input v-model="form.name" placeholder="请输入专辑名称" />
       </el-form-item>
       <el-form-item label="专辑介绍" prop="description">
-        <el-input
-          v-model="form.description"
-          type="textarea"
-          :autosize="{ minRows: 5, maxRows: 10 }"
-          maxlength="300"
-          show-word-limit
-          placeholder="请输入专辑介绍"
-        />
+        <el-input v-model="form.description" type="textarea" :autosize="{ minRows: 5, maxRows: 10 }" maxlength="300"
+          show-word-limit placeholder="请输入专辑介绍" />
       </el-form-item>
       <el-form-item label="专辑类型:" prop="albumType">
         <el-select v-model="form.albumType" placeholder="请选择专辑类型">
-          <el-option
-            v-for="item in albumTypeOptions"
-            :key="item.value"
-            :value="item.value"
-            :label="item.label"
-          />
+          <el-option v-for="item in albumTypeOptions" :key="item.value" :value="item.value" :label="item.label" />
         </el-select>
       </el-form-item>
       <el-form-item label="资源平台:" prop="platformId">
-        <el-select
-          v-model="form.platformId"
-          placeholder="请选择资源平台"
-          :disabled="disabledPlatformId(form.platformId)"
-        >
-          <el-option
-            v-for="item in platformOptions"
-            :key="item.value"
-            :value="item.value"
-            :label="item.label"
-            :disabled="disabledJoinType(item.joinType)"
-          />
+        <el-select v-model="form.platformId" placeholder="请选择资源平台" :disabled="disabledPlatformId(form.platformId)">
+          <el-option v-for="item in platformOptions" :key="item.value" :value="item.value" :label="item.label"
+            :disabled="disabledJoinType(item.joinType)" />
         </el-select>
       </el-form-item>
       <el-form-item label="付费类型:" prop="payType">
         <el-select v-model="form.payType" placeholder="请选择付费类型">
-          <el-option
-            v-for="item in payTypeOptions"
-            :key="item.value"
-            :value="item.value"
-            :label="item.label"
-          />
+          <el-option v-for="item in payTypeOptions" :key="item.value" :value="item.value" :label="item.label" />
         </el-select>
       </el-form-item>
       <el-form-item v-if="form.payType !== 1" label="原价:" prop="price">
-        <el-input-number
-          v-model="form.price"
-          placeholder="请输入原价"
-          :min="1"
-          :precision="2"
-          :controls="false"
-        />
+        <el-input-number v-model="form.price" placeholder="请输入原价" :min="1" :precision="2" :controls="false" />
       </el-form-item>
       <el-form-item v-if="form.payType !== 1" label="折扣价:" prop="discount">
-        <el-input-number
-          v-model="form.discount"
-          placeholder="请输入折扣价"
-          :min="1"
-          :precision="2"
-          :controls="false"
-        />
+        <el-input-number v-model="form.discount" placeholder="请输入折扣价" :min="1" :precision="2" :controls="false" />
       </el-form-item>
       <el-form-item label="专辑封面:" prop="coverUrl">
-        <Upload
-          listType="picture-card"
-          :url="form.coverUrl"
-          @upload="upload($event, 'coverUrl')"
-          :disabled="disabled"
-        />
+        <Upload listType="picture-card" :url="form.coverUrl" @upload="upload($event, 'coverUrl')"
+          :disabled="disabled" />
       </el-form-item>
       <el-form-item label="歌曲列表:" style="width: 100%">
-        <el-button type="primary" icon="el-icon-plus" @click="getDialog"
-          >添加歌曲</el-button
-        >
+        <el-button type="primary" icon="el-icon-plus" @click="getDialog">添加歌曲</el-button>
         <!-- 列表 -->
         <el-table :data="form.programList" v-loading="form_loading">
           <el-table-column label="ID" prop="id" align="center" />
-          <el-table-column
-            label="歌曲名称"
-            prop="name"
-            align="center"
-            show-overflow-tooltip
-          />
-          <el-table-column
-            label="歌手名称"
-            prop="singerName"
-            align="center"
-            show-overflow-tooltip
-          />
+          <el-table-column label="歌曲名称" prop="name" align="center" show-overflow-tooltip />
+          <el-table-column label="歌手名称" prop="singerName" align="center" show-overflow-tooltip />
           <el-table-column label="播放时长" prop="playTime" align="center" />
-          <el-table-column
-            label="当前状态"
-            prop="status"
-            align="center"
-            :formatter="statusFormatter"
-          />
+          <el-table-column label="当前状态" prop="status" align="center" :formatter="statusFormatter" />
+          <el-table-column label="序号" align="center">
+            <template slot-scope="scope">
+              <div v-if="currentEditIndex !== scope.$index">
+                <span :style="{ marginRight: (canOrder) ? '0px' : '8px' }">
+                  {{ (dialogForm.pageNum - 1) * dialogForm.pageSize + scope.$index + 1 }}
+                </span>
+                <svg-icon v-if="canOrder" icon-class="edit" @click.native="handleEditClick(scope.row, scope.$index)" />
+              </div>
+              <el-input v-else v-model="editData.sortIndex" size="mini" style="width:60px;" type="number"
+                @blur="onNumberBlur(scope.row, scope.$index)" placeholder="序号" ref="numberInput" />
+            </template>
+          </el-table-column>
           <el-table-column label="操作" align="center">
             <template slot-scope="scope">
               <Audio :src="scope.row.progaramUrl" />
-              <el-button
-                type="delete"
-                :disabled="disabled"
-                @click="getDelete(scope.$index)"
-                >删除</el-button
-              >
+              <el-button type="delete" :disabled="disabled" @click="getDelete(scope.$index)">删除</el-button>
 
               <!-- 向上移动 -->
-              <el-button
-                type="text"
-                icon="el-icon-caret-top"
-                @click="getChange(true, scope.$index, scope.$index - 1)"
-                :disabled="
-                  (scope.$index < 1 && !disabled) ||
+              <el-button type="text" icon="el-icon-caret-top" @click="getChange(true, scope.$index, scope.$index - 1)"
+                :disabled="(scope.$index < 1 && !disabled) ||
                   disabledPlatformId(form.platformId)
-                "
-              />
+                  " />
 
               <!-- 向下移动 -->
-              <el-button
-                type="text"
-                icon="el-icon-caret-bottom"
-                @click="getChange(false, scope.$index, scope.$index + 1)"
-                :disabled="
-                  (scope.$index > form.programList.length - 2 && !disabled) ||
+              <el-button type="text" icon="el-icon-caret-bottom"
+                @click="getChange(false, scope.$index, scope.$index + 1)" :disabled="(scope.$index > form.programList.length - 2 && !disabled) ||
                   disabledPlatformId(form.platformId)
-                "
-              />
+                  " />
             </template>
           </el-table-column>
         </el-table>
@@ -147,77 +79,37 @@
     </el-form>
     <div class="form-btn">
       <el-button @click="cancel">取消</el-button>
-      <el-button v-if="!disabled" type="primary" @click="getSubmit"
-        >确定</el-button
-      >
+      <el-button v-if="!disabled" type="primary" @click="getSubmit">确定</el-button>
     </div>
 
     <!-- 弹窗 -->
     <el-dialog :visible.sync="dialogVisible" title="添加歌曲" width="1100px">
       <el-form inline size="mini" style="width: 100%">
         <el-form-item label="歌曲名称:">
-          <el-input
-            v-model="dialogForm.name"
-            placeholder="请输入歌曲名称"
-            clearable
-          />
+          <el-input v-model="dialogForm.name" placeholder="请输入歌曲名称" clearable />
         </el-form-item>
         <el-form-item label="歌手名称:">
-          <el-input
-            v-model="dialogForm.singerName"
-            placeholder="请输入歌手名称"
-            clearable
-          />
+          <el-input v-model="dialogForm.singerName" placeholder="请输入歌手名称" clearable />
         </el-form-item>
         <el-form-item label="资源平台:">
-          <el-select
-            v-model="dialogForm.platformId"
-            placeholder="请选择资源平台"
-          >
-            <el-option
-              v-for="item in platformOptions.filter(
-                (i) => !i.joinType.includes('1')
-              )"
-              :key="item.value"
-              :value="item.value"
-              :label="item.label"
-            />
+          <el-select v-model="dialogForm.platformId" placeholder="请选择资源平台">
+            <el-option v-for="item in platformOptions.filter(
+              (i) => !i.joinType.includes('1')
+            )" :key="item.value" :value="item.value" :label="item.label" />
           </el-select>
         </el-form-item>
         <el-form-item>
-          <el-button type="primary" icon="el-icon-search" @click="getSearch"
-            >搜索</el-button
-          >
+          <el-button type="primary" icon="el-icon-search" @click="getSearch">搜索</el-button>
           <el-button icon="el-icon-refresh" @click="getRefresh">重置</el-button>
         </el-form-item>
       </el-form>
-      <el-table
-        :data="tableData"
-        ref="multipleTable"
-        :row-key="tableKey"
-        v-loading="loading"
-        @selection-change="handleSelectionChange"
-      >
-        <el-table-column
-          type="selection"
-          align="center"
-          key="selection"
-          reserve-selection
-        />
+      <el-table :data="tableData" ref="multipleTable" :row-key="tableKey" v-loading="loading"
+        @selection-change="handleSelectionChange">
+        <el-table-column type="selection" align="center" key="selection" reserve-selection />
 
         <el-table-column label="ID" prop="id" align="center" />
-        <el-table-column
-          label="歌曲名称"
-          prop="name"
-          align="center"
-          show-overflow-tooltip
-        />
-        <el-table-column
-          label="歌手名称"
-          prop="singerName"
-          align="center"
-          show-overflow-tooltip
-        />
+        <el-table-column label="歌曲名称" prop="name" align="center" show-overflow-tooltip />
+        <el-table-column label="歌手名称" prop="singerName" align="center" show-overflow-tooltip />
         <el-table-column label="播放时长" prop="playTime" align="center" />
         <!-- <el-table-column label="操作" align="center">
           <template slot-scope="scope">
@@ -235,13 +127,8 @@
           </template>
         </el-table-column> -->
       </el-table>
-      <pagination
-        v-show="total > 0"
-        :total="total"
-        :page.sync="dialogForm.pageNum"
-        :limit.sync="dialogForm.pageSize"
-        @pagination="getList"
-      />
+      <pagination v-show="total > 0" :total="total" :page.sync="dialogForm.pageNum" :limit.sync="dialogForm.pageSize"
+        @pagination="getList" />
     </el-dialog>
   </div>
 </template>
@@ -257,6 +144,7 @@ payTypeMixin,
 platformMixin,
 } from "@/mixin/index";
 export default {
+  // name: "musicAlbumDetail",
   mixins: [platformMixin, onOrOffMixin, payTypeMixin, albumTypeMixin],
   components: {
     Audio,
@@ -291,6 +179,8 @@ export default {
         status: 1,
         type: 1,
       },
+      editData: {},
+      currentEditIndex: -1,
       // 校验
       rules: {
         name: [
@@ -401,7 +291,66 @@ export default {
     tableKey(row) {
       return row.id;
     },
+    // 输入框失去焦点时隐藏
+    onNumberBlur(row, index) {
+
+      let newValue = Number(this.editData.sortIndex);
+      const maxLen = this.form.programList.length;
+
+      if (isNaN(newValue) || newValue === null || newValue === undefined) {
+        this.currentEditIndex = -1;
+        console.log('序号未修改:', newValue);
+        return;
+      }
+      if (newValue < 1) {
+        this.$message.warning('序号必须大于1');
+        this.currentEditIndex = -1;
+
+        return;
+      }
+      if (newValue > maxLen) {
+        // 超出就是最后一位
+        newValue = maxLen
+      }
+
+      if (newValue === -1 || newValue === '') {
+        // 新值为空时处理
+        this.currentEditIndex = -1;
+        console.log('序号未修改:', newValue);
+        return
+      }
+      console.log('序号修改:', newValue, '当前索引:', index, this.currentEditIndex);
+
+      // 计算目标下标
+      const targetIndex = newValue - 1;
+      if (targetIndex === index) {
+        this.currentEditIndex = -1;
+        return;
+      }
+      // 交换两个元素
+      // ...existing code...
+      const movingItem = this.form.programList.splice(index, 1)[0];
+      this.form.programList.splice(targetIndex, 0, movingItem);
+      this.currentEditIndex = -1;
+      this.$message.success("操作成功!");
+
+
+    },
+    // 点击编辑图标显示输入框
+    handleEditClick(row, index) {
+      if (!this.canOrder) {
+        console.log('编辑功能已禁用', this.disabled, this.canOrder);
+        return;
+      }
+      this.editData = {
+        sortIndex: row.index,
+      };
+      this.currentEditIndex = index;
+      this.$nextTick(() => {
+        this.$refs.numberInput.focus();
+      });
 
+    },
     handleSelectionChange(val) {
       if (this.isLoad) {
         if (this.form.programList.length == 0) {
@@ -624,7 +573,7 @@ export default {
 
     // 取消
     cancel() {
-      this.$tab.closeOpenPage("/music/album");
+      this.$tab.closeOpenPage("/music/musicAlbum");
     },
 
     // 字典翻译

+ 39 - 156
src/views/music/album/index.vue

@@ -10,213 +10,95 @@
         <el-input v-model="form.name" placeholder="请输入专辑名称" clearable />
       </el-form-item>
       <el-form-item label="歌手名称:">
-        <el-input
-          v-model="form.singerName"
-          placeholder="请输入歌手名称"
-          clearable
-        />
+        <el-input v-model="form.singerName" placeholder="请输入歌手名称" clearable />
       </el-form-item>
       <el-form-item label="资源平台:">
-        <el-select
-          v-model="form.platformId"
-          placeholder="请选择资源平台"
-          clearable
-        >
-          <el-option
-            v-for="item in platformOptions"
-            :key="item.value"
-            :value="item.value"
-            :label="item.label"
-          />
+        <el-select v-model="form.platformId" placeholder="请选择资源平台" clearable>
+          <el-option v-for="item in platformOptions" :key="item.value" :value="item.value" :label="item.label" />
         </el-select>
       </el-form-item>
       <el-form-item label="专辑类型:">
-        <el-select
-          v-model="form.albumType"
-          placeholder="请选择专辑类型"
-          clearable
-        >
-          <el-option
-            v-for="item in albumTypeOptions"
-            :key="item.value"
-            :value="item.value"
-            :label="item.label"
-          />
+        <el-select v-model="form.albumType" placeholder="请选择专辑类型" clearable>
+          <el-option v-for="item in albumTypeOptions" :key="item.value" :value="item.value" :label="item.label" />
         </el-select>
       </el-form-item>
       <el-form-item label="付费类型:">
-        <el-select
-          v-model="form.payType"
-          placeholder="请选择付费类型"
-          clearable
-        >
-          <el-option
-            v-for="item in payTypeOptions"
-            :key="item.value"
-            :value="item.value"
-            :label="item.label"
-          />
+        <el-select v-model="form.payType" placeholder="请选择付费类型" clearable>
+          <el-option v-for="item in payTypeOptions" :key="item.value" :value="item.value" :label="item.label" />
         </el-select>
       </el-form-item>
       <el-form-item label="当前状态:">
         <el-select v-model="form.status" placeholder="请选择当前状态" clearable>
-          <el-option
-            v-for="item in onOrOffOptions"
-            :key="item.value"
-            :value="item.value"
-            :label="item.label"
-          />
+          <el-option v-for="item in onOrOffOptions" :key="item.value" :value="item.value" :label="item.label" />
         </el-select>
       </el-form-item>
       <el-form-item>
-        <el-button type="primary" icon="el-icon-search" @click="getSearch"
-          >搜索</el-button
-        >
+        <el-button type="primary" icon="el-icon-search" @click="getSearch">搜索</el-button>
         <el-button icon="el-icon-refresh" @click="getRefresh">重置</el-button>
-        <el-button
-          type="primary"
-          plain
-          icon="el-icon-plus"
-          @click="getDetail()"
-          v-hasPermi="['music:album:add']"
-          >新增</el-button
-        >
-        <el-button
-          type="primary"
-          :disabled="obj.id === ''"
-          @click="getChange(obj, 1)"
-          v-hasPermi="['music:album:up']"
-          >批量上架</el-button
-        >
-        <el-button
-          type="primary"
-          :disabled="obj.id === ''"
-          @click="getChange(obj, 2)"
-          v-hasPermi="['music:album:down']"
-          >批量下架</el-button
-        >
+        <el-button type="primary" plain icon="el-icon-plus" @click="getDetail()"
+          v-hasPermi="['music:album:add']">新增</el-button>
+        <el-button type="primary" :disabled="obj.id === ''" @click="getChange(obj, 1)"
+          v-hasPermi="['music:album:up']">批量上架</el-button>
+        <el-button type="primary" :disabled="obj.id === ''" @click="getChange(obj, 2)"
+          v-hasPermi="['music:album:down']">批量下架</el-button>
       </el-form-item>
     </el-form>
     <!-- 列表 -->
-    <el-table
-      :data="tableData"
-      v-loading="loading"
-      @selection-change="handleSelect"
-    >
+    <el-table :data="tableData" v-loading="loading" @selection-change="handleSelect">
       <el-table-column type="selection" align="center" />
-      <el-table-column
-        label="专辑Id"
-        prop="id"
-        align="center"
-        show-overflow-tooltip
-      />
-      <el-table-column
-        label="专辑名称"
-        prop="name"
-        align="center"
-        show-overflow-tooltip
-      />
+      <el-table-column label="专辑Id" prop="id" align="center" show-overflow-tooltip />
+      <el-table-column label="专辑名称" prop="name" align="center" show-overflow-tooltip />
       <el-table-column label="专辑封面" align="center" width="100px">
         <template slot-scope="scope">
           <el-image v-if="scope.row.coverUrl" :src="scope.row.coverUrl" />
         </template>
       </el-table-column>
-      <el-table-column
-        label="专辑类型"
-        prop="albumType"
-        align="center"
-        :formatter="typeFormatter"
-        show-overflow-tooltip
-      />
-      <el-table-column
-        label="歌手名称"
-        prop="singerName"
-        align="center"
-        show-overflow-tooltip
-      />
-      <el-table-column
-        label="付费类型"
-        prop="payType"
-        align="center"
-        :formatter="payTypeFormatter"
-      />
+      <el-table-column label="专辑类型" prop="albumType" align="center" :formatter="typeFormatter" show-overflow-tooltip />
+      <el-table-column label="歌手名称" prop="singerName" align="center" show-overflow-tooltip />
+      <el-table-column label="付费类型" prop="payType" align="center" :formatter="payTypeFormatter" />
       <el-table-column label="歌曲数量" prop="programCount" align="center" />
-      <el-table-column
-        label="资源平台"
-        prop="platformId"
-        align="center"
-        :formatter="platformFormatter"
-      />
-      <el-table-column
-        label="当前状态"
-        prop="status"
-        align="center"
-        :formatter="statusFormatter"
-      />
+      <el-table-column label="资源平台" prop="platformId" align="center" :formatter="platformFormatter" />
+      <el-table-column label="当前状态" prop="status" align="center" :formatter="statusFormatter" />
+
       <el-table-column label="更新时间" prop="updateTime" align="center">
         <template slot-scope="scope">
           <span>{{
             parseTime(scope.row.updateTime, "{y}-{m}-{d} {h}:{i}:{s}")
-          }}</span>
+            }}</span>
         </template>
       </el-table-column>
       <el-table-column label="操作" align="center">
         <template slot-scope="scope">
-          <el-button type="text" @click="getDetail(scope.row.id, true)"
-            >查看</el-button
-          >
+          <el-button type="text" @click="getDetail(scope.row.id, true)">查看</el-button>
           <span v-if="scope.row.status === 2">
-            <el-button
-              type="text"
-              @click="getDetail(scope.row.id)"
-              v-hasPermi="['music:album:edit']"
-              style="margin-left: 10px"
-            >
+            <el-button type="text" @click="getDetail(scope.row.id)" v-hasPermi="['music:album:edit']"
+              style="margin-left: 10px">
               编辑
             </el-button>
-            <el-button
-              type="text"
-              @click="getChange(scope.row, 1)"
-              v-hasPermi="['music:album:up']"
-              >上架
+            <el-button type="text" @click="getChange(scope.row, 1)" v-hasPermi="['music:album:up']">上架
             </el-button>
-            <el-button
-              type="delete"
-              @click="getDelete(scope.row)"
-              v-hasPermi="['music:album:delete']"
-              >删除
+            <el-button type="delete" @click="getDelete(scope.row)" v-hasPermi="['music:album:delete']">删除
             </el-button>
           </span>
-          <el-button
-            v-else
-            type="text"
-            @click="getChange(scope.row, 2)"
-            v-hasPermi="['music:album:down']"
-            >下架
+          <el-button v-else type="text" @click="getChange(scope.row, 2)" v-hasPermi="['music:album:down']">下架
           </el-button>
         </template>
       </el-table-column>
     </el-table>
-    <pagination
-      v-show="total > 0"
-      :total="total"
-      :page.sync="form.pageNum"
-      :limit.sync="form.pageSize"
-      @pagination="getList"
-    />
   </div>
 </template>
 
 <script>
 import { change, list, remove } from "@/api/music/menu";
 import {
-albumTypeMixin,
-onOrOffMixin,
-payTypeMixin,
-platformMixin,
+  albumTypeMixin,
+  onOrOffMixin,
+  payTypeMixin,
+  platformMixin,
 } from "@/mixin/index";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name: "MusicAlbum",
   mixins: [platformMixin, onOrOffMixin, payTypeMixin, albumTypeMixin],
   data() {
     return {
@@ -232,6 +114,7 @@ export default {
       total: 0,
       // 列表
       tableData: [],
+
       // 批量上下架
       obj: {
         id: "",
@@ -303,7 +186,7 @@ export default {
             }
           });
         })
-        .catch(() => {});
+        .catch(() => { });
     },
 
     // 删除
@@ -322,7 +205,7 @@ export default {
               }
             });
           })
-          .catch(() => {});
+          .catch(() => { });
       });
     },
 

+ 3 - 2
src/views/music/anchor/detail.vue

@@ -26,9 +26,10 @@
 </template>
 
 <script>
-import { submit, detail } from '@/api/music/anchor'
+import { detail, submit } from '@/api/music/anchor'
 import { platformMixin } from '@/mixin/index'
 export default {
+  // name:"musicAnchorDetail",
   mixins: [platformMixin],
   data() {
     return {
@@ -99,7 +100,7 @@ export default {
 
     // 取消
     cancel() {
-      this.$tab.closeOpenPage('/music/anchor')
+      this.$tab.closeOpenPage('/music/musicAnchor')
     }
   }
 }

+ 1 - 0
src/views/music/anchor/index.vue

@@ -121,6 +121,7 @@ import { change, list, remove } from "@/api/music/anchor";
 import { onOrOffMixin, platformMixin } from "@/mixin/index";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name:"MusicAnchor",
   mixins: [platformMixin, onOrOffMixin],
   data() {
     return {

+ 126 - 221
src/views/music/blog/detail.vue

@@ -1,179 +1,86 @@
 <!-- 音频管理 播客专辑详情 -->
 <template>
   <div class="app-container">
-    <el-form
-      class="form"
-      :model="form"
-      ref="form"
-      :rules="rules"
-      label-width="100px"
-      :disabled="disabled"
-    >
+    <el-form class="form" :model="form" ref="form" :rules="rules" label-width="100px" :disabled="disabled">
       <el-form-item label="播客名称:" prop="name">
         <el-input v-model="form.name" placeholder="请输入播客名称" />
       </el-form-item>
       <el-form-item label="主播名称:" prop="podcasterIds">
-        <el-select
-          v-model="form.podcasterIds"
-          multiple
-          filterable
-          remote
-          reserve-keyword
-          placeholder="请输入主播名称"
-          :remote-method="getSelect"
-          no-data-text="请新增主播"
-        >
-          <el-option
-            v-for="item in anchorOptions"
-            :key="item.value"
-            :value="item.value"
-            :label="item.label"
-          />
+        <el-select v-model="form.podcasterIds" multiple filterable remote reserve-keyword placeholder="请输入主播名称"
+          :remote-method="getSelect" no-data-text="请新增主播">
+          <el-option v-for="item in anchorOptions" :key="item.value" :value="item.value" :label="item.label" />
         </el-select>
       </el-form-item>
       <el-form-item label="播客分类:" prop="categoryIds">
-        <el-select
-          v-model="form.categoryIds"
-          multiple
-          placeholder="请选择播客分类"
-        >
-          <el-option
-            v-for="item in blogClassOptions"
-            :key="item.value"
-            :value="item.value"
-            :label="item.label"
-          />
+        <el-select v-model="form.categoryIds" multiple placeholder="请选择播客分类">
+          <el-option v-for="item in blogClassOptions" :key="item.value" :value="item.value" :label="item.label" />
         </el-select>
       </el-form-item>
       <el-form-item label="播客介绍:" prop="description">
-        <el-input
-          v-model="form.description"
-          type="textarea"
-          :autosize="{ minRows: 5, maxRows: 10 }"
-          maxlength="300"
-          show-word-limit
-          placeholder=" 请输入播客介绍"
-        />
+        <el-input v-model="form.description" type="textarea" :autosize="{ minRows: 5, maxRows: 10 }" maxlength="300"
+          show-word-limit placeholder=" 请输入播客介绍" />
       </el-form-item>
       <el-form-item label="资源平台:" prop="platformId">
-        <el-select
-          v-model="form.platformId"
-          placeholder="请选择资源平台"
-          :disabled="disabledPlatformId(form.platformId)"
-        >
-          <el-option
-            v-for="item in platformOptions"
-            :key="item.value"
-            :value="item.value"
-            :label="item.label"
-            :disabled="disabledJoinType(item.joinType)"
-          />
+        <el-select v-model="form.platformId" placeholder="请选择资源平台" :disabled="disabledPlatformId(form.platformId)">
+          <el-option v-for="item in platformOptions" :key="item.value" :value="item.value" :label="item.label"
+            :disabled="disabledJoinType(item.joinType)" />
         </el-select>
       </el-form-item>
       <el-form-item label="付费类型:" prop="charging">
         <el-select v-model="form.charging" placeholder="请选择付费类型">
-          <el-option
-            v-for="item in payTypeOptions"
-            :key="item.value"
-            :value="item.value"
-            :label="item.label"
-          />
+          <el-option v-for="item in payTypeOptions" :key="item.value" :value="item.value" :label="item.label" />
         </el-select>
       </el-form-item>
       <el-form-item v-if="form.charging !== 1" label="原价:" prop="price">
-        <el-input-number
-          v-model="form.price"
-          placeholder="请输入原价"
-          :min="1"
-          :precision="2"
-          :controls="false"
-        />
+        <el-input-number v-model="form.price" placeholder="请输入原价" :min="1" :precision="2" :controls="false" />
       </el-form-item>
-      <el-form-item
-        v-if="form.charging !== 1"
-        label="折扣价:"
-        prop="discountedPrice"
-      >
-        <el-input-number
-          v-model="form.discountedPrice"
-          placeholder="请输入折扣价"
-          :min="1"
-          :precision="2"
-          :controls="false"
-        />
+      <el-form-item v-if="form.charging !== 1" label="折扣价:" prop="discountedPrice">
+        <el-input-number v-model="form.discountedPrice" placeholder="请输入折扣价" :min="1" :precision="2"
+          :controls="false" />
       </el-form-item>
       <el-form-item label="播客封面" prop="thumb">
-        <Upload
-          listType="picture-card"
-          :url="form.thumb"
-          @upload="upload"
-          :disabled="disabled"
-        />
+        <Upload listType="picture-card" :url="form.thumb" @upload="upload" :disabled="disabled" />
       </el-form-item>
       <el-form-item label="关联节目:" prop="adminPodCastProgramDetailResp">
         <el-button type="primary" @click="getDialog">关联节目</el-button>
-        <el-button @click="getDelete" :disabled="ids.length > 0 ? false : true"
-          >解除关联</el-button
-        >
+        <el-button @click="getDelete" :disabled="ids.length > 0 ? false : true">解除关联</el-button>
       </el-form-item>
 
       <el-form-item style="width: 100%">
-        <el-table
-          :data="form.adminPodCastProgramDetailResp"
-          @selection-change="handleSelect"
-        >
+        <el-table :data="form.adminPodCastProgramDetailResp" @selection-change="handleSelect">
           <el-table-column type="selection" align="center" />
-          <el-table-column
-            label="ID"
-            prop="id"
-            align="center"
-            show-overflow-tooltip
-          />
-          <el-table-column
-            label="节目名称"
-            prop="name"
-            align="center"
-            show-overflow-tooltip
-          />
-          <el-table-column
-            label="资源平台"
-            prop="platformId"
-            align="center"
-            :formatter="platformFormatter"
-          />
-
-          <el-table-column
-            label="当前状态"
-            prop="status"
-            align="center"
-            :formatter="statusFormatter"
-          />
+          <el-table-column label="ID" prop="id" align="center" show-overflow-tooltip />
+          <el-table-column label="节目名称" prop="name" align="center" show-overflow-tooltip />
+          <el-table-column label="资源平台" prop="platformId" align="center" :formatter="platformFormatter" />
 
+          <el-table-column label="当前状态" prop="status" align="center" :formatter="statusFormatter" />
+          <el-table-column label="序号" align="center">
+            <template slot-scope="scope">
+              <div v-if="currentEditIndex !== scope.$index">
+                <span :style="{ marginRight: (canOrder) ? '0px' : '8px' }">
+                  {{ (dialogForm.pageNum - 1) * dialogForm.pageSize + scope.$index + 1 }}
+                </span>
+                <svg-icon v-if="canOrder" icon-class="edit" @click.native="handleEditClick(scope.row, scope.$index)" />
+              </div>
+              <el-input v-else v-model="editData.sortIndex" size="mini" style="width:60px;" type="number"
+                @blur="onNumberBlur(scope.row, scope.$index)" placeholder="序号" ref="numberInput" />
+            </template>
+          </el-table-column>
           <el-table-column label="操作" align="center">
             <template slot-scope="scope">
               <!-- 向上移动 -->
-              <el-button
-                type="text"
-                icon="el-icon-caret-top"
-                @click="getChange(true, scope.$index, scope.$index - 1)"
-                :disabled="
-                  (scope.$index < 1 && !disabled) ||
+              <el-button type="text" icon="el-icon-caret-top" @click="getChange(true, scope.$index, scope.$index - 1)"
+                :disabled="(scope.$index < 1 && !disabled) ||
                   disabledPlatformId(form.platformId)
-                "
-              />
+                  " />
 
               <!-- 向下移动 -->
-              <el-button
-                type="text"
-                icon="el-icon-caret-bottom"
-                @click="getChange(false, scope.$index, scope.$index + 1)"
-                :disabled="
-                  (scope.$index >
-                    form.adminPodCastProgramDetailResp.length - 2 &&
-                    !disabled) ||
+              <el-button type="text" icon="el-icon-caret-bottom"
+                @click="getChange(false, scope.$index, scope.$index + 1)" :disabled="(scope.$index >
+                  form.adminPodCastProgramDetailResp.length - 2 &&
+                  !disabled) ||
                   disabledPlatformId(form.platformId)
-                "
-              />
+                  " />
             </template>
           </el-table-column>
         </el-table>
@@ -181,103 +88,44 @@
     </el-form>
     <div class="form-btn">
       <el-button @click="cancel">取消</el-button>
-      <el-button v-if="!disabled" type="primary" @click="getSubmit"
-        >确定</el-button
-      >
+      <el-button v-if="!disabled" type="primary" @click="getSubmit">确定</el-button>
     </div>
 
     <!-- 弹窗 -->
     <el-dialog :visible.sync="dialogVisible" title="关联节目" width="1200px">
       <el-form inline size="mini" style="width: 100%">
         <el-form-item label="节目ID:">
-          <el-input
-            v-model="dialogForm.id"
-            placeholder="请输入节目ID"
-            clearable
-          />
+          <el-input v-model="dialogForm.id" placeholder="请输入节目ID" clearable />
         </el-form-item>
         <el-form-item label="节目名称:">
-          <el-input
-            v-model="dialogForm.name"
-            placeholder="请输入节目名称"
-            clearable
-          />
+          <el-input v-model="dialogForm.name" placeholder="请输入节目名称" clearable />
         </el-form-item>
         <el-form-item label="付费类型:">
-          <el-select
-            v-model="dialogForm.isFree"
-            placeholder="请选择付费类型"
-            clearable
-          >
-            <el-option
-              v-for="item in freeOptions"
-              :key="item.value"
-              :value="item.value"
-              :label="item.label"
-            />
+          <el-select v-model="dialogForm.isFree" placeholder="请选择付费类型" clearable>
+            <el-option v-for="item in freeOptions" :key="item.value" :value="item.value" :label="item.label" />
           </el-select>
         </el-form-item>
         <el-form-item label="资源平台:">
-          <el-select
-            v-model="dialogForm.platformId"
-            placeholder="请选择资源平台"
-          >
-            <el-option
-              v-for="item in platformOptions.filter(
-                (i) => !i.joinType.includes('1')
-              )"
-              :key="item.value"
-              :value="item.value"
-              :label="item.label"
-            />
+          <el-select v-model="dialogForm.platformId" placeholder="请选择资源平台">
+            <el-option v-for="item in platformOptions.filter(
+              (i) => !i.joinType.includes('1')
+            )" :key="item.value" :value="item.value" :label="item.label" />
           </el-select>
         </el-form-item>
         <el-form-item>
-          <el-button type="primary" icon="el-icon-search" @click="getSearch"
-            >搜索</el-button
-          >
+          <el-button type="primary" icon="el-icon-search" @click="getSearch">搜索</el-button>
           <el-button icon="el-icon-refresh" @click="getRefresh">重置</el-button>
         </el-form-item>
       </el-form>
-      <el-table
-        :data="dialogTableData"
-        ref="multipleTable"
-        :row-key="tableKey"
-        v-loading="loading"
-        @selection-change="handleSelectionChange"
-      >
-        <el-table-column
-          type="selection"
-          align="center"
-          key="selection"
-          reserve-selection
-        />
+      <el-table :data="dialogTableData" ref="multipleTable" :row-key="tableKey" v-loading="loading"
+        @selection-change="handleSelectionChange">
+        <el-table-column type="selection" align="center" key="selection" reserve-selection />
 
         <el-table-column label="ID" prop="id" align="center" />
-        <el-table-column
-          label="节目名称"
-          prop="name"
-          align="center"
-          show-overflow-tooltip
-        />
-        <el-table-column
-          label="资源平台"
-          prop="platformId"
-          align="center"
-          :formatter="platformFormatter"
-        />
-        <el-table-column
-          label="付费类型"
-          prop="isFree"
-          align="center"
-          :formatter="freeFormatter"
-        />
-        <el-table-column
-          label="当前状态"
-          prop="status"
-          align="center"
-          :formatter="statusFormatter"
-        />
+        <el-table-column label="节目名称" prop="name" align="center" show-overflow-tooltip />
+        <el-table-column label="资源平台" prop="platformId" align="center" :formatter="platformFormatter" />
+        <el-table-column label="付费类型" prop="isFree" align="center" :formatter="freeFormatter" />
+        <el-table-column label="当前状态" prop="status" align="center" :formatter="statusFormatter" />
 
         <!-- <el-table-column label="操作" align="center">
           <template slot-scope="scope">
@@ -297,13 +145,8 @@
           </template>
         </el-table-column> -->
       </el-table>
-      <pagination
-        v-show="total > 0"
-        :total="total"
-        :page.sync="dialogForm.pageNum"
-        :limit.sync="dialogForm.pageSize"
-        @pagination="getList"
-      />
+      <pagination v-show="total > 0" :total="total" :page.sync="dialogForm.pageNum" :limit.sync="dialogForm.pageSize"
+        @pagination="getList" />
     </el-dialog>
   </div>
 </template>
@@ -319,6 +162,7 @@ payTypeMixin,
 platformMixin,
 } from "@/mixin/index";
 export default {
+  // name: "musicBlogDetail",
   mixins: [
     blogClassMixin,
     platformMixin,
@@ -349,6 +193,8 @@ export default {
     return {
       // 遮罩层
       loading: false,
+      editData: {},
+      currentEditIndex: -1,
       // 表单
       form: {
         adminPodCastProgramDetailResp: [],
@@ -449,6 +295,7 @@ export default {
     };
   },
   mounted() {
+    console.log("博客专辑mounted");
     // 获取资源平台
     this.getPlatform({
       audioType: 8,
@@ -571,7 +418,6 @@ export default {
       detail(this.form.id).then((res) => {
         if (res.code === 0) {
           this.form = res.data;
-          console.log("gadsfqwerqwerqr====" + this.form.platformId);
           ///qq音乐和喜马拉雅
           if (this.form.platformId == 6 || this.form.platformId == 12) {
             this.canOrder = false;
@@ -750,9 +596,68 @@ export default {
 
     // 取消
     cancel() {
-      this.$tab.closeOpenPage("/music/blog");
+      this.$tab.closeOpenPage("/music/musicBlog");
+    },
+    // 输入框失去焦点时隐藏
+    onNumberBlur(row, index) {
+
+      let newValue = Number(this.editData.sortIndex);
+      const maxLen = this.form.adminPodCastProgramDetailResp.length;
+
+      if (isNaN(newValue) || newValue === null || newValue === undefined) {
+        this.currentEditIndex = -1;
+        console.log('序号未修改:', newValue);
+        return;
+      }
+      if (newValue < 1) {
+        this.$message.warning('序号必须大于1');
+        this.currentEditIndex = -1;
+
+        return;
+      }
+      if (newValue > maxLen) {
+        // 超出就是最后一位
+        newValue = maxLen
+      }
+
+      if (newValue === -1 || newValue === '') {
+        // 新值为空时处理
+        this.currentEditIndex = -1;
+        console.log('序号未修改:', newValue);
+        return
+      }
+      console.log('序号修改:', newValue, '当前索引:', index, this.currentEditIndex);
+
+      // 计算目标下标
+      const targetIndex = newValue - 1;
+      if (targetIndex === index) {
+        this.currentEditIndex = -1;
+        return;
+      }
+      // 交换两个元素
+      // ...existing code...
+      const movingItem = this.form.adminPodCastProgramDetailResp.splice(index, 1)[0];
+      this.form.adminPodCastProgramDetailResp.splice(targetIndex, 0, movingItem);
+      this.currentEditIndex = -1;
+      this.$message.success("操作成功!");
+
+
     },
+    // 点击编辑图标显示输入框
+    handleEditClick(row, index) {
+      if (!this.canOrder) {
+        console.log('编辑功能已禁用', this.disabled, this.canOrder);
+        return;
+      }
+      this.editData = {
+        sortIndex: row.index,
+      };
+      this.currentEditIndex = index;
+      this.$nextTick(() => {
+        this.$refs.numberInput.focus();
+      });
 
+    },
     // 字典翻译
     platformFormatter(row) {
       return this.selectDictLabel(this.platformOptions, row.platformId);

+ 1 - 0
src/views/music/blog/index.vue

@@ -220,6 +220,7 @@ platformMixin,
 } from "@/mixin/index";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name:"MusicBlog",
   mixins: [payTypeMixin, onOrOffMixin, platformMixin, blogClassMixin],
   data() {
     return {

+ 1 - 0
src/views/music/blogclass/index.vue

@@ -74,6 +74,7 @@
 import { change, detail, list, submit } from "@/api/music/blogclass";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name:"MuiscBlogClass",
   data() {
     return {
       // 遮罩层

+ 2 - 1
src/views/music/choiceness/detail.vue

@@ -253,6 +253,7 @@ import { detail, list, submit } from "@/api/music/choiceness";
 import { addressMixin, contentMixin, onOrOffMixin } from "@/mixin/index";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  // name:"musicChoicenessDetail",
   mixins: [addressMixin, contentMixin, onOrOffMixin],
   data() {
     return {
@@ -414,7 +415,7 @@ export default {
 
     // 取消
     cancel() {
-      this.$tab.closeOpenPage("/music/choiceness");
+      this.$tab.closeOpenPage("/music/musicChoiceness");
     },
 
     // 提交

+ 1 - 0
src/views/music/choiceness/index.vue

@@ -119,6 +119,7 @@ import { change, list, remove } from "@/api/music/choiceness";
 import { onOrOffMixin, platformMixin } from "@/mixin/index";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name:"MusicChoiceness",
   mixins: [onOrOffMixin, platformMixin],
   data() {
     return {

+ 1 - 0
src/views/music/list/detail.vue

@@ -89,6 +89,7 @@ import { detail, submit } from "@/api/music/list";
 import { selectSinger } from "@/api/music/singer";
 import { languageMixin, platformMixin } from "@/mixin/index";
 export default {
+  // name:"musicListDetail",
   mixins: [platformMixin, languageMixin],
   data() {
     return {

+ 2 - 1
src/views/music/list/index.vue

@@ -1,4 +1,4 @@
-<!-- 歌曲 -->
+<!--音频管理 歌曲 -->
 <template>
   <div class="app-container">
     <!-- 搜索 -->
@@ -229,6 +229,7 @@ import Audio from "@/components/Audio/index.vue";
 import { onOrOffMixin, platformMixin } from "@/mixin/index";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name:"MusicList",
   mixins: [platformMixin, onOrOffMixin],
   components: {
     Audio,

+ 1 - 0
src/views/music/menu/detail.vue

@@ -263,6 +263,7 @@ import { detail, submit } from "@/api/music/menu";
 import Audio from "@/components/Audio/index.vue";
 import { onOrOffMixin, payTypeMixin, platformMixin } from "@/mixin/index";
 export default {
+  // name:"musicMenuDetail",
   mixins: [platformMixin, onOrOffMixin, payTypeMixin],
   components: {
     Audio,

+ 1 - 0
src/views/music/menu/index.vue

@@ -189,6 +189,7 @@ import { change, list, remove } from "@/api/music/menu";
 import { onOrOffMixin, payTypeMixin, platformMixin } from "@/mixin/index";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name:"MusicMenu",
   mixins: [platformMixin, onOrOffMixin, payTypeMixin],
   data() {
     return {

+ 3 - 0
src/views/music/monitor/index.vue

@@ -1,3 +1,5 @@
+ <!-- 音频管理 异常监控 -->
+
 <template>
   <div class="app-container">
     <!-- 搜索 -->
@@ -72,6 +74,7 @@
 import { platformMixin, audioMixin } from '@/mixin/index'
 import { list, detail } from '@/api/music/monitor'
 export default {
+  name:"MusicMonitor",
   mixins: [platformMixin, audioMixin],
   data() {
     return {

+ 1 - 0
src/views/music/platform/index.vue

@@ -112,6 +112,7 @@ import { detail, list, remove, submit } from "@/api/music/platform";
 import { audioMixin } from "@/mixin/index";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name:"MusicPlatform",
   mixins: [audioMixin],
   data() {
     return {

+ 4 - 3
src/views/music/program/detail.vue

@@ -55,10 +55,11 @@
 </template>
 
 <script>
-import { submit, detail } from '@/api/music/program'
-import { platformMixin, isFreeMixin } from '@/mixin/index'
+import { detail, submit } from '@/api/music/program';
 import Dialog from '@/components/Dialog';
+import { isFreeMixin, platformMixin } from '@/mixin/index';
 export default {
+  // name:"musicProgramDetail",
   mixins: [platformMixin, isFreeMixin],
   components: { Dialog },
   data() {
@@ -185,7 +186,7 @@ export default {
 
     // 取消
     cancel() {
-      this.$tab.closeOpenPage("/music/program");
+      this.$tab.closeOpenPage("/music/musicProgram");
     },
   },
 };

+ 1 - 0
src/views/music/program/index.vue

@@ -178,6 +178,7 @@ import Audio from "@/components/Audio/index.vue";
 import { isFreeMixin, onOrOffMixin, platformMixin } from "@/mixin/index";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name:"MusicProgram",
   mixins: [platformMixin, onOrOffMixin, isFreeMixin],
   components: {
     Audio,

+ 4 - 3
src/views/music/radio/detail.vue

@@ -48,9 +48,10 @@
 </template>
 
 <script>
-import { submit, detail } from '@/api/music/radio'
-import { platformMixin, addressMixin, mapMixin, contentMixin } from '@/mixin/index'
+import { detail, submit } from '@/api/music/radio';
+import { addressMixin, contentMixin, mapMixin, platformMixin } from '@/mixin/index';
 export default {
+  // name:"musicRadioDetail",
   mixins: [platformMixin, addressMixin, mapMixin, contentMixin],
   data() {
     return {
@@ -145,7 +146,7 @@ export default {
     },
     // 取消
     cancel() {
-      this.$tab.closeOpenPage('/music/radio')
+      this.$tab.closeOpenPage('/music/musicRadio')
     }
   }
 };

+ 1 - 0
src/views/music/radio/index.vue

@@ -210,6 +210,7 @@ platformMixin,
 } from "@/mixin/index";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name:"MusicRadio",
   mixins: [platformMixin, onOrOffMixin, addressMixin, contentMixin, mapMixin],
   components: {
     Audio,

+ 1 - 0
src/views/music/radioclass/index.vue

@@ -93,6 +93,7 @@ import { detail, list, remove, submit } from "@/api/music/radioclass";
 import { platformMixin } from "@/mixin/index";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name:"MusicRadioClass",
   mixins: [platformMixin],
   data() {
     return {

+ 3 - 2
src/views/music/singer/detail.vue

@@ -38,8 +38,9 @@
 
 <script>
 import { detail, submit } from '@/api/music/singer'
-import { sexMixin, regionMixin, platformMixin } from '@/mixin/index'
+import { platformMixin, regionMixin, sexMixin } from '@/mixin/index'
 export default {
+  // name:"musicSingerDetail",
   mixins: [sexMixin, regionMixin, platformMixin],
   data() {
     return {
@@ -115,7 +116,7 @@ export default {
 
     // 取消
     cancel() {
-      this.$tab.closeOpenPage("/music/singer");
+      this.$tab.closeOpenPage("/music/musicSinger");
     }
   }
 }

+ 1 - 0
src/views/music/singer/index.vue

@@ -168,6 +168,7 @@ sexMixin,
 } from "@/mixin/index";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name:"MusicSinger",
   mixins: [platformMixin, sexMixin, regionMixin, onOrOffMixin],
   data() {
     return {

+ 3 - 0
src/views/ohplay/content/index.vue

@@ -1,3 +1,5 @@
+<!-- 猫舍管理 内容列表 -->
+
 <template>
   <div class="app-container">
     <!-- 搜索 -->
@@ -177,6 +179,7 @@
 import { list, detail, showOrHide, recommend, commentShowOrHide, } from '@/api/ohplay/content'
 import { classifyMixin, typeMixin } from '../mixin/index'
 export default {
+  name:"OhplayContent",
   mixins: [classifyMixin, typeMixin],
   data() {
     return {

+ 3 - 0
src/views/ohplay/operation/index.vue

@@ -1,3 +1,5 @@
+<!-- 猫舍管理 运营管理 -->
+
 <template>
   <div class="app-container">
     <div style="width: 400px">
@@ -83,6 +85,7 @@
 import { create, edit, list, remove } from "@/api/ohplay/operation";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name:"OhplayOperation",
   data() {
     return {
       img: [

+ 3 - 0
src/views/ohplay/programa/index.vue

@@ -1,3 +1,5 @@
+<!-- 猫舍管理 栏目管理 -->
+
 <template>
   <div class="app-container">
     <!-- 搜索 -->
@@ -51,6 +53,7 @@
 <script>
 import { list, create, edit, detail } from '@/api/ohplay/programa'
 export default {
+  name:"OhplayPrograma",
   data() {
     return {
       // 遮罩层

+ 3 - 0
src/views/ohplay/recommend/index.vue

@@ -1,3 +1,5 @@
+  <!-- 猫舍管理 内容推荐 -->
+
 <template>
   <div class="app-container">
     <!-- 搜索 -->
@@ -146,6 +148,7 @@ import { list, remove } from '@/api/ohplay/recommend'
 import { detail, showOrHide, commentShowOrHide } from '@/api/ohplay/content'
 import { classifyMixin, typeMixin } from '../mixin/index'
 export default {
+  name:"OhplayRecommend",
   mixins: [classifyMixin, typeMixin],
   data() {
     return {

+ 2 - 1
src/views/operation/activity/detail.vue

@@ -175,6 +175,7 @@
 import { detail, goodList, submit } from "@/api/operation/activity";
 import { devMixin, serviceTimeMixin } from "@/mixin/index";
 export default {
+  // name:"operationActivityDetail",
   mixins: [serviceTimeMixin, devMixin],
 
   data() {
@@ -361,7 +362,7 @@ export default {
 
     // 取消
     cancel() {
-      this.$tab.closeOpenPage("/operation/activity");
+      this.$tab.closeOpenPage("/operation/operationActivity");
     },
 
     // 确定

+ 1 - 0
src/views/operation/activity/index.vue

@@ -220,6 +220,7 @@ import {
 import { currentMixin, devMixin, disabledMixin } from "@/mixin/index";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name:"OperationActivity",
   mixins: [devMixin, currentMixin, disabledMixin],
   data() {
     return {

+ 3 - 2
src/views/operation/agreement/detail.vue

@@ -21,9 +21,10 @@
 </template>
 
 <script>
+import { detail, submit } from '@/api/operation/agreement';
 import Editor from "@/components/Editor/index";
-import { submit, detail } from '@/api/operation/agreement'
 export default {
+  // name:"operationAgreementDetail",
   components: {
     Editor
   },
@@ -105,7 +106,7 @@ export default {
 
     // 取消
     cancel() {
-      this.$tab.closeOpenPage('/operation/agreement')
+      this.$tab.closeOpenPage('/operation/operationAgreement')
     },
     // 提交
     getSubmit() {

+ 1 - 0
src/views/operation/agreement/index.vue

@@ -56,6 +56,7 @@
 import { list, remove } from "@/api/operation/agreement";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name:"OperationAgreement",
   data() {
     return {
       // 遮罩层

+ 110 - 1
src/views/operation/channel/detail.vue

@@ -105,6 +105,44 @@
             align="center"
             :formatter="statusFormatter"
           />
+
+          <!-- ///排序 -->
+
+          <el-table-column label="序号" align="center">
+            <template slot-scope="scope">
+              <div v-if="editData.currentEditIndex !== scope.$index">
+                <span style="margin-right: 8px">
+                  {{ scope.row.indexNum }}
+                  <!-- {{ scope.$index + 1 }} -->
+                  <!-- {{ scope.row.sort || "" }} -->
+                </span>
+
+                <svg-icon
+                  v-if="!disabled && !isRead"
+                  icon-class="edit"
+                  @click.native="handleEditClick(scope.row, scope.$index)"
+                />
+              </div>
+
+              <!-- ref="numberInput" -->
+              <!-- :ref="(el) => (inputRefs[scope.$index] = el)" -->
+              <el-input
+                v-else
+                v-model="scope.row.indexNum"
+                size="mini"
+                style="width: 60px"
+                type="number"
+                @blur="onNumberBlur(scope.row, scope.$index)"
+                @input="handleInput"
+                @keyup.enter.native="onNumberBlurEnter(scope.row, scope.$index)"
+                placeholder="序号"
+                ref="numberInput"
+              />
+            </template>
+          </el-table-column>
+
+          <!-- ///排序 -->
+
           <el-table-column label="操作" align="center">
             <template slot-scope="scope">
               <el-button type="delete" @click="getDelete(scope.row)"
@@ -149,12 +187,17 @@ import { channelDetail, edit } from "@/api/operation/channel";
 import Dialog from "@/components/Dialog/index.vue";
 import { disabledMixin, isFreeMixin, platformMixin } from "@/mixin/index";
 export default {
+  // name: "operationChannelDetail",
   mixins: [platformMixin, isFreeMixin, disabledMixin],
   components: {
     Dialog,
   },
   data() {
     return {
+      editData: {
+        currentEditIndex: -1,
+        currentEditSort: 1,
+      },
       // 遮罩层
       loading: false,
       // 弹窗
@@ -180,12 +223,72 @@ export default {
   },
 
   methods: {
+    // 点击编辑图标显示输入框
+    handleEditClick(row, index) {
+      if (this.disabled || this.isRead) {
+        return;
+      }
+
+      this.editData.currentEditIndex = index;
+      this.editData.currentEditSort = row.indexNum;
+      this.$nextTick(() => {
+        this.$refs.numberInput.focus();
+        this.$refs.numberInput.select();
+      });
+    },
+
+    handleInput(value) {
+      this.form.list[this.editData.currentEditIndex].indexNum = value;
+      this.form.list = this.form.list.filter((i) => i);
+    },
+
+    onNumberBlurEnter(row, index) {
+      this.editData.currentEditIndex = -1;
+    },
+
+    // 输入框失去焦点时隐藏
+    onNumberBlur(row, index) {
+      var newSort = row.indexNum;
+
+      if (newSort === "") {
+        row.indexNum = this.editData.currentEditSort;
+        this.$message.warning("序号不能为空");
+        return;
+      }
+
+      if (newSort <= 0) {
+        row.indexNum = this.editData.currentEditSort;
+        this.$message.warning("序号必须大于0");
+        return;
+      }
+
+      if (newSort === this.editData.currentEditSort) {
+        this.editData.currentEditIndex = -1;
+        return;
+      }
+
+      ///删除第index个元素
+      this.form.list.splice(index, 1);
+      this.form.list.splice(newSort - 1, 0, row);
+
+      for (var i = 0; i < this.form.list.length; i++) {
+        this.form.list[i].indexNum = i + 1;
+      }
+      this.form.list = this.form.list.filter((i) => i);
+      this.editData.currentEditIndex = -1;
+    },
+
     // 排序
     getChangeSort(row, sort) {
       const rowBean = this.form.list[row];
       const sortBean = this.form.list[sort];
       this.form.list[row] = sortBean;
       this.form.list[sort] = rowBean;
+
+      for (var i = 0; i < this.form.list.length; i++) {
+        this.form.list[i].indexNum = i + 1;
+      }
+
       this.form.list = this.form.list.filter((i) => i);
 
       // this.form.audioList = [];
@@ -210,6 +313,12 @@ export default {
       }).then((res) => {
         if (res.code === 0) {
           this.form = res.data;
+          if (this.form.list) {
+            for (var i = 0; i < this.form.list.length; i++) {
+              this.form.list[i].indexNum = i + 1;
+            }
+            this.form.list = this.form.list.filter((i) => i);
+          }
         }
       });
     },
@@ -258,7 +367,7 @@ export default {
 
     // 取消
     cancel() {
-      this.$tab.closeOpenPage("/operation/channel");
+      this.$tab.closeOpenPage("/operation/operationChannel");
     },
 
     // 除了2频道都不可以选猫王精选电台

+ 83 - 3
src/views/operation/channel/index.vue

@@ -1,4 +1,5 @@
-<!-- 定制频道-->
+<!-- 运营管理 定制频道-->
+
 <template>
   <div class="app-container">
     <!-- 新增 -->
@@ -28,6 +29,7 @@
         :formatter="devFormatter"
         show-overflow-tooltip
       />
+
       <el-table-column label="操作" align="center">
         <template slot-scope="scope">
           <el-button
@@ -174,9 +176,13 @@ page,
 } from "@/api/operation/channel";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
-  name: "Channel",
+  name: "OperationChannel",
   data() {
     return {
+      editData: {
+        currentEditIndex: -1,
+        currentEditSort: 1,
+      },
       // 遮罩层
       loading: false,
       dialog_loading: false,
@@ -229,7 +235,11 @@ export default {
       this.loading = true;
       page(this.form).then((res) => {
         if (res.code === 0) {
-          this.tableData = res.data;
+          var data = res.data;
+          for (var i = 0; i < data.length; i++) {
+            data[i].indexNum = i + 1;
+          }
+          this.tableData = data;
           this.loading = false;
         }
       });
@@ -344,6 +354,76 @@ export default {
       }
     },
 
+    // 点击编辑图标显示输入框
+    handleEditClick(row, index) {
+      this.editData.currentEditIndex = index;
+      this.editData.currentEditSort = row.indexNum;
+      this.$nextTick(() => {
+        this.$refs.numberInput.focus();
+      });
+    },
+
+    onNumberBlurEnter(row, index) {
+      this.editData.currentEditIndex = -1;
+    },
+
+    // 输入框失去焦点时隐藏
+    onNumberBlur(row, index) {
+      var newSort = row.indexNum;
+
+      if (newSort === "") {
+        row.indexNum = this.editData.currentEditSort;
+        this.$message.warning("序号不能为空");
+        return;
+      }
+
+      if (newSort <= 0) {
+        row.indexNum = this.editData.currentEditSort;
+        this.$message.warning("序号必须大于0");
+        return;
+      }
+
+      if (newSort === this.editData.currentEditSort) {
+        this.editData.currentEditIndex = -1;
+        return;
+      }
+
+      ///删除第index个元素
+
+      this.tableData.splice(index, 1);
+      this.tableData.splice(newSort - 1, 0, row);
+
+      for (var i = 0; i < this.tableData.length; i++) {
+        this.tableData[i].indexNum = i + 1;
+      }
+      this.editData.currentEditIndex = -1;
+
+      // 检查序号是否重复
+      // const isDuplicate = this.tableData.some(
+      //   (item, i) => i !== index && item.sortIndex === newSort
+      // );
+
+      // if (isDuplicate) {
+      //   this.$message.warning("序号已存在");
+      // } else {
+      //   // 更新到tableData
+      //   this.$set(this.tableData, index, {
+      //     ...row,
+      //     sortIndex: newSort,
+      //   });
+      //   console.log(
+      //     "序号修改成功:",
+      //     newSort,
+      //     "row.sortIndex",
+      //     row.sortIndex,
+      //     "this.tableData",
+      //     this.tableData[index].sortIndex
+      //   );
+      // 隐藏编辑框
+      //   this.editData.currentEditIndex = -1;
+      // }
+    },
+
     // 排序
     getChange(id, sort) {
       change({

+ 108 - 1
src/views/operation/channels/detail.vue

@@ -103,6 +103,41 @@
             align="center"
             :formatter="statusFormatter"
           />
+
+          <!-- ///排序 -->
+
+          <el-table-column label="序号" align="center">
+            <template slot-scope="scope">
+              <div v-if="editData.currentEditIndex !== scope.$index">
+                <span style="margin-right: 8px">
+                  {{ scope.row.indexNum }}
+                  <!-- {{ scope.$index + 1 }} -->
+                  <!-- {{ scope.row.sort || "" }} -->
+                </span>
+                <svg-icon
+                  v-if="!isRead"
+                  icon-class="edit"
+                  @click.native="handleEditClick(scope.row, scope.$index)"
+                />
+              </div>
+
+              <el-input
+                v-else
+                v-model="scope.row.indexNum"
+                size="mini"
+                style="width: 60px"
+                type="number"
+                @blur="onNumberBlur(scope.row, scope.$index)"
+                @input="handleInput"f s s s s
+                @keyup.enter.native="onNumberBlurEnter(scope.row, scope.$index)"
+                placeholder="序号"
+                ref="numberInput"
+              />
+            </template>
+          </el-table-column>
+
+          <!-- ///排序 -->
+
           <el-table-column label="操作" align="center">
             <template slot-scope="scope">
               <el-button type="delete" @click="getDelete(scope.row)"
@@ -148,12 +183,17 @@ import { channelDetail, channeledit } from "@/api/operation/channels";
 import Dialog from "@/components/Dialog/index.vue";
 import { disabledMixin, isFreeMixin, platformMixin } from "@/mixin/index";
 export default {
+  // name: "operationChannelsDetail",
   mixins: [platformMixin, isFreeMixin, disabledMixin],
   components: {
     Dialog,
   },
   data() {
     return {
+      editData: {
+        currentEditIndex: -1,
+        currentEditSort: 1,
+      },
       // 遮罩层
       loading: false,
       // 弹窗
@@ -173,13 +213,74 @@ export default {
     this.getDetail();
     this.getPlatform({});
   },
+
   methods: {
+    // 点击编辑图标显示输入框
+    handleEditClick(row, index) {
+      if (this.isRead) {
+        return;
+      }
+
+      this.editData.currentEditIndex = index;
+      this.editData.currentEditSort = row.indexNum;
+      this.$nextTick(() => {
+        this.$refs.numberInput.focus();
+        this.$refs.numberInput.select();
+      });
+    },
+
+    handleInput(value) {
+      this.form.list[this.editData.currentEditIndex].indexNum = value;
+      this.form.list = this.form.list.filter((i) => i);
+    },
+
+    onNumberBlurEnter(row, index) {
+      this.editData.currentEditIndex = -1;
+    },
+
+    // 输入框失去焦点时隐藏
+    onNumberBlur(row, index) {
+      var newSort = row.indexNum;
+
+      if (newSort === "") {
+        row.indexNum = this.editData.currentEditSort;
+        this.$message.warning("序号不能为空");
+        return;
+      }
+
+      if (newSort <= 0) {
+        row.indexNum = this.editData.currentEditSort;
+        this.$message.warning("序号必须大于0");
+        return;
+      }
+
+      if (newSort === this.editData.currentEditSort) {
+        this.editData.currentEditIndex = -1;
+        return;
+      }
+
+      ///删除第index个元素
+      this.form.list.splice(index, 1);
+      this.form.list.splice(newSort - 1, 0, row);
+
+      for (var i = 0; i < this.form.list.length; i++) {
+        this.form.list[i].indexNum = i + 1;
+      }
+      this.form.list = this.form.list.filter((i) => i);
+      this.editData.currentEditIndex = -1;
+    },
+
     // 排序
     getChangeSort(row, sort) {
       const rowBean = this.form.list[row];
       const sortBean = this.form.list[sort];
       this.form.list[row] = sortBean;
       this.form.list[sort] = rowBean;
+
+      for (var i = 0; i < this.form.list.length; i++) {
+        this.form.list[i].indexNum = i + 1;
+      }
+
       this.form.list = this.form.list.filter((i) => i);
 
       // this.form.audioList = [];
@@ -206,6 +307,12 @@ export default {
       }).then((res) => {
         if (res.code === 0) {
           this.form = res.data;
+          if (this.form.list) {
+            for (var i = 0; i < this.form.list.length; i++) {
+              this.form.list[i].indexNum = i + 1;
+            }
+            this.form.list = this.form.list.filter((i) => i);
+          }
         }
       });
     },
@@ -254,7 +361,7 @@ export default {
 
     // 取消
     cancel() {
-      this.$tab.closeOpenPage("/operation/channels");
+      this.$tab.closeOpenPage("/operation/operationChannels");
     },
 
     // 字典翻译

+ 102 - 1
src/views/operation/channels/index.vue

@@ -23,6 +23,9 @@
           </span>
         </template>
       </el-table-column>
+
+      <!-- <el-table-column label="序号" align="center" prop="sort" /> -->
+
       <el-table-column label="操作" align="center">
         <template slot-scope="scope">
           <el-button type="text" @click="getDialog(scope.row, true)"
@@ -289,8 +292,13 @@ submit,
 
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name: "OperationChannels",
   data() {
     return {
+      editData: {
+        currentEditIndex: -1,
+        currentEditSort: 1,
+      },
       // 遮罩层
       loading: false,
       // 列表
@@ -360,7 +368,11 @@ export default {
       this.loading = true;
       list().then((res) => {
         if (res.code === 0) {
-          this.tableData = res.data;
+          var data = res.data;
+          for (var i = 0; i < data.length; i++) {
+            data[i].indexNum = i + 1;
+          }
+          this.tableData = data;
           this.loading = false;
         }
       });
@@ -381,6 +393,84 @@ export default {
       });
     },
 
+    // 点击编辑图标显示输入框
+    handleEditClick(row, index) {
+      this.editData.currentEditIndex = index;
+      this.editData.currentEditSort = row.indexNum;
+      this.$nextTick(() => {
+        this.$refs.numberInput.focus();
+      });
+    },
+
+    onNumberBlurEnter(row, index) {
+      this.editData.currentEditIndex = -1;
+    },
+
+    // 输入框失去焦点时隐藏
+    onNumberBlur(row, index) {
+      var newSort = row.indexNum;
+
+      if (newSort === "") {
+        row.indexNum = this.editData.currentEditSort;
+        this.$message.warning("序号不能为空");
+        return;
+      }
+
+      if (newSort <= 0) {
+        row.indexNum = this.editData.currentEditSort;
+        this.$message.warning("序号必须大于0");
+        return;
+      }
+
+      if (newSort === this.editData.currentEditSort) {
+        this.editData.currentEditIndex = -1;
+        return;
+      }
+
+      ///删除第index个元素
+
+      this.tableData.splice(index, 1);
+      this.tableData.splice(newSort - 1, 0, row);
+
+      for (var i = 0; i < this.tableData.length; i++) {
+        this.tableData[i].indexNum = i + 1;
+      }
+      this.editData.currentEditIndex = -1;
+
+      // channeledit(this.tableData).then((res) => {
+      //   console.log("编辑成功:", JSON.stringify(res));
+      //   if (res.code === 0) {
+      //     this.$message.success("编辑成功!");
+      //     this.getList();
+      //   }
+      // });
+
+      // 检查序号是否重复
+      // const isDuplicate = this.tableData.some(
+      //   (item, i) => i !== index && item.sortIndex === newSort
+      // );
+
+      // if (isDuplicate) {
+      //   this.$message.warning("序号已存在");
+      // } else {
+      //   // 更新到tableData
+      //   this.$set(this.tableData, index, {
+      //     ...row,
+      //     sortIndex: newSort,
+      //   });
+      //   console.log(
+      //     "序号修改成功:",
+      //     newSort,
+      //     "row.sortIndex",
+      //     row.sortIndex,
+      //     "this.tableData",
+      //     this.tableData[index].sortIndex
+      //   );
+      // 隐藏编辑框
+      //   this.editData.currentEditIndex = -1;
+      // }
+    },
+
     // 弹窗
     async getDialog(row, boolean) {
       this.dialogVisible = true;
@@ -501,6 +591,15 @@ export default {
     // 取消
     getClose() {
       this.dialogVisible = false;
+      this.active = 0;
+      // if (
+      //   this.dialogForm != null &&
+      //   this.dialogForm.defaultList != null &&
+      //   this.dialogForm.defaultList.length > 0
+      // ) {
+      //   this.getActive(this.dialogForm.defaultList[0]);
+      // }
+
       this.dialogForm = {};
       this.$refs.dialogForm.resetFields();
     },
@@ -525,6 +624,8 @@ export default {
 
     // 12频道详情
     getRouter(e, boolean) {
+      this.dialogVisible = false;
+      this.active = 0;
       this.$router.push({
         path: `/operation/channels/detail`,
         query: {

+ 2 - 1
src/views/operation/dialog/index.vue

@@ -1,4 +1,4 @@
-<!-- 爱听弹窗 -->
+<!-- 运营管理 爱听弹窗 -->
 <template>
   <div class="app-container">
     <!-- 搜索 -->
@@ -150,6 +150,7 @@ import { change, detail, devList, list, submit } from "@/api/operation/dialog";
 import { disabledMixin } from "@/mixin/index";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name:"OperationDialog",
   mixins: [disabledMixin],
   data() {
     return {

+ 2 - 1
src/views/operation/explain/detail.vue

@@ -82,6 +82,7 @@ import { devCategoryMixin, devTypeMixin } from "@/mixin/index";
 import VueQr from "vue-qr";
 
 export default {
+  // name:"operationExplainDetail",
   components: {
     VueQr,
   },
@@ -155,7 +156,7 @@ export default {
 
     // 取消
     cancel() {
-      this.$tab.closeOpenPage("/operation/explain");
+      this.$tab.closeOpenPage("/operation/operationExplain");
       // this.$router.go(-1);
     },
 

+ 1 - 0
src/views/operation/explain/index.vue

@@ -71,6 +71,7 @@ import { deletes, list } from "@/api/operation/explain";
 import { currentMixin, devMixin, disabledMixin } from "@/mixin/index";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name:"OperationExplain",
   mixins: [devMixin, currentMixin, disabledMixin],
   data() {
     return {

+ 2 - 1
src/views/operation/feedbacklist/detail.vue

@@ -33,6 +33,7 @@
 <script>
 import { detail, submit } from '@/api/operation/feedbacklist'
 export default {
+  // name:"operationFeedbacklistDetail",
   data() {
     return {
       // 表单
@@ -70,7 +71,7 @@ export default {
 
     // 取消
     close() {
-      this.$tab.closeOpenPage("/operation/feedback/feedbacklist");
+      this.$tab.closeOpenPage("/operation/feedback/operationFeedbacklist");
     },
 
     // 提交

+ 2 - 0
src/views/operation/feedbacklist/index.vue

@@ -1,3 +1,4 @@
+<!-- 运营管理 反馈列表 -->
 <template>
   <div class='app-container'>
     <!-- 搜索 -->
@@ -56,6 +57,7 @@
 <script>
 import { list, typeList } from '@/api/operation/feedbacklist'
 export default {
+  name:"OperationFeedbacklist",
   data() {
     return {
       // 遮罩层

+ 1 - 0
src/views/operation/feedbacktype/index.vue

@@ -88,6 +88,7 @@
 import { detail, list, remove, submit } from "@/api/operation/feedbacktype";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name:"OperationFeedbackType",
   data() {
     return {
       // 遮罩层

+ 2 - 1
src/views/operation/map/detail.vue

@@ -58,6 +58,7 @@
 import { detail, submit } from "@/api/operation/map";
 import { mapMixin } from "@/mixin/index";
 export default {
+  // name:"operationMapDetail",
   mixins: [mapMixin],
   data() {
     return {
@@ -144,7 +145,7 @@ export default {
     },
 
     cancel() {
-      this.$tab.closeOpenPage("/operation/map");
+      this.$tab.closeOpenPage("/operation/operationMap");
     },
 
     // 提交

+ 1 - 0
src/views/operation/map/index.vue

@@ -129,6 +129,7 @@ import { change, list, remove } from "@/api/operation/map";
 import { mapMixin } from "@/mixin/index";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name:"OperationMap",
   mixins: [mapMixin],
   data() {
     return {

+ 1 - 0
src/views/operation/module/index.vue

@@ -105,6 +105,7 @@
 import { detail, list, remove, submit } from "@/api/operation/module";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name:"OperationModule",
   data() {
     return {
       // 遮罩层

+ 1 - 0
src/views/operation/piano/index.vue

@@ -117,6 +117,7 @@ import { add, deletes, edit, list } from "@/api/operation/piano";
 import { currentMixin, devMixin, disabledMixin } from "@/mixin/index";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name:"OperationPiano",
   mixins: [devMixin, currentMixin, disabledMixin],
   data() {
     return {

+ 10 - 9
src/views/operation/recommend/detail.vue

@@ -349,20 +349,21 @@
 
 <script>
 import {
-  detail,
-  moduleList,
-  radioList,
-  submitThree,
+detail,
+moduleList,
+radioList,
+submitThree,
 } from "@/api/operation/recommend";
 import { list } from "@/api/operation/scene";
 import {
-  audioMixin,
-  coverMixin,
-  disabledMixin,
-  isFreeMixin,
-  platformMixin,
+audioMixin,
+coverMixin,
+disabledMixin,
+isFreeMixin,
+platformMixin,
 } from "@/mixin/index";
 export default {
+  // name:"operationRecommendDetail",
   mixins: [coverMixin, audioMixin, platformMixin, isFreeMixin, disabledMixin],
   data() {
     return {

+ 3 - 0
src/views/operation/recommend/index.vue

@@ -232,6 +232,7 @@
           align="center"
           show-overflow-tooltip
         />
+
         <el-table-column label="操作" align="center">
           <template slot-scope="scope">
             <el-button type="text" @click="getDetail(scope.row, true)"
@@ -264,6 +265,7 @@ typeList,
 } from "@/api/operation/recommend";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name: "OperationRecommend",
   data() {
     return {
       // 遮罩层
@@ -425,6 +427,7 @@ export default {
 
     // 详情页
     getDetail(row, boolean) {
+      this.dialogVisible_list = false;
       this.$router.push({
         path: `/operation/homePage/recommend/detail`,
         query:

+ 3 - 2
src/views/operation/scene/detail.vue

@@ -71,9 +71,10 @@
 </template>
 
 <script>
-import { detail, edit, detailList, change, menuDetail, editMenu } from '@/api/operation/scene'
+import { change, detail, detailList, edit, editMenu, menuDetail } from '@/api/operation/scene'
 import { disabledMixin } from '@/mixin/index'
 export default {
+  // name:"operationSceneDetail",
   mixins: [disabledMixin],
   data() {
     return {
@@ -133,7 +134,7 @@ export default {
 
     // 取消
     cancel() {
-      this.$tab.closeOpenPage('/operation/scene')
+      this.$tab.closeOpenPage('/operation/operationScene')
     },
 
     // 专区列表

+ 2 - 1
src/views/operation/scene/index.vue

@@ -1,4 +1,4 @@
-<!-- 场景专区 -->
+<!-- 运营管理 场景专区 -->
 <template>
   <div class="app-container">
     <!-- 列表 -->
@@ -60,6 +60,7 @@ import { change, list } from "@/api/operation/scene";
 import { disabledMixin } from "@/mixin/index";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name:"OperationScene",
   mixins: [disabledMixin],
   data() {
     return {

+ 3 - 0
src/views/operation/sceneTime/index.vue

@@ -1,3 +1,5 @@
+ <!-- 运营管理 场景时间 -->
+
 <template>
   <div class="app-container">
     <el-button
@@ -95,6 +97,7 @@
 import { change, detail, list, submit } from "@/api/operation/sceneTime";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name:"OperationSceneTime",
   data() {
     return {
       // 遮罩层

+ 3 - 2
src/views/operation/startPage/detail.vue

@@ -39,8 +39,9 @@
 </template>
 
 <script>
-import { submit, detail, edit, checked } from '@/api/operation/startPage'
+import { checked, detail, edit, submit } from '@/api/operation/startPage'
 export default {
+  // name:"operationStartPageDetail",
   data() {
     return {
       // 表单
@@ -202,7 +203,7 @@ export default {
 
     // 取消
     cancel() {
-      this.$tab.closeOpenPage("/operation/startPage");
+      this.$tab.closeOpenPage("/operation/operationStartPage");
     },
   },
 }

+ 1 - 0
src/views/operation/startPage/index.vue

@@ -102,6 +102,7 @@ import { page, remove } from "@/api/operation/startPage";
 import { currentMixin } from "@/mixin/index";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name:"OperationStartPage",
   mixins: [currentMixin],
   data() {
     return {

+ 2 - 1
src/views/operation/tag/detail.vue

@@ -72,6 +72,7 @@ import { detail, submitThree } from '@/api/operation/tag';
 import Dialog from '@/components/Dialog/index.vue';
 import { audioMixin, disabledMixin, isFreeMixin, platformMixin } from '@/mixin/index';
 export default {
+  // name:"operationTagDetail",
   components: {
     Dialog
   },
@@ -162,7 +163,7 @@ export default {
 
     // 取消
     cancel() {
-      this.$tab.closeOpenPage("/operation/tag");
+      this.$tab.closeOpenPage("/operation/operationTag");
     },
 
     // 确定

+ 2 - 1
src/views/operation/tag/index.vue

@@ -1,4 +1,4 @@
-<!-- 标签分类 -->
+<!-- 运营管理 标签分类 -->
 <template>
   <div class="app-container">
     <!-- 搜索 -->
@@ -182,6 +182,7 @@ submitSecond,
 import { disabledMixin } from "@/mixin/index";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name:"OperationTag",
   mixins: [disabledMixin],
   data() {
     return {

+ 2 - 1
src/views/operation/waken/detail.vue

@@ -247,6 +247,7 @@ import { list } from "@/api/operation/channel";
 import { detail, devices, submit } from "@/api/operation/waken";
 import { disabledMixin, isFreeMixin, platformMixin } from "@/mixin/index";
 export default {
+  // name:"operationWakenDetail",
   mixins: [platformMixin, isFreeMixin, disabledMixin],
   data() {
     return {
@@ -470,7 +471,7 @@ export default {
 
     // 取消
     cancel() {
-      this.$tab.closeOpenPage("/operation/waken");
+      this.$tab.closeOpenPage("/operation/operationWaken");
     },
 
     // 提交

+ 1 - 0
src/views/operation/waken/index.vue

@@ -59,6 +59,7 @@
 import { devices, list, remove } from "@/api/operation/waken";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name:"OperationWaken",
   data() {
     return {
       // 遮罩层

+ 3 - 2
src/views/operation/wxbanner/detail.vue

@@ -34,9 +34,10 @@
 </template>
 
 <script>
-import { detail, add, edit } from "@/api/operation/wxbanner";
+import { add, detail, edit } from "@/api/operation/wxbanner";
 import { mapMixin } from "@/mixin/index";
 export default {
+    // name:"operationWXBannerDetail",
     mixins: [mapMixin],
     data() {
         return {
@@ -146,7 +147,7 @@ export default {
         },
 
         cancel() {
-            this.$tab.closeOpenPage("/operation/wxbanner");
+            this.$tab.closeOpenPage("/operation/operationWXBanner");
         },
 
         // 提交

+ 1 - 0
src/views/operation/wxbanner/index.vue

@@ -57,6 +57,7 @@ import { deletes, list } from "@/api/operation/wxbanner";
 import { currentMixin, devMixin, disabledMixin } from "@/mixin/index";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+    name:"OperationWXBanner",
     mixins: [devMixin, currentMixin, disabledMixin],
     data() {
         return {

+ 292 - 63
src/views/order/list/index.vue

@@ -1,129 +1,336 @@
-<!-- 流量订单 -->
+<!-- 订单管理 商品订单 -->
+
 <template>
   <div class="app-container">
     <!-- 搜索 -->
     <el-form inline size="mini">
       <el-form-item label="订单编号:">
-        <el-input v-model="form.orderCode" placeholder="请输入订单编号" clearable />
+        <el-input
+          v-model="form.orderCode"
+          placeholder="请输入订单编号"
+          clearable
+        />
       </el-form-item>
       <el-form-item label="用户账号:">
-        <el-input v-model="form.userName" placeholder="请输入用户账户" clearable />
+        <el-input
+          v-model="form.userName"
+          placeholder="请输入用户账户"
+          clearable
+        />
       </el-form-item>
       <el-form-item label="用户手机号:">
-        <el-input type="number" v-model.number="form.phone" placeholder="请输入用户手机号" clearable />
+        <el-input
+          type="number"
+          v-model.number="form.phone"
+          placeholder="请输入用户手机号"
+          clearable
+        />
       </el-form-item>
       <!-- 流量订单 -->
       <span v-if="form.searchType === '2'">
         <el-form-item label="SIM卡号:">
-          <el-input v-model="form.simCode" placeholder="请输入SIM卡号" clearable />
+          <el-input
+            v-model="form.simCode"
+            placeholder="请输入SIM卡号"
+            clearable
+          />
         </el-form-item>
         <el-form-item label="生效状态">
-          <el-select v-model="form.flowStatus" placeholder="请选择生效状态" clearable>
-            <el-option v-for="item in flowOptions" :key="item.value" :value="item.value" :label="item.label" />
+          <el-select
+            v-model="form.flowStatus"
+            placeholder="请选择生效状态"
+            clearable
+          >
+            <el-option
+              v-for="item in flowOptions"
+              :key="item.value"
+              :value="item.value"
+              :label="item.label"
+            />
           </el-select>
         </el-form-item>
       </span>
       <!-- 除充值订单 -->
       <span v-if="form.searchType !== '3'">
         <el-form-item label="商品ID:">
-          <el-input v-model="form.goodsid" placeholder="请输入商品ID" clearable />
+          <el-input
+            v-model="form.goodsid"
+            placeholder="请输入商品ID"
+            clearable
+          />
         </el-form-item>
         <el-form-item label="商品名称:">
-          <el-input v-model="form.goodsName" placeholder="请输入商品名称" clearable />
+          <el-input
+            v-model="form.goodsName"
+            placeholder="请输入商品名称"
+            clearable
+          />
         </el-form-item>
       </span>
       <el-form-item label="操作系统" v-else>
-        <el-select v-model="form.platform" placeholder="请选择操作系统" clearable>
-          <el-option v-for="item in systemOptions" :key="item.value" :value="item.value" :label="item.label" />
+        <el-select
+          v-model="form.platform"
+          placeholder="请选择操作系统"
+          clearable
+        >
+          <el-option
+            v-for="item in systemOptions"
+            :key="item.value"
+            :value="item.value"
+            :label="item.label"
+          />
         </el-select>
       </el-form-item>
       <!-- 会员订单  int  platformId  字段平台ID:灵活配置多个平台的 0-vip会员 1-联通  -->
-      <el-form-item v-if="form.searchType === '1' || form.searchType === '4'" label="资源平台:">
-        <el-select v-model="form.platformId" placeholder="请选择资源平台" clearable>
-          <el-option v-for="item in platformOptions" :key="item.value" :value="item.value" :label="item.label" />
+      <el-form-item
+        v-if="form.searchType === '1' || form.searchType === '4'"
+        label="资源平台:"
+      >
+        <el-select
+          v-model="form.platformId"
+          placeholder="请选择资源平台"
+          clearable
+        >
+          <el-option
+            v-for="item in platformOptions"
+            :key="item.value"
+            :value="item.value"
+            :label="item.label"
+          />
         </el-select>
       </el-form-item>
       <el-form-item label="支付状态:">
         <el-select v-model="form.status" placeholder="请选择支付状态" clearable>
-          <el-option v-for="item in statusOptions" :key="item.value" :value="item.value" :label="item.label" />
+          <el-option
+            v-for="item in statusOptions"
+            :key="item.value"
+            :value="item.value"
+            :label="item.label"
+          />
         </el-select>
       </el-form-item>
       <el-form-item label="支付方式:">
-        <el-select v-model="form.payType" placeholder="请选择支付方式" clearable>
-          <el-option v-for="item in payOptions" :key="item.value" :value="item.value" :label="item.label" />
+        <el-select
+          v-model="form.payType"
+          placeholder="请选择支付方式"
+          clearable
+        >
+          <el-option
+            v-for="item in payOptions"
+            :key="item.value"
+            :value="item.value"
+            :label="item.label"
+          />
         </el-select>
       </el-form-item>
       <!-- 商品订单 -->
       <el-form-item v-if="form.searchType === '1'" label="订单内容类型:">
-        <el-select v-model="form.goodsType" placeholder="请选择订单内容类型" clearable>
-          <el-option v-for="item in goodsTypeOptions" :key="item.value" :value="item.value" :label="item.label" />
+        <el-select
+          v-model="form.goodsType"
+          placeholder="请选择订单内容类型"
+          clearable
+        >
+          <el-option
+            v-for="item in goodsTypeOptions"
+            :key="item.value"
+            :value="item.value"
+            :label="item.label"
+          />
         </el-select>
       </el-form-item>
       <el-form-item label="下单时间:">
-        <el-date-picker v-model="form.listDate" type="datetimerange" start-placeholder="开始日期" end-placeholder="结束日期"
-          format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss" :picker-options="pickerOptions" />
+        <el-date-picker
+          v-model="form.listDate"
+          type="datetimerange"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          format="yyyy-MM-dd HH:mm:ss"
+          value-format="yyyy-MM-dd HH:mm:ss"
+          :picker-options="pickerOptions"
+        />
       </el-form-item>
       <el-form-item>
-        <el-button type="primary" icon="el-icon-search" @click="getSearch">搜索</el-button>
+        <el-button type="primary" icon="el-icon-search" @click="getSearch"
+          >搜索</el-button
+        >
         <el-button icon="el-icon-refresh" @click="getRefresh">重置</el-button>
-        <el-button type="primary" icon="el-icon-download" @click="handleExport"
-          v-hasPermi="['order:list:export']">导出</el-button>
-        <el-button type="primary" @click="getDialog" v-hasPermi="['order:list:export']">查看</el-button>
+        <el-button
+          type="primary"
+          icon="el-icon-download"
+          @click="handleExport"
+          v-hasPermi="['order:list:export']"
+          >导出</el-button
+        >
+        <el-button
+          type="primary"
+          @click="getDialog"
+          v-hasPermi="['order:list:export']"
+          >查看</el-button
+        >
       </el-form-item>
     </el-form>
     <!-- 列表 -->
     <el-table :data="tableData" v-loading="loading">
-      <el-table-column label="订单编号" prop="orderCode" key="orderCode" align="center" show-overflow-tooltip />
+      <el-table-column
+        label="订单编号"
+        prop="orderCode"
+        key="orderCode"
+        align="center"
+        show-overflow-tooltip
+      />
       <!-- 流量订单 -->
       <span v-if="form.searchType === '2'">
-        <el-table-column label="第三方订单编号" key="thirdOrderId" align="center" show-overflow-tooltip>
+        <el-table-column
+          label="第三方订单编号"
+          key="thirdOrderId"
+          align="center"
+          show-overflow-tooltip
+        >
           <template slot-scope="scope">
             <span>{{
               scope.row.thirdOrderId | empty(scope.row.thirdOrderId)
             }}</span>
           </template>
         </el-table-column>
-        <el-table-column label="SIM卡号" prop="simCode" key="simCode" align="center" show-overflow-tooltip>
+        <el-table-column
+          label="SIM卡号"
+          prop="simCode"
+          key="simCode"
+          align="center"
+          show-overflow-tooltip
+        >
           <template slot-scope="scope">
             <span>{{ scope.row.simCode | empty(scope.row.simCode) }}</span>
           </template>
         </el-table-column>
       </span>
-      <el-table-column label="商品ID" prop="goodsid" key="goodsid" align="center" show-overflow-tooltip />
-      <el-table-column label="商品名称" prop="goodsName" key="goodsName" align="center" show-overflow-tooltip />
-      <el-table-column label="订单金额 / 元" prop="amount" key="amount" align="center" :formatter="amountFormatter" />
+      <el-table-column
+        label="商品ID"
+        prop="goodsid"
+        key="goodsid"
+        align="center"
+        show-overflow-tooltip
+      />
+      <el-table-column
+        label="商品名称"
+        prop="goodsName"
+        key="goodsName"
+        align="center"
+        show-overflow-tooltip
+      />
+      <el-table-column
+        label="订单金额 / 元"
+        prop="amount"
+        key="amount"
+        align="center"
+        :formatter="amountFormatter"
+      />
       <!-- 商品订单 -->
       <span v-if="form.searchType === '1'">
-        <el-table-column label="购买类型" prop="charging" key="charging" align="center" :formatter="chargingFormatter" />
-        <el-table-column label="订单内容类型" prop="goodsType" key="goodsType" align="center"
-          :formatter="goodsTypeFormatter" />
+        <el-table-column
+          label="购买类型"
+          prop="charging"
+          key="charging"
+          align="center"
+          :formatter="chargingFormatter"
+        />
+        <el-table-column
+          label="订单内容类型"
+          prop="goodsType"
+          key="goodsType"
+          align="center"
+          :formatter="goodsTypeFormatter"
+        />
       </span>
       <!-- 充值订单 -->
-      <el-table-column v-if="form.searchType === '3'" label="订单来源" prop="platform" key="platform" align="center"
-        :formatter="platformFormatter" />
+      <el-table-column
+        v-if="form.searchType === '3'"
+        label="订单来源"
+        prop="platform"
+        key="platform"
+        align="center"
+        :formatter="platformFormatter"
+      />
       <!-- 会员订单 -->
       <span v-if="form.searchType === '4'">
-        <el-table-column label="栏目" prop="groupId" key="groupId" align="center" :formatter="groupFormatter" />
-        <el-table-column label="服务时长" prop="expirationTime" key="expirationTime" align="center"
-          :formatter="timeFormatter" />
+        <el-table-column
+          label="栏目"
+          prop="groupId"
+          key="groupId"
+          align="center"
+          :formatter="groupFormatter"
+        />
+        <el-table-column
+          label="服务时长"
+          prop="expirationTime"
+          key="expirationTime"
+          align="center"
+          :formatter="timeFormatter"
+        />
       </span>
       <!-- 商品订单 或 会员订单 -->
       <!-- <el-table-column v-if="['1', '4'].includes(form.searchType)" label="资源平台" prop="platformId" key="platformId"
         align="center" :formatter="platformIdFormatter" /> -->
-      <el-table-column label="下单时间" prop="createTime" key="createTime" align="center" show-overflow-tooltip />
-      <el-table-column label="支付方式" prop="payType" key="payType" align="center" :formatter="payTypeFormatter" />
-      <el-table-column label="支付状态" prop="status" key="status" align="center" :formatter="statusFormatter" />
-      <el-table-column label="支付时间" prop="goodsUpdateTime" key="goodsUpdateTime" align="center" show-overflow-tooltip />
-      <el-table-column label="用户账号" prop="userName" key="userName" align="center" show-overflow-tooltip />
-      <el-table-column label="支付流水号" key="payId" align="center" show-overflow-tooltip>
+      <el-table-column
+        label="下单时间"
+        prop="createTime"
+        key="createTime"
+        align="center"
+        show-overflow-tooltip
+      />
+      <el-table-column
+        label="支付方式"
+        prop="payType"
+        key="payType"
+        align="center"
+        :formatter="payTypeFormatter"
+      />
+      <el-table-column
+        label="支付状态"
+        prop="status"
+        key="status"
+        align="center"
+        :formatter="statusFormatter"
+      />
+      <el-table-column
+        label="支付时间"
+        prop="goodsUpdateTime"
+        key="goodsUpdateTime"
+        align="center"
+        show-overflow-tooltip
+      />
+      <el-table-column
+        label="用户账号"
+        prop="userName"
+        key="userName"
+        align="center"
+        show-overflow-tooltip
+      />
+      <el-table-column
+        label="支付流水号"
+        key="payId"
+        align="center"
+        show-overflow-tooltip
+      >
         <template slot-scope="scope">
           <span>{{ scope.row.payId | empty(scope.row.payId) }}</span>
         </template>
       </el-table-column>
       <!-- 流量订单 -->
       <span v-if="form.searchType === '2'">
-        <el-table-column label="生效状态" prop="flowStatus" key="flowStatus" align="center" :formatter="flowFormatter" />
-        <el-table-column label="生效时间" key="effectTime" align="center" show-overflow-tooltip>
+        <el-table-column
+          label="生效状态"
+          prop="flowStatus"
+          key="flowStatus"
+          align="center"
+          :formatter="flowFormatter"
+        />
+        <el-table-column
+          label="生效时间"
+          key="effectTime"
+          align="center"
+          show-overflow-tooltip
+        >
           <template slot-scope="scope">
             <span>{{
               scope.row.effectTime | empty(scope.row.effectTime)
@@ -132,8 +339,13 @@
         </el-table-column>
       </span>
     </el-table>
-    <pagination v-show="total > 0" :total="total" :page.sync="form.pageNum" :limit.sync="form.pageSize"
-      @pagination="getList" />
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="form.pageNum"
+      :limit.sync="form.pageSize"
+      @pagination="getList"
+    />
     <!-- 弹窗 -->
     <el-dialog :visible.sync="dialogVisible" title="导出历史" width="1000px">
       <el-table :data="dialogTable" v-loading="dialogLoading">
@@ -142,15 +354,27 @@
         <el-table-column label="任务名称" prop="jobName" align="center" />
         <el-table-column label="任务类型" prop="jobType" align="center" />
         <el-table-column label="导出时间" prop="updateTime" align="center" />
+        <el-table-column label="状态" align="center" :formatter="getStatus" />
         <el-table-column label="操作人" prop="useName" align="center" />
+
         <el-table-column label="操作" align="center">
           <template slot-scope="scope">
-            <el-button type="text" @click="getDownLoad(scope.row)">下载</el-button>
+            <el-button
+              type="text"
+              @click="getDownLoad(scope.row)"
+              :disabled="scope.row.status == 2 ? false : true"
+              >下载</el-button
+            >
           </template>
         </el-table-column>
       </el-table>
-      <pagination v-show="dialogTotal > 0" :total="dialogTotal" :page.sync="dialogForm.pageNum"
-        :limit.sync="dialogForm.pageSize" @pagination="getDialogList" />
+      <pagination
+        v-show="dialogTotal > 0"
+        :total="dialogTotal"
+        :page.sync="dialogForm.pageNum"
+        :limit.sync="dialogForm.pageSize"
+        @pagination="getDialogList"
+      />
     </el-dialog>
   </div>
 </template>
@@ -159,12 +383,13 @@
 import { list as sceneList } from "@/api/operation/scene";
 import { dialogList, download, downLoadHistory, list } from "@/api/order/list";
 import {
-  payTypeMixin,
-  platformMixin,
-  serviceTimeMixin,
-  systemMixin,
+payTypeMixin,
+platformMixin,
+serviceTimeMixin,
+systemMixin,
 } from "@/mixin/index";
 export default {
+  name: "OrderList1",
   mixins: [payTypeMixin, systemMixin, serviceTimeMixin, platformMixin],
   data() {
     return {
@@ -278,16 +503,20 @@ export default {
     this.payOptions.push(
       this.form.searchType === "3"
         ? {
-          value: 3,
-          label: "苹果支付",
-        }
+            value: 3,
+            label: "苹果支付",
+          }
         : {
-          value: 4,
-          label: "猫币支付",
-        }
+            value: 4,
+            label: "猫币支付",
+          }
     );
   },
   methods: {
+    getStatus(row) {
+      return row.status == 1 ? "已创建" : row.status == 2 ? "成功" : "失败";
+    },
+
     // 列表
     getList() {
       this.loading = true;
@@ -362,7 +591,7 @@ export default {
             }
           });
         })
-        .catch(() => { });
+        .catch(() => {});
     },
 
     // 栏目

+ 2 - 1
src/views/project/list/detail.vue

@@ -113,9 +113,10 @@
 </template>
 
 <script>
-import { add, edit, update, appEdit, updateAdd, updatePage, historyPage, shelves } from "@/api/project/list";
+import { add, appEdit, edit, historyPage, shelves, update, updateAdd, updatePage } from "@/api/project/list";
 import Editor from "@/components/Editor";
 export default {
+  // name:"projectListDetail",
   components: {
     Editor,
   },

+ 3 - 0
src/views/project/list/index.vue

@@ -1,3 +1,5 @@
+  <!-- 项目管理 项目列表 -->
+
 <template>
   <div class="app-container">
     <!-- 搜索 -->
@@ -45,6 +47,7 @@
 <script>
 import { page, edit } from "@/api/project/list";
 export default {
+  name:"ProjectList",
   data() {
     return {
       // 遮罩层

+ 2 - 1
src/views/push/dialog/detail.vue

@@ -57,8 +57,9 @@
 </template>
 
 <script>
-import { submit, detail } from '@/api/push/dialog'
+import { detail, submit } from '@/api/push/dialog'
 export default {
+  // name:"pushDialogDetail",
   data() {
     return {
       // 表单

+ 3 - 1
src/views/push/dialog/index.vue

@@ -1,4 +1,5 @@
- <!-- 推送弹窗 -->
+ <!-- 推送管理 推送弹窗 -->
+
 <template>
   <div class="app-container">
     <!-- 搜索 -->
@@ -134,6 +135,7 @@ import { list, remove } from "@/api/push/dialog";
 import { currentMixin } from "@/mixin/index";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name:"PushDialog",
   mixins: [currentMixin],
   data() {
     return {

+ 3 - 0
src/views/push/message/index.vue

@@ -1,3 +1,5 @@
+<!-- 推送管理 消息推送 -->
+
 <template>
   <div class="app-container">
     <!-- 搜索 -->
@@ -95,6 +97,7 @@
 <script>
 import { list, create, detail, edit } from '@/api/push/message'
 export default {
+  name:"PushMessage",
   data() {
     return {
       form: {

+ 2 - 1
src/views/push/update/detail.vue

@@ -44,6 +44,7 @@
 import { detail, submit } from '@/api/push/update'
 import { systemMixin } from '@/mixin'
 export default {
+  // name:"pushUpdateDetail",
   mixins: [systemMixin],
   data() {
     var checkVersion = (rule, value, callback) => {
@@ -107,7 +108,7 @@ export default {
 
     // 取消
     cancel() {
-      this.$tab.closeOpenPage("/push/update");
+      this.$tab.closeOpenPage("/push/pushUpdate");
     },
 
     // 确定

+ 3 - 1
src/views/push/update/index.vue

@@ -1,5 +1,6 @@
 
-<!-- App升级 -->
+<!-- 推送管理 App升级 -->
+
 <template>
   <div class="app-container">
     <!-- 搜索 -->
@@ -104,6 +105,7 @@ import { list, remove } from "@/api/push/update";
 import { systemMixin } from "@/mixin";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name:"PushUpdate",
   mixins: [systemMixin],
   data() {
     return {

+ 3 - 2
src/views/registration/content/detail.vue

@@ -82,8 +82,9 @@
 <script>
 import { radioList } from '@/api/operation/recommend'
 import { create, detail, edit } from '@/api/registration/content'
-import { platformMixin, audioMixin, isFreeMixin, coverMixin } from '@/mixin/index'
+import { audioMixin, coverMixin, isFreeMixin, platformMixin } from '@/mixin/index'
 export default {
+  // name:"registrationContentDetail",
   mixins: [platformMixin, audioMixin, isFreeMixin, coverMixin],
   data() {
     return {
@@ -222,7 +223,7 @@ export default {
 
     // 取消
     cancel() {
-      this.$tab.closeOpenPage('/registration/contentConfig')
+      this.$tab.closeOpenPage('/registration/registrationContent')
     },
 
     // 确定

+ 1 - 0
src/views/registration/content/index.vue

@@ -161,6 +161,7 @@ platformMixin,
 } from "@/mixin/index";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name:"RegistrationContent",
   mixins: [platformMixin, audioMixin, disabledMixin, currentMixin],
   data() {
     return {

+ 2 - 1
src/views/registration/exchange/detail.vue

@@ -37,6 +37,7 @@
 <script>
 import { create, detail, edit, mealList } from '@/api/registration/exchange'
 export default {
+  // name:"registrationExchangeDetail",
   data() {
     return {
       // 表单
@@ -114,7 +115,7 @@ export default {
 
     // 取消
     cancel() {
-      this.$tab.closeOpenPage('/registration/exchangeConfig')
+      this.$tab.closeOpenPage('/registration/registrationExchange')
     },
 
     getMealList() {

+ 2 - 0
src/views/registration/exchange/index.vue

@@ -1,4 +1,5 @@
 <!-- 签到管理 兑换配置 -->
+
 <template>
   <div class="app-container">
     <!-- 搜索 -->
@@ -115,6 +116,7 @@ import { change, list, remove } from "@/api/registration/exchange";
 import { disabledMixin } from "@/mixin/index";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name:"RegistrationExchange",
   mixins: [disabledMixin],
   data() {
     return {

+ 3 - 2
src/views/registration/lottery/detail.vue

@@ -73,8 +73,9 @@
 </template>
 
 <script>
-import { detail, create, checkTime, edit } from '@/api/registration/lottery'
+import { checkTime, create, detail, edit } from '@/api/registration/lottery'
 export default {
+  // name:"registrationLotteryDetail",
   data() {
     return {
       // 表单
@@ -192,7 +193,7 @@ export default {
 
     // 取消
     cancel() {
-      this.$tab.closeOpenPage('/registration/lotteryConfig')
+      this.$tab.closeOpenPage('/registration/registrationLottery')
     },
 
     // 确定

+ 1 - 0
src/views/registration/lottery/index.vue

@@ -82,6 +82,7 @@ import { change, list, remove } from "@/api/registration/lottery";
 import { currentMixin, disabledMixin } from "@/mixin/index";
 import { dialogCallBack } from "@/utils/DialogUtil";
 export default {
+  name:"RegistrationLottery",
   mixins: [disabledMixin, currentMixin],
   data() {
     return {

+ 3 - 0
src/views/registration/lotteryStat/index.vue

@@ -1,3 +1,5 @@
+  <!-- 签到管理 抽奖统计 -->
+
 <template>
   <div class="app-container">
     <!-- 搜索 -->
@@ -49,6 +51,7 @@
 <script>
 import { list } from '@/api/registration/lotteryStat'
 export default {
+  name:"RegistrationLotteryStat",
   data() {
     return {
       // 遮罩层

+ 3 - 0
src/views/registration/order/index.vue

@@ -1,3 +1,5 @@
+   <!-- 签到管理 兑换订单 -->
+
 <template>
   <div class="app-container">
     <!-- 表单 -->
@@ -47,6 +49,7 @@
 <script>
 import { list } from '@/api/registration/order'
 export default {
+  name:"RegistrationOrder",
   data() {
     return {
       // 遮罩层

+ 1 - 0
src/views/registration/regConfig/index.vue

@@ -194,6 +194,7 @@ submit,
 import { dialogCallBack } from "@/utils/DialogUtil";
 import { checkPermi } from "@/utils/permission";
 export default {
+  name:"RegistrationRegConfig",
   data() {
     return {
       // 遮罩层

+ 0 - 0
src/views/service/code/index.vue


Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini