trainingInfo-detail.vue 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  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="enterpriseId">
  22. <el-select
  23. v-model="formModel.enterpriseId"
  24. placeholder="请选择"
  25. style="width: 300px"
  26. clearable
  27. >
  28. <el-option
  29. v-for="item in enterpriseList"
  30. :key="item.id"
  31. :label="item.name"
  32. :value="item.id"
  33. ></el-option>
  34. </el-select>
  35. </el-form-item>
  36. <el-form-item label="名称" prop="name">
  37. <el-input v-model="formModel.name" placeholder="请输入名称" style="width: 300px"></el-input>
  38. </el-form-item>
  39. <el-form-item label="报名结束时间" prop="endTime">
  40. <el-date-picker
  41. style="width: 300px"
  42. v-model="formModel.endTime"
  43. type="date"
  44. placeholder="选择日期"
  45. value-format="yyyy-MM-dd"
  46. format="yyyy-MM-dd">
  47. </el-date-picker>
  48. </el-form-item>
  49. <el-form-item label="缩略图" prop="thumbnailImage">
  50. <el-upload
  51. style="width:300px"
  52. class="avatar-uploader"
  53. name="photoFile"
  54. :action="uploadUrl"
  55. :headers="headers"
  56. :data="uploadData"
  57. :show-file-list="false"
  58. :on-success="handleAvatarSuccess"
  59. :before-upload="beforeAvatarUpload">
  60. <img v-if="fileUrl" :src="fileUrl" class="avatar">
  61. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  62. </el-upload>
  63. </el-form-item>
  64. <el-form-item label="内容" prop="content">
  65. <mce-editor
  66. ref="editor"
  67. uploadName="upfile"
  68. v-model="formModel.content"
  69. :url="uploadUrl1"
  70. :config="editorConfig"
  71. style="width: 90%"
  72. ></mce-editor>
  73. </el-form-item>
  74. <el-form-item label="上传附件" prop="file">
  75. <el-upload
  76. class="upload-demo"
  77. name="photoFile"
  78. :action="uploadUrl2"
  79. :headers="headers"
  80. :data="uploadData2"
  81. :on-preview="handlePreview"
  82. :on-remove="handleRemove"
  83. :before-remove="beforeRemove"
  84. :on-success="handleAvatarSuccess1"
  85. multiple
  86. :limit="3"
  87. :on-exceed="handleExceed"
  88. :file-list="fileList">
  89. <el-button size="small" type="primary">点击上传</el-button>
  90. <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
  91. </el-upload>
  92. </el-form-item>
  93. </el-form>
  94. </div>
  95. <span slot="footer" class="dialog-footer">
  96. <el-button @click="closeDialog">取 消</el-button>
  97. <el-button type="primary" @click="handleSubmit" :loading="submitting"
  98. >确 定</el-button
  99. >
  100. </span>
  101. </el-dialog>
  102. </template>
  103. <script>
  104. import Constant from "@/constant";
  105. import { getToken } from "@/utils/auth"; // get token from cookie
  106. import trainingInfoApi from "@/api/base/trainingInfo";
  107. import MceEditor from "@/components/Tinymce";
  108. import dataDictionaryApi from "@/api/sys/dataDictionary";
  109. import enterpriseInfoApi from "@/api/base/enterpriseInfo";
  110. export default {
  111. props: ["businessKey", "title"],
  112. data() {
  113. return {
  114. showPwd: true,
  115. ruleValidate: {
  116. title: [
  117. { required: true, message: "标题不能为空", trigger: "blur" },
  118. ],
  119. author: [
  120. { required: true, message: "作者不能为空", trigger: "blur" },
  121. ],
  122. type: [
  123. { required: true, message: "类型不能为空", trigger: "blur" },
  124. ],
  125. },
  126. roleList: [],
  127. formModel: {},
  128. showDialog: true,
  129. loading: false,
  130. submitting: false,
  131. companyProps: {
  132. value: "id",
  133. label: "name",
  134. },
  135. typeList:[],
  136. enterpriseList:[],
  137. //上传地址
  138. uploadUrl: Constant.serverUrl + "/uploadPicture",
  139. uploadData: {
  140. subFolder: "temporary-workers",
  141. },
  142. fileUrl: "",
  143. headers: {
  144. Authorization: getToken(),
  145. },
  146. uploadUrl1: Constant.serverUrl + "/tinymce/upload?token=" + getToken(),
  147. editorConfig: {
  148. height: 300,
  149. width: 660,
  150. },
  151. fileList:[],
  152. uploadUrl2: Constant.serverUrl + "/uploadFile",
  153. uploadData2: {
  154. subFolder: "temporary-workers",
  155. },
  156. };
  157. },
  158. created() {
  159. var self = this;
  160. dataDictionaryApi.findByCatalogName({catalogName: "共享用工类型",})
  161. .then((response) => {
  162. var jsonData = response.data;
  163. self.typeList = jsonData.data;
  164. });
  165. enterpriseInfoApi.list().then(function (response) {
  166. var jsonData = response.data;
  167. if (jsonData.result) {
  168. if (jsonData.data != null && jsonData.data != "") {
  169. self.enterpriseList = jsonData.data;
  170. }
  171. }
  172. });
  173. },
  174. methods: {
  175. closeDialog() {
  176. this.$emit("close", false);
  177. },
  178. handleSubmit() {
  179. var self = this;
  180. this.$refs["form"].validate((valid) => {
  181. if (valid) {
  182. (function () {
  183. var id = self.formModel.id;
  184. self.formModel.fileList = self.fileList
  185. //alert(self.fileList);
  186. if (id == null || id.length == 0) {
  187. return trainingInfoApi.add(self.formModel);
  188. } else {
  189. return trainingInfoApi.update(self.formModel);
  190. }
  191. })().then(function (response) {
  192. var jsonData = response.data;
  193. if (jsonData.result) {
  194. self.$message({
  195. message: "保存成功!",
  196. type: "success",
  197. });
  198. self.$emit("close", true);
  199. } else {
  200. self.$message({
  201. message: jsonData.message + "",
  202. type: "warning",
  203. });
  204. self.$emit("close", false);
  205. }
  206. });
  207. }
  208. });
  209. },
  210. handleAvatarSuccess(res, file) {
  211. var self = this;
  212. self.formModel.thumbnailImage = res.data;
  213. self.fileUrl =
  214. res.data + "?x-oss-process=image/resize,m_lfit,h_300,w_300";
  215. },
  216. beforeAvatarUpload(file) {
  217. const isLt2M = file.size / 1024 / 1024 < 2;
  218. if (!isLt2M) {
  219. this.$message.error('上传头像图片大小不能超过 2MB!');
  220. }
  221. return isLt2M;
  222. },
  223. handleAvatarSuccess1(res, file) {
  224. var self = this;
  225. self.fileList.push(res.data);
  226. },
  227. handleRemove(file, fileList) {
  228. this.fileList = fileList
  229. console.log(file, fileList);
  230. },
  231. handlePreview(file) {
  232. console.log(file);
  233. },
  234. handleExceed(files, fileList) {
  235. this.$message.warning(`当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
  236. },
  237. beforeRemove(file, fileList) {
  238. return this.$confirm(`确定移除 ${ file.name }?`);
  239. }
  240. },
  241. async mounted() {
  242. var self = this;
  243. self.loading = true;
  244. (function () {
  245. if (self.businessKey != null && self.businessKey.length > 0) {
  246. return trainingInfoApi.edit(self.businessKey);
  247. } else {
  248. return trainingInfoApi.create();
  249. }
  250. })()
  251. .then((response) => {
  252. var jsonData = response.data;
  253. if (jsonData.result) {
  254. self.formModel = jsonData.data;
  255. if (self.formModel.content != null) {
  256. self.$refs.editor.setContent(self.formModel.content);
  257. }
  258. let thumbnailImage = self.formModel.thumbnailImage;
  259. if (thumbnailImage != null) {
  260. self.fileUrl = thumbnailImage
  261. }
  262. self.fileList = self.formModel.fileList
  263. self.showModal = true;
  264. } else {
  265. self.$message.error(jsonData.message + "");
  266. }
  267. self.loading = false;
  268. })
  269. .catch((error) => {
  270. self.$message.error(error + "");
  271. self.loading = false;
  272. });
  273. },
  274. components: {
  275. "mce-editor": MceEditor,
  276. },
  277. };
  278. </script>
  279. <style scoped>
  280. .user-panel {
  281. margin: 10px auto;
  282. }
  283. .avatar-uploader .el-upload {
  284. border: 1px dashed #d9d9d9;
  285. border-radius: 6px;
  286. cursor: pointer;
  287. position: relative;
  288. overflow: hidden;
  289. }
  290. .avatar-uploader .el-upload:hover {
  291. border-color: #409EFF;
  292. }
  293. .avatar-uploader-icon {
  294. font-size: 28px;
  295. color: #8c939d;
  296. width: 178px;
  297. height: 178px;
  298. line-height: 178px;
  299. text-align: center;
  300. }
  301. .avatar {
  302. width: 178px;
  303. height: 178px;
  304. display: block;
  305. }
  306. </style>