Journal.vue 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339
  1. <style lang="scss" scoped>
  2. .preview {
  3. .el-form-item {
  4. margin-bottom: 15px;
  5. }
  6. label,
  7. p {
  8. line-height: 25px !important;
  9. }
  10. }
  11. /deep/.avatar-uploader .el-upload {
  12. width: 148px;
  13. height: 148px;
  14. line-height: 148px;
  15. border: 1px dashed #d9d9d9;
  16. border-radius: 6px;
  17. cursor: pointer;
  18. position: relative;
  19. overflow: hidden;
  20. .avatar {
  21. width: 100%;
  22. height: auto;
  23. }
  24. }
  25. .avatar-uploader .el-upload:hover {
  26. border-color: #409eff;
  27. }
  28. .avatar-uploader-icon {
  29. font-size: 28px;
  30. color: #8c939d;
  31. width: 68px;
  32. height: 68px;
  33. line-height: 68px;
  34. text-align: center;
  35. }
  36. .avatar {
  37. width: 68px;
  38. height: 68px;
  39. display: block;
  40. }
  41. /deep/.speaker_avatar .el-upload {
  42. width: 80px;
  43. height: 80px;
  44. line-height: 80px;
  45. }
  46. </style>
  47. <template>
  48. <section>
  49. <p>中科院全刊</p>
  50. <div class="content">
  51. <div class="filter">
  52. <el-form
  53. size="small"
  54. label-width="70px"
  55. :inline="true"
  56. label-position="left"
  57. >
  58. <el-form-item label="">
  59. <el-input
  60. clearable
  61. placeholder="请输入信息标题"
  62. v-model="form.name"
  63. @clear="getData"
  64. ></el-input>
  65. </el-form-item>
  66. <el-form-item>
  67. <el-button type="primary" @click="search">搜索</el-button>
  68. </el-form-item>
  69. <el-form-item style="float:right" >
  70. <el-button @click="dialogVisible1=true" plain icon="el-icon-upload" type="primary">导入</el-button>
  71. </el-form-item>
  72. <el-form-item style="float:right" >
  73. <el-button @click="download" plain icon="el-icon-download" type="primary">导出</el-button>
  74. </el-form-item>
  75. <el-form-item style="float: right">
  76. <el-button @click="add" type="primary">添加期刊</el-button>
  77. </el-form-item>
  78. </el-form>
  79. </div>
  80. <el-table
  81. class="table"
  82. :data="list"
  83. height="50vh"
  84. border
  85. v-loading="loading"
  86. default-expand-all
  87. row-key="id"
  88. style="width: 100%"
  89. >
  90. <el-table-column prop="img" label="期刊封面">
  91. <template slot-scope="scope">
  92. <img :src="scope.row.img" alt="" height="80" width="60" />
  93. </template>
  94. </el-table-column>
  95. <el-table-column prop="name" width="180" label="期刊名称">
  96. </el-table-column>
  97. <el-table-column prop="wxcode" label="微信号"> </el-table-column>
  98. <el-table-column prop="subject_name" label="主办单位">
  99. </el-table-column>
  100. <el-table-column prop="desc" width="300" label="简介">
  101. </el-table-column>
  102. <el-table-column prop="name" label="中文名称"> </el-table-column>
  103. <el-table-column prop="ename" label="外文名称"> </el-table-column>
  104. <el-table-column prop="languages" label="语种"> </el-table-column>
  105. <el-table-column prop="editor" label="主编"> </el-table-column>
  106. <el-table-column prop="corganizers" label="主管单位"> </el-table-column>
  107. <el-table-column prop="publishingUnit" label="办刊单位">
  108. </el-table-column>
  109. <el-table-column prop="publishingTime" label="创刊时间">
  110. </el-table-column>
  111. <el-table-column prop="domestic" label="国内刊号"> </el-table-column>
  112. <el-table-column prop="issn" label="国际刊号"> </el-table-column>
  113. <el-table-column prop="website" label="期刊官网"> </el-table-column>
  114. <el-table-column prop="editorialAddress" label="编辑部地址">
  115. </el-table-column>
  116. <el-table-column prop="zip" width="150" label="操作" fixed="right">
  117. <template slot-scope="scope">
  118. <el-button type="text" @click="showQrcode(scope.row)"
  119. >二维码上传</el-button
  120. >
  121. <el-button type="text" @click="showJournal(scope.row)"
  122. >查看</el-button
  123. >
  124. <el-button class="edit" type="text" @click="edit(scope.row)"
  125. >编辑</el-button
  126. >
  127. <el-button class="del" @click="del" type="text">删除</el-button>
  128. </template>
  129. </el-table-column>
  130. </el-table>
  131. <Page
  132. ref="pageButton"
  133. :current="form.page"
  134. :page_size="form.page_size"
  135. :total="total"
  136. @pageChange="gopage"
  137. />
  138. <!--二维码上传-->
  139. <el-dialog
  140. class="fu-dialog"
  141. :title="dialogTitle"
  142. :close-on-click-modal="false"
  143. :visible.sync="dialogVisible"
  144. >
  145. <el-form
  146. size="small"
  147. class="preview"
  148. :inline="false"
  149. label-width="100px"
  150. :model="form1"
  151. ref="form1"
  152. >
  153. <el-form-item label="上传二维码:" prop="img">
  154. <el-upload
  155. class="avatar-uploader"
  156. action="/api/admin/uploadfile"
  157. :show-file-list="false"
  158. :on-success="handleAvatarSuccess"
  159. >
  160. <img v-if="form1.qrcode" :src="form1.qrcode" class="avatar" />
  161. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  162. </el-upload>
  163. <span style="font-size: 12px; color: #999999"
  164. >建议图片尺寸为:210*160</span
  165. >
  166. </el-form-item>
  167. </el-form>
  168. <span slot="footer" class="dialog-footer">
  169. <el-button size="small" type="normal" @click="dialogVisible=false,this.form1={}">取消</el-button>
  170. <el-button size="small" type="primary" @click="save">确 定</el-button>
  171. </span>
  172. </el-dialog>
  173. <el-dialog
  174. class="fu-dialog"
  175. title="导入期刊" width="400px"
  176. :close-on-click-modal="false"
  177. :visible.sync="dialogVisible1"
  178. >
  179. <el-upload
  180. class="upload-demo"
  181. action="/api/admin/uploadfile"
  182. :show-file-list="false"
  183. :on-success="handleAvatarSuccess1">
  184. <el-button size="small" type="primary">点击上传</el-button>
  185. <div slot="tip" class="el-upload__tip">只能上传.xls/.xlsx文件,且不超过500M</div>
  186. </el-upload>
  187. <div>{{file}}</div>
  188. <span slot="footer" class="dialog-footer">
  189. <el-button size="small" type="normal" @click="dialogVisible1=false">取消</el-button>
  190. <el-button size="small" type="primary" @click="upload">确 定</el-button>
  191. </span>
  192. </el-dialog>
  193. </div>
  194. </section>
  195. </template>
  196. <script>
  197. import Page from "../../components/Page";
  198. export default {
  199. components: {
  200. Page,
  201. },
  202. data() {
  203. return {
  204. // edit:0,
  205. form: { name: "", page: 1, page_size: 20 },
  206. total: 1,
  207. list: [{ name: "2333" }],
  208. loading: false,
  209. input: "",
  210. dialogVisible: false,
  211. dialogTitle: "",
  212. dialogVisible1:false,
  213. form1: {},
  214. file:''
  215. };
  216. },
  217. methods: {
  218. save() {
  219. this.$refs["form1"].validate((valid) => {
  220. if (valid) {
  221. let parm = this.form1;
  222. let id = this.form1.id;
  223. this.$api.updateJournal(parm).then((res) => {
  224. if (res.data.code == 0) {
  225. this.$message({
  226. type: "success",
  227. message: "保存成功!",
  228. });
  229. this.getData();
  230. } else {
  231. // this.$message.error("保存失败!");
  232. }
  233. this.dialogVisible = false;
  234. });
  235. }
  236. });
  237. },
  238. upload(){
  239. this.$api.upJournalData({file:this.file}).then(res=>{
  240. this.dialogVisible1=false;
  241. this.getData();
  242. this.$message({
  243. message: "上传成功",
  244. type: "success",
  245. });
  246. })
  247. },
  248. download(){
  249. this.$api.getJournalData().then(res=>{
  250. var elink = document.createElement("a");
  251. let blob = new Blob([res.data], {
  252. type: "application/vnd.ms-excel,charset=UTF-8",
  253. });
  254. let objUrl = URL.createObjectURL(blob);
  255. let file_name = decodeURIComponent(
  256. res.headers["content-disposition"].split("=")[1]
  257. );
  258. console.log(file_name);
  259. elink.download = file_name;
  260. elink.style.display = "none";
  261. elink.href = objUrl;
  262. document.body.appendChild(elink);
  263. elink.click();
  264. document.body.removeChild(elink);
  265. })
  266. },
  267. showQrcode(row){
  268. this.form1.journal_id = row.journal_id;
  269. this.form1.id = row.id;
  270. this.form1.qrcode = row.qrcode;
  271. this.dialogVisible = true;
  272. },
  273. showJournal(row){
  274. this.$router.push({
  275. path:"/journal/journal/show",
  276. query:{id:row.id}
  277. })
  278. },
  279. //封面
  280. handleAvatarSuccess(res, file) {
  281. this.$set(this.form1,'qrcode',file.response.data)
  282. },
  283. handleAvatarSuccess1(res, file) {
  284. this.file=file.response.data;
  285. },
  286. gopage(size) {
  287. if (size) {
  288. this.form.page_size = size;
  289. }
  290. this.form.page = this.$refs.pageButton.page;
  291. this.getData();
  292. },
  293. edit(row) {
  294. this.$router.push({
  295. path: "/journal/journal/add",
  296. query: { id: row.id },
  297. });
  298. },
  299. add() {
  300. this.$router.push({ path: "/journal/journal/add" });
  301. },
  302. detail(id) {
  303. this.$router.push({
  304. path: "/company/detail",
  305. query: { id: id, page: this.form.page, page_size: this.form.page_size },
  306. });
  307. },
  308. search() {
  309. this.getData();
  310. },
  311. getData() {
  312. var parm = this.form;
  313. this.loading = true;
  314. this.$api.getJournalList(parm).then((res) => {
  315. this.list = res.data.data.list;
  316. this.total = res.data.data.total;
  317. this.loading = false;
  318. });
  319. },
  320. del(id) {
  321. this.$confirm("确定删除吗", "提示", {
  322. type: "warning",
  323. }).then(() => {
  324. this.$api.deleteEnterprise({ id: id }).then((res) => {
  325. this.$message({
  326. message: "删除成功",
  327. type: "success",
  328. });
  329. this.getData();
  330. });
  331. });
  332. },
  333. },
  334. created() {
  335. this.getData();
  336. },
  337. };
  338. </script>