pointList.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362
  1. <template>
  2. <div class="app-container calendar-list-container">
  3. <!-- 查询和其他操作 -->
  4. <div class="filter-container">
  5. <el-select v-model="listQuery.companyType" clearable placeholder="请选择公司主体" style="top: -4px;width: 200px;">
  6. <el-option :key="item.type" v-for="item in companyTypeList" :label="item.name" :value="item.type">
  7. </el-option>
  8. </el-select>
  9. <el-select v-model="listQuery.depType" clearable placeholder="请选择部门" style="top: -4px;width: 200px;">
  10. <el-option :key="item.type" v-for="item in depTypeList" :label="item.name" :value="item.type">
  11. </el-option>
  12. </el-select>
  13. <el-input clearable class="filter-item" style="width: 200px;" placeholder="请输入员工姓名"
  14. v-model="listQuery.name"></el-input>
  15. <el-date-picker class="filter-item" v-model="listQuery.time" type="datetime" placeholder="选择生成时间">
  16. </el-date-picker>
  17. <el-button class="filter-item" type="primary" v-waves icon="el-icon-search" @click="handleFilter">查找</el-button>
  18. <el-button class="filter-item" type="primary" :loading="downloadLoading" v-waves icon="el-icon-download" @click="handleDownload">导出</el-button>
  19. </div>
  20. <!-- 查询结果 -->
  21. <el-table size="small" :data="list" v-loading="listLoading" element-loading-text="正在查询中。。。" border fit
  22. highlight-current-row>
  23. <el-table-column type="index" label="序号" header-align="center" align="center">
  24. </el-table-column>
  25. <el-table-column align="center" min-width="100px" label="员工姓名" prop="name">
  26. </el-table-column>
  27. <el-table-column align="center" min-width="200px" label="公司主体" prop="companyName">
  28. </el-table-column>
  29. <el-table-column align="center" min-width="80px" label="部门" prop="depName">
  30. </el-table-column>
  31. <el-table-column align="center" min-width="80px" label="积分" prop="integral">
  32. </el-table-column>
  33. <el-table-column align="center" label="操作" width="240px" class-name="small-padding fixed-width">
  34. <template slot-scope="scope">
  35. <el-button type="primary" size="small" @click="handleView(scope.row, false)">查看</el-button>
  36. </template>
  37. </el-table-column>
  38. </el-table>
  39. <!-- 分页 -->
  40. <div class="pagination-container">
  41. <el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
  42. :current-page="listQuery.page" :page-sizes="[10, 20, 30, 50]" :page-size="listQuery.limit"
  43. layout="total, sizes, prev, pager, next, jumper" :total="total">
  44. </el-pagination>
  45. </div>
  46. <!-- 员工积分记录列表 -->
  47. <el-dialog title="员工积分记录" :visible.sync="dialogFormVisible" width="70%">
  48. <div class="filter-container">
  49. <el-select v-model="itemListQuery.type" clearable placeholder="请选择积分类型" style="top: -4px;width: 200px;">
  50. <el-option :key="item.type" v-for="item in allTypeList" :label="item.name" :value="item.type">
  51. </el-option>
  52. </el-select>
  53. <el-date-picker class="filter-item" v-model="itemListQuery.time" type="datetime" placeholder="选择生成时间">
  54. </el-date-picker>
  55. <el-button class="filter-item" type="primary" v-waves icon="el-icon-search"
  56. @click="itemHandleFilter">查找</el-button>
  57. <el-button class="filter-item" type="primary" v-waves icon="el-icon-download">导出</el-button>
  58. </div>
  59. <!-- 查询结果 -->
  60. <el-table size="small" :data="itemList" v-loading="listLoading" element-loading-text="正在查询中。。。" border fit
  61. highlight-current-row>
  62. <el-table-column type="index" label="序号" header-align="center" align="center">
  63. </el-table-column>
  64. <el-table-column align="center" min-width="100px" label="员工姓名" prop="name">
  65. </el-table-column>
  66. <el-table-column align="center" min-width="200px" label="积分类型" prop="integralCategory">
  67. </el-table-column>
  68. <el-table-column align="center" min-width="80px" label="积分名称" prop="integralName">
  69. </el-table-column>
  70. <el-table-column align="center" min-width="80px" label="积分" prop="integral">
  71. </el-table-column>
  72. <el-table-column align="center" min-width="80px" label="生成时间" prop="time">
  73. </el-table-column>
  74. </el-table>
  75. <!-- 分页 -->
  76. <div class="pagination-container">
  77. <el-pagination background @size-change="itemHandleSizeChange" @current-change="itemHandleCurrentChange"
  78. :current-page="itemListQuery.page" :page-sizes="[10, 20, 30, 50]" :page-size="itemListQuery.limit"
  79. layout="total, sizes, prev, pager, next, jumper" :total="itemTotal">
  80. </el-pagination>
  81. </div>
  82. </el-dialog>
  83. </div>
  84. </template>
  85. <style>
  86. .demo-table-expand {
  87. font-size: 0;
  88. }
  89. .demo-table-expand label {
  90. width: 200px;
  91. color: #99a9bf;
  92. }
  93. .demo-table-expand .el-form-item {
  94. margin-right: 0;
  95. margin-bottom: 0;
  96. }
  97. </style>
  98. <script>
  99. import { getPointList, getItemPointList, pointRulesTypeList } from "@/api/pointManage";
  100. import { companyTypeList, depTypeList } from "@/api/public";
  101. import waves from "@/directive/waves"; // 水波纹指令
  102. import Tinymce from '@/components/Tinymce'
  103. export default {
  104. name: 'pointList',
  105. components: { Tinymce },
  106. directives: { waves },
  107. data() {
  108. return {
  109. companyTypeList: [
  110. {
  111. type: 'highTechnology',
  112. name: '高科技'
  113. },
  114. {
  115. type: 'fastExtinction',
  116. name: '快销'
  117. },
  118. {
  119. type: 'manufacturingIndustry',
  120. name: '制造业'
  121. },
  122. {
  123. type: 'all',
  124. name: '全部'
  125. },
  126. ],
  127. depTypeList: [
  128. {
  129. type: 1,
  130. name: '启用'
  131. },
  132. {
  133. type: 0,
  134. name: '禁用'
  135. },
  136. ],
  137. allTypeList: [
  138. {
  139. type: 'highTechnology',
  140. name: '高科技'
  141. },
  142. {
  143. type: 'fastExtinction',
  144. name: '快销'
  145. },
  146. {
  147. type: 'manufacturingIndustry',
  148. name: '制造业'
  149. },
  150. {
  151. type: 'all',
  152. name: '全部'
  153. },
  154. ],
  155. list: [
  156. {
  157. id: 1,
  158. name: '类型1',
  159. companyName: '名称1',
  160. depName: '代码1',
  161. integral: '100',
  162. flag: 1
  163. },
  164. {
  165. id: 2,
  166. name: '类型2',
  167. companyName: '名称2',
  168. depName: '代码2',
  169. integral: '200',
  170. flag: 0
  171. },
  172. {
  173. id: 3,
  174. name: '类型3',
  175. companyName: '名称3',
  176. depName: '代码3',
  177. integral: '300',
  178. flag: 1
  179. },
  180. ],
  181. itemList: [
  182. {
  183. id: 1,
  184. name: '类型1',
  185. integralCategory: '名称1',
  186. integralName: '代码1',
  187. integral: '100',
  188. time: '2023-4-3'
  189. },
  190. {
  191. id: 2,
  192. name: '类型1',
  193. integralCategory: '名称1',
  194. integralName: '代码1',
  195. integral: '100',
  196. time: '2023-4-3'
  197. },
  198. {
  199. id: 3,
  200. name: '类型1',
  201. integralCategory: '名称1',
  202. integralName: '代码1',
  203. integral: '100',
  204. time: '2023-4-3'
  205. },
  206. ],
  207. total: 0,
  208. itemTotal: 0,
  209. listLoading: false,
  210. downloadLoading: false,
  211. listQuery: {
  212. page: 1,
  213. limit: 10,
  214. companyType: '',
  215. depType: '',
  216. name: '',
  217. time: '',
  218. },
  219. itemListQuery: {
  220. page: 1,
  221. limit: 10,
  222. id: '',
  223. type: '',
  224. time: '',
  225. },
  226. dialogFormVisible: false,
  227. }
  228. },
  229. created() {
  230. // this.getCompanyTypeList();
  231. // this.getDepTypeList();
  232. // this.getList();
  233. },
  234. methods: {
  235. handleDownload() {
  236. this.downloadLoading = true
  237. import('@/vendor/Export2Excel').then(excel => {
  238. const tHeader = ['员工姓名', '公司主体', '部门', '积分', ]
  239. const filterVal = ['name','companyName', 'depName', 'integral']
  240. excel.export_json_to_excel2(tHeader, this.list, filterVal, '积分列表')
  241. this.downloadLoading = false
  242. })
  243. },
  244. getCompanyTypeList() {
  245. companyTypeList().then(response => {
  246. this.companyTypeList = response.data.data;
  247. }).catch(() => {});
  248. },
  249. getDepTypeList() {
  250. depTypeList().then(response => {
  251. this.depTypeList = response.data.data;
  252. }).catch(() => {});
  253. },
  254. getPointRulesType() {
  255. pointRulesTypeList().then(response => {
  256. this.allTypeList = response.data.data;
  257. }).catch(() => {
  258. });
  259. },
  260. getList() {
  261. this.listLoading = true
  262. getPointList(this.listQuery).then(response => {
  263. this.list = response.data.data.items
  264. this.total = response.data.data.total
  265. this.listLoading = false
  266. }).catch(() => {
  267. })
  268. },
  269. getItemList() {
  270. this.listLoading = true
  271. getItemPointList(this.itemListQuery).then(response => {
  272. this.itemList = response.data.data.items
  273. this.itemLotal = response.data.data.total
  274. this.listLoading = false
  275. }).catch(() => {})
  276. },
  277. handleFilter() {
  278. this.listQuery.page = 1
  279. this.getList()
  280. },
  281. handleSizeChange(val) {
  282. this.listQuery.limit = val
  283. this.getList()
  284. },
  285. handleCurrentChange(val) {
  286. this.listQuery.page = val
  287. this.getList()
  288. },
  289. itemHandleFilter() {
  290. this.itemListQuery.page = 1
  291. this.getItemList()
  292. },
  293. itemHandleSizeChange(val) {
  294. this.itemListQuery.limit = val
  295. this.getItemList()
  296. },
  297. itemHandleCurrentChange(val) {
  298. this.itemListQuery.page = val
  299. this.getItemList()
  300. },
  301. handleView(row) {
  302. this.itemListQuery.id = row.id;
  303. // getPointRulesType()
  304. // this.getItemList()
  305. this.dialogFormVisible = true
  306. },
  307. }
  308. }
  309. </script>
  310. <style>
  311. .ad-avatar-uploader .el-upload {
  312. border: 1px dashed #d9d9d9;
  313. border-radius: 6px;
  314. cursor: pointer;
  315. position: relative;
  316. overflow: hidden;
  317. }
  318. .ad-avatar-uploader .el-upload:hover {
  319. border-color: #409EFF;
  320. }
  321. .ad-avatar-uploader-icon {
  322. font-size: 28px;
  323. color: #8c939d;
  324. width: 178px;
  325. height: 178px;
  326. line-height: 178px;
  327. text-align: center;
  328. }
  329. .ad-avatar {
  330. display: block;
  331. }
  332. </style>