AddActivity.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423
  1. <style lang="scss" scoped>
  2. .preview {
  3. .el-form-item {
  4. margin-bottom: 15px;
  5. }
  6. label,
  7. p {
  8. line-height: 25px !important;
  9. }
  10. }
  11. .content .title {
  12. height: 32px;
  13. font-size: 14px;
  14. font-weight: bold;
  15. color: #333333;
  16. border-bottom: 1px solid #d8d8d8;
  17. margin-bottom: 25px;
  18. }
  19. .el-form{
  20. font-size: 14px;
  21. font-weight: 400;
  22. color: #666666;
  23. .el-select,.el-range-editor--small.el-input__inner{
  24. width:100%;
  25. }
  26. }
  27. /deep/.el-tabs__header{
  28. margin:0;
  29. .el-tabs__active-bar{
  30. height:0px;
  31. }
  32. .el-tabs__item{
  33. width: 160px;
  34. height: 40px;
  35. text-align: center;
  36. border-radius: 8px 8px 0px 0px;
  37. color:#333333;
  38. background: #ECECEC;
  39. margin-right:10px;
  40. }
  41. .el-tabs__item.is-active{
  42. background: #3895FE;
  43. color:#ffffff;
  44. }
  45. }
  46. .el-button{
  47. width:120px;
  48. height:36px;
  49. }
  50. // 上传
  51. /deep/.avatar-uploader .el-upload {
  52. width: 148px;
  53. height: 148px;
  54. line-height: 148px;
  55. border: 1px dashed #d9d9d9;
  56. border-radius: 6px;
  57. cursor: pointer;
  58. position: relative;
  59. overflow: hidden;
  60. .avatar{
  61. width: 100%;
  62. height: auto;
  63. }
  64. }
  65. .avatar-uploader .el-upload:hover {
  66. border-color: #409EFF;
  67. }
  68. .avatar-uploader-icon {
  69. font-size: 28px;
  70. color: #8c939d;
  71. width: 68px;
  72. height: 68px;
  73. line-height: 68px;
  74. text-align: center;
  75. }
  76. .avatar {
  77. width: 68px;
  78. height: 68px;
  79. display: block;
  80. }
  81. /deep/.speaker_avatar .el-upload{
  82. width: 80px;
  83. height: 80px;
  84. line-height: 80px;
  85. }
  86. .hotel_imgs {
  87. /deep/.el-upload--picture-card{
  88. width:79px;
  89. height: 79px;
  90. line-height: 79px;
  91. }
  92. }
  93. </style>
  94. <template>
  95. <section>
  96. <p><span>活动管理></span>新增活动</p>
  97. <div class="content">
  98. <!-- <div class="title">新增会议</div> -->
  99. <el-form size="small" label-width="140px" class='over_y'>
  100. <el-form-item label="发布单位:">
  101. <el-select placeholder="请选择发布单位" v-model="form.journal_id" filterable>
  102. <el-option
  103. v-for="(item, index) in journalList"
  104. :key="index"
  105. :label="item.name"
  106. :value="item.id"
  107. ></el-option>
  108. </el-select>
  109. </el-form-item>
  110. <el-form-item label="活动名称:">
  111. <el-input
  112. placeholder="请输入活动名称"
  113. v-model="form.name"
  114. clearable
  115. ></el-input>
  116. </el-form-item>
  117. <el-row>
  118. <el-col :span="12">
  119. <el-form-item label="主办方:">
  120. <el-input
  121. placeholder="请输入主办方"
  122. v-model="form.the_host"
  123. clearable
  124. ></el-input>
  125. </el-form-item>
  126. </el-col>
  127. <el-col :span="12">
  128. <el-form-item label="承办方:">
  129. <el-input
  130. placeholder="请输入承办方"
  131. v-model="form.to_undertake"
  132. clearable
  133. ></el-input>
  134. </el-form-item>
  135. </el-col>
  136. <el-col :span="12" >
  137. <el-form-item label="会议时间:">
  138. <el-date-picker
  139. v-model="form.time"
  140. type="daterange" value-format="yyyy-MM-dd"
  141. range-separator="至"
  142. start-placeholder="开始日期"
  143. end-placeholder="结束日期"
  144. >
  145. </el-date-picker>
  146. </el-form-item>
  147. </el-col>
  148. <el-col :span="12">
  149. <el-form-item label="城市:">
  150. <el-cascader style="width:100%;"
  151. v-model="form.citys" :props='props'
  152. :options="cityList"
  153. @change="handleChangeCity">
  154. </el-cascader>
  155. </el-form-item>
  156. </el-col>
  157. </el-row>
  158. <el-row>
  159. <el-col :span="24" >
  160. <el-form-item label="地址">
  161. <el-input placeholder="请输入详细地址" v-model="form.address"></el-input>
  162. </el-form-item>
  163. </el-col>
  164. </el-row>
  165. <el-form-item label='活动简介:'>
  166. <el-input type='textarea' v-model="form.desc" :rows="3" placeholder="请输入活动介绍"></el-input>
  167. </el-form-item>
  168. <el-row>
  169. <el-col :span="8">
  170. <el-form-item label='是否热门:'>
  171. <el-switch
  172. v-model="form.is_hot"
  173. active-text="热门"
  174. inactive-text="不热门">
  175. </el-switch>
  176. </el-form-item>
  177. </el-col>
  178. <el-col :span="8">
  179. <el-form-item label='是否推荐:'>
  180. <el-switch
  181. v-model="form.is_recommend"
  182. active-text="推荐"
  183. inactive-text="不推荐">
  184. </el-switch>
  185. <!-- <el-radio-group v-model='form.is_recommend'>
  186. <el-radio :label='0'>不推荐</el-radio>
  187. <el-radio :label='1'>推荐</el-radio>
  188. </el-radio-group> -->
  189. </el-form-item>
  190. </el-col>
  191. </el-row>
  192. <el-form-item label='封面图:'>
  193. <el-upload
  194. class="avatar-uploader"
  195. action="/api/admin/uploadfile"
  196. :show-file-list="false"
  197. :on-success="handleAvatarSuccess">
  198. <img v-if="form.img" :src="form.img" class="avatar">
  199. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  200. </el-upload>
  201. <span style='font-size:12px;color:#999999;'>建议图片尺寸为:210*160</span>
  202. </el-form-item>
  203. <el-form-item label=''>
  204. <el-tabs v-model="activeName" @tab-click="handleClick">
  205. <el-tab-pane label="活动详情" name="first">
  206. <fuEditor :value='form.content' ref="editor"></fuEditor>
  207. </el-tab-pane>
  208. <el-tab-pane label="主讲人" name="second">
  209. <section style="height:544px;padding:10px 0px;border:1px solid #ccc;">
  210. <div v-for='(item,index) in form.speaker' :key='index' class='speaker'>
  211. <el-row>
  212. <el-col :span="12">
  213. <el-form-item label="主讲人姓名">
  214. <el-input placeholder="请输入主讲人姓名" v-model="item.name"></el-input>
  215. </el-form-item>
  216. <el-form-item label="主讲人简介">
  217. <el-input type="textarea" placeholder="请输入主讲人简介" v-model="item.intruduce"></el-input>
  218. </el-form-item>
  219. </el-col>
  220. <el-col :span="8">
  221. <el-form-item label="主讲人头像">
  222. <el-upload
  223. class="avatar-uploader speaker_avatar"
  224. action="/api/admin/uploadfile"
  225. :show-file-list="false"
  226. :on-success="(res,file)=>{handleAvatarSuccess1(index,res,file)}">
  227. <img v-if="item.img" :src="item.img" class="avatar">
  228. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  229. </el-upload>
  230. </el-form-item>
  231. </el-col>
  232. <el-col :span="4">
  233. <el-button v-if='index==0' size="mini" type="primary" plain @click='addSpeaker' icon="el-icon-plus">添加主讲人</el-button>
  234. <el-button v-else type="danger" size="mini" plain @click='clearSpeaker(index)'>删除</el-button>
  235. </el-col>
  236. </el-row>
  237. </div>
  238. </section>
  239. </el-tab-pane>
  240. </el-tabs>
  241. </el-form-item>
  242. <el-form-item style="position:fixed;bottom:20px;right:60px;">
  243. <!-- <el-button type='primary'>预览</el-button> -->
  244. <el-button @click="save" type='success'>发布</el-button>
  245. <!-- <el-button type='default'>保存并新增</el-button> -->
  246. <!-- <el-button v-if='id' type="danger" plain>删除</el-button> -->
  247. <el-button type='info' plain @click="$router.go(-1)">返回</el-button>
  248. </el-form-item>
  249. </el-form>
  250. </div>
  251. </section>
  252. </template>
  253. <script>
  254. import fuEditor from '../../components/fuEditor'
  255. export default {
  256. components: {
  257. fuEditor,
  258. },
  259. data() {
  260. return {
  261. signup_fields:[
  262. { name: "姓名", id: "name" },
  263. { name: "性别", id: "sex" },
  264. { name: "年龄", id: "age" },
  265. { name: "职务", id: "job" },
  266. { name: "职称", id: "title" },
  267. { name: "公司", id: "company" },
  268. { name: "电话", id: "phone" },
  269. { name: "邮箱", id: "email" }
  270. ],
  271. form: {
  272. is_signup:0,
  273. is_popular:0,
  274. is_recommend:0,
  275. citys:[],
  276. signup_fields:[],
  277. speaker:[
  278. {name:'',intruduce:''}
  279. ],
  280. img:''
  281. },
  282. optionList: [
  283. { name: "成都交通", id: "1" },
  284. { name: "成都交通", id: "1" },
  285. ],
  286. journalList:[],
  287. cityList:[],
  288. activeName:'first',
  289. imageUrl:"",
  290. props:{
  291. value:'name'
  292. }
  293. };
  294. },
  295. methods: {
  296. save(){
  297. var content=this.$refs.editor.getEditor()
  298. var form=this.form;
  299. form.content=content;
  300. form.city=form.citys.join(' ');
  301. if(form.time){
  302. form.begin_time=form.time[0]
  303. form.end_time=form.time[1]
  304. }
  305. let type = this.$route.query.type;
  306. form.type = type;
  307. // form.organizer_name=this.organizerList.filter(item=>item.id==form.organizer_id)[0].name
  308. console.log(form)
  309. if(this.id){
  310. this.$api.updateActivity(form).then(res=>{
  311. if(res.data.code == 0){
  312. this.$message({
  313. message: '修改成功',
  314. type: 'success'
  315. })
  316. this.$router.push({path:'/learning/activity'})
  317. }else{
  318. this.$message({
  319. message: res.data.message,
  320. type: 'error'
  321. })
  322. }
  323. })
  324. }else{
  325. this.$api.addActivity(form).then(res=>{
  326. if(res.data.code == 0){
  327. this.$message({
  328. message: '发布成功',
  329. type: 'success'
  330. })
  331. this.$router.push({path:'/learning/activity'})
  332. }else{
  333. this.$message({
  334. message: res.data.message,
  335. type: 'error'
  336. })
  337. }
  338. })
  339. }
  340. },
  341. //封面
  342. handleAvatarSuccess(res, file) {
  343. this.form.img = file.response.data;
  344. console.log(this.form.img)
  345. },
  346. //主讲人
  347. handleAvatarSuccess1(index,res, file) {
  348. var speaker=this.form.speaker[index];
  349. speaker.img = file.response.data;
  350. this.$set(this.form.speaker,index,speaker)
  351. // console.log(this.form.img)
  352. },
  353. beforeAvatarUpload(){
  354. },
  355. handleClick(){
  356. },
  357. addSpeaker(){
  358. this.form.speaker.push({name:'',intruduce:''})
  359. },
  360. clearSpeaker(index){
  361. this.form.speaker.splice(index,1)
  362. },
  363. addHotelType(){
  364. this.form.hotel.type.push({})
  365. },
  366. handleChangeCity(value){
  367. console.log(value,222222222)
  368. },
  369. gopage(size) {
  370. if (size) {
  371. this.form.page_size = size;
  372. }
  373. this.form.page = this.$refs.pageButton.page;
  374. this.getData();
  375. },
  376. getPermissions() {
  377. this.$api.getUserPermissions().then((res) => {
  378. this.data = res.data.data;
  379. });
  380. },
  381. getData() {
  382. this.$api.searchJournalList().then((res) => {
  383. this.journalList = res.data.data;
  384. });
  385. this.$api.getCityList().then((res) => {
  386. this.cityList = res.data.data;
  387. });
  388. },
  389. },
  390. created() {
  391. this.getData()
  392. console.log(this.$route)
  393. if(this.$route.query.id){
  394. this.id=this.$route.query.id;
  395. this.$api.getActivity({id:this.id}).then(res=>{
  396. this.form=res.data.data
  397. this.form.is_popular=Boolean(this.form.is_popular)
  398. this.form.is_recommend=Boolean(this.form.is_recommend)
  399. this.form.citys=this.form.city.split(' ')
  400. this.form.time=[this.form.begin_time,this.form.end_time]
  401. if(!this.form.speaker){
  402. this.form.speaker=[{}]
  403. }
  404. })
  405. }
  406. },
  407. };
  408. </script>