widget.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701
  1. <template>
  2. <el-row>
  3. <el-col :span="8" style="height:100%;">
  4. <el-row class="halfHeight pbstb">
  5. <tf-title>PBS编码规则模板
  6. <template #append>
  7. <el-button type="primary" size="mini" icon="el-icon-circle-plus-outline">添加</el-button>
  8. <el-button type="danger" size="mini" icon="el-icon-delete">删除</el-button>
  9. </template>
  10. </tf-title>
  11. <tf-table highlight-current-row @selection-change="selectChange" :pagination="pagination" @page-change="onPageChange" :data="pbsmodels" @row-click="(row)=>{rowClick(row.id)}">
  12. <el-table-column type="selection" width="50px"></el-table-column>
  13. <el-table-column label="序号" type="index" width="50px"></el-table-column>
  14. <el-table-column label="名称" prop="name"></el-table-column>
  15. <el-table-column label="状态" prop="isUse" :formatter="(row,column,cellValue)=>{
  16. return cellValue==='0'?'未使用':'使用中'
  17. }"></el-table-column>
  18. </tf-table>
  19. </el-row>
  20. <el-row class="halfHeight">
  21. <tf-title>PBS结构网预览</tf-title>
  22. <el-tree :expand-on-click-node='false' :default-expand-all="true" node-key="id" :data="pbsTreeData" :props="treeProps"></el-tree>
  23. </el-row>
  24. </el-col>
  25. <el-col :span="16" class="pbsDefine">
  26. <tf-title>PBS编码规则定义</tf-title>
  27. <el-row class="preview">
  28. <el-row><span>编码预览:{{codePreview}}</span></el-row>
  29. <el-row class="previewBtn">
  30. <div class="btngroup" v-for="(item,index) in selectedPbs.pbsLevelList" :key="item.alevel">
  31. <el-button type="primary" @click="selectPBSNode(item.alevel)" plain size="medium">{{item.codeView}}</el-button>
  32. <el-select size="mini" placeholder="" v-model="item.connector" v-if="index!==selectedPbs.pbsLevelList.length-1">
  33. <el-option value="" label=""></el-option>
  34. <el-option value="." label="."></el-option>
  35. </el-select>
  36. </div>
  37. </el-row>
  38. <el-divider></el-divider>
  39. </el-row>
  40. <el-row class="nodeDefine">
  41. <el-form label-width="80px" :model="currentLevel">
  42. <el-form-item label="节点级别">
  43. <el-select class="col16" v-model="currentLevel.alevel">
  44. <el-option v-for="level in selectedPbs.alevel" :key="level" :value="level" :label="level+'级'"></el-option>
  45. </el-select>
  46. </el-form-item>
  47. <el-form-item label="节点类型">
  48. <el-input class="col16" type="text" v-model="currentLevel.levelName"></el-input>
  49. </el-form-item>
  50. <el-form-item label="编码说明">
  51. <el-input class="col16" type="text" v-model="currentLevel.contents"></el-input>
  52. </el-form-item>
  53. <el-form-item label="编码定义">
  54. <el-button size="mini" icon="el-icon-plus" type="primary" @click="addNodeCodeWidget(null,true)" plain></el-button>
  55. </el-form-item>
  56. <el-form-item>
  57. <el-row style="marginBottom:20px;" :gutter="20" v-for="(item,index) in currentLevel.pbsCodelist" :key='index'>
  58. <el-col :span="5">
  59. <el-select size="small" v-model="item.codeType" style="width:100%">
  60. <el-option value="1" label="业务对象类型"></el-option>
  61. <el-option value="2" label="输入框"></el-option>
  62. <el-option value="3" label="流水号"></el-option>
  63. </el-select>
  64. </el-col>
  65. <el-col :span="5" v-if="item.codeType==='1'">
  66. <el-input size="small" v-model="item.boName" placeholder="点击选择业务对象"></el-input>
  67. </el-col>
  68. <el-col :span="10" v-else-if="item.codeType==='2'">
  69. <el-col :span="12" style="paddingLeft:0">
  70. <el-input size="small" v-model="item.codeLength" placeholder="编码长度"></el-input>
  71. </el-col>
  72. <el-col :span="12">
  73. <el-input size="small" v-model="item.contents" placeholder="编码说明"></el-input>
  74. </el-col>
  75. </el-col>
  76. <el-col :span="5" v-else-if="item.codeType==='3'">
  77. <el-input size="small" v-model="item.codeLength" placeholder="编码长度"></el-input>
  78. </el-col>
  79. <el-col :span="3">
  80. <el-button size="small" icon="el-icon-delete" type="danger" @click="removeNodeCodeWidget(index)"></el-button>
  81. </el-col>
  82. </el-row>
  83. </el-form-item>
  84. </el-form>
  85. </el-row>
  86. <el-row v-if="selectedPbs.isUse==='0'" class="footerBtns">
  87. <el-divider></el-divider>
  88. <el-button type="primary">提交</el-button>
  89. <el-button type="primary" style="margin-right:100px;">清空</el-button>
  90. </el-row>
  91. </el-col>
  92. <tf-dialog title="添加PBS模板" :visible.sync='isAddModelShow' width='600px'>
  93. <el-form v-model="addModelForm" label-width="100px">
  94. <el-form-item label="名称">
  95. <el-input v-model="addModelForm.name"></el-input>
  96. </el-form-item>
  97. <el-form-item label="层级">
  98. <el-select v-model="addModelForm.alevel">
  99. <el-option value="3" label="3"></el-option>
  100. <el-option value="4" label="4"></el-option>
  101. <el-option value="5" label="5"></el-option>
  102. <el-option value="6" label="6"></el-option>
  103. <el-option value="7" label="7"></el-option>
  104. <el-option value="8" label="8"></el-option>
  105. <el-option value="9" label="9"></el-option>
  106. <el-option value="10" label="10"></el-option>
  107. </el-select>
  108. </el-form-item>
  109. <el-form-item label="备注">
  110. <el-input :rows="2" type="textarea" v-model="addModelForm.remark"></el-input>
  111. </el-form-item>
  112. </el-form>
  113. <div slot="footer" style="text-align:right">
  114. <el-button size="small" @click="isAddModelShow=false">取消</el-button>
  115. <el-button size="small" type="primary" @click="submitAddModel">提交</el-button>
  116. </div>
  117. </tf-dialog>
  118. </el-row>
  119. </template>
  120. <script lang="ts">
  121. /**
  122. * 模板信息
  123. */
  124. interface pbsDefine {
  125. name: string
  126. isUse: string
  127. id: number
  128. pbsLevelList: Array<pbsStruct>
  129. alevel?: number
  130. create_user?: string
  131. create_time?: string
  132. code_view?: string
  133. }
  134. /**
  135. * 模板层级信息
  136. */
  137. interface pbsStruct {
  138. id?: number
  139. levelName: string
  140. contents: string
  141. codeView: string
  142. connector: string
  143. alevel: number
  144. pbsCodelist?: Array<pbsNodeCode>
  145. pbsId: number
  146. }
  147. /**
  148. * 节点编码定义
  149. */
  150. interface pbsNodeCode {
  151. codeType: string
  152. codeLength?: number
  153. id?: string
  154. contents?: string
  155. boId?: number
  156. }
  157. /**
  158. * PBS模板
  159. */
  160. import { Vue, Prop, Watch, Component } from 'vue-property-decorator'
  161. import { getDefaultPagination } from '@/utils/constant'
  162. import {
  163. getPBScodeRuleList_api,
  164. deletePbsModelByIds,
  165. addPBScodeRule_api,
  166. getPBScodeRuleInfo_api,
  167. PutPBScodeRule_api
  168. } from '@/api/APIs'
  169. @Component({
  170. name: 'PbsManagement'
  171. })
  172. export default class PbsManagement extends Vue {
  173. /**分页 */
  174. pagination = getDefaultPagination()
  175. /**勾选的模板 */
  176. selectModels = []
  177. /**树组件配置 */
  178. treeProps = {
  179. children: 'children',
  180. label: 'name'
  181. }
  182. /**新增模板参数 */
  183. addModelForm = {
  184. alevel: '3',
  185. name: '',
  186. remark: ''
  187. }
  188. /**结构树 */
  189. pbsTreeData = []
  190. /**当前选中的模板 */
  191. selectedPbs: pbsDefine = {
  192. name: '',
  193. isUse: '0',
  194. id: undefined,
  195. pbsLevelList: [],
  196. alevel: undefined,
  197. create_user: '',
  198. create_time: '',
  199. code_view: ''
  200. }
  201. /**当前选中节点 */
  202. currentLevel: pbsStruct = {
  203. id: undefined,
  204. levelName: '',
  205. contents: '',
  206. codeView: '',
  207. connector: '',
  208. alevel: undefined,
  209. pbsCodelist: [],
  210. pbsId: undefined
  211. }
  212. /**模板列表 */
  213. pbsmodels = []
  214. /**编码预览 */
  215. codePreview = ''
  216. /**新增弹窗 */
  217. isAddModelShow = false
  218. mounted() {
  219. this.getModelList()
  220. }
  221. /**分页事件 */
  222. onPageChange(pagination) {
  223. this.pagination = { ...this.pagination, ...pagination }
  224. this.getModelList()
  225. }
  226. /**PBS编码模板列表 */
  227. getModelList() {
  228. getPBScodeRuleList_api(this.pagination).then((result) => {
  229. if (result.code === 1) {
  230. this.pbsmodels = result.result.records
  231. //默认展示第一行
  232. if (this.pbsmodels.length > 0) {
  233. this.rowClick(this.pbsmodels[0].id)
  234. }
  235. const { current, size, total } = result.result
  236. this.pagination = { current, size, total }
  237. }
  238. })
  239. }
  240. /**
  241. * 该方式用于预览pbs编码结构树
  242. * @param {number} pbsID pbs模板ID
  243. * @param {boolean} selectNode 是否定位到节点层级
  244. * @param {number} level 节点层级
  245. */
  246. rowClick(pbsID: number, selectNode: boolean = false, level: number = 0) {
  247. getPBScodeRuleInfo_api({ id: pbsID })
  248. .then((e) => {
  249. let nodeTree = undefined
  250. if (e.code !== 1) {
  251. this.$message.error('获取PBS模板信息失败')
  252. return
  253. }
  254. const pbs = e.result as pbsDefine
  255. this.selectedPbs = pbs //当前使用的pbs模板
  256. if (pbs.alevel !== pbs.pbsLevelList.length) {
  257. this.initPbsLevelList(pbs)
  258. }
  259. this.initRuleLevelSelect(pbs.alevel)
  260. const pbsLevel = pbs.pbsLevelList.sort(function (a, b) {
  261. return a.alevel - b.alevel
  262. })
  263. //拷贝
  264. const psbLevelClone = pbsLevel.map((item) => {
  265. return item
  266. })
  267. psbLevelClone.reverse().forEach((item: pbsStruct, index: number) => {
  268. if (index === 0) {
  269. nodeTree = {
  270. id: item.alevel,
  271. name: item.levelName,
  272. alevel: item.alevel
  273. }
  274. } else {
  275. const node = {
  276. id: item.alevel,
  277. name: item.levelName,
  278. alevel: item.alevel,
  279. children: [nodeTree]
  280. }
  281. nodeTree = node
  282. }
  283. })
  284. this.pbsTreeData = [nodeTree]
  285. this.initPbsRuleDefine(pbsLevel, selectNode, level)
  286. })
  287. .catch((err) => {
  288. console.error(err)
  289. })
  290. }
  291. /**
  292. * 该方法用于给未定义层级的PBS模板设置默认的层级
  293. * @param {pbsDefine} pbs pbs模板
  294. */
  295. initPbsLevelList(pbs: pbsDefine) {
  296. const list = pbs.pbsLevelList
  297. const len = pbs.alevel
  298. const levels: pbsStruct[] = []
  299. if (list.length === 0) {
  300. for (let i = 0; i < len; i++) {
  301. levels.push({
  302. alevel: i + 1,
  303. connector: i === len - 1 ? '' : '.',
  304. pbsId: pbs.id,
  305. levelName: '未定义级别',
  306. contents: '',
  307. codeView: 'N*',
  308. pbsCodelist: []
  309. })
  310. }
  311. } else {
  312. for (let i = 0; i < len; i++) {
  313. const target = list.find((node) => node.alevel === i + 1)
  314. if (target) {
  315. levels.push(target)
  316. } else {
  317. levels.push({
  318. alevel: i + 1,
  319. connector: i === len - 1 ? '' : '.',
  320. pbsId: pbs.id,
  321. levelName: '未定义级别',
  322. contents: '',
  323. codeView: 'N*',
  324. pbsCodelist: []
  325. })
  326. }
  327. }
  328. }
  329. pbs.pbsLevelList = levels
  330. }
  331. /**
  332. * 该方法用于根据模板层级初始化节点信息层级下拉列表
  333. * @param {number} level pbs模板层级
  334. */
  335. initRuleLevelSelect(level: number) {
  336. // const val = parseInt($(e.target).val().toString())
  337. // $(that.domObj.find('.pbsStructBtns button')).each((index, el) => {
  338. // const alevel = $(el).data('level')
  339. // const nodeType = $(el).data('type')
  340. // if (nodeType === 'node' && alevel === val) {
  341. // //点击节点
  342. // $(el).trigger('click')
  343. // return
  344. // }
  345. // })
  346. }
  347. /**
  348. * 该方法用于根据PBS模板结构层级初始化PBS规则定义界面
  349. * @param {pbsStruct[]} pbsLevel pbs结构
  350. * @param {boolean} selectNode 是否定位到节点层级
  351. * @param {number} level 节点层级
  352. */
  353. initPbsRuleDefine(pbsDefine: pbsStruct[], selectNode: boolean = false, level: number) {
  354. if (!pbsDefine || pbsDefine.length < 3) {
  355. console.error('error')
  356. return
  357. }
  358. //编码预览
  359. const codeView = []
  360. pbsDefine.forEach((item) => {
  361. codeView.push(item.codeView)
  362. codeView.push(item.connector)
  363. })
  364. this.codePreview = codeView.join('')
  365. if (selectNode) {//保存后定位到该节点
  366. const node = pbsDefine.find(item=>{ return item.alevel === level; });
  367. this.currentLevel = node;
  368. this.selectPBSNode(node.alevel);
  369. } else {
  370. this.selectPBSNode(pbsDefine[0].alevel);
  371. }
  372. }
  373. /**删除PBS模板 */
  374. deletePbsModel() {
  375. const ids = this.selectModels.map((item) => item.id).join(',')
  376. this.$confirm('是否删除PBS编码模板?', '提示', {
  377. type: 'warning'
  378. }).then(() => {
  379. deletePbsModelByIds({ ids: ids })
  380. .then((result) => {
  381. if (result.code === 1) {
  382. this.$message.success('删除成功')
  383. this.getModelList()
  384. }
  385. })
  386. .catch((err) => {
  387. console.error(err)
  388. })
  389. })
  390. }
  391. /**添加模板 */
  392. addModel() {
  393. this.isAddModelShow = true
  394. this.addModelForm.alevel = '3'
  395. this.addModelForm.name = ''
  396. this.addModelForm.remark = ''
  397. }
  398. /**提交添加模板 */
  399. submitAddModel() {
  400. if (this.addModelForm.name.trim() === '') {
  401. this.$message.warning('请输入模板名称')
  402. return
  403. }
  404. const params = {
  405. alevel: this.addModelForm.alevel,
  406. name: this.addModelForm.name,
  407. remark: this.addModelForm.remark
  408. }
  409. addPBScodeRule_api(params).then((result) => {
  410. if (result.code === 1) {
  411. this.$message.success('添加模板成功')
  412. this.getModelList()
  413. } else {
  414. this.$message.error('添加模板失败')
  415. }
  416. })
  417. }
  418. /**
  419. * 该方法用于保存PBS层级信息
  420. *
  421. */
  422. savePbsLevel() {
  423. if (!this.currentLevel && parseInt(this.selectedPbs.isUse) === 1) {
  424. return
  425. }
  426. const that = this
  427. const selectNode = this.currentLevel
  428. let isCorrect = true
  429. const level: pbsStruct = {
  430. levelName: selectNode.levelName,
  431. contents: selectNode.contents,
  432. connector: selectNode.connector,
  433. codeView: selectNode.codeView,
  434. alevel: selectNode.alevel,
  435. pbsId: selectNode.pbsId,
  436. pbsCodelist: selectNode.pbsCodelist,
  437. id: selectNode.id
  438. }
  439. const name = selectNode.levelName //层级名称
  440. const contents = selectNode.contents //层级说明
  441. //xss脚本检测
  442. const codeLen = selectNode.pbsCodelist.length
  443. if (contents === '' || name === '' || codeLen === 0) {
  444. this.$message.warning('请完善层级信息')
  445. return
  446. }
  447. //编码定义
  448. const codeDe: pbsNodeCode[] = []
  449. selectNode.pbsCodelist.forEach((el) => {
  450. const codeType = el.codeType
  451. if (codeType === '1') {
  452. const boId = el.boId
  453. if (!boId) {
  454. this.$message.warning('请选择业务对象')
  455. isCorrect = false
  456. return
  457. }
  458. } else if (codeType === '2') {
  459. const codeLen = el.codeLength.toString().trim()
  460. const codeRemark = el.contents
  461. if (codeLen === '' || codeRemark === '') {
  462. this.$message.warning('请填写编码长度或说明')
  463. isCorrect = false
  464. return
  465. }
  466. if (isNaN(parseInt(codeLen)) || parseInt(codeLen) > 10) {
  467. this.$message.warning('请填写编码长度,不超过10位')
  468. isCorrect = false
  469. return
  470. }
  471. } else if (codeType === '3') {
  472. const codeLen = el.codeLength.toString().trim()
  473. if (isNaN(parseInt(codeLen)) || parseInt(codeLen) > 10) {
  474. this.$message.warning('请填写编码长度,不超过10位')
  475. isCorrect = false
  476. return
  477. }
  478. }
  479. })
  480. if (isCorrect && codeDe.length === 0) {
  481. this.$message.warning('请添加编码定义')
  482. return
  483. }
  484. if (!isCorrect) {
  485. return
  486. }
  487. level.codeView = this.computeCodeView(level)
  488. PutPBScodeRule_api(level).then((e) => {
  489. if (e.code === 1) {
  490. this.$message.success('保存成功')
  491. //保存成功,更新PBS模板,定位至层级
  492. this.rowClick(that.selectedPbs.id, true, level.alevel)
  493. } else {
  494. this.$message.error('保存失败')
  495. }
  496. })
  497. }
  498. /**
  499. * 该方法用于前端生成层级编码预览
  500. * @param level 层级
  501. */
  502. computeCodeView(level: pbsStruct) {
  503. const hasBOCode = level.pbsCodelist.find((item, index) => {
  504. return !item.codeLength || item.codeLength <= 0
  505. })
  506. if (hasBOCode) {
  507. return level.codeView
  508. } else {
  509. const codeView = []
  510. let str: string = 'N'
  511. level.pbsCodelist.forEach((item) => {
  512. codeView.push(str.repeat(item.codeLength))
  513. })
  514. return codeView.join('')
  515. }
  516. }
  517. /**
  518. * 删除编码定义部件
  519. */
  520. removeNodeCodeWidget(index) {
  521. this.currentLevel.pbsCodelist.splice(index, 1)
  522. }
  523. /**
  524. * 该方法用于动态添加pbs节点编码定义部件
  525. * @param {pbsNodeCode} code
  526. * @param {boolean} isEditable 是否可编辑
  527. */
  528. addNodeCodeWidget(code: pbsNodeCode, isEditable: boolean = true) {
  529. if (!code) {
  530. code = {
  531. codeType: '1',
  532. boId: undefined,
  533. codeLength: undefined,
  534. contents: ''
  535. }
  536. this.currentLevel.pbsCodelist.push(code)
  537. }
  538. let codeLen = ''
  539. if (code.codeLength) {
  540. codeLen = code.codeLength.toString()
  541. }
  542. //切换事件
  543. // $(select)
  544. // .off('change')
  545. // .on('change', function () {
  546. // const val = $(this).val()
  547. // $(row)
  548. // .children('div')
  549. // .each((index, item) => {
  550. // if ($(item).hasClass('pbsCodeInfo')) {
  551. // $(item).remove()
  552. // }
  553. // })
  554. // //移除删除按钮
  555. // $(row).find('.delete-btn').remove()
  556. // if (val === '1') {
  557. // const objcol3 = document.createElement('div')
  558. // objcol3.className = 'col-3 pbsCodeInfo'
  559. // const objselect = document.createElement('select')
  560. // //objselect.className = "form-control code-bo selectpicker dropdown";
  561. // objselect.className = 'form-control code-bo'
  562. // //objselect.setAttribute('data-toggle','dropdown');
  563. // //objselect.setAttribute('data-live-search','true');
  564. // //objselect.setAttribute('data-dropup-auto','false');
  565. // objcol3.append(objselect)
  566. // row.append(objcol3)
  567. // //$(objselect).selectpicker({dropupAuto: false});
  568. // $(objselect)
  569. // .off('mousedown')
  570. // .on('mousedown', (e) => {
  571. // return false
  572. // })
  573. // $(objselect)
  574. // .off('click')
  575. // .on('click', (e) => {
  576. // e.stopPropagation()
  577. // that.initObjList($(objselect))
  578. // })
  579. // //初始化业务对象模板
  580. // that.queryForObByid(code.boId, (obitem) => {
  581. // if (!obitem) return
  582. // $(objselect).append(
  583. // '<option selected data-subtext=' +
  584. // obitem.boGroup +
  585. // " value='" +
  586. // obitem.id +
  587. // "'>" +
  588. // obitem.boType +
  589. // '</option>'
  590. // )
  591. // //objcol3.append(objselect);
  592. // //row.append(objcol3);
  593. // //$(objselect).val(code.boId.toString());
  594. // })
  595. // createBtn(row)
  596. // } else if (val === '2') {
  597. // //编码长度
  598. // const objcol3 = document.createElement('div')
  599. // objcol3.className = 'col-3 pbsCodeInfo'
  600. // $(objcol3).append(
  601. // "<input class='form-control code-length' value='" +
  602. // codeLen +
  603. // "' placeholder='编码长度' type='number' min='1' />"
  604. // )
  605. // //编码说明
  606. // const objcol4 = document.createElement('div')
  607. // objcol4.className = 'col-4 pbsCodeInfo'
  608. // $(objcol4).append(
  609. // "<input class='form-control code-remark' value='" + code.contents + "' placeholder='编码说明' />"
  610. // )
  611. // row.append(objcol3)
  612. // row.append(objcol4)
  613. // } else if (val === '3') {
  614. // //编码长度
  615. // const objcol3 = document.createElement('div')
  616. // objcol3.className = 'col-3 pbsCodeInfo'
  617. // $(objcol3).append(
  618. // "<input class='form-control code-length' value='" +
  619. // codeLen +
  620. // "' placeholder='编码长度' type='number' min='1' />"
  621. // )
  622. // row.append(objcol3)
  623. // }
  624. // val !== '1' ? createBtn(row) : null
  625. // })
  626. //复用的创建删除按钮的方法
  627. }
  628. /**
  629. * 该方法用于选中pbs层级节点按钮
  630. * @param {number} alevel 层级
  631. */
  632. selectPBSNode(alevel: number) {
  633. if (!this.selectedPbs) return
  634. const pbsDefine = this.selectedPbs.pbsLevelList
  635. const node = pbsDefine.find((item) => item.alevel === alevel)
  636. this.currentLevel = node
  637. const codes = node.pbsCodelist || []
  638. codes.forEach((item, index) => {
  639. this.addNodeCodeWidget(item, false)
  640. })
  641. }
  642. /**属性表格勾选事件 */
  643. selectChange(selection) {
  644. this.selectModels = selection
  645. }
  646. }
  647. </script>
  648. <style lang="scss" scoped>
  649. @import '~@/styles/mixin.scss';
  650. .halfHeight {
  651. height: 50%;
  652. position: relative;
  653. }
  654. .pbstb {
  655. .tf-table {
  656. height: calc(100% - 52px);
  657. padding: 0;
  658. }
  659. }
  660. .pbsDefine {
  661. position: relative;
  662. height: 100%;
  663. padding-left: 10px;
  664. .preview {
  665. .el-row {
  666. padding: 5px 10px;
  667. }
  668. .previewBtn {
  669. display: flex;
  670. .btngroup {
  671. .el-button {
  672. margin-right: 10px;
  673. }
  674. .el-select {
  675. margin-right: 10px;
  676. width: 70px;
  677. }
  678. }
  679. }
  680. }
  681. .footerBtns {
  682. position: absolute;
  683. bottom: 35px;
  684. left: 0;
  685. right: 0;
  686. }
  687. .nodeDefine {
  688. overflow-y: auto;
  689. overflow-x: hidden;
  690. height: calc(100% - 285px);
  691. @include scrollBar;
  692. .col16,
  693. .col16.el-input {
  694. width: 66.6666666667%;
  695. }
  696. }
  697. }
  698. </style>