index.vue 49 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258
  1. <template>
  2. <div :style="pageTableHeight" class="TablePage">
  3. <PublicPageHeader class="TablePage_header" :page-title="dataTitle ? dataTitle : pageTitle">
  4. <template slot="d_foot">
  5. <SimpleQuery v-if="simpleQueryFlag" :selectOptions="advancedQueryValue" :simple-query-item="simpleQueryItem" @queryValue="queryValue" />
  6. </template>
  7. <template v-if="pageAuthBtnInstall">
  8. <el-button size="small" type="primary" @click="onInstall">初始化</el-button>
  9. </template>
  10. <AuthButton :auth="pageAuthBtnAdd" />
  11. <AuthButton :auth="pageAuthBtnQuery" />
  12. <AuthButton :auth="pageAuthBtnExport" />
  13. </PublicPageHeader>
  14. <div :style="pageTableContentHeight" class="TablePage_content flex-wrap">
  15. <template v-if="!dataFlag">
  16. <div v-if="treeData.length" class="TablePage_content_left">
  17. <PublicPageTree ref="pageTree" :tree-data="treeData" :dep-math="depMath" :tree-map="treeNodeMap" @treeNodeClick="treeNodeClick" />
  18. </div>
  19. </template>
  20. <div :class="dataFlag ? 'tableAuto' : treeData.length ? 'tableSacle' : 'tableAuto'" class="TablePage_content_right">
  21. <div class="check_header">
  22. <el-scrollbar style="height: 100%" :horizontal="false">
  23. <el-form ref="ruleForm" :model="tableForm" :label-width="labelWidth">
  24. <el-row :gutter="6">
  25. <el-col v-for="(item, index) in formItemArr" :key=" index" :span="4" v-show="isShow(item.isdisplay)">
  26. <el-form-item :rules="fromDataReq(item)" :prop="item.pagecode" :label="item.pagename">
  27. <span slot="label">
  28. {{ item.pagename }}
  29. <el-tooltip :content="item.pagedescribe" placement="top">
  30. <i class="el-icon-question"></i>
  31. </el-tooltip>
  32. </span>
  33. <template v-if="fromDataType(item.datatype) == 'SELECT' || fromDataType(item.datatype) == 'SELECTS'">
  34. <el-select class="input-shadow" size="small" :multiple="fromDataType(item.datatype) == 'SELECTS'?true:false" filterable default-first-option style="width: 100%" v-model="tableForm[item.pagecode]" @change="changeSelect(item.pagecode, item)" placeholder="请选择" clearable @clear="tableForm[item.pagecode] = ''">
  35. <el-option v-for="itemParams in tableOptions[item.pagecode]" :key="itemParams[item['dropdownlistid']]" :label="itemParams[item['dropdownlistlabel']]" :value="itemParams[item['dropdownlistid']]">
  36. </el-option>
  37. </el-select>
  38. </template>
  39. <template v-else-if="fromDataType(item.datatype) == 'DROP'">
  40. <el-select class="input-shadow" size="small" multiple filterable default-first-option style="width: 100%" v-model="tableForm[item.pagecode]" @change="changeSelect(item.pagecode, item)" placeholder="请选择" clearable @clear="tableForm[item.pagecode] = ''">
  41. <el-option v-for="itemParams in tableOptions[item.pagecode]" :key="itemParams['dropdownlistid']" :label="itemParams['dropdownlistlabel']" :value="itemParams['dropdownlistid']">
  42. </el-option>
  43. </el-select>
  44. </template>
  45. <template v-else-if="fromDataType(item.datatype) == 'ICON' || fromDataType(item.datatype) == 'icon'">
  46. <el-select size="small" clearable v-model="tableForm[item.pagecode]" placeholder="请选择图标">
  47. <el-option v-for="(item,index) in formIcons" :key="index" :label="item.name" :value="item.value">
  48. <i style="font-size: 18px;" :class="item.name"></i>
  49. </el-option>
  50. </el-select>
  51. </template>
  52. <template v-else-if="fromDataType(item.datatype) == 'TEXT' || fromDataType(item.datatype) == 'VARCHAR'">
  53. <el-input size="small" @change="inputChangeHandler(item.pagecode)" v-model="tableForm[item.pagecode]"></el-input>
  54. </template>
  55. <template v-else-if="fromDataType(item.datatype) == 'TEXTAREA'">
  56. <el-input type="textarea" @focus="setText(item.pagecode)" v-model="tableForm[item.pagecode]"></el-input>
  57. </template>
  58. <template v-else-if="fromDataType(item.datatype) == 'PASSWORD'">
  59. <el-input show-password v-model="tableForm[item.pagecode]"></el-input>
  60. </template>
  61. <template v-else-if="fromDataType(item.datatype) == 'UNPASSWORD'">
  62. <el-input show-password v-model="tableForm[item.pagecode]"></el-input>
  63. </template>
  64. <template v-else-if="fromDataType(item.datatype) == 'UPLOAD'">
  65. <upload-item :id="index" :base-img="tableForm[item.pagecode]" ref="upload" />
  66. </template>
  67. <template v-else-if="fromDataType(item.datatype) == 'SWITCH'">
  68. <el-switch v-model="tableForm[item.pagecode]"></el-switch>
  69. </template>
  70. <template v-else-if="fromDataType(item.datatype) == 'CASCADER'">
  71. <el-cascader v-model="tableForm[item.pagecode]" :options="tableOptions[item.pagecode]"></el-cascader>
  72. </template>
  73. <template v-else-if="fromDataType(item.datatype) == 'CHECKBOX'">
  74. <el-checkbox-group v-model="tableForm[item.pagecode]">
  75. <el-checkbox v-for="itemParams in tableOptions[item.pagecode]" :key="itemParams[item['dropdownlistid']]" :label="itemParams[item['dropdownlistid']]" name="type">{{ [item['dropdownlistlabel']] }}</el-checkbox>
  76. </el-checkbox-group>
  77. </template>
  78. <template v-else-if="fromDataType(item.datatype) == 'RADIO'">
  79. <el-radio-group v-model="tableForm[item.pagecode]">
  80. <el-radio v-for="itemParams in tableOptions[item.pagecode]" :key="itemParams[item['dropdownlistid']]" :label="itemParams[item['dropdownlistid']]" name="type">{{ [item['dropdownlistlabel']] }}</el-radio>
  81. </el-radio-group>
  82. </template>
  83. <template v-else-if="fromDataType(item.datatype) == 'TIME'">
  84. <el-time-picker size="small" :picker-options="{selectableRange: '00:00:00 - 23:59:59'}" v-model="tableForm[item.pagecode]" placeholder="选择任意时间段" @change="inputChangeHandler(item.pagecode)">
  85. </el-time-picker>
  86. </template>
  87. <template v-else-if="fromDataType(item.datatype) == 'DATE'">
  88. <el-date-picker size="small" class="datetimes" value-format="yyyy-MM-dd" v-model="tableForm[item.pagecode]" type="date" placeholder="选择日期" @change="inputChangeHandler(item.pagecode)">
  89. </el-date-picker>
  90. </template>
  91. <template v-else-if="fromDataType(item.datatype) == 'DATETIME'">
  92. <el-date-picker size="small" class="datetimes" value-format="yyyy-MM-dd HH:mm:ss" v-model="tableForm[item.pagecode]" type="datetime" placeholder="选择日期时间" @change="inputChangeHandler(item.pagecode)">
  93. </el-date-picker>
  94. </template>
  95. <template v-else-if="fromDataType(item.datatype) == 'INT' || fromDataType(item.datatype) == 'tinyint' || fromDataType(item.datatype) == 'NUMBER'">
  96. <el-input size="small" v-model.number="tableForm[item.pagecode]" onkeyup="value=value.replace(/[^1-9]/g,'')" @change="inputChangeHandler(item.pagecode)"></el-input>
  97. </template>
  98. <template v-else>
  99. <el-input size="small" v-model="tableForm[item.pagecode]" @change="inputChangeHandler(item.pagecode)"></el-input>
  100. </template>
  101. </el-form-item>
  102. </el-col>
  103. <el-col :span="4" style="height: 41px;display: flex;align-items: center;">
  104. <el-checkbox v-model="checkedtre" label="显示树" @change="handleCheckedCitiesChange"></el-checkbox>
  105. </el-col>
  106. <el-col :span="4" style="height: 41px;display: flex;align-items: center;">
  107. <el-checkbox v-model="checkedtable" label="显示表格" @change="handleCheckedCitiesChanges"></el-checkbox>
  108. </el-col>
  109. </el-row>
  110. </el-form>
  111. </el-scrollbar>
  112. </div>
  113. <div class="TablePage_child flex-wrap">
  114. <template v-if="leftFlag">
  115. <div v-if="treeData.length" class="TablePage_content_left">
  116. <PublicPageTree ref="pageTree" :tree-data="treeData" :dep-math="depMath" :tree-map="treeNodeMap" @treeNodeClick="treeNodeClick" />
  117. </div>
  118. </template>
  119. <PublicPageTable v-if="tableFlag" ref="table" :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" :selectedDatas="selectedDatas" :selectedCheck="selectedDataCheck" :show-summary="summaryFlag" @mounted="tableMountedHandler" @load="load" @cell-click="cellClickHandler" @handleDetail="handleDetail" @handleEdit="handleEdit" @handleOther="handleOther" @handleRemove="handleRemove" @handleSelectionChange="handleSelectionChange" />
  120. </div>
  121. </div>
  122. </div>
  123. <div class="TablePage_dialog">
  124. <!--新增/编辑-->
  125. <PublicPageDialog :dialog-body="authId ? true : false " :dialog-loading="dialogLoading" :dialog-title="tableTitle" dialogSize="630px" :form-auth="formAuth" :dialog-drawer="flag" @handleClose="submitClickClose('ruleForm')" @handleSubmit="submitClickHandler">
  126. <PublicPageForm ref="ruleForm" :label-width="labelWidth" :form-pass="tableData" :form-type="tableType" :form-item="formItem" :form-data="tableForm" />
  127. </PublicPageDialog>
  128. <!--高级查询-->
  129. <PublicPageDialog dialog-title="高级查询" dialogSize="600px" :dialog-drawer="advancedDrawer" @handleClose="advancedClose" @handleSubmit="advancedTable('advancedDialogForm')">
  130. <AdvancedQuery ref="advancedDialogForm" :selectOptions="simpleQueryValue" @getAdvancedQueryData="getAdvancedQueryData" />
  131. <template slot="d_foot">
  132. <el-button size="small" @click="restCollect('advancedDialogForm')" type="warning">重置</el-button>
  133. <el-button size="small" @click="queryCollect('advancedDialogForm')" type="primary">收藏</el-button>
  134. </template>
  135. </PublicPageDialog>
  136. <!--初始化-->
  137. <PublicPageDialog dialog-title="初始化" dialogSize="600px" :dialog-drawer="installFlag" @handleClose="installClose" @handleSubmit="installTable('installForm')">
  138. <AuthInstall ref="installForm" />
  139. </PublicPageDialog>
  140. </div>
  141. </div>
  142. </template>
  143. <script>
  144. import PublicPageHeader from '@/components/PublicPageHeader'
  145. import PublicPageTable from '@/components/SimpleTable'
  146. import PublicPageTree from '@/components/publicPageTree'
  147. import PublicPageDialog from '@/components/PublicPageDialog'
  148. import PublicPageForm from '@/components/publicPageForm'
  149. import AdvancedQuery from '@/components/AdvancedQuery'
  150. import AuthButton from '@/components/AuthButton'
  151. import AuthInstall from '@/components/AuthInstall'
  152. import SimpleQuery from '@/components/SimpleQuery'
  153. import allIcons from '@/utils/icons'
  154. import { mapGetters } from 'vuex'
  155. import { Query, newData, modifyData, moveData, start, stop, startAll, stopAll } from "@/api/webApi"
  156. import { formatChange, listToTree } from '@/utils/validate'
  157. import { exportToExcel } from '@/utils/table'
  158. export default {
  159. name: 'TablePage',
  160. components: { PublicPageHeader, PublicPageTable, PublicPageDialog, PublicPageTree, PublicPageForm, AdvancedQuery, AuthButton, SimpleQuery, AuthInstall },
  161. props: {
  162. dataTitle: {
  163. type: String,
  164. default: ''
  165. },
  166. dataFlag: {
  167. type: Boolean,
  168. default: false
  169. },
  170. msgContent: {
  171. type: Object,
  172. default: () => new Object()
  173. },
  174. authId: {
  175. type: Number,
  176. default: 0
  177. },
  178. authQuery: {
  179. type: Object,
  180. default: () => new Object()
  181. },
  182. },
  183. data () {
  184. return {
  185. page: 0, //当前table页面
  186. noMore: false, //当前table是否加载到最后开关
  187. loading: false, //页面加载
  188. dialogLoading: false, //新增/编辑确认按钮禁用
  189. advancedDrawer: false, //高级查询弹框开关
  190. defaultfilter: { 1: 1 }, //默认查询参数
  191. pageQuery: {},
  192. installFlag: false,
  193. dialogFlag: false,
  194. dialogName: '', //弹框名称
  195. pageTitle: '', //页面名称
  196. treeData: [], //tree数据
  197. treeParameters: {}, //tree传递参数
  198. treeNodeMap: {}, //tree传递map
  199. tableCols: [], //表头数据
  200. tableData: [], //表格数据
  201. tableBtns: [], //表格按钮权限
  202. authBtns: [], //表格里面的操作按钮
  203. tableBtnForms: [], //表格按钮下的form表单权限
  204. dataContent: {}, //表格查询数据
  205. pageServiceId: null, //表格serviceid
  206. formItem: [], //弹框表单渲染数据
  207. flag: false, //弹框表单开关
  208. formAuth: true, //弹框表单按钮开关
  209. tableType: "add", //弹框表单弹框类型
  210. tableTitle: "新增", //弹框表单标题
  211. tableForm: {}, //弹框表单数据
  212. rmFlag: false, //删除弹框开关
  213. rmTitle: '', //删除弹框标题
  214. tableObj: {}, //删除数据
  215. tableOptions: {}, //表单数据下拉
  216. labelWidth: '120px', //表单文字距离
  217. fromDataReqCatch: [], //表单规则缓存
  218. tableKey: null,//表格主键
  219. depMath: 0,
  220. selected: 0, //是否勾选
  221. selectedDatas: [], //回显勾选的数据
  222. selectedDatasCath: [],//回显数据缓存
  223. selectedDataAlls: [], //勾选数据
  224. selectedDataCheck: {}, //勾选树-选中
  225. triggerserviceid: null, //勾选后查询的serviceid
  226. summaryFlag: false, //是否显示合计行
  227. simpleQueryFlag: false, //是否开启了简易查询
  228. simpleQueryItem: [], //简易查询表单数据项
  229. simpleQueryValue: [], //简易查询缓存值
  230. advancedQueryValue: [], //高级查询缓存值
  231. formItemArr: [],
  232. pageSizeDatas: ['outairportpage', 'landairportpage', 'transairportpage'],
  233. pageInstall: 'creatManagementPage',
  234. formIcons: allIcons,
  235. checkedtre: true,
  236. checkedtable: true,
  237. leftFlag: true,
  238. tableFlag:true
  239. }
  240. },
  241. computed: {
  242. ...mapGetters(['authArrs']),
  243. pageTableHeight () {
  244. if (this.dataFlag) return 'height:100%'
  245. if (this.authId) return 'height:calc(100vh - 180px);padding:0'
  246. return ''
  247. },
  248. pageTableContentHeight () {
  249. if (this.dataFlag) return 'height:calc(100% - 60px)'
  250. if (this.authId) return 'height:calc(100% - 130px)'
  251. return ''
  252. },
  253. pageAuthBtnQuery () {
  254. return this.tableBtns.filter(item => item.servicetype == 0)[0]
  255. },
  256. pageAuthBtnDetail () {
  257. return this.tableBtns.filter(item => item.servicetype == 1)[0]
  258. },
  259. pageAuthBtnAdd () {
  260. return this.tableBtns.filter(item => item.servicetype == 2)[0]
  261. },
  262. pageAuthBtnEdit () {
  263. return this.tableBtns.filter(item => item.servicetype == 3)[0]
  264. },
  265. pageAuthBtnDel () {
  266. return this.tableBtns.filter(item => item.servicetype == 4)[0]
  267. },
  268. pageAuthBtnOther () {
  269. return this.tableBtns.filter(item => item.servicetype == 5)[0]
  270. },
  271. pageAuthBtnExport () {
  272. return this.tableBtns.filter(item => item.servicetype == 6)[0]
  273. },
  274. pageAuthBtnInstall () {
  275. return this.pageInstall == this.$route.path.replace('/', '')
  276. },
  277. //设置新增修改表单类型
  278. fromDataType () {
  279. return function (type) {
  280. if (type) {
  281. return type.toLocaleUpperCase().replace(/\([^\)]*\)/g, "");
  282. }
  283. }
  284. },
  285. //设置新增修改表单必填类型
  286. fromDataReq () {
  287. return function (item) {
  288. const { dropdownlist, datatype, pagename, isrequired, formatrule } = item
  289. const itemType = datatype ? datatype.replace(/\([^\)]*\)/g, "") : datatype
  290. const itemReq = isrequired ? true : false
  291. const itemRule = formatrule ? true : false
  292. if (dropdownlist || dropdownlist == 0) return [{ required: itemReq, message: `${pagename}不能为空`, trigger: 'change' }]
  293. else if (itemType == 'date' || itemType == 'datetime') return [{ required: itemReq, type: 'date', message: `${pagename}不能为空`, trigger: 'change' }]
  294. else
  295. if (itemReq && itemRule) return [{ required: itemReq, message: `${pagename}不能为空`, trigger: 'blur' }, { pattern: new RegExp(formatrule), message: `请输入合法的${pagename}规则`, trigger: 'blur' }]
  296. return [{ required: itemReq, message: `${pagename}不能为空`, trigger: 'blur' }]
  297. }
  298. },
  299. },
  300. watch: {
  301. msgContent: {
  302. handler (row) {
  303. if (row && Object.keys(row).length) {
  304. const { passparameters } = row
  305. const filterItem = this.formatDefault(passparameters, row)
  306. if (!Object.keys(filterItem).length) return
  307. this.defaultfilter = filterItem
  308. this.queryTableData(true)
  309. }
  310. },
  311. deep: true,
  312. immediate: true
  313. },
  314. authQuery: {
  315. handler (row) {
  316. if (row && Object.keys(row).length) {
  317. this.defaultfilter = row
  318. this.queryTableData(true)
  319. }
  320. },
  321. deep: true,
  322. }
  323. },
  324. mounted () {
  325. this.authId ? this.pageInit(this.authId) : this.pageInit()
  326. this.queryTableData(true)
  327. },
  328. methods: {
  329. //页面初始化
  330. pageInit (authId) {
  331. //获取页面查询参数
  332. const { query } = this.$route
  333. authId ? this.pageQuery = this.authQuery : this.pageQuery = query
  334. //获取页面配置
  335. const { pagecode, qid, auth_id } = this.$route.meta
  336. //获取页面权限类型组件  pagetype 1模块  2页面  3按钮 4表格 5树形  6弹窗
  337. const pageAuths = this.authArrs
  338. if (!pageAuths.length) return
  339. let pageAuthArrs = null
  340. authId ? pageAuthArrs = pageAuths.filter(item => item['superiorid'] == authId) : pageAuthArrs = pageAuths.filter(item => item['superiorid'] == auth_id)
  341. //获取当前页面权限类型
  342. if (!pageAuthArrs.length) return
  343. //获取tree权限
  344. const pageAuthtrees = pageAuthArrs.filter(item => item.pagetype == 'tree')
  345. if (pageAuthtrees?.length) this.getPageTreeSetting(pageAuthtrees)
  346. //获取table权限
  347. const pageAuthtables = pageAuthArrs.filter(item => item.pagetype == 'table')
  348. if (pageAuthtables?.length) this.getPageTableSetting(pageAuths, pageAuthtables)
  349. //获取按钮权限
  350. const pageAuthbtns = pageAuthArrs.filter(item => item.pagetype == 'button')
  351. if (pageAuthbtns?.length) this.getPageBtnSetting(pageAuthbtns)
  352. const pageAuthFforms = pageAuthArrs.filter(item => item.pagetype == 'form')
  353. //获取form表单弹框权限
  354. if (pageAuthFforms?.length) this.getPageBtnFormSetting(pageAuths, pageAuthFforms)
  355. this.tableForm = {}
  356. for (let k in this.defaultfilter) {
  357. if (k != 1) {
  358. this.tableForm[k] = this.defaultfilter[k]
  359. }
  360. }
  361. for (let k in this.formItem) {
  362. if (this.formItem[k].defaultvalue && this.formItem[k].defaultvalue != "") {
  363. this.$set(this.tableForm, this.formItem[k].pagecode, this.formItem[k].defaultvalue)
  364. }
  365. }
  366. // this.getSelectData(this.formItem)
  367. },
  368. //根据页面tree设置数据
  369. getPageTreeSetting (pageAuthtrees) {
  370. const { defaultfilter, dropdownlistid, dropdownlistlabel } = pageAuthtrees[0]
  371. this.treeNodeMap = { nodeKey: dropdownlistid, nodeValue: dropdownlistlabel }
  372. this.treeParameters = defaultfilter
  373. this.treeData = pageAuthtrees
  374. },
  375. //根据页面table设置数据
  376. getPageTableSetting (pageAuths, pageAuthtables) {
  377. const authTableObj = pageAuthtables[0]
  378. //获取当前页面table的配置
  379. const { pagename, pageconfigurationid, serviceid, pagecode, userpermissionsid, defaultfilter, selected, triggerserviceid } = authTableObj
  380. //获取当前页面table的按钮权限
  381. const currPageBtns = pageAuths.filter(item => item['superiorid'] == pageconfigurationid && item.pagetype == 'button')
  382. if (currPageBtns?.length) this.tableBtns.push(...currPageBtns)
  383. this.authBtns = pageAuths.filter(item => item.superiorid == pageconfigurationid && item.pagetype == 'button')
  384. this.pageServiceId = Object.keys(this.msgContent).length ? this.msgContent.serviceid : serviceid;
  385. this.pageTitle = pagename
  386. this.selected = selected
  387. this.triggerserviceid = triggerserviceid
  388. this.defaultfilter = Object.keys(this.pageQuery).length ? this.pageQuery : defaultfilter ? this.formatDefault(defaultfilter, authTableObj) : { 1: 1 }
  389. const tableColumnArrs = pageAuths.filter(item => item['superiorid'] == pageconfigurationid && item['pagetype'] == 'column')
  390. this.getColumnData(tableColumnArrs)
  391. },
  392. //根据页面按钮设置数据
  393. getPageBtnSetting (pageAuthbtns) {
  394. this.tableBtns.push(...pageAuthbtns)
  395. },
  396. //根据页面按钮设置表单form数据
  397. getPageBtnFormSetting (pageAuths, pageAuthForms) {
  398. const { pageconfigurationid } = [...pageAuthForms][0]
  399. const tableColumnArrs = pageAuths.filter(item => item['superiorid'] == pageconfigurationid && item['pagetype'] == 'column')
  400. const formItemCopy = tableColumnArrs.filter((item) => item.isdisplay != 0)
  401. this.formItem = _.orderBy(formItemCopy, ['displaynumber'], ['asc'])
  402. console.log(this.formItem)
  403. },
  404. //获取表头数据
  405. getColumnData (columnArrs = []) {
  406. const returnData = [...columnArrs]
  407. this.$store.dispatch('auth/changeAuthMsg', returnData)
  408. const tableColsCopy = _.cloneDeep(returnData).filter((item) => item.isdisplay != 0)
  409. const tableColsCopyOrder = _.orderBy(tableColsCopy, ['displaynumber'], ['asc'])
  410. // const formItemCopy = _.cloneDeep(returnData).filter((item) => item.isdisplay == 2 || item.isdisplay == 3);
  411. // this.formItem = _.orderBy(formItemCopy, ['displaynumber'], ['asc']);
  412. const msgCounts = tableColsCopyOrder.filter(item => item.enablecount)
  413. const simpleQueryItem = _.cloneDeep(returnData).filter((item) => item.easysearch && item.isfiltercolumn)
  414. if (msgCounts.length) {
  415. this.summaryFlag = true
  416. }
  417. this.tableCols = listToTree(tableColsCopyOrder, 'groupid', 'pagecode')
  418. const columncode = returnData.find(
  419. (item) => item.isprimarykey == 1
  420. )
  421. if (columncode && Object.keys(columncode).length) {
  422. this.tableKey = columncode['pagecode']
  423. }
  424. if (simpleQueryItem?.length) {
  425. this.simpleQueryFlag = true
  426. this.simpleQueryItem = simpleQueryItem
  427. }
  428. },
  429. //获取tree点击
  430. treeNodeClick (data) {
  431. const nrow = _.cloneDeep(data)
  432. this.selectedDataCheck = nrow
  433. if (this.selected) {
  434. this.treeCheckQuery(nrow)
  435. } else {
  436. const values = Object.values(data)
  437. const filterItem = this.formatDefault(this.treeParameters, data)
  438. if (!Object.keys(filterItem).length) return
  439. this.defaultfilter = values.includes(-1) || values.includes('全部') ? { 1: 1 } : filterItem
  440. this.queryTableData(true)
  441. }
  442. },
  443. //存在勾选-点击树-查询
  444. async treeCheckQuery (data) {
  445. const values = Object.values(data)
  446. const filterItem = this.formatDefault(this.treeParameters, data)
  447. if (!Object.keys(filterItem).length) return
  448. const itemFilter = values.includes(-1) || values.includes('全部') ? { 1: 1 } : filterItem
  449. const datacontent = { filter: itemFilter }
  450. this.loading = true
  451. this.selectedDataAlls = []
  452. try {
  453. const { code, returnData } = await Query({
  454. page: 1,
  455. serviceid: this.triggerserviceid,
  456. datacontent,
  457. event: '0',
  458. size: 9999
  459. });
  460. if (code == 0) {
  461. const datas = []
  462. this.tableData.filter(item => {
  463. [...returnData].forEach(pt => {
  464. if (item['serviceid'] == pt['serviceid']) {
  465. datas.push(item)
  466. }
  467. })
  468. })
  469. this.selectedDatas = [...datas]
  470. this.selectedDatasCath = [...returnData]
  471. this.selectedDataAlls.push([...datas])
  472. } else {
  473. this.$message.error("获取表格数据失败")
  474. }
  475. } catch (error) {
  476. this.$message.error("获取表格数据失败")
  477. }
  478. this.loading = false
  479. },
  480. //格式化传递参数数据
  481. formatDefault (item, data = {}) {
  482. if (typeof item != 'string') return {}
  483. const filterItem = {}
  484. const parameters = item.replace('{', '').replace('}', '')
  485. const parametersSplit = parameters?.split(',')
  486. parametersSplit.map(item => {
  487. const [key, val] = item?.split(':')
  488. filterItem[key] = data[val]
  489. })
  490. return filterItem
  491. },
  492. //根据按钮权限查询表单权限
  493. findBtntoForm (pageroute) {
  494. return this.tableBtnForms.filter(item => item.pagecode == pageroute)
  495. },
  496. //表单-查看
  497. handleDetail (row) {
  498. const { openmode, pageroute } = this.pageAuthBtnDetail
  499. if (!openmode) return
  500. if (openmode != 2) this.autoBtnClick(openmode, pageroute)
  501. this.flag = true
  502. this.formAuth = false
  503. this.tableType = "detail"
  504. this.tableTitle = "查看"
  505. this.tableForm = _.cloneDeep(row)
  506. },
  507. //表单-新增
  508. async handleAdd () {
  509. const { openmode, pageroute, pagecode } = this.pageAuthBtnAdd
  510. if (!openmode) return
  511. // if (!this.findBtntoForm(pageroute).length) return
  512. if (openmode != 2) this.autoBtnClick(openmode, pageroute)
  513. // const { pageconfigurationid } = this.findBtntoForm(pageroute)[0]
  514. // const pageAuths = this.authArrs
  515. // const tableColumnArrs = pageAuths.filter(item => item['superiorid'] == pageconfigurationid && item['pagetype'] == 'column')
  516. // this.dialogName = pageroute
  517. if (pagecode == 'startBtnAll') {
  518. if (!Object.keys(this.selectedDataCheck).length) {
  519. this.$message.error('请选中容器后再操作')
  520. return
  521. }
  522. const { code, message } = await startAll(this.selectedDataCheck)
  523. if (code == 0) {
  524. this.$message.success(message || '操作成功')
  525. this.queryTableData(true)
  526. } else {
  527. this.$message.error(message || '操作失败')
  528. }
  529. } else {
  530. if (this.$refs['ruleForm']) {
  531. this.$nextTick(() => {
  532. this.$refs['ruleForm'].restForm()
  533. })
  534. }
  535. this.flag = true;
  536. this.tableType = "add"
  537. this.tableTitle = "新增"
  538. this.tableForm = {}
  539. for (let k in this.defaultfilter) {
  540. if (k != 1) {
  541. this.tableForm[k] = this.defaultfilter[k]
  542. }
  543. }
  544. for (let k in this.formItem) {
  545. if (this.formItem[k].defaultvalue && this.formItem[k].defaultvalue != "") {
  546. this.$set(this.tableForm, this.formItem[k].pagecode, this.formItem[k].defaultvalue)
  547. }
  548. }
  549. }
  550. // this.formItem = tableColumnArrs.filter(item => item.isdisplay == 1)
  551. },
  552. formatData (returnData) {
  553. return typeof returnData == 'string' ? this.retParse(returnData) : returnData
  554. },
  555. retParse (returnData) {
  556. try {
  557. return JSON.parse(returnData) ? JSON.parse(returnData) : returnData
  558. } catch (error) {
  559. return returnData
  560. }
  561. },
  562. //回显下拉数据
  563. resPassters (obj) {
  564. const narr = []
  565. const nitem = _.cloneDeep(obj)
  566. const { passparameters } = nitem
  567. if (!passparameters) return ''
  568. const ndata = this.formatData(passparameters)
  569. if (!Array.isArray(ndata)) return ''
  570. ndata.map(({ pageconfigurationid }) => { narr.push(pageconfigurationid) })
  571. return narr
  572. },
  573. //表格-编辑
  574. handleEdit (row) {
  575. const { openmode, pageroute } = this.pageAuthBtnEdit
  576. if (!openmode) return
  577. if (openmode != 2) this.autoBtnClick(openmode, pageroute)
  578. this.flag = true
  579. this.tableType = "edit"
  580. this.tableTitle = "编辑"
  581. const nrow = _.cloneDeep(row)
  582. if (nrow.passparameters) {
  583. nrow.passparameters = this.resPassters(row)
  584. }
  585. if (nrow.dropdownlist) {
  586. nrow.dropdownlist = Number(nrow.dropdownlist)
  587. }
  588. this.tableForm = nrow
  589. },
  590. //表格-其他类型按钮操作
  591. handleOther (row, auth) {
  592. const { openmode, pageroute, passparameters } = this.pageAuthBtnOther
  593. if (!openmode) return
  594. if (openmode != 2) this.autoBtnClick(openmode, pageroute, passparameters, row)
  595. const { pagecode } = auth
  596. if (pagecode == 'stopBtn' || pagecode == 'startBtn') {
  597. this.stateChange(row)
  598. }
  599. },
  600. //启动 & 停止
  601. async stateChange (row) {
  602. const { runstate, serviceid, containercode } = row
  603. const filter = { serviceid, containercode }
  604. if (runstate == 1) {
  605. const { code, returnData } = await stop(filter)
  606. if (code == 0) {
  607. this.$message.success(returnData || '操作成功')
  608. this.queryTableData(true)
  609. } else {
  610. this.$message.error(returnData || '操作失败')
  611. }
  612. } else {
  613. const { code, returnData } = await start(filter)
  614. if (code == 0) {
  615. this.$message.success(returnData || '操作成功')
  616. this.queryTableData(true)
  617. } else {
  618. this.$message.error(returnData || '操作失败')
  619. }
  620. }
  621. },
  622. //表格-删除
  623. handleRemove (row) {
  624. const { openmode, pageroute } = this.pageAuthBtnDel
  625. if (!openmode) return
  626. if (openmode != 2) this.autoBtnClick(openmode, pageroute)
  627. let name = ''
  628. const nrow = _.cloneDeep(row)
  629. for (const key in nrow) {
  630. if (key.includes('name')) {
  631. name = nrow[key] || ''
  632. }
  633. }
  634. this.$confirm(`确认要删除 ${name} 这条信息吗?`, '提示', {
  635. confirmButtonText: '确定',
  636. cancelButtonText: '取消',
  637. type: 'warning'
  638. }).then(() => {
  639. this.generalDataReception(3, row, this.tableKey)
  640. }).catch(() => {
  641. this.$message({
  642. type: 'info',
  643. message: '已取消删除'
  644. });
  645. });
  646. },
  647. //表格-勾选
  648. handleSelectionChange (val) {
  649. this.selectedDataAlls.push([...val])
  650. const ndatas = _.cloneDeep(this.selectedDataAlls)
  651. if (ndatas.length == 1) {
  652. this.sendCheckData('add', ndatas[0])
  653. } else {
  654. const [nitems1, nitems2] = [ndatas.at(-1), ndatas.at(-2)]
  655. if (nitems1.length > nitems2.length) {
  656. const res = this.findRepetData(nitems1, nitems2)
  657. this.sendCheckData('add', res)
  658. } else {
  659. const res = this.findRepetData(nitems1, nitems2)
  660. this.sendCheckData('del', res)
  661. }
  662. }
  663. },
  664. findRepetData (nitems1, nitems2) {
  665. const key = 'serviceid'
  666. const res = [...nitems1, ...nitems2].filter(
  667. (item) =>
  668. !(
  669. nitems1.some((p) => item[key] == p[key]) &&
  670. nitems2.some((c) => item[key] == c[key])
  671. )
  672. )
  673. return res
  674. },
  675. //发送新增编辑删除数据
  676. sendCheckData (types, data, key = 'serviceid') {
  677. const event = types == 'add' ? 1 : types == 'edit' ? 2 : 3
  678. const querys = []
  679. const items = _.cloneDeep(data)
  680. const { serviceid, servicename } = items[0]
  681. const { containerid, containercode, containername } = this.selectedDataCheck
  682. const pitem = {
  683. serviceid,
  684. servicename,
  685. containerid,
  686. containercode,
  687. containername
  688. }
  689. const params = {
  690. serviceid: this.triggerserviceid,
  691. datacontent: formatChange(pitem, event, key),
  692. event,
  693. }
  694. if (event == 3) {
  695. params.datacontent[0].filter.containerid = containerid
  696. delete params.datacontent[0].value.containerid
  697. }
  698. event == 1 ? querys.push(newData(params)) : querys.push(moveData(params))
  699. this.getAnscyData(querys)
  700. },
  701. //获取异步数据
  702. async getAnscyData (allResult) {
  703. if (!allResult.length) return
  704. this.loading = true
  705. const results = await Promise.allSettled(allResult)
  706. results.map((item) => {
  707. const { status, value } = item
  708. if (status == 'fulfilled') {
  709. const { code } = value
  710. if (code == 0) {
  711. this.treeCheckQuery(this.selectedDataCheck)
  712. this.$message.success('操作成功')
  713. } else {
  714. this.$message.error('操作失败')
  715. }
  716. } else {
  717. this.$message.error('网络错误')
  718. }
  719. })
  720. // this.loading = false
  721. },
  722. // 新增/编辑-取消
  723. submitClickClose (formName) {
  724. this.formAuth = true
  725. this.flag = false
  726. this.$refs[formName].restForm()
  727. },
  728. // 新增/编辑-确认
  729. submitClickHandler () {
  730. const flag = this.$refs["ruleForm"].submitClickHandler()
  731. if (flag) this.tableType == "add" ? this.generalDataReception(1, this.tableForm) : this.generalDataReception(2, this.tableForm, this.tableKey)
  732. },
  733. //表格-增/删/改
  734. async generalDataReception (event, data, key) {
  735. this.dialogLoading = true
  736. try {
  737. const params = {
  738. serviceid: this.pageServiceId,
  739. datacontent: formatChange(data, event, key),
  740. event: `${event}`,
  741. };
  742. const { code } =
  743. event == 1
  744. ? await newData(params)
  745. : event == 2
  746. ? await modifyData(params)
  747. : await moveData(params);
  748. if (code == 0) {
  749. this.$message.success("操作成功")
  750. this.flag = false
  751. this.rmFlag = false
  752. this.dialogLoading = false
  753. this.tableObj = {}
  754. this.tableForm = {}
  755. this.resetTable()
  756. this.load();
  757. this.depMath = Math.random()
  758. // this.$router.go(0);
  759. } else {
  760. this.$message.error("操作失败");
  761. this.flag = false
  762. this.rmFlag = false
  763. this.dialogLoading = false
  764. this.tableObj = {};
  765. this.tableForm = {};
  766. }
  767. } catch (error) {
  768. this.flag = false
  769. this.rmFlag = false
  770. this.dialogLoading = false
  771. this.tableObj = {}
  772. this.tableForm = {}
  773. }
  774. },
  775. autoBtnClick (id, url, passparameters, row = {}) {
  776. switch (Number(id)) {
  777. case 1:
  778. if (passparameters && Object.keys(row).length) {
  779. const filterItem = this.formatDefault(passparameters, row)
  780. this.$router.push({
  781. path: url,
  782. query: filterItem
  783. })
  784. }
  785. break;
  786. case 2:
  787. this.$router.push(url)
  788. break;
  789. default:
  790. break;
  791. }
  792. },
  793. //高级查询-弹框打开
  794. async handleQuery () {
  795. const { openmode, pageroute, pagecode } = this.pageAuthBtnQuery
  796. if (!openmode) return
  797. if (pagecode == 'stopBtnAll') {
  798. if (!Object.keys(this.selectedDataCheck).length) {
  799. this.$message.error('请选中容器后再操作')
  800. return
  801. }
  802. const { code, message } = await stopAll(this.selectedDataCheck)
  803. if (code == 0) {
  804. this.$message.success(message || '操作成功')
  805. this.queryTableData(true)
  806. } else {
  807. this.$message.error(message || '操作失败')
  808. }
  809. } else {
  810. if (openmode != 3) this.advancedDrawer = true // this.autoBtnClick(openmode, pageroute)
  811. }
  812. },
  813. //简易查询-确定
  814. queryValue (dataRules) {
  815. const arr = [...dataRules]
  816. if (arr && arr.length) {
  817. arr.forEach(item => {
  818. item.value = typeof item.value == 'string' ? item.value.replace(/\s*/g, "") : item.value
  819. })
  820. }
  821. this.defaultfilter = arr.length ? arr : { 1: 1 }
  822. this.simpleQueryValue = arr
  823. this.queryTableData(true)
  824. },
  825. //高级查询-确定
  826. advancedTable (refName) {
  827. this.$refs[refName].advancedQueryHandler()
  828. },
  829. //高级查询-取消
  830. advancedClose () {
  831. this.advancedDrawer = false
  832. // this.defaultfilter = { 1: 1 }
  833. // this.queryTableData(true)
  834. },
  835. //初始化
  836. onInstall () {
  837. if (!Object.keys(this.selectedDataCheck).length) {
  838. this.$message.error('请选中权限后再操作')
  839. return
  840. }
  841. const { pagetype } = this.selectedDataCheck
  842. if (pagetype != 'table') {
  843. this.$message.error('请选择表格后再操作')
  844. return
  845. }
  846. this.installFlag = true
  847. },
  848. //初始化-关闭
  849. installClose () {
  850. this.installFlag = false
  851. },
  852. //初始化-确定
  853. installTable () {
  854. this.installSubmit()
  855. this.installFlag = false
  856. },
  857. async installSubmit () {
  858. const { pageconfigurationid } = this.selectedDataCheck
  859. const { code, returnData } = await Query({
  860. serviceid: 134,
  861. datacontent: {
  862. tableName: this.$refs['installForm'].tableinfo,
  863. datasourceid: this.$refs['installForm'].datasourceid,
  864. pageconfigurationid
  865. },
  866. deletedatacontent: {
  867. datacontent: [
  868. {
  869. filter: {
  870. superiorid: pageconfigurationid
  871. },
  872. value: {}
  873. }
  874. ],
  875. event: '3'
  876. },
  877. event: '0'
  878. })
  879. if (code == 0 && returnData?.length) {
  880. this.$message.success('数据初始化成功')
  881. this.$refs['pageTree'].pageInit()
  882. this.queryTableData(true)
  883. this.$refs['installForm'].tableinfo = ''
  884. this.$refs['installForm'].datasourceid = ''
  885. }
  886. },
  887. //高级查询-确定-数据
  888. getAdvancedQueryData (dataRules) {
  889. const arr = [...dataRules]
  890. if (arr && arr.length) {
  891. arr.forEach(item => {
  892. item.value = typeof item.value == 'string' ? item.value.replace(/\s*/g, "") : item.value
  893. })
  894. }
  895. this.defaultfilter = arr
  896. this.advancedQueryValue = arr
  897. this.queryTableData(true)
  898. },
  899. //高级查询-收藏
  900. queryCollect (refName) {
  901. this.$refs[refName].advancedQueryCollect()
  902. },
  903. //高级查询-重置
  904. restCollect (refName) {
  905. this.defaultfilter = { 1: 1 }
  906. this.queryTableData(true)
  907. this.$refs[refName].advancedRestCollect()
  908. },
  909. // 给表头单元格加上 ascending 或 descending 使用 element 自带的排序箭头变色
  910. headerCellClass () {
  911. return function ({ row, column, rowIndex, columnIndex }) {
  912. const classes = []
  913. const rule = this.tableDataSortRules[column.property]
  914. if (rule) {
  915. classes.push(rule)
  916. }
  917. return classes.join(' ')
  918. }
  919. },
  920. //添加-表格-行样式
  921. rowClass () {
  922. return function ({ row, rowIndex }) {
  923. const classes = []
  924. if (row.deleted === 'DEL') {
  925. classes.push('bgl-deleted')
  926. }
  927. return classes.join(' ')
  928. }
  929. },
  930. //添加-表格-单元格样式
  931. cellClass () {
  932. return function ({ row, column, rowIndex, columnIndex }) {
  933. const classes = []
  934. const { property } = column
  935. const ndata = _.cloneDeep(this.tableCols).filter(item => item.pagecode == property)
  936. if (ndata?.length) {
  937. const { pageroute } = ndata[0]
  938. if (pageroute) classes.push('cell-click')
  939. }
  940. return classes.join(' ')
  941. }
  942. },
  943. formatPass (pass = []) {
  944. if (typeof pass != 'string') return {}
  945. const ndata = JSON.parse(pass)
  946. if (!ndata) return {}
  947. const nitem = {}
  948. ndata.map(item => {
  949. const ns = Object.values(item)
  950. nitem[ns[0]] = ns[1]
  951. })
  952. return nitem
  953. },
  954. //添加-表格-单元格-点击事件
  955. cellClickHandler (row, column, cell, event) {
  956. const { property } = column
  957. const ndata = _.cloneDeep(this.tableCols).filter(item => item.pagecode == property)
  958. const params = {}
  959. if (ndata?.length) {
  960. const { defaultfilter, pageroute, passparameters } = ndata[0]
  961. if (!pageroute) return
  962. if (defaultfilter || passparameters) {
  963. if (passparameters) {
  964. // const nitem = this.formatPass(passparameters)
  965. const passparametersArray = JSON.parse(passparameters)
  966. passparametersArray.map(item => {
  967. if (row[item.pagecode]) {
  968. const alias = item.alias
  969. const pagecode = item.pagecode
  970. if (alias) {
  971. params[alias] = row[item['pagecode']]
  972. }
  973. else {
  974. params[pagecode] = row[item['pagecode']]
  975. }
  976. }
  977. })
  978. this.$router.push({
  979. path: pageroute,
  980. query: params
  981. })
  982. return
  983. }
  984. if (defaultfilter) {
  985. const filterItem = this.formatDefault(defaultfilter, row)
  986. this.$router.push({
  987. path: pageroute,
  988. query: filterItem
  989. })
  990. return
  991. }
  992. }
  993. else {
  994. this.$router.push(pageroute)
  995. }
  996. }
  997. },
  998. //导出
  999. handleExport () {
  1000. if (!this.tableData.length) {
  1001. this.$message.info('无数据')
  1002. return
  1003. }
  1004. const table = this.$refs['table'].$el.cloneNode(true)
  1005. const fileName = this.pageTitle + '.xlsx'
  1006. exportToExcel(table, this.pageTitle, fileName)
  1007. },
  1008. tableFormatter () {
  1009. return function (row, column, cellValue) {
  1010. switch (column.property) {
  1011. case 'departureTime':
  1012. return (cellValue ?? '').replace('T', ' ')
  1013. case 'deleted':
  1014. return cellValue === 'DEL' ? cellValue : ''
  1015. case 'activated':
  1016. return Number(cellValue) === 1 ? '激活' : '未激活'
  1017. default:
  1018. return cellValue ?? ''
  1019. }
  1020. }
  1021. },
  1022. tableMountedHandler (refName, ref) {
  1023. this.$refs[refName] = ref
  1024. },
  1025. resetTable () {
  1026. this.dataContent = {}
  1027. this.page = 0;
  1028. this.noMore = false;
  1029. this.tableData = [];
  1030. },
  1031. load () {
  1032. if (this.noMore || this.loading) {
  1033. return
  1034. }
  1035. this.queryTableData()
  1036. },
  1037. async queryTableData (jumpSing = false) {
  1038. if (jumpSing) {
  1039. const initialize = _.once(this.resetTable)
  1040. initialize()
  1041. }
  1042. this.loading = true;
  1043. const datacontent = { filter: this.defaultfilter }
  1044. const parmas = {
  1045. page: ++this.page,
  1046. serviceid: this.pageServiceId,
  1047. datacontent,
  1048. event: '0'
  1049. }
  1050. if (this.selected || this.pageSizeDatas.includes(this.$route.path.replace('/', ''))) {
  1051. parmas.size = 9999
  1052. }
  1053. try {
  1054. const { code, returnData } = await Query(parmas);
  1055. if (code == 0) {
  1056. if (returnData.length === 0) {
  1057. this.page--
  1058. this.noMore = true
  1059. }
  1060. this.tableData.push(...returnData)
  1061. this.formItemArr = this.tableData
  1062. } else {
  1063. this.page--
  1064. this.noMore = true
  1065. this.$message.error("获取表格数据失败")
  1066. }
  1067. } catch (error) {
  1068. this.page--
  1069. this.noMore = true
  1070. }
  1071. if (this.selected || this.pageSizeDatas.includes(this.$route.path.replace('/', ''))) {
  1072. this.noMore = true
  1073. }
  1074. this.loading = false
  1075. },
  1076. //获取表单下拉数据
  1077. getSelectData (formItem = []) {
  1078. if (!formItem.length || !Array.isArray(formItem)) return
  1079. const formItemCopy = _.cloneDeep(formItem)
  1080. const [allResult, allResultKey, allResultList] = [[], [], []]
  1081. formItemCopy.map(({ dropdownlist, pagecode, defaultparameters }) => {
  1082. if (((dropdownlist || dropdownlist == 0) && dropdownlist != "")) {
  1083. const datacontent = defaultparameters ? { filter: this.formatDefault(defaultparameters) } : { filter: { 1: 1 } }
  1084. const params = {
  1085. dropdownlist,
  1086. pagecode,
  1087. datacontent
  1088. }
  1089. allResultList.push(params)
  1090. }
  1091. })
  1092. if (allResultList?.length) {
  1093. this.reduceHttp(allResultList, formItemCopy)
  1094. } else {
  1095. this.formItemArr = formItemCopy
  1096. }
  1097. },
  1098. //格式化传递参数数据
  1099. formatDefault (item) {
  1100. if (typeof item != 'string') return {}
  1101. const filterItem = {}
  1102. const parameters = item.replace('{', '').replace('}', '')
  1103. const parametersSplit = parameters?.split(',')
  1104. parametersSplit.map(item => {
  1105. const [key, val] = item?.split(':')
  1106. filterItem[key] = val
  1107. })
  1108. return filterItem
  1109. },
  1110. //去除重复请求
  1111. reduceHttp (arr = [], formItem = []) {
  1112. const datas = _.cloneDeep(arr)
  1113. const dataMap = new Map()
  1114. const [columnArrs1, columnArrs2, allResult, allResultKey] = [[], [], [], []]
  1115. if (!datas.length) return
  1116. datas.map(item => {
  1117. const { datacontent, dropdownlist } = item
  1118. const nameter = Object.entries(datacontent.filter)[0]
  1119. const namekey = dropdownlist + nameter[0] + nameter[1]
  1120. if (!dataMap.get(namekey)) {
  1121. dataMap.set(namekey, item)
  1122. columnArrs1.push(item)
  1123. } else {
  1124. columnArrs2.push(item)
  1125. }
  1126. })
  1127. columnArrs1.map(({ dropdownlist, pagecode, datacontent }) => {
  1128. allResultKey.push(pagecode)
  1129. allResult.push(Query({ serviceid: dropdownlist, datacontent, event: '0', page: 1, size: 9999 }))
  1130. })
  1131. this.getAnscyData(allResultKey, allResult, _.cloneDeep(formItem), _.cloneDeep(columnArrs1), _.cloneDeep(columnArrs2))
  1132. },
  1133. //获取异步数据
  1134. async getAnscyData (allResultKey = [], allResult = [], formItem = [], columnArrs1 = [], columnArrs2 = []) {
  1135. this.loading = true
  1136. if (allResult.length && allResultKey.length) {
  1137. const results = await Promise.allSettled(allResult)
  1138. const resultDatas = []
  1139. results.map((item, index) => {
  1140. const { status, value } = item
  1141. if (status == 'fulfilled') {
  1142. const { code, returnData } = value
  1143. const nitem = {
  1144. pagecode: allResultKey[index],
  1145. dropdownlist: columnArrs1[index].dropdownlist,
  1146. returnData
  1147. }
  1148. resultDatas.push(nitem)
  1149. this.tableOptions[allResultKey[index]] = code == 0 && returnData?.length ? this.formatData(returnData) : []
  1150. }
  1151. })
  1152. if (resultDatas?.length) this.serRepets(_.cloneDeep(resultDatas), columnArrs1, columnArrs2)
  1153. this.formItemArr = formItem
  1154. } else {
  1155. this.formItemArr = formItem
  1156. }
  1157. this.setPassters(this.formPass)
  1158. this.loading = false
  1159. },
  1160. //设置重复下拉数据
  1161. serRepets (resultDatas = [], columnArrs1, columnArrs2) {
  1162. resultDatas.map(item => {
  1163. columnArrs1.map(ci => {
  1164. if (item.pagecode == ci.pagecode) {
  1165. item.datacontent = ci.datacontent
  1166. }
  1167. })
  1168. })
  1169. const result = [...resultDatas]
  1170. result.map(item => {
  1171. const { datacontent, dropdownlist, returnData } = item
  1172. const nameterItem = Object.entries(datacontent.filter)[0]
  1173. const namekeyItem = dropdownlist + nameterItem[0] + nameterItem[1]
  1174. columnArrs2.map(ci => {
  1175. const { datacontent, dropdownlist, pagecode } = ci
  1176. const nameterCi = Object.entries(datacontent.filter)[0]
  1177. const namekeyCi = dropdownlist + nameterCi[0] + nameterCi[1]
  1178. if (namekeyItem == namekeyCi) {
  1179. this.tableOptions[pagecode] = _.cloneDeep(returnData)
  1180. }
  1181. })
  1182. })
  1183. },
  1184. //设置下拉数据
  1185. setPassters (array = []) {
  1186. const passitem = this.formItemArr.filter(item => item.pagecode == 'passparameters')
  1187. if (passitem?.length) {
  1188. const ndata = _.cloneDeep(array)
  1189. const passitemkey = passitem[0]
  1190. passitemkey.datatype = 'DROP'
  1191. ndata.map(item => {
  1192. item.dropdownlistid = item.pageconfigurationid
  1193. item.dropdownlistlabel = item.pagename
  1194. })
  1195. this.tableOptions['passparameters'] = ndata
  1196. this.formPassCopy = ndata
  1197. }
  1198. },
  1199. isShow (isdisplay) {
  1200. let show = false
  1201. if (eval(isdisplay)) {
  1202. show = true
  1203. }
  1204. else {
  1205. show = false
  1206. }
  1207. return show
  1208. },
  1209. handleCheckedCitiesChange (value) {
  1210. this.leftFlag = value
  1211. },
  1212. handleCheckedCitiesChanges (value) {
  1213. this.tableFlag = value
  1214. }
  1215. },
  1216. }
  1217. </script>
  1218. <style lang="scss" scoped>
  1219. .TablePage {
  1220. height: calc(100vh - 90px);
  1221. padding: 20px;
  1222. &_content {
  1223. margin-top: 20px;
  1224. height: calc(100vh - 190px);
  1225. &_left {
  1226. width: 360px;
  1227. margin-right: 20px;
  1228. }
  1229. &_right {
  1230. height: calc(100% - 100px);
  1231. }
  1232. .tableAuto {
  1233. width: 100%;
  1234. }
  1235. .tableSacle {
  1236. width: calc(100% - 380px);
  1237. }
  1238. .check_header{
  1239. width: 100%;
  1240. height:100px;
  1241. overflow: hidden;
  1242. }
  1243. .TablePage{
  1244. &_child {
  1245. height:100%;
  1246. &_left {
  1247. width: 360px;
  1248. margin-right: 20px;
  1249. }
  1250. }
  1251. }
  1252. }
  1253. }
  1254. </style>