articleForm.vue 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. <template>
  2. <div class="app-container">
  3. <el-page-header :content="isEdit?'编辑图文素材':'添加图文素材'" @back="goBack" />
  4. <el-card class="form-container" shadow="never">
  5. <el-form ref="weChatArticleFrom" :model="article" :rules="rules" label-width="120px">
  6. <el-form-item label="标题:" prop="title">
  7. <el-input v-model="article.title" />
  8. </el-form-item>
  9. <el-form-item label="素材详细列表:" prop="detailJson">
  10. <!-- <el-input v-model="article.detailJson" type="hidden" /> -->
  11. <el-table row-key="title" :data="detailList" border highlight-current-row>
  12. <el-table-column label="标题" prop="title" align="center">
  13. <template slot-scope="{row}">
  14. <el-input v-model="row.title" />
  15. </template>
  16. </el-table-column>
  17. <el-table-column label="跳转链接" prop="url" align="center">
  18. <template slot-scope="{row}">
  19. <el-input v-model="row.url" />
  20. </template>
  21. </el-table-column>
  22. <el-table-column label="图片链接" prop="picUrl" align="center">
  23. <template slot-scope="{row}">
  24. <el-input v-model="row.picUrl" />
  25. </template>
  26. </el-table-column>
  27. <el-table-column label="操作" align="center">
  28. <template slot-scope="{row}">
  29. <el-button size="mini" type="danger" @click="handleDelete(row)">删除</el-button>
  30. </template>
  31. </el-table-column>
  32. </el-table>
  33. <div class="detail-btn">
  34. <el-button type="primary" @click="handleCreate">添加</el-button>
  35. </div>
  36. </el-form-item>
  37. <el-form-item>
  38. <el-button type="primary" @click="onSubmit('weChatArticleFrom')">提交</el-button>
  39. <el-button v-if="!isEdit" type="info" @click="resetForm('weChatArticleFrom')">重置</el-button>
  40. <el-button @click="goBack">返回</el-button>
  41. </el-form-item>
  42. </el-form>
  43. </el-card>
  44. </div>
  45. </template>
  46. <script>
  47. import { getArticle, updateArticle, createArticle } from '@/api/wechat/article'
  48. const defaultArticle = {
  49. id: 0,
  50. title: '',
  51. detailJson: '',
  52. type: ''
  53. }
  54. const defaultDetail = {
  55. id: 0,
  56. title: '',
  57. url: '',
  58. picUrl: ''
  59. }
  60. export default {
  61. name: 'WeChatArticleForm',
  62. props: {
  63. // type 类型: 1采美,2呵呵商城
  64. type: {
  65. type: Number,
  66. default: 0
  67. }
  68. },
  69. data() {
  70. return {
  71. rules: {
  72. title: [{ required: true, message: '标题不能为空', trigger: 'blur' }]
  73. },
  74. article: Object.assign({}, defaultArticle),
  75. detailList: [],
  76. isEdit: false
  77. }
  78. },
  79. watch: {
  80. $route(route) {
  81. this.getFormData()
  82. }
  83. },
  84. created() {
  85. this.getFormData()
  86. },
  87. methods: {
  88. goBack() {
  89. // 调用全局挂载的方法,关闭当前标签页
  90. this.$store.dispatch('tagsView/delView', this.$route)
  91. // 返回上一步路由,返回上一个标签页
  92. this.$router.go(-1)
  93. },
  94. getFormData() {
  95. if (this.$route.query.id) {
  96. this.article.id = this.$route.query.id
  97. this.isEdit = true
  98. getArticle(this.article.id).then(response => {
  99. this.article.title = response.data.title
  100. this.detailList = response.data.detailList
  101. })
  102. } else {
  103. this.article.id = ''
  104. this.isEdit = false
  105. this.article = Object.assign({}, defaultArticle)
  106. }
  107. this.article.type = this.type
  108. },
  109. resetForm(formName) {
  110. this.$refs[formName].resetFields()
  111. this.article = Object.assign({}, defaultArticle)
  112. this.getFormData()
  113. },
  114. onSubmit(formName) {
  115. this.article.detailJson = JSON.stringify(this.detailList)
  116. this.$refs[formName].validate(valid => {
  117. console.log(this.article)
  118. if (valid) {
  119. this.$confirm('是否提交数据', '提示', {
  120. confirmButtonArticle: '确定',
  121. cancelButtonArticle: '取消',
  122. type: 'warning'
  123. }).then(() => {
  124. const self = this
  125. if (this.isEdit) {
  126. updateArticle(this.$route.query.id, this.article).then(response => {
  127. this.$message({
  128. message: '修改成功',
  129. type: 'success',
  130. duration: 1000
  131. })
  132. self.goBack()
  133. })
  134. } else {
  135. createArticle(this.article).then(response => {
  136. this.$refs[formName].resetFields()
  137. this.resetForm(formName)
  138. this.$message({
  139. message: '提交成功',
  140. type: 'success',
  141. duration: 1000
  142. })
  143. self.goBack()
  144. })
  145. }
  146. })
  147. } else {
  148. this.$message({
  149. message: '验证失败',
  150. type: 'error',
  151. duration: 1000
  152. })
  153. return false
  154. }
  155. })
  156. },
  157. handleDelete(row) {
  158. const temp = this.detailList
  159. const newList = []
  160. temp.forEach(item => {
  161. if (item.id !== row.id) {
  162. newList.push(item)
  163. }
  164. })
  165. this.detailList = newList
  166. },
  167. handleCreate() {
  168. this.detailList.push(Object.assign({}, defaultDetail))
  169. }
  170. }
  171. }
  172. </script>
  173. <style scoped>
  174. .form-container{
  175. width:1000px;
  176. }
  177. .detail-btn{
  178. text-align: center;
  179. padding:15px 0;
  180. border-bottom: 1px solid #e6ebf5;
  181. }
  182. </style>