newsInfo-detail.vue 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. <template>
  2. <el-dialog
  3. :visible.sync="showDialog"
  4. :title="title"
  5. :modal-append-to-body="false"
  6. style="text-align: left;"
  7. @close="closeDialog"
  8. :close-on-click-modal="false"
  9. width="900px"
  10. >
  11. <div class="user-panel" v-loading="loading">
  12. <el-form
  13. ref="form"
  14. :model="formModel"
  15. :rules="ruleValidate"
  16. :label-width="'100px'"
  17. >
  18. <el-form-item label="标题" prop="title">
  19. <el-input v-model="formModel.title" placeholder="请输入新闻标题" style="width: 300px"></el-input>
  20. </el-form-item>
  21. <el-form-item label="类型" prop="category">
  22. <el-select v-model="formModel.category" filterable placeholder="请选择" clearable style="width:300px;">
  23. <el-option
  24. v-for="result in categoryList"
  25. :key="result.id"
  26. :label="result.name"
  27. :value="result.value"
  28. ></el-option>
  29. </el-select>
  30. </el-form-item>
  31. <el-form-item label="缩略图" prop="thumbnailImage">
  32. <el-upload
  33. style="width:300px"
  34. class="avatar-uploader"
  35. name="photoFile"
  36. :action="uploadUrl"
  37. :headers="headers"
  38. :data="uploadData"
  39. :show-file-list="false"
  40. :on-success="handleAvatarSuccess"
  41. :before-upload="beforeAvatarUpload">
  42. <img v-if="fileUrl" :src="fileUrl" class="avatar">
  43. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  44. </el-upload>
  45. </el-form-item>
  46. <el-form-item label="新闻内容" prop="content">
  47. <mce-editor
  48. ref="editor"
  49. uploadName="upfile"
  50. v-model="formModel.content"
  51. :url="uploadUrl1"
  52. :config="editorConfig"
  53. style="width: 90%"
  54. ></mce-editor>
  55. </el-form-item>
  56. </el-form>
  57. </div>
  58. <span slot="footer" class="dialog-footer">
  59. <el-button @click="closeDialog">取 消</el-button>
  60. <el-button type="primary" @click="handleSubmit" :loading="submitting"
  61. >确 定</el-button
  62. >
  63. </span>
  64. </el-dialog>
  65. </template>
  66. <script>
  67. import Constant from "@/constant";
  68. import { getToken } from "@/utils/auth"; // get token from cookie
  69. import newsInfoApi from "@/api/base/newsInfo";
  70. import MceEditor from "@/components/Tinymce";
  71. import dataDictionaryApi from "@/api/sys/dataDictionary";
  72. export default {
  73. props: ["businessKey", "title"],
  74. data() {
  75. return {
  76. showPwd: true,
  77. ruleValidate: {
  78. title: [
  79. { required: true, message: "标题不能为空", trigger: "blur" },
  80. ],
  81. category: [
  82. { required: true, message: "类型不能为空", trigger: "blur" },
  83. ],
  84. },
  85. roleList: [],
  86. formModel: {},
  87. showDialog: true,
  88. loading: false,
  89. submitting: false,
  90. companyProps: {
  91. value: "id",
  92. label: "name",
  93. },
  94. categoryList:[],
  95. //上传地址
  96. uploadUrl: Constant.serverUrl + "/uploadPicture",
  97. uploadData: {
  98. subFolder: "temporary-workers",
  99. },
  100. fileUrl: "",
  101. headers: {
  102. Authorization: getToken(),
  103. },
  104. uploadUrl1: Constant.serverUrl + "/tinymce/upload?token=" + getToken(),
  105. editorConfig: {
  106. height: 300,
  107. width: 660,
  108. },
  109. };
  110. },
  111. created() {
  112. dataDictionaryApi.findByCatalogName({catalogName: "新闻类型",})
  113. .then((response) => {
  114. var jsonData = response.data;
  115. this.categoryList = jsonData.data;
  116. });
  117. },
  118. methods: {
  119. closeDialog() {
  120. this.$emit("close", false);
  121. },
  122. handleSubmit() {
  123. var self = this;
  124. this.$refs["form"].validate((valid) => {
  125. if (valid) {
  126. (function () {
  127. var id = self.formModel.id;
  128. if (id == null || id.length == 0) {
  129. return newsInfoApi.add(self.formModel);
  130. } else {
  131. return newsInfoApi.update(self.formModel);
  132. }
  133. })().then(function (response) {
  134. var jsonData = response.data;
  135. if (jsonData.result) {
  136. self.$message({
  137. message: "保存成功!",
  138. type: "success",
  139. });
  140. self.$emit("close", true);
  141. } else {
  142. self.$message({
  143. message: jsonData.message + "",
  144. type: "warning",
  145. });
  146. self.$emit("close", false);
  147. }
  148. });
  149. }
  150. });
  151. },
  152. handleAvatarSuccess(res, file) {
  153. var self = this;
  154. self.formModel.thumbnailImage = res.data;
  155. self.fileUrl =
  156. res.data + "?x-oss-process=image/resize,m_lfit,h_300,w_300";
  157. },
  158. beforeAvatarUpload(file) {
  159. const isJPG = file.type === 'image/jpeg';
  160. const isLt2M = file.size / 1024 / 1024 < 2;
  161. // if (!isJPG) {
  162. // this.$message.error('上传头像图片只能是 JPG 格式!');
  163. // }
  164. if (!isLt2M) {
  165. this.$message.error('上传头像图片大小不能超过 2MB!');
  166. }
  167. return isJPG && isLt2M;
  168. }
  169. },
  170. async mounted() {
  171. var self = this;
  172. self.loading = true;
  173. (function () {
  174. if (self.businessKey != null && self.businessKey.length > 0) {
  175. return newsInfoApi.edit(self.businessKey);
  176. } else {
  177. return newsInfoApi.create();
  178. }
  179. })()
  180. .then((response) => {
  181. var jsonData = response.data;
  182. if (jsonData.result) {
  183. self.formModel = jsonData.data;
  184. let thumbnailImage = self.formModel.thumbnailImage;
  185. if (thumbnailImage != null) {
  186. self.fileUrl = thumbnailImage
  187. }
  188. if (self.formModel.content != null) {
  189. self.$refs.editor.setContent(self.formModel.content);
  190. }
  191. self.showModal = true;
  192. } else {
  193. self.$message.error(jsonData.message + "");
  194. }
  195. self.loading = false;
  196. })
  197. .catch((error) => {
  198. self.$message.error(error + "");
  199. self.loading = false;
  200. });
  201. },
  202. components: {
  203. "mce-editor": MceEditor,
  204. },
  205. };
  206. </script>
  207. <style scoped>
  208. .user-panel {
  209. margin: 10px auto;
  210. }
  211. .avatar-uploader .el-upload {
  212. border: 1px dashed #d9d9d9;
  213. border-radius: 6px;
  214. cursor: pointer;
  215. position: relative;
  216. overflow: hidden;
  217. }
  218. .avatar-uploader .el-upload:hover {
  219. border-color: #409EFF;
  220. }
  221. .avatar-uploader-icon {
  222. font-size: 28px;
  223. color: #8c939d;
  224. width: 178px;
  225. height: 178px;
  226. line-height: 178px;
  227. text-align: center;
  228. }
  229. .avatar {
  230. width: 178px;
  231. height: 178px;
  232. display: block;
  233. }
  234. </style>