index.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721
  1. <template>
  2. <div :style="pageTableHeight" class="TablePage">
  3. <PublicPageHeader class="TablePage_header" :page-title="dataTitle ? dataTitle : pageTitle">
  4. <AuthButton :auth="pageAuthBtnAdd" />
  5. <AuthButton :auth="pageAuthBtnQuery" />
  6. </PublicPageHeader>
  7. <div :style="pageTableContentHeight" class="TablePage_content flex-wrap">
  8. <template v-if="!dataFlag">
  9. <div v-if="treeData.length" class="TablePage_content_left">
  10. <PublicPageTree :tree-data="treeData" :dep-math="depMath" :tree-map="treeNodeMap" @treeNodeClick="treeNodeClick" />
  11. </div>
  12. </template>
  13. <div :class="dataFlag ? 'tableAuto' : treeData.length ? 'tableSacle' : 'tableAuto'" class="TablePage_content_right">
  14. <PublicPageTable :loading="loading" :selected="selected" :table-cols="tableCols" :table-btns="authBtns" :data="tableData" :header-cell-class-name="headerCellClass" :row-class-name="rowClass" :cell-class-name="cellClass" :formatter="tableFormatter" show-summary @mounted="tableMountedHandler" @load="load" @cell-click="cellClickHandler" @handleDetail="handleDetail" @handleEdit="handleEdit" @handleOther="handleOther" @handleRemove="handleRemove" @handleSelectionChange="handleSelectionChange" />
  15. </div>
  16. </div>
  17. <div class="TablePage_dialog">
  18. <!--新增/编辑-->
  19. <PublicPageDialog :dialog-loading="dialogLoading" :dialog-title="tableTitle" dialogSize="630px" :form-auth="formAuth" :dialog-drawer="flag" @handleClose="submitClickClose('ruleForm')" @handleSubmit="submitClickHandler">
  20. <PublicPageForm ref="ruleForm" :label-width="labelWidth" :form-pass="tableData" :form-type="tableType" :form-item="formItem" :form-data="tableForm" />
  21. </PublicPageDialog>
  22. <!--高级查询-->
  23. <PublicPageDialog dialog-title="高级查询" dialogSize="600px" :dialog-drawer="advancedDrawer" @handleClose="advancedClose" @handleSubmit="advancedTable('advancedDialogForm')">
  24. <AdvancedQuery ref="advancedDialogForm" @getAdvancedQueryData="getAdvancedQueryData" />
  25. <template slot="d_foot">
  26. <el-button size="small" @click="restCollect('advancedDialogForm')" type="warning">重置</el-button>
  27. <el-button size="small" @click="queryCollect('advancedDialogForm')" type="primary">收藏</el-button>
  28. </template>
  29. </PublicPageDialog>
  30. </div>
  31. </div>
  32. </template>
  33. <script>
  34. import PublicPageHeader from '@/components/PublicPageHeader'
  35. import PublicPageTable from '@/components/SimpleTable'
  36. import PublicPageTree from '@/components/publicPageTree'
  37. import PublicPageDialog from '@/components/PublicPageDialog'
  38. import PublicPageForm from '@/components/publicPageForm'
  39. import AdvancedQuery from '@/components/AdvancedQuery'
  40. import AuthButton from '@/components/AuthButton'
  41. import { mapGetters } from 'vuex'
  42. import { Query, newData, modifyData, moveData, start, stop, startAll, stopAll } from "@/api/webApi"
  43. import { formatChange } from '@/utils/validate'
  44. export default {
  45. name: 'TablePage',
  46. components: { PublicPageHeader, PublicPageTable, PublicPageDialog, PublicPageTree, PublicPageForm, AdvancedQuery, AuthButton },
  47. props: {
  48. dataTitle: {
  49. type: String,
  50. default: ''
  51. },
  52. dataFlag: {
  53. type: Boolean,
  54. default: false
  55. },
  56. msgContent: {
  57. type: Object,
  58. default: () => new Object()
  59. }
  60. },
  61. data () {
  62. return {
  63. page: 0, //当前table页面
  64. noMore: false, //当前table是否加载到最后开关
  65. loading: false, //页面加载
  66. dialogLoading: false, //新增/编辑确认按钮禁用
  67. advancedDrawer: false, //高级查询弹框开关
  68. defaultfilter: { 1: 1 }, //默认查询参数
  69. pageQuery: {},
  70. dialogFlag: false,
  71. dialogName: '', //弹框名称
  72. pageTitle: '', //页面名称
  73. treeData: [], //tree数据
  74. treeParameters: {}, //tree传递参数
  75. treeNodeMap: {}, //tree传递map
  76. tableCols: [], //表头数据
  77. tableData: [], //表格数据
  78. tableBtns: [], //表格按钮权限
  79. authBtns: [], //表格里面的操作按钮
  80. tableBtnForms: [], //表格按钮下的form表单权限
  81. dataContent: {}, //表格查询数据
  82. pageServiceId: null, //表格serviceid
  83. formItem: [], //弹框表单渲染数据
  84. flag: false, //弹框表单开关
  85. formAuth: true, //弹框表单按钮开关
  86. tableType: "add", //弹框表单弹框类型
  87. tableTitle: "新增", //弹框表单标题
  88. tableForm: {}, //弹框表单数据
  89. rmFlag: false, //删除弹框开关
  90. rmTitle: '', //删除弹框标题
  91. tableObj: {}, //删除数据
  92. tableOptions: {}, //表单数据下拉
  93. labelWidth: '120px', //表单文字距离
  94. fromDataReqCatch: [], //表单规则缓存
  95. tableKey: null,//表格主键
  96. depMath: 0,
  97. selected: 0, //是否勾选
  98. selectedDatas: [], //勾选数据
  99. triggerserviceid: null, //勾选后查询的serviceid
  100. }
  101. },
  102. computed: {
  103. ...mapGetters(['authArrs']),
  104. pageTableHeight () {
  105. if (this.dataFlag) return 'height:100%'
  106. return ''
  107. },
  108. pageTableContentHeight () {
  109. if (this.dataFlag) return 'height:calc(100% - 60px)'
  110. return ''
  111. },
  112. pageAuthBtnQuery () {
  113. return this.tableBtns.filter(item => item.servicetype == 0)[0]
  114. },
  115. pageAuthBtnDetail () {
  116. return this.tableBtns.filter(item => item.servicetype == 1)[0]
  117. },
  118. pageAuthBtnAdd () {
  119. return this.tableBtns.filter(item => item.servicetype == 2)[0]
  120. },
  121. pageAuthBtnEdit () {
  122. return this.tableBtns.filter(item => item.servicetype == 3)[0]
  123. },
  124. pageAuthBtnDel () {
  125. return this.tableBtns.filter(item => item.servicetype == 4)[0]
  126. },
  127. pageAuthBtnOther () {
  128. return this.tableBtns.filter(item => item.servicetype == 5)[0]
  129. },
  130. },
  131. watch: {
  132. msgContent: {
  133. handler (row) {
  134. if (row && Object.keys(row).length) {
  135. const { passparameters } = row
  136. const filterItem = this.formatDefault(passparameters, row)
  137. if (!Object.keys(filterItem).length) return
  138. this.defaultfilter = filterItem
  139. this.queryTableData(true)
  140. }
  141. },
  142. deep: true,
  143. immediate: true
  144. }
  145. },
  146. mounted () {
  147. this.pageInit()
  148. },
  149. methods: {
  150. //页面初始化
  151. pageInit () {
  152. //获取页面查询参数
  153. const { query } = this.$route
  154. this.pageQuery = query
  155. //获取页面配置
  156. const { pagecode, qid, auth_id } = this.$route.meta
  157. //获取页面权限类型组件  pagetype 1模块  2页面  3按钮 4表格 5树形  6弹窗
  158. const pageAuths = this.authArrs
  159. if (!pageAuths.length) return
  160. //获取当前页面权限类型
  161. const pageAuthArrs = pageAuths.filter(item => item['superiorid'] == auth_id)
  162. if (!pageAuthArrs.length) return
  163. //获取tree权限
  164. const pageAuthtrees = pageAuthArrs.filter(item => item.pagetype == 'tree')
  165. if (pageAuthtrees?.length) this.getPageTreeSetting(pageAuthtrees)
  166. //获取table权限
  167. const pageAuthtables = pageAuthArrs.filter(item => item.pagetype == 'table')
  168. if (pageAuthtables?.length) this.getPageTableSetting(pageAuths, pageAuthtables)
  169. //获取按钮权限
  170. const pageAuthbtns = pageAuthArrs.filter(item => item.pagetype == 'button')
  171. if (pageAuthbtns?.length) this.getPageBtnSetting(pageAuthbtns)
  172. const pageAuthFforms = pageAuthArrs.filter(item => item.pagetype == 'form')
  173. //获取form表单弹框权限
  174. if (pageAuthFforms?.length) this.getPageBtnFormSetting(pageAuths, pageAuthFforms)
  175. },
  176. //根据页面tree设置数据
  177. getPageTreeSetting (pageAuthtrees) {
  178. const { defaultfilter, dropdownlistid, dropdownlistlabel } = pageAuthtrees[0]
  179. this.treeNodeMap = { nodeKey: dropdownlistid, nodeValue: dropdownlistlabel }
  180. this.treeParameters = defaultfilter
  181. this.treeData = pageAuthtrees
  182. },
  183. //根据页面table设置数据
  184. getPageTableSetting (pageAuths, pageAuthtables) {
  185. const authTableObj = pageAuthtables[0]
  186. //获取当前页面table的配置
  187. const { pagename, pageconfigurationid, serviceid, pagecode, userpermissionsid, defaultfilter, selected, triggerserviceid } = authTableObj
  188. //获取当前页面table的按钮权限
  189. const currPageBtns = pageAuths.filter(item => item['superiorid'] == pageconfigurationid && item.pagetype == 'button')
  190. if (currPageBtns?.length) this.tableBtns.push(...currPageBtns)
  191. this.authBtns = pageAuths.filter(item => item.superiorid == pageconfigurationid && item.pagetype == 'button')
  192. this.pageServiceId = Object.keys(this.msgContent).length ? this.msgContent.serviceid : serviceid;
  193. this.pageTitle = pagename
  194. this.selected = selected
  195. this.triggerserviceid = triggerserviceid
  196. this.defaultfilter = Object.keys(this.pageQuery).length ? this.pageQuery : defaultfilter ? this.formatDefault(defaultfilter, authTableObj) : { 1: 1 }
  197. const tableColumnArrs = pageAuths.filter(item => item['superiorid'] == pageconfigurationid && item['pagetype'] == 'column')
  198. this.getColumnData(tableColumnArrs)
  199. },
  200. //根据页面按钮设置数据
  201. getPageBtnSetting (pageAuthbtns) {
  202. this.tableBtns.push(...pageAuthbtns)
  203. },
  204. //根据页面按钮设置表单form数据
  205. getPageBtnFormSetting (pageAuths, pageAuthForms) {
  206. const { pageconfigurationid } = [...pageAuthForms][0]
  207. const tableColumnArrs = pageAuths.filter(item => item['superiorid'] == pageconfigurationid && item['pagetype'] == 'column')
  208. const formItemCopy = tableColumnArrs.filter((item) => item.isdisplay != 0)
  209. this.formItem = _.orderBy(formItemCopy, ['displaynumber'], ['asc'])
  210. },
  211. //获取表头数据
  212. getColumnData (columnArrs = []) {
  213. const returnData = [...columnArrs]
  214. this.$store.dispatch('auth/changeAuthMsg', returnData)
  215. const tableColsCopy = _.cloneDeep(returnData).filter((item) => item.isdisplay != 0);
  216. const tableColsCopyOrder = _.orderBy(tableColsCopy, ['displaynumber'], ['asc']);
  217. // const formItemCopy = _.cloneDeep(returnData).filter((item) => item.isdisplay == 2 || item.isdisplay == 3);
  218. // this.formItem = _.orderBy(formItemCopy, ['displaynumber'], ['asc']);
  219. this.tableCols = tableColsCopyOrder;
  220. const columncode = returnData.find(
  221. (item) => item.isprimarykey == 1
  222. );
  223. if (columncode && Object.keys(columncode).length) {
  224. this.tableKey = columncode['pagecode']
  225. }
  226. },
  227. //获取tree点击
  228. treeNodeClick (data) {
  229. if (this.selected) {
  230. this.treeCheckQuery(data)
  231. } else {
  232. const values = Object.values(data)
  233. const filterItem = this.formatDefault(this.treeParameters, data)
  234. if (!Object.keys(filterItem).length) return
  235. this.defaultfilter = values.includes(-1) || values.includes('全部') ? { 1: 1 } : filterItem
  236. this.queryTableData(true)
  237. }
  238. },
  239. //存在勾选-点击树-查询
  240. async treeCheckQuery (data) {
  241. const values = Object.values(data)
  242. const filterItem = this.formatDefault(this.treeParameters, data)
  243. if (!Object.keys(filterItem).length) return
  244. const itemFilter = values.includes(-1) || values.includes('全部') ? { 1: 1 } : filterItem
  245. const datacontent = { filter: itemFilter }
  246. try {
  247. const { code, returnData } = await Query({
  248. page: 1,
  249. serviceid: this.triggerserviceid,
  250. datacontent,
  251. event: '0',
  252. size: 9999
  253. });
  254. if (code == 0) {
  255. this.selectedDatas = [...returnData]
  256. } else {
  257. this.$message.error("获取表格数据失败")
  258. }
  259. } catch (error) {
  260. this.$message.error("获取表格数据失败")
  261. }
  262. },
  263. //格式化传递参数数据
  264. formatDefault (item, data = {}) {
  265. if (typeof item != 'string') return {}
  266. const filterItem = {}
  267. const parameters = item.replace('{', '').replace('}', '')
  268. const parametersSplit = parameters?.split(',')
  269. parametersSplit.map(item => {
  270. const [key, val] = item?.split(':')
  271. filterItem[key] = data[val]
  272. })
  273. return filterItem
  274. },
  275. //根据按钮权限查询表单权限
  276. findBtntoForm (pageroute) {
  277. return this.tableBtnForms.filter(item => item.pagecode == pageroute)
  278. },
  279. //表单-查看
  280. handleDetail (row) {
  281. const { openmode, pageroute } = this.pageAuthBtnDetail
  282. if (!openmode) return
  283. if (openmode != 2) this.autoBtnClick(openmode, pageroute)
  284. this.flag = true
  285. this.formAuth = false
  286. this.tableType = "detail"
  287. this.tableTitle = "查看"
  288. this.tableForm = _.cloneDeep(row)
  289. },
  290. //表单-新增
  291. async handleAdd () {
  292. const { openmode, pageroute, pagecode } = this.pageAuthBtnAdd
  293. if (!openmode) return
  294. // if (!this.findBtntoForm(pageroute).length) return
  295. if (openmode != 2) this.autoBtnClick(openmode, pageroute)
  296. // const { pageconfigurationid } = this.findBtntoForm(pageroute)[0]
  297. // const pageAuths = this.authArrs
  298. // const tableColumnArrs = pageAuths.filter(item => item['superiorid'] == pageconfigurationid && item['pagetype'] == 'column')
  299. // this.dialogName = pageroute
  300. if (pagecode == 'startBtnAll') {
  301. const { code, message } = await startAll({})
  302. if (code == 0) {
  303. this.$message.success(message || '操作成功')
  304. this.queryTableData(true)
  305. } else {
  306. this.$message.error(message || '操作失败')
  307. }
  308. } else {
  309. if (this.$refs['ruleForm']) {
  310. this.$nextTick(() => {
  311. this.$refs['ruleForm'].restForm()
  312. })
  313. }
  314. this.flag = true;
  315. this.tableType = "add"
  316. this.tableTitle = "新增"
  317. this.tableForm = {}
  318. for (let k in this.defaultfilter) {
  319. if (k != 1) {
  320. this.tableForm[k] = this.defaultfilter[k]
  321. }
  322. }
  323. }
  324. // this.formItem = tableColumnArrs.filter(item => item.isdisplay == 1)
  325. },
  326. formatData (returnData) {
  327. return typeof returnData == 'string' ? this.retParse(returnData) : returnData
  328. },
  329. retParse (returnData) {
  330. try {
  331. return JSON.parse(returnData) ? JSON.parse(returnData) : returnData
  332. } catch (error) {
  333. return returnData
  334. }
  335. },
  336. //回显下拉数据
  337. resPassters (obj) {
  338. const narr = []
  339. const nitem = _.cloneDeep(obj)
  340. const { passparameters } = nitem
  341. if (!passparameters) return ''
  342. const ndata = this.formatData(passparameters)
  343. if (!Array.isArray(ndata)) return ''
  344. ndata.map(({ pageconfigurationid }) => { narr.push(pageconfigurationid) })
  345. return narr
  346. },
  347. //表格-编辑
  348. handleEdit (row) {
  349. const { openmode, pageroute } = this.pageAuthBtnEdit
  350. if (!openmode) return
  351. if (openmode != 2) this.autoBtnClick(openmode, pageroute)
  352. this.flag = true
  353. this.tableType = "edit"
  354. this.tableTitle = "编辑"
  355. const nrow = _.cloneDeep(row)
  356. if (nrow.passparameters) {
  357. nrow.passparameters = this.resPassters(row)
  358. }
  359. this.tableForm = nrow
  360. },
  361. //表格-其他类型按钮操作
  362. handleOther (row, auth) {
  363. const { openmode, pageroute, passparameters } = this.pageAuthBtnOther
  364. if (!openmode) return
  365. if (openmode != 2) this.autoBtnClick(openmode, pageroute, passparameters, row)
  366. const { pagecode } = auth
  367. if (pagecode == 'stopBtn' || pagecode == 'startBtn') {
  368. this.stateChange(row)
  369. }
  370. },
  371. //启动 & 停止
  372. async stateChange (row) {
  373. const { runstate, serviceid } = row
  374. const filter = { serviceid }
  375. if (runstate == 1) {
  376. const { code, message } = await stop(filter)
  377. if (code == 0) {
  378. this.$message.success(message)
  379. this.queryTableData(true)
  380. } else {
  381. this.$message.error(message)
  382. }
  383. } else {
  384. const { code, message } = await start(filter)
  385. if (code == 0) {
  386. this.$message.success(message)
  387. this.queryTableData(true)
  388. } else {
  389. this.$message.error(message)
  390. }
  391. }
  392. },
  393. //表格-删除
  394. handleRemove (row) {
  395. const { openmode, pageroute } = this.pageAuthBtnDel
  396. if (!openmode) return
  397. if (openmode != 2) this.autoBtnClick(openmode, pageroute)
  398. let name = ''
  399. const nrow = _.cloneDeep(row)
  400. for (const key in nrow) {
  401. if (key.includes('name')) {
  402. name = nrow[key] || ''
  403. }
  404. }
  405. this.$confirm(`确认要删除 ${name} 这条信息吗?`, '提示', {
  406. confirmButtonText: '确定',
  407. cancelButtonText: '取消',
  408. type: 'warning'
  409. }).then(() => {
  410. this.generalDataReception(3, row, this.tableKey)
  411. }).catch(() => {
  412. this.$message({
  413. type: 'info',
  414. message: '已取消删除'
  415. });
  416. });
  417. },
  418. //表格-勾选
  419. handleSelectionChange (val) {
  420. console.log(val)
  421. },
  422. // 新增/编辑-取消
  423. submitClickClose (formName) {
  424. this.formAuth = true
  425. this.flag = false
  426. this.$refs[formName].restForm()
  427. },
  428. // 新增/编辑-确认
  429. submitClickHandler () {
  430. const flag = this.$refs["ruleForm"].submitClickHandler()
  431. if (flag) this.tableType == "add" ? this.generalDataReception(1, this.tableForm) : this.generalDataReception(2, this.tableForm, this.tableKey)
  432. },
  433. //表格-增/删/改
  434. async generalDataReception (event, data, key) {
  435. this.dialogLoading = true
  436. try {
  437. const params = {
  438. serviceid: this.pageServiceId,
  439. datacontent: formatChange(data, event, key),
  440. event: `${event}`,
  441. };
  442. const { code } =
  443. event == 1
  444. ? await newData(params)
  445. : event == 2
  446. ? await modifyData(params)
  447. : await moveData(params);
  448. if (code == 0) {
  449. this.$message.success("操作成功")
  450. this.flag = false
  451. this.rmFlag = false
  452. this.dialogLoading = false
  453. this.tableObj = {}
  454. this.tableForm = {}
  455. this.resetTable()
  456. this.load();
  457. this.depMath = Math.random()
  458. // this.$router.go(0);
  459. } else {
  460. this.$message.error("操作失败");
  461. this.flag = false
  462. this.rmFlag = false
  463. this.dialogLoading = false
  464. this.tableObj = {};
  465. this.tableForm = {};
  466. }
  467. } catch (error) {
  468. this.flag = false
  469. this.rmFlag = false
  470. this.dialogLoading = false
  471. this.tableObj = {}
  472. this.tableForm = {}
  473. }
  474. },
  475. autoBtnClick (id, url, passparameters, row = {}) {
  476. switch (Number(id)) {
  477. case 1:
  478. if (passparameters && Object.keys(row).length) {
  479. const filterItem = this.formatDefault(passparameters, row)
  480. this.$router.push({
  481. path: url,
  482. query: filterItem
  483. })
  484. }
  485. break;
  486. case 2:
  487. this.$router.push(url)
  488. break;
  489. default:
  490. break;
  491. }
  492. },
  493. //高级查询-弹框打开
  494. async handleQuery () {
  495. const { openmode, pageroute, pagecode } = this.pageAuthBtnQuery
  496. if (!openmode) return
  497. if (pagecode == 'stopBtnAll') {
  498. const { code, message } = await stopAll({})
  499. if (code == 0) {
  500. this.$message.success(message || '操作成功')
  501. this.queryTableData(true)
  502. } else {
  503. this.$message.error(message || '操作失败')
  504. }
  505. } else {
  506. if (openmode != 3) this.advancedDrawer = true // this.autoBtnClick(openmode, pageroute)
  507. }
  508. },
  509. //高级查询-确定
  510. advancedTable (refName) {
  511. this.$refs[refName].advancedQueryHandler()
  512. },
  513. //高级查询-取消
  514. advancedClose () {
  515. this.advancedDrawer = false
  516. // this.defaultfilter = { 1: 1 }
  517. // this.queryTableData(true)
  518. },
  519. //高级查询-确定-数据
  520. getAdvancedQueryData (dataRules) {
  521. console.log(dataRules)
  522. const arr = [...dataRules]
  523. if (arr && arr.length) {
  524. arr.forEach(item => {
  525. item.value = item.value.replace(/\s*/g, "")
  526. })
  527. }
  528. this.defaultfilter = arr
  529. this.queryTableData(true)
  530. },
  531. //高级查询-收藏
  532. queryCollect (refName) {
  533. this.$refs[refName].advancedQueryCollect()
  534. },
  535. //高级查询-重置
  536. restCollect (refName) {
  537. this.defaultfilter = { 1: 1 }
  538. this.queryTableData(true)
  539. this.$refs[refName].advancedRestCollect()
  540. },
  541. // 给表头单元格加上 ascending 或 descending 使用 element 自带的排序箭头变色
  542. headerCellClass () {
  543. return function ({ row, column, rowIndex, columnIndex }) {
  544. const classes = []
  545. const rule = this.tableDataSortRules[column.property]
  546. if (rule) {
  547. classes.push(rule)
  548. }
  549. return classes.join(' ')
  550. }
  551. },
  552. //添加-表格-行样式
  553. rowClass () {
  554. return function ({ row, rowIndex }) {
  555. const classes = []
  556. if (row.deleted === 'DEL') {
  557. classes.push('bgl-deleted')
  558. }
  559. return classes.join(' ')
  560. }
  561. },
  562. //添加-表格-单元格样式
  563. cellClass () {
  564. return function ({ row, column, rowIndex, columnIndex }) {
  565. const classes = []
  566. const { property } = column
  567. const ndata = _.cloneDeep(this.tableCols).filter(item => item.pagecode == property)
  568. if (ndata?.length) {
  569. const { pageroute } = ndata[0]
  570. if (pageroute) classes.push('cell-click')
  571. }
  572. return classes.join(' ')
  573. }
  574. },
  575. formatPass (pass = []) {
  576. if (typeof pass != 'string') return {}
  577. const ndata = JSON.parse(pass)
  578. if (!ndata) return {}
  579. const nitem = {}
  580. ndata.map(item => {
  581. const ns = Object.values(item)
  582. nitem[ns[0]] = ns[1]
  583. })
  584. return nitem
  585. },
  586. //添加-表格-单元格-点击事件
  587. cellClickHandler (row, column, cell, event) {
  588. const { property } = column
  589. const ndata = _.cloneDeep(this.tableCols).filter(item => item.pagecode == property)
  590. const params = {}
  591. if (ndata?.length) {
  592. const { defaultfilter, pageroute, passparameters } = ndata[0]
  593. if (!pageroute) return
  594. if (defaultfilter || passparameters) {
  595. if (passparameters) {
  596. // const nitem = this.formatPass(passparameters)
  597. const passparametersArray = JSON.parse(passparameters)
  598. passparametersArray.map(item => {
  599. if (row[item.pagecode]) {
  600. const alias = item.alias
  601. const pagecode = item.pagecode
  602. if (alias) {
  603. params[alias] = row[item['pagecode']]
  604. }
  605. else {
  606. params[pagecode] = row[item['pagecode']]
  607. }
  608. }
  609. })
  610. this.$router.push({
  611. path: pageroute,
  612. query: params
  613. })
  614. return
  615. }
  616. if (defaultfilter) {
  617. const filterItem = this.formatDefault(defaultfilter, row)
  618. this.$router.push({
  619. path: pageroute,
  620. query: filterItem
  621. })
  622. return
  623. }
  624. }
  625. else {
  626. this.$router.push(pageroute)
  627. }
  628. }
  629. },
  630. tableFormatter () {
  631. return function (row, column, cellValue) {
  632. switch (column.property) {
  633. case 'departureTime':
  634. return (cellValue ?? '').replace('T', ' ')
  635. case 'deleted':
  636. return cellValue === 'DEL' ? cellValue : ''
  637. case 'activated':
  638. return Number(cellValue) === 1 ? '激活' : '未激活'
  639. default:
  640. return cellValue ?? ''
  641. }
  642. }
  643. },
  644. tableMountedHandler (refName, ref) {
  645. this.$refs[refName] = ref
  646. },
  647. resetTable () {
  648. this.dataContent = {}
  649. this.page = 0;
  650. this.noMore = false;
  651. this.tableData = [];
  652. },
  653. load () {
  654. if (this.noMore || this.loading) {
  655. return
  656. }
  657. this.queryTableData()
  658. },
  659. async queryTableData (jumpSing = false) {
  660. if (jumpSing) {
  661. const initialize = _.once(this.resetTable)
  662. initialize()
  663. }
  664. this.loading = true;
  665. const datacontent = { filter: this.defaultfilter }
  666. const parmas = {
  667. page: ++this.page,
  668. serviceid: this.pageServiceId,
  669. datacontent,
  670. event: '0'
  671. }
  672. if (this.selected) {
  673. parmas.size = 9999
  674. }
  675. try {
  676. const { code, returnData } = await Query(parmas);
  677. if (code == 0) {
  678. if (returnData.length === 0) {
  679. this.page--;
  680. this.noMore = true;
  681. }
  682. this.tableData.push(...returnData);
  683. } else {
  684. this.page--;
  685. this.$message.error("获取表格数据失败");
  686. }
  687. } catch (error) {
  688. this.page--;
  689. }
  690. // this.noMore = true;
  691. this.loading = false;
  692. }
  693. }
  694. }
  695. </script>
  696. <style lang="scss" scoped>
  697. .TablePage {
  698. height: calc(100vh - 90px);
  699. padding: 20px;
  700. &_content {
  701. margin-top: 20px;
  702. height: calc(100vh - 190px);
  703. &_left {
  704. width: 360px;
  705. margin-right: 20px;
  706. }
  707. &_right {
  708. }
  709. .tableAuto {
  710. width: 100%;
  711. }
  712. .tableSacle {
  713. width: calc(100% - 380px);
  714. }
  715. }
  716. }
  717. </style>