edit.vue 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. <template>
  2. <div>
  3. <el-form ref="form" v-loading="loading" :model="form" :rules="fileAddRules" label-width="120px">
  4. <el-form-item label="标题:" prop="title">
  5. <el-input v-model="form.title" />
  6. </el-form-item>
  7. <el-form-item v-if="type === 3" label="文件路径:" prop="archiveFiles">
  8. <file-upload
  9. :limit="20"
  10. :is-check="false"
  11. :list="fileList"
  12. :accept="'.docx,.pptx,.pdf'"
  13. :tip="'支持上传pdf、docx、pptx文件格式'"
  14. @change-loading="() => (loading = !loading)"
  15. @success="UploadSuccess($event)"
  16. @remove="HandleRemove($event)"
  17. />
  18. </el-form-item>
  19. <el-form-item v-if="type === 2" label="视频路径:" prop="archiveFiles">
  20. <file-upload
  21. :limit="20"
  22. :is-check="false"
  23. :list="fileList"
  24. :accept="'.mp4'"
  25. :tip="'支持上传.mp4文件格式'"
  26. @change-loading="() => (loading = !loading)"
  27. @success="UploadSuccess($event)"
  28. @remove="HandleRemove($event)"
  29. />
  30. </el-form-item>
  31. <el-form-item v-if="type === 1" label="图片路径:" prop="archiveFiles">
  32. <image-upload
  33. :limit="6"
  34. :image-list="fileList"
  35. @success="handleImageSuccess($event, 'textRelateds')"
  36. @remove="handleImageRemove($event, 'textRelateds')"
  37. />
  38. </el-form-item>
  39. <el-form-item v-if="type === 4" label="文本内容:" prop="content">
  40. <editor-input v-model="form.content" />
  41. </el-form-item>
  42. <el-form-item v-if="type === 5" label="话术内容:" prop="content">
  43. <el-input
  44. v-model="form.content"
  45. type="textarea"
  46. :autosize="{ minRows: 2, maxRows: 4}"
  47. placeholder="请输入内容"
  48. />
  49. </el-form-item>
  50. <el-form-item label="用户阶段:" prop="stageStatus">
  51. <el-select v-model="form.stageStatus" placeholder="用户阶段">
  52. <el-option
  53. v-for="(i, index) in userClass"
  54. :key="index"
  55. :label="i.value"
  56. :value="i.id"
  57. />
  58. </el-select>
  59. </el-form-item>
  60. <el-form-item label="标签:" prop="labelIds">
  61. <data-select :label-ids="labelIds" @handle-emit="handleSelect" />
  62. </el-form-item>
  63. <el-form-item>
  64. <el-button type="primary" @click="submitForm('form')">提交</el-button>
  65. <el-button @click="$router.back()">返回</el-button>
  66. </el-form-item>
  67. </el-form>
  68. </div>
  69. </template>
  70. <script>
  71. import ImageUpload from '@/components/UploadImage/index.vue'
  72. import FileUpload from '../../components/UploadFile.vue'
  73. import databaseMixin from '../../mixins/index'
  74. import EditorInput from '@/components/Editor/index.vue'
  75. import dataSelect from '../../components/data-select.vue'
  76. import { addContext, getContextDetail } from '@/api/contentLibrary/context'
  77. export default {
  78. components: {
  79. ImageUpload,
  80. FileUpload,
  81. EditorInput,
  82. dataSelect
  83. },
  84. mixins: [databaseMixin],
  85. data() {
  86. return {
  87. form: {
  88. stageStatus: '',
  89. productArchiveId: 0,
  90. archiveFiles: [],
  91. labelIds: '123'
  92. },
  93. fileList: [],
  94. labelIds: [],
  95. loading: false,
  96. fileAddRules: {
  97. stageStatus: [
  98. {
  99. required: true,
  100. message: '选择用户阶段',
  101. trigger: 'blur'
  102. }
  103. ],
  104. archiveFiles: [
  105. {
  106. required: true,
  107. message: '请上传文件',
  108. trigger: 'change'
  109. }
  110. ],
  111. title: [
  112. {
  113. required: true,
  114. message: '请输入标题',
  115. trigger: 'blur'
  116. }
  117. ],
  118. labelIds: [
  119. {
  120. required: true,
  121. message: '请选择标签',
  122. trigger: 'blur'
  123. }
  124. ]
  125. }
  126. }
  127. },
  128. mounted() {
  129. if (this.tId) {
  130. this.getContextDetail()
  131. }
  132. },
  133. methods: {
  134. async getContextDetail() {
  135. const { data } = await getContextDetail({ id: this.tId })
  136. this.form = data
  137. const isArray = (a) => a?.indexOf(',') !== -1
  138. const k = isArray(data.keywords) ? data.keywords?.split(',') : [data.keywords]
  139. const v = isArray(data.labelIds) ? data.labelIds?.split(',') : [data.labelIds]
  140. this.labelIds = k?.map((e, i) => ({
  141. id: v[i],
  142. keyword: e
  143. }))
  144. this.fileList = data.type !== '1' ? data.archiveFiles : data.archiveFiles.map(e => ({
  145. uid: e.id,
  146. url: e.ossUrl,
  147. name: e.id,
  148. response: {
  149. data: e.ossUrl
  150. }
  151. }))
  152. console.log(this.labelIds)
  153. },
  154. HandleRemove(file) {
  155. console.log(file)
  156. this.form.archiveFiles = file.fileList
  157. },
  158. UploadSuccess(file) {
  159. console.log(file)
  160. this.form.archiveFiles = file.fileList
  161. },
  162. handleImageSuccess(file) {
  163. console.log(file)
  164. this.form.archiveFiles = file.fileList.map(e => ({
  165. ossUrl: e.response.data,
  166. fileName: e.name,
  167. ossName: e.name
  168. }))
  169. },
  170. handleImageRemove(file) {
  171. this.form.archiveFiles = file.fileList.map(e => ({
  172. ossUrl: e.response.data,
  173. fileName: e.name,
  174. ossName: e.name
  175. }))
  176. },
  177. submitForm(form) {
  178. this.$refs[form].validate(async valid => {
  179. if (valid) {
  180. try {
  181. console.log(this.form.content)
  182. const form = {
  183. stageStatus: this.form.stageStatus.toString(),
  184. type: this.type.toString(),
  185. archiveFiles: this.form.archiveFiles || [],
  186. productArchiveId: this.id,
  187. labelIds: this.form.labelIds,
  188. createBy: this.fullName,
  189. title: this.form.title,
  190. id: this.form.id || '',
  191. content: this.form.content || ''
  192. }
  193. const data = await addContext(form)
  194. if (data.code === 0) {
  195. this.$router.back()
  196. } else {
  197. this.$message({
  198. type: 'error',
  199. message: data.msg
  200. })
  201. }
  202. } catch (error) {
  203. console.error(error)
  204. }
  205. }
  206. })
  207. },
  208. handleSelect(val) {
  209. console.log(val, '标签')
  210. this.form.labelIds = val.map(e => e.id).join(',')
  211. console.log(this.form.labelIds)
  212. }
  213. }
  214. }
  215. </script>
  216. <style lang="scss" scoped>
  217. ::v-deep .el-input,
  218. ::v-deep .el-textarea__inner {
  219. width: 500px;
  220. }
  221. ::v-deep .el-form {
  222. width: 650px;
  223. margin: 20px auto;
  224. }
  225. </style>