file-search.vue 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. <template>
  2. <div class="main">
  3. <div class="main-body">
  4. <el-card class="box-card">
  5. <div slot="header" class="clearfix" >
  6. <el-form :inline="true" :model="searchInfo" class="demo-form-inline">
  7. <el-form-item label="选择部门">
  8. <el-select v-model="searchInfo.department" collapse-tags placeholder="请选择" @clear="selectDepartment({})" clearable>
  9. <div class="el-input" style="width:90%;margin-left:5%;">
  10. <input type="text" placeholder="请输入" class="el-input__inner" v-model="dropDownValue">
  11. </div>
  12. <el-option
  13. v-for="(item,index) in userDepartments"
  14. :value="item.departmentId"
  15. @click.native="selectDepartment(item)"
  16. :key="index"
  17. :label="item.department"></el-option>
  18. </el-select>
  19. </el-form-item>
  20. <el-form-item label="选择分类">
  21. <el-select v-model="searchInfo.category" collapse-tags placeholder="请选择" clearable>
  22. <el-option v-for="(item,index) in categorys"
  23. :value="index" :key="index" :label="item"></el-option>
  24. </el-select>
  25. </el-form-item>
  26. <el-form-item label="文件标题">
  27. <el-input placeholder="" v-model="searchInfo.keyword" clearable></el-input>
  28. </el-form-item>
  29. <el-form-item>
  30. <el-button @click="getArticalList" type="primary">搜索</el-button>
  31. </el-form-item>
  32. </el-form>
  33. </div>
  34. <el-table :data="list" border stripe>
  35. <el-table-column label="序号" min-width="50" prop="articalId">
  36. <template v-slot="{row}">
  37. <span> 【{{openMap[row.isOpen]}}】{{row.articalId}}</span>
  38. </template>
  39. </el-table-column>
  40. <el-table-column label="文件标题" min-width="200" prop="title">
  41. </el-table-column>
  42. <el-table-column label="科室" min-width="50" prop="department">
  43. <template v-slot="{row}">
  44. <span> {{departmentMap[row.departmentId]}}</span>
  45. </template>
  46. </el-table-column>
  47. <el-table-column label="分类" min-width="50" prop="category">
  48. <template v-slot="{row}">
  49. <span> {{categorys[row.category]}}</span>
  50. </template>
  51. </el-table-column>
  52. <el-table-column
  53. align="center"
  54. min-width="60"
  55. label="操作"
  56. class-name="small-padding fixed-width"
  57. >
  58. <template slot-scope="{row}">
  59. <el-button
  60. size="small"
  61. type="primary"
  62. @click="applyDoc(row)"
  63. >详情</el-button>
  64. </template>
  65. </el-table-column>
  66. </el-table>
  67. <el-pagination
  68. :current-page="page"
  69. :page-size="pageSize"
  70. @size-change="handleSizeChange"
  71. @current-change="handleCurrentChange"
  72. :page-sizes="[10, 30, 50, 100]"
  73. :style="{float:'center',padding:'20px'}"
  74. :total="total"
  75. layout="total, sizes, prev, pager, next, jumper"
  76. ></el-pagination>
  77. </el-card>
  78. </div>
  79. </div>
  80. </template>
  81. <script>
  82. import IHeader from "./components/IHeader";
  83. import IFooter from "./components/IFooter";
  84. import data from '../data/data.js'
  85. import {getArticalList} from '@/api/article.js'
  86. import { mapGetters } from "vuex";
  87. export default {
  88. name: 'application',
  89. components: {
  90. IHeader,
  91. IFooter
  92. },
  93. data() {
  94. return {
  95. list: [],
  96. departmentId:0,
  97. pageSize:10,
  98. page:1,
  99. total:0,
  100. dropDownValue:'',
  101. showDepartments:data.departs,
  102. categorys:data.categorys,
  103. openMap:data.openMap,
  104. searchInfo:{
  105. keyword: '',
  106. department:'',
  107. category:''
  108. }
  109. }
  110. },
  111. computed: {
  112. ...mapGetters("user", ["userDepartments","departmentMap"])
  113. },
  114. watch:{
  115. dropDownValue(val){
  116. this.showDepartments = this.userDepartments.filter( item=>{
  117. return item.department.indexOf( val )>-1
  118. })
  119. },
  120. "searchInfo.category"(val){
  121. this.getArticalList()
  122. }
  123. },
  124. created(){
  125. this.searchInfo.category = this.$route.query.category||'';
  126. this.searchInfo.keyword = this.$route.query.keyword||'';
  127. this.departmentId = +this.$route.query.departmentId||0;
  128. if( !this.departmentId ){
  129. this.departmentId = localStorage.getItem( "@departmentId")||0
  130. }
  131. let department = data.getDepart( this.departmentId, this.userDepartments )
  132. this.searchInfo.department = department.department||''
  133. this.getArticalList()
  134. },
  135. methods: {
  136. handleSizeChange(size){
  137. this.pageSize = size
  138. this.getArticalList()
  139. },
  140. handleCurrentChange(page){
  141. this.page = page
  142. this.getArticalList()
  143. },
  144. selectDepartment(item){
  145. this.departmentId = +item.departmentId
  146. localStorage.setItem("@departmentId", this.departmentId)
  147. this.getArticalList()
  148. },
  149. applyDoc(item){
  150. let query= {articalId: item.articalId }
  151. this.$router.push( {path: '/file-info', query})
  152. },
  153. getArticalList(){
  154. let param = {
  155. departmentId:+this.departmentId,
  156. keyword: this.searchInfo.keyword,
  157. category: this.searchInfo.category,
  158. page: this.page,
  159. pageSize: this.pageSize
  160. }
  161. getArticalList( param ).then( res=>{
  162. if( res.code == 200){
  163. this.list = res.data.list;
  164. this.total = res.data.total;
  165. }
  166. })
  167. }
  168. }
  169. }
  170. </script>
  171. <style lang="scss" scoped>
  172. .el-breadcrumb{
  173. display: inline-block;
  174. padding-left: 10px;
  175. }
  176. .box-card{
  177. margin-bottom: 20px;
  178. }
  179. .my-autocomplete {
  180. li {
  181. line-height: normal;
  182. padding: 7px;
  183. .name {
  184. text-overflow: ellipsis;
  185. overflow: hidden;
  186. }
  187. .addr {
  188. font-size: 12px;
  189. color: #b4b4b4;
  190. }
  191. .highlighted .addr {
  192. color: #ddd;
  193. }
  194. }
  195. }
  196. .el-card__body .text{
  197. margin: 5px 0;
  198. }
  199. .el-card{
  200. color: #1890ff;
  201. }
  202. .el-card__header{
  203. padding: 15px 20px;
  204. }
  205. .el-menu-vertical-demo:not(.el-menu--collapse) {
  206. width: 200px;
  207. min-height: 400px;
  208. }
  209. </style>