file-search.vue 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. <template>
  2. <div class="main">
  3. <div class="main-body">
  4. <el-form class="pt20" label-width="55px" label-position="center" ref="elForm" :model="searchInfo">
  5. <el-row>
  6. <el-col :span="5">
  7. <el-form-item label="部门">
  8. <el-select v-model="searchInfo.department" collapse-tags placeholder="请选择" style="width: 160px;" @clear="selectDepartment({})"
  9. clearable>
  10. <div class="el-input" style="width:90%;margin-left:5%;">
  11. <input type="text" placeholder="请输入" class="el-input__inner" v-model="dropDownValue">
  12. </div>
  13. <el-option v-for="(item,index) in userDepartments" :value="item.departmentId" @click.native="selectDepartment(item)"
  14. :key="index" :label="item.department"></el-option>
  15. </el-select>
  16. </el-form-item>
  17. </el-col>
  18. <el-col :span="5">
  19. <el-form-item label="分类">
  20. <el-select v-model="searchInfo.category" collapse-tags placeholder="请选择" style="width: 160px;" clearable>
  21. <el-option v-for="(item,index) in categorys" :value="index" :key="index" :label="item"></el-option>
  22. </el-select>
  23. </el-form-item>
  24. </el-col>
  25. <el-col :span="4">
  26. <el-form-item label="年份">
  27. <el-date-picker v-model="searchInfo.bucket" type="year" format="yyyy" value-format="yyyy" clearable></el-date-picker>
  28. </el-form-item>
  29. </el-col>
  30. <el-col :span="8">
  31. <el-form-item label="标题">
  32. <el-input placeholder="" v-model="searchInfo.keyword" clearable></el-input>
  33. </el-form-item>
  34. </el-col>
  35. <el-col :span="2">
  36. <el-form-item label-width="0px">
  37. <el-button @click="handleSearch" type="primary">搜索</el-button>
  38. </el-form-item>
  39. </el-col>
  40. </el-row>
  41. </el-form>
  42. <div class="p10">
  43. <el-table :data="list" border stripe :row-style="{'height':'75px'}">
  44. <el-table-column label="序号" min-width="50" prop="articalId">
  45. <template v-slot="{row}">
  46. <span> 【{{openMap[row.isOpen]}}】{{row.articalId}}</span>
  47. </template>
  48. </el-table-column>
  49. <el-table-column label="文件标题" min-width="200" prop="title">
  50. </el-table-column>
  51. <el-table-column label="科室" min-width="50" prop="department">
  52. <template v-slot="{row}">
  53. <span> {{departmentMap[row.departmentId]}}</span>
  54. </template>
  55. </el-table-column>
  56. <el-table-column label="分类" min-width="50" prop="category">
  57. <template v-slot="{row}">
  58. <span> {{categorys[row.category]}}</span>
  59. </template>
  60. </el-table-column>
  61. <el-table-column align="center" min-width="60" label="操作" class-name="small-padding fixed-width">
  62. <template slot-scope="{row, $index}">
  63. <el-button size="small" type="text" @click="applyDoc(row)">详情</el-button>
  64. <el-button size="small" v-if="isLeader(row.departmentId)" style="color:darkorange" type="text" @click="row._delete=true">删除</el-button>
  65. <el-popover placement="top" width="160" v-model="row._delete">
  66. <p style="height: 20px;">你是否确认删除?</p>
  67. <div style="text-align: right; margin: 0">
  68. <el-button size="mini" type="text" @click="row._delete = false">取消</el-button>
  69. <el-button type="primary" size="mini" @click="deleteArtical(row)">确定</el-button>
  70. </div>
  71. </el-popover>
  72. </template>
  73. </el-table-column>
  74. </el-table>
  75. <el-pagination :current-page="page" :page-size="pageSize" @size-change="handleSizeChange" @current-change="handleCurrentChange"
  76. :page-sizes="[10, 30, 50, 100]" :style="{float:'center',padding:'20px'}" :total="total" layout="total, sizes, prev, pager, next, jumper"></el-pagination>
  77. </div>
  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 {
  86. getArticalList,
  87. deleteArtical
  88. } from '@/api/article.js'
  89. import {
  90. mapGetters
  91. } from "vuex";
  92. export default {
  93. name: 'application',
  94. components: {
  95. IHeader,
  96. IFooter
  97. },
  98. data() {
  99. return {
  100. list: [],
  101. departmentId: 0,
  102. pageSize: 10,
  103. page: 1,
  104. total: 0,
  105. dropDownValue: '',
  106. showDepartments: data.departs,
  107. categorys: data.categorys,
  108. openMap: data.openMap,
  109. searchInfo: {
  110. keyword: '',
  111. department: '',
  112. bucket: '',
  113. category: ''
  114. }
  115. }
  116. },
  117. computed: {
  118. ...mapGetters("user", ["userDepartments", "departmentMap"])
  119. },
  120. watch: {
  121. dropDownValue(val) {
  122. this.showDepartments = this.userDepartments.filter(item => {
  123. return item.department.indexOf(val) > -1
  124. })
  125. },
  126. "searchInfo.category"(val) {
  127. this.page = 1
  128. this.getArticalList()
  129. },
  130. "searchInfo.bucket"(val) {
  131. this.page = 1
  132. this.getArticalList()
  133. }
  134. },
  135. created() {
  136. this.searchInfo.category = this.$route.query.category || '';
  137. this.searchInfo.keyword = this.$route.query.keyword || '';
  138. this.departmentId = +this.$route.query.departmentId || 0;
  139. if (!this.departmentId) {
  140. this.departmentId = localStorage.getItem("@departmentId") || 0
  141. }
  142. let department = data.getDepart(this.departmentId, this.userDepartments)
  143. this.searchInfo.department = department.department || ''
  144. this.getArticalList()
  145. },
  146. methods: {
  147. okBucket(val) {
  148. this.searchInfo.bucket = val.bucket;
  149. this.handleSearch()
  150. },
  151. isLeader(departmentId) {
  152. return data.getLeader(departmentId, this.userDepartments) > 1;
  153. },
  154. handleSearch() {
  155. this.page = 1
  156. this.getArticalList()
  157. },
  158. handleSizeChange(size) {
  159. this.page = 1
  160. this.pageSize = size
  161. this.getArticalList()
  162. },
  163. handleSearch() {
  164. this.page = 1
  165. this.getArticalList()
  166. },
  167. handleCurrentChange(page) {
  168. this.page = page
  169. this.getArticalList()
  170. },
  171. selectDepartment(item) {
  172. this.departmentId = +item.departmentId || 0
  173. this.page = 1
  174. localStorage.setItem("@departmentId", this.departmentId)
  175. this.getArticalList()
  176. },
  177. deleteArtical(row) {
  178. deleteArtical({
  179. articalId: row.articalId
  180. }).then(res => {
  181. if (res.code == 200) {
  182. row._delete = false
  183. row.status = 4
  184. row.isOpen = 2
  185. }
  186. })
  187. },
  188. applyDoc(item) {
  189. let query = {
  190. articalId: item.articalId
  191. }
  192. this.$router.push({
  193. path: '/file-info',
  194. query
  195. })
  196. },
  197. getArticalList() {
  198. let param = {
  199. departmentId: +this.departmentId || 0,
  200. keyword: this.searchInfo.keyword,
  201. category: this.searchInfo.category,
  202. page: this.page,
  203. bucket: this.searchInfo.bucket || '',
  204. pageSize: this.pageSize
  205. }
  206. getArticalList(param).then(res => {
  207. if (res.code == 200) {
  208. let list = res.data.list || [];
  209. this.list = list.map(item => {
  210. item._delete = false;
  211. return item
  212. });
  213. this.total = res.data.total;
  214. }
  215. })
  216. }
  217. }
  218. }
  219. </script>
  220. <style lang="scss" scoped>
  221. .ipt-select {
  222. width: 500px;
  223. }
  224. // .el-card{
  225. // color: #1890ff;
  226. // }
  227. // .el-card__header{
  228. // padding: 15px 20px;
  229. // }
  230. // .el-menu-vertical-demo:not(.el-menu--collapse) {
  231. // width: 200px;
  232. // min-height: 400px;
  233. // }
  234. </style>