userCenterAddMyPeriodical.vue 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527
  1. <template>
  2. <div style="width: 100%;background: #fff;min-height: 700px;" class="userCenterAuthenticationPersonal">
  3. <div v-show="$i18n.locale == 'zh'" style="height: 80px;line-height: 80px;margin-top: 20px;margin: 0 20px; color: #666;font-size: 15px; border-bottom: 1px solid #bcbcbc;">
  4. 添加期刊
  5. </div>
  6. <div v-show="$i18n.locale == 'zh'" style="width: 600px;" >
  7. <el-form ref="form1" :model="infoJournalView" label-width="160px" class="demo-ruleForm" style="margin-top: 20px;width: 1200px;" :rules="chineseFormRules">
  8. <el-form-item label="期刊名称:" prop='name'>
  9. <el-input v-model="infoJournalView.name" placeholder="请输入期刊名称" :disabled="disableDet" maxlength="100" show-word-limit style="width: 70%;"></el-input>
  10. </el-form-item>
  11. <!-- <el-form-item label="期刊类型:" prop='typeDict'>
  12. <el-select v-model="infoJournalView.typeDict" placeholder="请选择期刊类型" :disabled="disableDet" style="width: 30%;">
  13. <el-option
  14. v-for="item in allJournalClassification"
  15. :key="item.value"
  16. :label="item.label"
  17. :value="item.value"
  18. :disabled="disableDet">
  19. </el-option>
  20. </el-select>
  21. </el-form-item> -->
  22. <el-form-item label="作者:" >
  23. <el-input v-model="infoJournalView.author" placeholder="请输入作者" :disabled="disableDet" style="width: 70%;" maxlength="100" show-word-limit></el-input>
  24. </el-form-item>
  25. <el-form-item :required="true" label="语言:" prop='languageDict'>
  26. <el-select v-model="infoJournalView.languageDict" placeholder="请选择语言" :disabled="disableDet" style="width: 30%;">
  27. <el-option
  28. v-for="item in jouralLanguageDicts"
  29. :key="item.value"
  30. :label="item.label"
  31. :value="item.value"
  32. :disabled="false">
  33. </el-option>
  34. </el-select>
  35. </el-form-item>
  36. <el-form-item label="年份:" prop='year'>
  37. <el-input v-model="infoJournalView.year" placeholder="请输入年份" :disabled="disableDet" style="width: 30%;" maxlength="50" show-word-limit></el-input>
  38. </el-form-item>
  39. <el-form-item label="期次:" prop='period'>
  40. <el-input v-model="infoJournalView.period" placeholder="请输入期次" :disabled="disableDet" style="width: 30%;" maxlength="50" show-word-limit></el-input>
  41. </el-form-item>
  42. <!-- <el-form-item label="主题:" prop='topic'>
  43. <el-input v-model="infoJournalView.topic" :disabled="disableDet" style="width: 70%;" maxlength="100" show-word-limit></el-input>
  44. </el-form-item> -->
  45. <el-form-item label="出版单位:" >
  46. <el-input v-model="infoJournalView.publisher" placeholder="请输入出版单位" :disabled="disableDet" style="width: 70%;" maxlength="100" show-word-limit></el-input>
  47. </el-form-item>
  48. <el-form-item label="阅读链接:" prop='link'>
  49. <el-input v-model="infoJournalView.link" placeholder="请输入阅读链接" :disabled="disableDet" style="width: 70%;" maxlength="100" show-word-limit></el-input>
  50. </el-form-item>
  51. <el-form-item label="期刊摘要:">
  52. <el-input type="textarea" :rows="10" v-model="infoJournalView.abstractPoint" placeholder="请输入期刊摘要" :disabled="disableDet" style="width: 70%;min-height: 50px;" maxlength="5000" show-word-limit></el-input>
  53. </el-form-item>
  54. <!-- <el-form-item label="介绍:" prop='remark'>
  55. <el-input type="textarea" :rows="10" v-model="infoJournalView.remark" placeholder="请输入介绍" :disabled="false" style="width: 70%;min-height: 50px;" maxlength="500" show-word-limit></el-input>
  56. </el-form-item> -->
  57. <el-form-item label="期刊图片:" prop='pictureUrl'>
  58. <el-upload
  59. class="upload-demo"
  60. action="/api/file/upload/attachment?module=InfoJournal&attachmentBusinessType=infoJournal"
  61. :before-upload="beforeUploadCatalog"
  62. :show-file-list="false"
  63. :disabled="disableDet"
  64. :on-success="photoSuccess"
  65. :headers="myHeaders">
  66. <img v-if="infoJournalView.pictureUrl != ''" :src="'/api/file/pub/'+infoJournalView.pictureUrl" class="avatar">
  67. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  68. <div slot="tip" class="el-upload__tip" >{{$t('common.resourceHint')}}{{$t('common.resourceUploadJPGPNG')}},{{$t('common.resourceFilesCannotExceed10Mb')}},{{$t('common.resourceUploadOne')}}</div>
  69. </el-upload>
  70. </el-form-item>
  71. </el-form>
  72. </div>
  73. <div v-show="$i18n.locale == 'zh'" style="height: 200px;">
  74. <div style="margin-top: 100px;">
  75. <el-button v-if="!disableDet" type="warning" style="margin-left: 300px;" @click="save('form1')">保存</el-button>
  76. <el-button v-if="!disableDet" type="primary" style="margin-left: 30px;" @click="close">关闭</el-button>
  77. <el-button v-if="disableDet" type="primary" style="margin-left: 450px;" @click="close">关闭</el-button>
  78. </div>
  79. </div>
  80. <div v-if="dialogVisible && $i18n.locale == 'zh'">
  81. <userCenterAddTag v-bind:systemLabel="systemLabel" :mergeSelectedLabels="mergeSelectedLabels" @closeMain="closeMain"></userCenterAddTag>
  82. </div>
  83. <div v-show="$i18n.locale == 'en'" style="height: 80px;line-height: 80px;margin-top: 20px;margin: 0 20px; color: #666;font-size: 15px; border-bottom: 1px solid #bcbcbc;">
  84. Add Journal
  85. </div>
  86. <div v-show="$i18n.locale == 'en'" style="width: 600px;" >
  87. <el-form ref="form2" :model="infoJournalView" label-width="160px" class="demo-ruleForm" style="margin-top: 20px;width: 1200px;" :rules="englishFormRules">
  88. <el-form-item label="Journal Name:" prop='name'>
  89. <el-input v-model="infoJournalView.name" placeholder="Please enter the journal name" :disabled="disableDet" style="width: 70%;" maxlength="100" show-word-limit></el-input>
  90. </el-form-item>
  91. <!-- <el-form-item :required="true" label="Journal Type:" prop='typeDict'>
  92. <el-select v-model="infoJournalView.typeDict" placeholder="Please select journal type" :disabled="disableDet" style="width: 30%;">
  93. <el-option
  94. v-for="item in allJournalClassification"
  95. :key="item.value"
  96. :label="item.label"
  97. :value="item.value"
  98. :disabled="false">
  99. </el-option>
  100. </el-select>
  101. </el-form-item> -->
  102. <el-form-item label="Author:" prop='author' >
  103. <el-input v-model="infoJournalView.author" placeholder="Please enter the author" :disabled="disableDet" style="width: 70%; " maxlength="100" show-word-limit></el-input>
  104. </el-form-item>
  105. <el-form-item :required="true" label="Language:" prop='languageDict'>
  106. <el-select v-model="infoJournalView.languageDict" placeholder="Please select a language" :disabled="disableDet" style="width: 30%;">
  107. <el-option
  108. v-for="item in jouralLanguageDicts"
  109. :key="item.value"
  110. :label="item.label"
  111. :value="item.value"
  112. :disabled="false">
  113. </el-option>
  114. </el-select>
  115. </el-form-item>
  116. <el-form-item label="Year:" prop='year'>
  117. <el-input v-model="infoJournalView.year" placeholder="Please enter the year" :disabled="disableDet" style="width: 30%;" maxlength="50" show-word-limit></el-input>
  118. </el-form-item>
  119. <el-form-item label="Period:" prop='period'>
  120. <el-input v-model="infoJournalView.period" placeholder="Please enter the period" :disabled="disableDet" style="width: 30%;" maxlength="50" show-word-limit></el-input>
  121. </el-form-item>
  122. <!-- <el-form-item label="Topic:" prop='topic'>
  123. <el-input v-model="infoJournalView.topic" :disabled="disableDet" style="width: 70%;" maxlength="100" show-word-limit></el-input>
  124. </el-form-item> -->
  125. <el-form-item label="Publisher:" >
  126. <el-input v-model="infoJournalView.publisher" placeholder="Please enter the publisher" :disabled="disableDet" style="width: 70%;" maxlength="100" show-word-limit></el-input>
  127. </el-form-item>
  128. <el-form-item label="Link:" prop='link'>
  129. <el-input v-model="infoJournalView.link" placeholder="Please enter the link" :disabled="disableDet" style="width: 70%;" maxlength="100" show-word-limit></el-input>
  130. </el-form-item>
  131. <el-form-item label="Journal Summary:">
  132. <el-input type="textarea" :rows="10" v-model="infoJournalView.abstractPoint" placeholder="Please enter the journal summary" :disabled="false" style="width: 70%;min-height: 50px;" maxlength="5000" show-word-limit></el-input>
  133. </el-form-item>
  134. <!-- <el-form-item label="Remark:" prop='remark'>
  135. <el-input type="textarea" :rows="10" v-model="infoJournalView.remark" placeholder="Please Input Remark" :disabled="false" style="width: 70%;min-height: 50px;" maxlength="10000" show-word-limit></el-input>
  136. </el-form-item> -->
  137. <el-form-item label="Journal Map:" prop='pictureUrl'>
  138. <el-upload
  139. class="upload-demo"
  140. action="/api/file/upload/attachment?module=InfoJournal&attachmentBusinessType=infoJournal"
  141. :before-upload="beforeUploadCatalog"
  142. :show-file-list="false"
  143. :disabled="disableDet"
  144. :on-success="photoSuccess"
  145. :headers="myHeaders">
  146. <img v-if="infoJournalView.pictureUrl != ''" :src="'/api/file/pub/'+infoJournalView.pictureUrl" class="avatar">
  147. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  148. <div slot="tip" class="el-upload__tip" >{{$t('common.resourceHint')}}{{$t('common.resourceUploadJPGPNG')}},{{$t('common.resourceFilesCannotExceed10Mb')}},{{$t('common.resourceUploadOne')}}</div>
  149. </el-upload>
  150. </el-form-item>
  151. </el-form>
  152. </div>
  153. <div v-show="$i18n.locale == 'en'" style="height: 200px;">
  154. <div style="margin-top: 100px;">
  155. <el-button v-if="!disableDet" type="warning" style="margin-left: 300px;" @click="save('form2')">Save</el-button>
  156. <el-button v-if="!disableDet" type="primary" style="margin-left: 30px;" @click="close">Close</el-button>
  157. <el-button v-if="disableDet" type="primary" style="margin-left: 450px;" @click="close">Close</el-button>
  158. </div>
  159. </div>
  160. <div v-if="dialogVisible && $i18n.locale == 'en'">
  161. <userCenterAddTag v-bind:systemLabel="systemLabel" :mergeSelectedLabels="mergeSelectedLabels" @closeMain="closeMain"></userCenterAddTag>
  162. </div>
  163. </div>
  164. </template>
  165. <script>
  166. import { regionDataPlus } from 'element-china-area-data'
  167. import ue from '@/components/ue'
  168. import userCenterAddTag from './userCenterAddTag'
  169. import Base from "@/views/base/Base";
  170. import { getDicts } from "@/api/dict";
  171. import { getTreeByLanguagePortal,getAllCountryAndCity } from "@/api/operation/baseCityInformationDict";
  172. import { saveOrUpdate,getBaseProjectBizViewById} from "@/api/project/baseProjectInfo";
  173. import {getAllJournalClassificationByUserCenter, saveOrUpdateByUserCenter,getInfoDataByUserCenter} from "@/api/userCenter/myPeriodical";
  174. import { getToken ,resetToken} from '@/utils/auth';
  175. import { searchFiles } from '@/api/file';
  176. export default {
  177. name: 'userCenteraddMaintenanceJournalInformations',
  178. extends: Base,
  179. components: {
  180. ue,userCenterAddTag
  181. },
  182. data () {
  183. return {
  184. placehoders:'Please select',
  185. textareaMessaage:"",
  186. textareaMessaageEn:"",
  187. fileList:[],
  188. myHeaders: {Authorization: ('Bearer ' +getToken())},
  189. isCreateNewUser: [
  190. { label: "是", value: "Y"},
  191. { label: "否(只对合作组织公开)", value: "N" }
  192. ],
  193. isCreateNewUserEn: [
  194. { label: "Yes", value: "Y"},
  195. { label: "No (Visible only to GEIDCO)", value: "N" }
  196. ],
  197. informationsClass:'1',
  198. dialogVisible: false,
  199. ifDiaslog:'',
  200. title:'',
  201. options: regionDataPlus,
  202. selectedOptions: [],
  203. systemLabel:[],
  204. mergeSelectedLabels:[],
  205. infoJournalView: {
  206. pictureUrl:''
  207. },
  208. continentCountryDicts: [],
  209. unitCountryDicts: [],
  210. reserveOnes: [],
  211. technicalCategoriesDicts: [],
  212. technicalScopeDicts: [],
  213. phaseTypeDicts: [],
  214. languageDicts: [],
  215. imageUrl: '',
  216. form: {},
  217. files: [],
  218. imgList: [],
  219. path: "",
  220. allJournalClassification: [],
  221. jouralLanguageDicts: [],
  222. entityId:this.$route.query.key,
  223. disableDet: this.$route.query.disableDet ? this.$route.query.disableDet : false,
  224. }
  225. },
  226. watch: {
  227. // "baseProjectView.continentCountry"() {
  228. // this.continentCountryDicts.forEach((i) => {
  229. // if (this.baseProjectView.continentCountry == i.value) {
  230. // this.unitCountryDicts = i.data;
  231. // }
  232. // });
  233. // },
  234. // "baseProjectView.unitCountry"() {
  235. // this.unitCountryDicts.forEach((i) => {
  236. // if (this.baseProjectView.unitCountry == i.value) {
  237. // this.reserveOnes= i.data;
  238. // }
  239. // })
  240. // },
  241. '$i18n.locale'(){
  242. this.initData();
  243. // this.getBaseProject();
  244. }
  245. },
  246. mounted() {
  247. this.initData();
  248. },
  249. computed:{
  250. englishFormRules(){
  251. return{
  252. name: [
  253. { required: true, message: 'Please enter the journal name', trigger: 'change' },
  254. ],
  255. typeDict: [
  256. { required: true, message: 'Please enter the journal type', trigger: 'change' },
  257. ],
  258. languageDict: [
  259. { required: true, message: 'Please select a language', trigger: 'change' },
  260. ],
  261. year: [
  262. { required: true, message: 'Please enter the year', trigger: 'change' },
  263. ],
  264. period: [
  265. { required: true, message: 'Please enter the period', trigger: 'change' },
  266. ],
  267. // topic: [
  268. // { required: true, message: 'Please Input Topic', trigger: 'change' },
  269. // ],
  270. link: [
  271. { required: true, message: 'Please enter the link', trigger: 'change' },
  272. ],
  273. pictureUrl: [
  274. { required: true, message: 'Please upload picture', trigger: 'change' },
  275. ]
  276. }
  277. },
  278. chineseFormRules(){
  279. return{
  280. name: [
  281. { required: true, message: '请输入期刊名称', trigger: 'change' },
  282. ],
  283. typeDict: [
  284. { required: true, message: '请输入期刊类型', trigger: 'change' },
  285. ],
  286. languageDict: [
  287. { required: true, message: '请选择语言', trigger: 'change' },
  288. ],
  289. year: [
  290. { required: true, message: '请输入年份', trigger: 'change' },
  291. ],
  292. period: [
  293. { required: true, message: '请输入期次', trigger: 'change' },
  294. ],
  295. // topic: [
  296. // { required: true, message: '请输入主题', trigger: 'change' },
  297. // ],
  298. link: [
  299. { required: true, message: '请输入阅读链接', trigger: 'change' },
  300. ],
  301. pictureUrl: [
  302. { required: true, message: '请上传图片', trigger: 'change' },
  303. ]
  304. }
  305. },
  306. },
  307. methods:{
  308. initData(){
  309. if (this.entityId) {
  310. var params = {
  311. id : this.entityId
  312. }
  313. getInfoDataByUserCenter(params).then(result => {
  314. this.infoJournalView = result.data.infoJournal
  315. });
  316. }
  317. var parms = {
  318. languageDict: ""
  319. };
  320. parms.languageDict = this.$i18n.locale.toUpperCase();
  321. getAllJournalClassificationByUserCenter(parms).then(result => {
  322. this.allJournalClassification = result.data.allJournalClassification
  323. });
  324. if (this.$i18n.locale.toUpperCase() == 'ZH') {
  325. getDicts(
  326. "JOURNAL_LANGUAGE_DICT"
  327. ).then(result => {
  328. var data = result.data;
  329. if (data) {
  330. this.jouralLanguageDicts = result.data[0] || [];
  331. }
  332. });
  333. }
  334. if (this.$i18n.locale.toUpperCase() == 'EN') {
  335. var languageDict = [
  336. {
  337. label: "Chinese",
  338. value: "ZH"
  339. },
  340. {
  341. label: "English",
  342. value: "EN"
  343. }
  344. ]
  345. this.jouralLanguageDicts = []
  346. this.jouralLanguageDicts = languageDict;
  347. getDicts("").then(result => {
  348. });
  349. }
  350. },
  351. // 下载文件方法file参数为已上传文件的信息,其实就是取得fileList里的值
  352. handlePreview(file, fileList) {
  353. document.location.href = 'http://localhost:8080/api/file/pub/'+file.url
  354. },
  355. handleRemove(file, fileList) {
  356. this.files.forEach((i) => {
  357. if (i == file.uid) {
  358. var index = this.files.indexOf(i);
  359. this.files.splice(index, 1);
  360. }
  361. })
  362. },
  363. handleAvatarSuccessAnnex(res, file) {
  364. this.files.push(res.data.attachmentId);
  365. },
  366. beforeUploadCatalog(file) {
  367. },
  368. save: function (formName) {
  369. this.$refs[formName].validate((valid) => {
  370. if (valid) {
  371. this.infoJournalView.languageDict = this.$i18n.locale.toUpperCase();
  372. this.infoJournalView.updateDate = new Date();
  373. let token = getToken();
  374. this.submitHandler(token => {
  375. saveOrUpdateByUserCenter(
  376. JSON.stringify(this.infoJournalView),
  377. token
  378. )
  379. .then(result => {
  380. if (this.$i18n.locale.toUpperCase() == 'ZH') {
  381. alert("期刊保存成功");
  382. } else {
  383. alert("Periodical saved successfully");
  384. }
  385. this.baseProjectView = {};
  386. this.$router.go(-1);//返回上一层
  387. })
  388. .catch(error => {
  389. // 此处你的业务代码
  390. this.resetToken();
  391. });
  392. });
  393. }else{
  394. if (this.$i18n.locale.toUpperCase() == 'ZH') {
  395. this.$notify.error({
  396. title: '保存失败',
  397. message: '请填写必填项'
  398. });
  399. } else {
  400. this.$notify.error({
  401. title: 'Error',
  402. message: 'Please fill in the required fields'
  403. });
  404. }
  405. return false;
  406. }
  407. });
  408. },
  409. close(){
  410. this.$router.go(-1);
  411. },
  412. closeMain(val){
  413. this.mergeSelectedLabels = [];
  414. val.forEach((element,index) => {
  415. this.mergeSelectedLabels.push(element.label)
  416. });
  417. this.systemLabel=val;
  418. this.baseProjectView.projectLabel = JSON.stringify(this.mergeSelectedLabels).replace(/\[|]/g,'').replace(/\"/g, "");;
  419. this.dialogVisible=false;
  420. },
  421. goAithentication(num){
  422. this.$router.go(-1);//返回上一层
  423. },
  424. handleChange (file, fileList) {
  425. this.fileList = fileList.slice(-3);
  426. },
  427. photoSuccess(res, file) {
  428. this.infoJournalView.pictureUrl = res.data.path
  429. this.imgList.push(res.data.attachmentId)
  430. },
  431. dialogVisibles(){
  432. this.dialogVisible=true
  433. }
  434. }
  435. }
  436. </script>
  437. <style scoped>
  438. .el-button {
  439. width: 200px;
  440. height: 45px;
  441. }
  442. .authenticationBox1 {
  443. margin-left: 35px;
  444. margin-right: 150px;
  445. height: 100px;
  446. border: 1px solid rgba(153, 153, 153, 1);
  447. border-radius: 10px;
  448. margin-top: 50px;
  449. position: relative;
  450. }
  451. .authenticationBox2 {
  452. margin: 50px 150px 0 35px;
  453. height: 100px;
  454. border: 1px solid rgba(153, 153, 153, 1);
  455. border-radius: 10px;
  456. position: relative;
  457. }
  458. .authenticationBox1:hover,
  459. .authenticationBox2:hover {
  460. border: 1px solid #ff8400;
  461. }
  462. .avatar-uploader .el-upload {
  463. border: 1px dashed #d9d9d9;
  464. border-radius: 6px;
  465. cursor: pointer;
  466. position: relative;
  467. overflow: hidden;
  468. }
  469. .avatar-uploader .el-upload:hover {
  470. border-color: #409EFF;
  471. }
  472. .userCenterAuthenticationPersonal>>>.el-upload {
  473. border: 1px solid rgba(204, 204, 204, 1);
  474. }
  475. .avatar-uploader-icon {
  476. font-size: 28px;
  477. color: #8c939d;
  478. width: 178px;
  479. height: 178px;
  480. line-height: 178px;
  481. text-align: center;
  482. }
  483. .avatar {
  484. width: 178px;
  485. height: 178px;
  486. display: block;
  487. }
  488. /deep/.el-textarea__inner {
  489. display: block;
  490. resize: vertical;
  491. padding: 5px 15px;
  492. line-height: 1.5;
  493. -webkit-box-sizing: border-box;
  494. box-sizing: border-box;
  495. width: 100%;
  496. font-size: inherit;
  497. color: #606266;
  498. background-color: #FFF;
  499. background-image: none;
  500. border: 1px solid #DCDFE6;
  501. border-radius: 4px;
  502. -webkit-transition: border-color .2s cubic-bezier(.645,.045,.355,1);
  503. transition: border-color .2s cubic-bezier(.645,.045,.355,1);
  504. }
  505. /*.el-textarea/deep/::-webkit-input-placeholder {*/
  506. /* color: red;*/
  507. /*}*/
  508. /*.el-textarea/deep/::-moz-input-placeholder {*/
  509. /* color: red;*/
  510. /*}*/
  511. /*.el-textarea/deep/::-ms-input-placeholder {*/
  512. /* color: red;*/
  513. /*}*/
  514. </style>