details.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. <template>
  2. <div>
  3. <div class="container normal-panel normal-margin sticky" v-if="edit">
  4. <el-button class="inline-16" v-if="edit" :disabled="form.status == '发布'" type="primary" size="small" @click="editBtn" >编 辑</el-button>
  5. <release :data="form" @onSuccess="selectDetail"></release>
  6. <on-del v-if="tool.checkAuth($route.name,'delete') && form.status != '发布'" :data="form" @onSuccess="$store.dispatch('DrawerShowChange',false),$router.push('/archives_scmag')"></on-del>
  7. </div>
  8. <div style="overflow-x:hidden">
  9. <el-row :gutter="16">
  10. <el-col :span="12">
  11. <!-- 表单 -->
  12. <div class="container normal-panel normal-margin">
  13. <div class="normal-title container" style="padding-top:0;display:flex;justify-content:space-between">
  14. <p>课程详情</p>
  15. <!-- <div>
  16. <el-button size="mini" @click="editBtn" style="margin-right:10px" :disabled="form.status == '发布'">编 辑</el-button>
  17. <release :data="form" @onSuccess="selectDetail"></release>
  18. <on-del v-if="tool.checkAuth($route.name,'delete') && form.status != '发布'" :data="form" @onSuccess="$store.dispatch('DrawerShowChange',false),$router.push('/archives_scmag')"></on-del>
  19. </div>-->
  20. </div>
  21. <el-row :gutter="20">
  22. <el-form :model="form" :disabled="edit" :rules="rules" ref="form" size="small" status-icon label-position="right" label-width="100px" class="demo-ruleForm">
  23. <el-col :span="24">
  24. <el-form-item label="标题" prop="title">
  25. <el-input v-model="form.title" placeholder="请输入标题"></el-input>
  26. </el-form-item>
  27. </el-col>
  28. <el-col :span="12">
  29. <el-form-item label="开始时间" prop="begdate">
  30. <el-date-picker
  31. style="width:100%"
  32. v-model="form.begdate"
  33. value-format="yyyy-MM-dd"
  34. type="date"
  35. placeholder="开始日期">
  36. </el-date-picker>
  37. </el-form-item>
  38. </el-col>
  39. <el-col :span="12">
  40. <el-form-item label="下架时间" prop="enddate">
  41. <el-date-picker
  42. style="width:100%"
  43. v-model="form.enddate"
  44. value-format="yyyy-MM-dd"
  45. type="date"
  46. placeholder="下架日期">
  47. </el-date-picker>
  48. </el-form-item>
  49. </el-col>
  50. <el-col :span="12">
  51. <el-form-item label="一级分类" prop="sat_courseware_classid_1">
  52. <el-select style="width:100%;margin-right:16px" size="small" v-if="options1" v-model="form.sat_courseware_classid_1" clearable>
  53. <el-option v-for="item in options1" :key="item.index" :value="item.sat_courseware_classid" :label="item.classname" @click.native="handelSelectClick(item)"></el-option>
  54. </el-select>
  55. </el-form-item>
  56. </el-col>
  57. <el-col :span="12">
  58. <el-form-item label="二级分类" prop="sat_courseware_classid_2">
  59. <el-select style="width:100%;margin-right:16px" size="small" v-model="form.sat_courseware_classid_2" clearable>
  60. <el-option v-for="item in options2" :key="item.index" :value="item.sat_courseware_classid" :label="item.classname"></el-option>
  61. </el-select>
  62. </el-form-item>
  63. </el-col>
  64. <el-col :span="24">
  65. <el-form-item label="备注">
  66. <el-input v-model="form.notes" placeholder="请输入标备注"></el-input>
  67. </el-form-item>
  68. </el-col>
  69. <el-col :span="24">
  70. <el-form-item label="封面" prop="cover">
  71. <previewImage v-if="form.cover" style="width:386px" :image="image" :deletebtn="!edit"
  72. @onSuccess="clearCover"></previewImage>
  73. <upload v-else btntype="limage" :folderid="folderid" accept=".JPG,.PNG" :bindData="{ownertable:'SAT_COURSEWARE',ownerid:form.sat_coursewareid,usetype:'cover'}" @onSuccess="onCoverSubmit"></upload>
  74. <p class="info">注:建议上传图片大小210*120px像素,大小不超过2M,格式为JPG/PNG</p>
  75. </el-form-item>
  76. </el-col>
  77. </el-form>
  78. </el-row>
  79. </div>
  80. <!-- 附件列表 -->
  81. <div class="container normal-panel">
  82. <attachmentList :attinfos="form.attinfos" @onSuccess="selectDetail" :onlyread="true">
  83. <!-- <upload slot="upload" :folderid="folderid" :bindData="{ownertable:'SAT_COURSEWARE',ownerid:form.sat_coursewareid,usetype:'default'}" @onSuccess="onSubmit"></upload> -->
  84. </attachmentList>
  85. </div>
  86. </el-col>
  87. <el-col :span="12">
  88. <scopeOfauth :onlyread="true" :defaultData="defaultData" appidname="sat_coursewareid" obiectName="sat_courseware" :dataid="$route.query.id"
  89. @onChecked="onChecked"></scopeOfauth>
  90. </el-col>
  91. </el-row>
  92. </div>
  93. </div>
  94. </template>
  95. <script>
  96. import upload from '@/components/upload/hw_obs_upload.vue'
  97. import previewImage from '@/components/previewImage/index.vue'
  98. import attachmentList from '@/components/attachment_list/index.vue'
  99. import scopeOfauth from '@/components/scopeOfAuthority/index.vue'
  100. import onDel from "./delete"
  101. import release from "./release"
  102. import store from '@/store'
  103. export default {
  104. components:{
  105. upload,
  106. previewImage,
  107. attachmentList,
  108. scopeOfauth,
  109. onDel,
  110. release
  111. },
  112. data () {
  113. return {
  114. rules:{
  115. title: [
  116. { required: true, message: '请输入课程名称', trigger: 'blur' },
  117. ],
  118. begdate: [
  119. { required: true, message: '请选择开始日期', trigger: 'change' }
  120. ],
  121. enddate: [
  122. { required: true, message: '请选择下架时间', trigger: 'change' }
  123. ],
  124. sat_courseware_classid_1: [
  125. { required: true, message: '请选择一级分类', trigger: 'change' }
  126. ],
  127. sat_courseware_classid_2: [
  128. { required: true, message: '请选择二级分类', trigger: 'change' }
  129. ],
  130. cover:[
  131. { required: true, message: '请上传封面', trigger: 'blur' },
  132. ],
  133. },
  134. options1:[],
  135. options2:[],
  136. form:{},
  137. image:{},
  138. authData:{},
  139. defaultData:{},
  140. folderid:JSON.parse(sessionStorage.getItem('folderid')).appfolderid,
  141. edit:true,
  142. detailData:''
  143. }
  144. },
  145. methods:{
  146. editBtn () {
  147. window.sessionStorage.setItem('newMaterial', JSON.stringify(this.detailData))
  148. this.$router.push({path:'/archives_scedit',query:{id:this.$route.query.id,type:'1'}})
  149. },
  150. onSubmit () {
  151. this.form.sat_courseware_classid = this.form.sat_courseware_classid_2
  152. this.$refs['form'].validate(async (valid) => {
  153. if (!valid) return false;
  154. const res = await this.$api.requested({
  155. "classname": "webmanage.saletool.courseware.courseware",
  156. "method": "insertOrUpdate",
  157. "content": this.form
  158. })
  159. this.tool.showMessage(res)
  160. this.selectDetail()
  161. this.insertCoursewareauth()
  162. });
  163. },
  164. async selectDetail () {
  165. const res = await this.$api.requested({
  166. "classname": "webmanage.saletool.courseware.courseware",
  167. "method": "selectDetail",
  168. "content": {
  169. "sat_coursewareid":this.$route.query.id
  170. }
  171. })
  172. this.detailData = res.data
  173. this.form = Object.assign({},this.form,res.data)
  174. console.log(this.options1);
  175. this.options1.forEach(e=>{
  176. e.sat_courseware_classid === res.data.sat_courseware_classid_1?this.options2 = e.children:''
  177. })
  178. this.queryFileLink()
  179. },
  180. // 分类查询
  181. async coursewareclass () {
  182. const res = await this.$api.requested({
  183. "id":20221102143302,
  184. "content": {
  185. "parentid": 0
  186. }
  187. })
  188. this.options1 = res.data
  189. },
  190. handelSelectClick (val) {
  191. this.options2 = val.children
  192. this.form.sat_courseware_classid_2 = ''
  193. },
  194. // 获取附件信息
  195. async queryFileLink () {
  196. console.log('eeeeeeeeeeeeeeeee');
  197. this.dialogEditVisible = true
  198. const res = await this.$api.requested({
  199. "classname": "system.attachment.Attachment",
  200. "method": "queryFileLink",
  201. "content": {
  202. "ownertable": 'SAT_COURSEWARE',
  203. "ownerid": this.form.sat_coursewareid,
  204. "usetype":'cover'//传空返回有所
  205. }
  206. })
  207. console.log(res.data,'eeeeeeeeeeeeeeeeeeeee');
  208. res.data[0]?this.image = res.data[0]:this.image = {url:''}
  209. },
  210. onCoverSubmit (res) {
  211. this.form.cover = JSON.parse(res.attinfos).data[0].url
  212. this.image = JSON.parse(res.attinfos).data[0]
  213. },
  214. // 删除封面
  215. clearCover () {
  216. this.form.cover = null
  217. this.image = {}
  218. },
  219. // 获取保存授权范围数据
  220. onChecked (param) {
  221. this.authData = param
  222. },
  223. // 新增授权范围
  224. async insertCoursewareauth () {
  225. const res = await this.$api.requested({
  226. "classname": "webmanage.saletool.courseware.coursewareauth",
  227. "method": "insert",
  228. "content": this.authData
  229. })
  230. res.code === 0?this.$notify({
  231. title:'失败',
  232. message:res.data,
  233. type:'error'
  234. }):''
  235. },
  236. // 查询授权信息
  237. async query_auth () {
  238. const res = await this.$api.requested({
  239. "classname": "webmanage.saletool.courseware.coursewareauth",
  240. "method": "selectList",
  241. "content": {
  242. "oncache":true,
  243. "sat_coursewareid": this.$route.query.id,
  244. }
  245. })
  246. this.defaultData = res.data
  247. console.log(this.defaultData,'授权aa ');
  248. },
  249. },
  250. created () {
  251. this.coursewareclass()
  252. this.tool.checkAuth(this.$route.name,'data_analysis')?'':this.$router.go(-1)
  253. //详情页禁用操作
  254. setTimeout(() => {
  255. this.$store.dispatch('pageOnlyRead',true)
  256. },500)
  257. },
  258. mounted () {
  259. setTimeout(() => {
  260. this.selectDetail()
  261. this.query_auth()
  262. },100)
  263. }
  264. }
  265. </script>
  266. <style>
  267. </style>
  268. <style scoped>
  269. .disable{
  270. pointer-events: none;
  271. }
  272. </style>