move.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468
  1. <template>
  2. <div v-loading="loading">
  3. <div class="white-box">
  4. <el-tabs v-model="filterStatus" @tab-click="handleFilterStatusClick">
  5. <el-tab-pane label="whole" name="-1" :lazy="true"></el-tab-pane><!-- 全部 -->
  6. <el-tab-pane label="To be reviewed" name="0" :lazy="true"></el-tab-pane><!-- 待审核 -->
  7. <el-tab-pane label="Approved" name="1" :lazy="true"></el-tab-pane><!-- 审核通过 -->
  8. <el-tab-pane label="Audit reject" name="3" :lazy="true"></el-tab-pane><!-- 审核拒绝 -->
  9. </el-tabs>
  10. <div class="filter-box">
  11. <filter-user ref="filterUser" :filter-types.sync="filterTypes" @select-value="handleFilterUser"></filter-user>
  12. </div>
  13. <el-table :data="tableData" stripe style="width: 100%;" @selection-change="handleSelectionChange"
  14. :height="tool.getTableHeight(true)">
  15. <el-table-column type="selection" width="55" v-if="tableHeaders"></el-table-column>
  16. <el-table-column v-for="(tableHeader, key) in tableHeaders" :key="key" :label="tableHeader.header" :width="tableHeader.other.width ? tableHeader.other.width : ''">
  17. <template slot-scope="scope">
  18. <template v-if="scope.row[tableHeader.index].other.tag" >
  19. <el-tag :type="scope.row[tableHeader.index].other.tag.type ? scope.row[tableHeader.index].other.tag.type : null" :size="scope.row[tableHeader.index].other.tag.size ? scope.row[tableHeader.index].other.tag.size : null" :class="scope.row[tableHeader.index].other.tag.class ? scope.row[tableHeader.index].other.tag.class : null" >{{scope.row[tableHeader.index].value}}</el-tag>
  20. </template>
  21. <template v-else-if="scope.row[tableHeader.index].other.progress" >
  22. <el-progress type="circle" :percentage="Number.parseInt(percentList['MOVE_PERCENT'][scope.row.ID])"
  23. :width="50"
  24. :stroke-width="3"></el-progress>
  25. </template>
  26. <template v-else>
  27. <div v-html="scope.row[tableHeader.index].value"></div>
  28. </template>
  29. </template>
  30. </el-table-column>
  31. <el-table-column fixed="right" label="Action" width="180" v-if="tableHeaders"><!-- 操作 -->
  32. <template slot-scope="scope"
  33. v-if="scope.row.AUDIT_STATUS==='0' && (permission.hasPermission(`user/move-pass`)||permission.hasPermission(`user/move-audit`)||permission.hasPermission(`user/move-delete`))">
  34. <el-dropdown size="small" trigger="click">
  35. <el-button type="primary" size="small" @click.stop="">
  36. Action<!-- 操作该数据 --><i class="el-icon-arrow-down el-icon--right"></i>
  37. </el-button>
  38. <el-dropdown-menu slot="dropdown">
  39. <el-dropdown-item command="pass" @click.native="handleAuditShow(scope.row)"
  40. v-show="permission.hasPermission(`user/move-pass`)">Approved<!-- 审核通过 -->
  41. </el-dropdown-item>
  42. <el-dropdown-item command="refuse" @click.native="handleAudit(scope.row, 'reject')"
  43. v-show="permission.hasPermission(`user/move-audit`)">Audit reject<!-- 审核拒绝 -->
  44. </el-dropdown-item>
  45. <el-dropdown-item command="del" @click.native="handleDel(scope.row.ID)"
  46. v-show="permission.hasPermission(`user/move-delete`)">Delete data<!-- 删除数据 -->
  47. </el-dropdown-item>
  48. </el-dropdown-menu>
  49. </el-dropdown>
  50. </template>
  51. </el-table-column>
  52. </el-table>
  53. <div class="white-box-footer">
  54. <el-dropdown size="small" trigger="click" @command="handleMuli" v-if="(filterStatus==='0') && permission.hasPermission(`user/move-delete`)">
  55. <el-button type="primary" size="small">
  56. Selected data<!-- 所选数据 --><i class="el-icon-arrow-down el-icon--right"></i>
  57. </el-button>
  58. <el-dropdown-menu slot="dropdown">
  59. <el-dropdown-item command="del" @click.native="handleDel()">Delete in batches<!-- 批量删除 --></el-dropdown-item>
  60. </el-dropdown-menu>
  61. </el-dropdown>
  62. <el-button type="primary" size="small" @click="handleAdd" icon="el-icon-plus"
  63. v-show="permission.hasPermission(`user/move-add`)">New network transfer application<!-- 新建移网申请 -->
  64. </el-button>
  65. <el-button type="success" size="small" @click="handleExport"
  66. v-show="permission.hasPermission(`user/move-export`)">Export Excel
  67. </el-button>
  68. <pagination :total="totalCount" :page_size="pageSize" @size-change="handleSizeChange" @current-change="handleCurrentChange"></pagination>
  69. </div>
  70. </div>
  71. <el-dialog title="Modify network transfer information" :visible.sync="dialogEditFormVisible"><!-- 修改移网信息 -->
  72. <el-form :model="form" label-width="250px" class="form-dialog" v-loading="dialogEditLoading">
  73. <el-form-item label="Network transfer type"><!-- 移网类型 -->
  74. <el-select v-model="form.type" placeholder="Please select a network transfer type"><!-- 请选择移网类型 -->
  75. <el-option v-for="(item,key) in netType" :label="item.name" :value="item.id" :key="key"></el-option>
  76. </el-select>
  77. </el-form-item>
  78. <div v-if="form.type==='network'">
  79. <el-form-item label="Mobile member code"><!-- 移动会员编号 -->
  80. <el-input v-model="form.baseInfo.USER_NAME" :disabled="true"></el-input>
  81. </el-form-item>
  82. <el-form-item label="Mobile member name"><!-- 移动会员姓名 -->
  83. <el-input v-model="form.baseInfo.REAL_NAME" :disabled="true"></el-input>
  84. </el-form-item>
  85. <el-form-item label="Original superior No"><!-- 原上级编号 -->
  86. <el-input v-model="form.baseInfo.CON_USER_NAME" :disabled="true"></el-input>
  87. </el-form-item>
  88. <el-form-item label="Original superior name"><!-- 原上级姓名 -->
  89. <el-input v-model="form.baseInfo.CON_REAL_NAME" :disabled="true"></el-input>
  90. </el-form-item>
  91. <el-form-item label="Move to node member code"><!-- 移动到节点会员编号 -->
  92. <el-input v-model="form.toConUserName"></el-input>
  93. </el-form-item>
  94. <el-form-item label="Move to node member name"><!-- 移动到节点会员姓名 -->
  95. <el-input v-model="form.toConRealName"></el-input>
  96. </el-form-item>
  97. </div>
  98. <div v-if="form.type==='relation'">
  99. <el-form-item label="Mobile member code"><!-- 移动会员编号 -->
  100. <el-input v-model="form.baseInfo.USER_NAME" :disabled="true"></el-input>
  101. </el-form-item>
  102. <el-form-item label="Mobile member name"><!-- 移动会员姓名 -->
  103. <el-input v-model="form.baseInfo.REAL_NAME" :disabled="true"></el-input>
  104. </el-form-item>
  105. <el-form-item label="Original developer No"><!-- 原开拓人编号 -->
  106. <el-input v-model="form.baseInfo.REC_USER_NAME" :disabled="true"></el-input>
  107. </el-form-item>
  108. <el-form-item label="Name of original developer"><!-- 原开拓人姓名 -->
  109. <el-input v-model="form.baseInfo.REC_REAL_NAME" :disabled="true"></el-input>
  110. </el-form-item>
  111. <el-form-item label="Move to development member code"><!-- 移动到开拓会员编号 -->
  112. <el-input v-model="form.toConUserName"></el-input>
  113. </el-form-item>
  114. <el-form-item label="Move to development member name"><!-- 移动到开拓会员姓名 -->
  115. <el-input v-model="form.toConRealName"></el-input>
  116. </el-form-item>
  117. </div>
  118. <el-form-item v-if="form.type==='network'" label="Move to location"><!-- 移动到区位 -->
  119. <el-select v-model="form.location" placeholder="Move to location"><!-- 移动到区位 -->
  120. <el-option label="I. Market" value="1" key="location_1"></el-option><!-- 一市场 -->
  121. <el-option label="II. Market" value="2" key="location_2"></el-option><!-- 二市场 -->
  122. <el-option label="III. Market" value="3" key="location_3"></el-option><!-- 三市场 -->
  123. </el-select>
  124. </el-form-item>
  125. <el-form-item label="Remark"><!-- 备注 -->
  126. <el-input v-model="form.remark"></el-input>
  127. </el-form-item>
  128. </el-form>
  129. <div slot="footer" class="dialog-footer">
  130. <el-button @click="dialogEditFormVisible = false">Cancel<!-- 取 消 --></el-button>
  131. <el-button type="primary" @click.native="handleEdit">Edit<!-- 修 改 --></el-button>
  132. </div>
  133. </el-dialog>
  134. <el-dialog title="Review network transfer information" :visible.sync="dialogAuditFormVisible"><!-- 审核移网信息 -->
  135. <el-form :model="form" label-width="250px" class="form-dialog" v-loading="dialogAuditLoading">
  136. <el-form-item label="Network transfer type"><!-- 移网类型 -->
  137. <el-select v-model="form.type" placeholder="Please select a network transfer type"><!-- 请选择移网类型 -->
  138. <el-option v-for="(item,key) in netType" :label="item.name" :value="item.id" :key="key"></el-option>
  139. </el-select>
  140. </el-form-item>
  141. <div v-if="form.type==='network'">
  142. <el-form-item label="Mobile member code"><!-- 移动会员编号 -->
  143. <el-input v-model="form.baseInfo.USER_NAME" :disabled="true"></el-input>
  144. </el-form-item>
  145. <el-form-item label="Mobile member name"><!-- 移动会员姓名 -->
  146. <el-input v-model="form.baseInfo.REAL_NAME" :disabled="true"></el-input>
  147. </el-form-item>
  148. <el-form-item label="Original superior No"><!-- 原上级编号 -->
  149. <el-input v-model="form.baseInfo.CON_USER_NAME" :disabled="true"></el-input>
  150. </el-form-item>
  151. <el-form-item label="Original superior name"><!-- 原上级姓名 -->
  152. <el-input v-model="form.baseInfo.CON_REAL_NAME" :disabled="true"></el-input>
  153. </el-form-item>
  154. <el-form-item label="Move to node member code"><!-- 移动到节点会员编号 -->
  155. <el-input v-model="form.toConUserName"></el-input>
  156. </el-form-item>
  157. <el-form-item label="Move to node member name"><!-- 移动到节点会员姓名 -->
  158. <el-input v-model="form.toConRealName"></el-input>
  159. </el-form-item>
  160. </div>
  161. <div v-if="form.type==='relation'">
  162. <el-form-item label="Mobile member code"><!-- 移动会员编号 -->
  163. <el-input v-model="form.baseInfo.USER_NAME" :disabled="true"></el-input>
  164. </el-form-item>
  165. <el-form-item label="Mobile member name"><!-- 移动会员姓名 -->
  166. <el-input v-model="form.baseInfo.REAL_NAME" :disabled="true"></el-input>
  167. </el-form-item>
  168. <el-form-item label="Original developer No"><!-- 原开拓人编号 -->
  169. <el-input v-model="form.baseInfo.REC_USER_NAME" :disabled="true"></el-input>
  170. </el-form-item>
  171. <el-form-item label="Name of original developer"><!-- 原开拓人姓名 -->
  172. <el-input v-model="form.baseInfo.REC_REAL_NAME" :disabled="true"></el-input>
  173. </el-form-item>
  174. <el-form-item label="Move to development member code"><!-- 移动到开拓会员编号 -->
  175. <el-input v-model="form.toConUserName"></el-input>
  176. </el-form-item>
  177. <el-form-item label="Move to development member name"><!-- 移动到开拓会员姓名 -->
  178. <el-input v-model="form.toConRealName"></el-input>
  179. </el-form-item>
  180. </div>
  181. <el-form-item v-if="form.type==='network'" label="Move to location"><!-- 移动到区位 -->
  182. <el-select v-model="form.location" placeholder="Move to location"><!-- 移动到区位 -->
  183. <el-option label="I. Market" value="1" key="location_1"></el-option><!-- 一市场 -->
  184. <el-option label="II. Market" value="2" key="location_2"></el-option><!-- 二市场 -->
  185. <el-option label="III. Market" value="3" key="location_3"></el-option><!-- 三市场 -->
  186. </el-select>
  187. </el-form-item>
  188. <el-form-item label="Remark"><!-- 备注 -->
  189. <el-input v-model="form.remark"></el-input>
  190. </el-form-item>
  191. </el-form>
  192. <div slot="footer" class="dialog-footer">
  193. <el-button @click="dialogAuditFormVisible = false">Cancel<!-- 取 消 --></el-button>
  194. <el-button type="primary" @click.native="handleAuditPass">Adopted<!-- 通 过 --></el-button>
  195. </div>
  196. </el-dialog>
  197. </div>
  198. </template>
  199. <script>
  200. import Vue from 'vue'
  201. import network from '@/utils/network'
  202. import tool from '@/utils/tool'
  203. import store from '@/utils/vuexStore'
  204. import FilterUser from '@/components/FilterUser'
  205. import permission from '@/utils/permission'
  206. import Pagination from '@/components/Pagination'
  207. import filterHelper from '../../utils/filterHelper'
  208. export default {
  209. name: 'user_move',
  210. components: {FilterUser,Pagination},
  211. mounted() {
  212. store.state.socket.onMessageCallback = this.onMessageCallback
  213. network.getData('user/move-net-type').then(response => {
  214. this.netType = response.netType
  215. this.getData()
  216. })
  217. },
  218. data() {
  219. return {
  220. tableHeaders: null,
  221. allData: null,
  222. tableData: null,
  223. netType: [],
  224. loading: true,
  225. multipleSelection: [],
  226. currentPage: 1,
  227. totalPages: 1,
  228. totalCount: 1,
  229. pageSize: 20,
  230. tool: tool,
  231. permission: permission,
  232. filterTypes: {},
  233. filterModel: {},
  234. filterStatus: '0',
  235. dialogEditLoading: false,
  236. dialogAuditLoading: false,
  237. dialogEditFormVisible: false,
  238. dialogAuditFormVisible: false,
  239. auditId: null,
  240. form: {
  241. baseInfo: {USER_NAME: null},
  242. moveUserName: null,
  243. toConUserName: null,
  244. toConRealName: null,
  245. type: '',
  246. location: '1',
  247. remark: null,
  248. createRemark: '',
  249. auditStatus: null
  250. },
  251. percentList: {
  252. 'MOVE_PERCENT': {},
  253. },
  254. }
  255. },
  256. methods: {
  257. handleMuli(command) {
  258. if (this.multipleSelection.length < 1) {
  259. this.$message({
  260. message: 'Please select the record to operate',//请选择要操作的记录
  261. type: 'warning'
  262. })
  263. return;
  264. }
  265. },
  266. handleSelectionChange(val) {
  267. this.multipleSelection = val
  268. },
  269. handleCurrentChange(page) {
  270. this.getData(page, this.pageSize)
  271. },
  272. handleSizeChange(pageSize) {
  273. this.getData(this.currentPage, pageSize)
  274. },
  275. handleAdd() {
  276. this.$router.push({path: `/user/move-add`})
  277. },
  278. handleEditShow(row) {
  279. this.dialogEditLoading = true
  280. this.auditId = row.ID
  281. this.dialogEditFormVisible = true
  282. let vueObj = this
  283. network.getData('user/move-get', {id: this.auditId}).then(response => {
  284. vueObj.dialogEditLoading = false
  285. vueObj.form = response
  286. vueObj.form.type = String(response.type)
  287. vueObj.form.location = String(response.location)
  288. vueObj.form.createRemark = vueObj.form.remark
  289. })
  290. },
  291. handleEdit() {
  292. this.dialogEditFormVisible = false
  293. this.$message({
  294. message: 'Modifying data',//正在修改数据
  295. type: 'info'
  296. })
  297. let path = 'user/move-edit'
  298. network.postData(path, this.form).then(response => {
  299. this.$message({
  300. message: response,
  301. type: 'success'
  302. })
  303. this.getData(this.currentPage, this.pageSize)
  304. }).catch(response => {
  305. })
  306. },
  307. handleAuditShow(row) {
  308. this.dialogAuditLoading = true
  309. this.auditId = row.ID
  310. this.dialogAuditFormVisible = true
  311. let vueObj = this
  312. network.getData('user/move-get', {id: this.auditId}).then(response => {
  313. vueObj.dialogAuditLoading = false
  314. vueObj.form = response
  315. vueObj.form.type = String(response.type)
  316. vueObj.form.location = String(response.location) !== '0' ? String(response.location) : '1'
  317. vueObj.form.createRemark = vueObj.form.remark
  318. })
  319. },
  320. handleAuditPass() {
  321. this.dialogAuditFormVisible = false
  322. this.$message({
  323. message: 'Passing audit',//正在通过审核
  324. type: 'info'
  325. })
  326. this.form.auditStatus = 'true'
  327. let path = 'user/move-pass'
  328. network.postData(path, this.form).then(response => {
  329. this.$message({
  330. message: response,
  331. type: 'success'
  332. })
  333. this.getData(this.currentPage, this.pageSize)
  334. }).catch(response => {
  335. })
  336. },
  337. handleAudit(row = null, status) {
  338. let obj = this
  339. let title = 'Are you sure you want to pass the audit? note:'//确定要通过审核?备注:
  340. if (status === 'reject') {
  341. title = 'Are you sure you want to reject the approval? note:'//确定要拒绝审核?备注:
  342. }
  343. this.$prompt(title, 'Hint', {//提示
  344. confirmButtonText: 'confirm',//确定
  345. cancelButtonText: 'cancel',//取消
  346. inputValue: '',
  347. //type: 'warning',
  348. }).then(({value}) => {
  349. this.$message({
  350. message: 'Operation in progress, please wait',//正在操作,请稍后
  351. type: 'info'
  352. })
  353. let selectedIds = []
  354. if (row === null) {
  355. for (let val of obj.multipleSelection) {
  356. selectedIds.push(val.ID)
  357. }
  358. } else {
  359. selectedIds.push(row.ID)
  360. }
  361. return network.postData(`user/move-audit`, {
  362. selected: selectedIds,
  363. remark: value,
  364. auditStatus: status
  365. })
  366. }).then(response => {
  367. this.$message({
  368. message: response,
  369. type: 'success'
  370. })
  371. this.getData(this.currentPage, this.pageSize)
  372. }).catch(response => {
  373. })
  374. },
  375. handleDel(id = null) {
  376. let obj = this
  377. this.$confirm('are you sure to delete the selected data?', 'Hint', {//'确定删除选定的数据?', '提示'
  378. confirmButtonText: 'confirm',//确定
  379. cancelButtonText: 'cancel',//取消
  380. type: 'warning'
  381. }).then(() => {
  382. let selectedIds = []
  383. if (id === null) {
  384. for (let val of obj.multipleSelection) {
  385. selectedIds.push(val.ID)
  386. }
  387. } else {
  388. selectedIds.push(id)
  389. }
  390. return network.postData(`user/move-delete`, {
  391. selected: selectedIds
  392. })
  393. }).then(response => {
  394. this.$message({
  395. message: response,
  396. type: 'success'
  397. })
  398. obj.getData(obj.currentPage, obj.pageSize)
  399. }).catch(response => {
  400. })
  401. },
  402. handleFilterStatusClick(tab, event) {
  403. filterHelper.clearFilterOption(this)
  404. this.getData()
  405. },
  406. handleFilterUser(filterData) {
  407. filterHelper.handleFilterUser(this, filterData)
  408. },
  409. handleFilter() {
  410. this.getData()
  411. },
  412. getData(page, pageSize, isLoading = true) {
  413. let vueObj = this
  414. let filterData = this.filterModel
  415. filterData.filterStatus = this.filterStatus != '-1' ? `=,${this.filterStatus}` : ''
  416. network.getPageData(this, 'user/move', page, pageSize, filterData, response => {
  417. this.filterTypes = response.filterTypes
  418. vueObj.allData = response
  419. }, isLoading, ['MOVE_PERCENT'])
  420. },
  421. // getData(page, pageSize) {
  422. // let filterData = this.filterModel
  423. // filterData.filterStatus = this.filterStatus != '-1' ? `=,${this.filterStatus}` : ''
  424. // let vueObj = this
  425. // network.getPageData(this, 'user/move', page, pageSize, filterData, function (response) {
  426. // vueObj.allData = response
  427. // this.filterTypes = response.filterTypes
  428. // }, null, ['MOVE_PERCENT'])
  429. // },
  430. handleExport() {
  431. this.$confirm(`Are you sure you want to export the current data?`, 'Hint', {//`确定要导出当前数据吗?`, '提示',
  432. confirmButtonText: 'confirm',//确定
  433. cancelButtonText: 'cancel',//取消
  434. type: 'warning'
  435. }).then(() => {
  436. return network.getData(`user/move-export`, this.filterModel)
  437. }).then(response => {
  438. this.$message({
  439. message: response,
  440. type: 'success'
  441. })
  442. }).catch(response => {
  443. })
  444. },
  445. onMessageCallback(data) {
  446. if (data) {
  447. if (data.other && data.other.MODEL === 'USER_MOVE' && data.other.ID) {
  448. this.$set(this.percentList[data.other.FIELD], data.other.ID, data.percent)
  449. }
  450. if (data.percent && data.percent === 100) {
  451. //this.getData(this.currentPage, this.pageSize)
  452. }
  453. }
  454. },
  455. }
  456. }
  457. </script>
  458. <style scoped>
  459. </style>