oneProduct.vue 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. <template>
  2. <div class="ele-body">
  3. <el-card shadow="never">
  4. <ele-split-layout width="300px" allow-collapse :right-style="{ overflow: 'hidden' }">
  5. <div class="ele-border-lighter sys-organization-list">
  6. <el-tree :data="treeList" :props="defaultProps" ref="treeRef"
  7. :default-expanded-keys="current && current.id ? [current.id] : []" :highlight-current="true" node-key="id"
  8. @node-click="handleNodeClick"></el-tree>
  9. </div>
  10. <template v-slot:content>
  11. <div class="ele-border-lighter form-content" v-loading="loading">
  12. <div class="form-wrapper">
  13. <el-form size="mini" label-width="100px" class="ele-form-detail">
  14. <el-row :gutter="15" v-if="current.parentId == 0">
  15. <el-col v-bind="styleResponsive ? { sm: 6 } : { span: 6 }">
  16. <el-form-item label="类型编码:">
  17. <div class="ele-text-secondary">
  18. {{ current.code }}
  19. </div>
  20. </el-form-item>
  21. </el-col>
  22. <el-col v-bind="styleResponsive ? { sm: 6 } : { span: 6 }">
  23. <el-form-item label="类型名称:">
  24. <div class="ele-text-secondary">
  25. {{ current.name }}
  26. </div>
  27. </el-form-item>
  28. </el-col>
  29. <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
  30. <el-form-item label="描述:">
  31. <div class="ele-text-secondary">
  32. {{ current.remark }}
  33. </div>
  34. </el-form-item>
  35. </el-col>
  36. </el-row>
  37. <el-row :gutter="15" v-else>
  38. <el-col v-bind="styleResponsive ? { sm: 6 } : { span: 6 }">
  39. <el-form-item label="节点编码:">
  40. <div class="ele-text-secondary">
  41. {{ current.code }}
  42. </div>
  43. </el-form-item>
  44. </el-col>
  45. <el-col v-bind="styleResponsive ? { sm: 6 } : { span: 6 }">
  46. <el-form-item label="节点名称:">
  47. <div class="ele-text-secondary">
  48. {{ current.name }}
  49. </div>
  50. </el-form-item>
  51. </el-col>
  52. <el-col v-bind="styleResponsive ? { sm: 12 } : { span: 12 }">
  53. <el-form-item label="层级全览:">
  54. <div class="ele-text-secondary">
  55. {{ fullName }}
  56. </div>
  57. </el-form-item>
  58. </el-col>
  59. </el-row>
  60. </el-form>
  61. </div>
  62. <IndexSearch @search="reload" />
  63. <IndexData ref="listData" v-if="current" :current-id="current.id" :data="current" :rootTreeId="rootTreeId" :rootId="rootId" :oneProduct="true">
  64. </IndexData>
  65. </div>
  66. </template>
  67. </ele-split-layout>
  68. </el-card>
  69. </div>
  70. </template>
  71. <script>
  72. import IndexData from './components/index-data.vue';
  73. import IndexSearch from './components/index-search.vue';
  74. import dictMixins from '@/mixins/dictMixins';
  75. import { getTreeByPid } from '@/api/classifyManage';
  76. import { getInfoById } from '@/api/classifyManage';
  77. export default {
  78. components: {
  79. IndexData,
  80. IndexSearch
  81. },
  82. mixins: [dictMixins],
  83. data() {
  84. return {
  85. loading: false,
  86. current: {},
  87. curNode: {},
  88. treeList: [],
  89. treeLoading: false,
  90. formData: {},
  91. rootTreeId: null,
  92. defaultProps: {
  93. children: 'children',
  94. label: 'name'
  95. }
  96. };
  97. },
  98. computed: {
  99. // 是否开启响应式布局
  100. styleResponsive() {
  101. return this.$store.state.theme.styleResponsive;
  102. },
  103. rootId() {
  104. return this.$route.query.id;
  105. },
  106. fullName() {
  107. let str = '';
  108. let codeStr = '';
  109. let node = this.curNode;
  110. while (node?.data?.name) {
  111. str = node.data.name + '-' + str;
  112. codeStr = node.data.code + '-' + codeStr;
  113. node = node?.parent;
  114. }
  115. return str.substring(str, str.length - 1);
  116. // return (
  117. // str.substring(str, str.length - 1) +
  118. // `(${codeStr.substring(str, str.length - 1)})`
  119. // );
  120. }
  121. },
  122. created() {
  123. this.getTreeData();
  124. },
  125. methods: {
  126. async getTreeData() {
  127. try {
  128. this.treeLoading = true;
  129. const res = await getTreeByPid(9);
  130. this.treeLoading = false;
  131. if (res?.code === '0') {
  132. this.treeList = res.data;
  133. this.$nextTick(() => {
  134. // 默认高亮第一级树节点
  135. if (this.treeList[0]) {
  136. this.rootTreeId = this.treeList[0].id
  137. this.getDetail(this.treeList[0].id);
  138. }
  139. });
  140. return this.treeList;
  141. }
  142. } catch (error) { }
  143. this.treeLoading = false;
  144. },
  145. async getDetail(id) {
  146. this.loading = true;
  147. const res = await getInfoById(id);
  148. this.loading = false;
  149. if (res.code == '0') {
  150. this.current = res.data;
  151. this.$nextTick(() => {
  152. this.$refs.treeRef.setCurrentKey(this.current.id);
  153. });
  154. }
  155. },
  156. handleNodeClick(data, node) {
  157. this.curNode = node;
  158. this.pathList = this.findParent([], data, this.treeList)
  159. this.rootTreeId = null
  160. if (this.pathList.length == 0) {
  161. this.rootTreeId = data.id
  162. } else {
  163. this.rootTreeId = this.pathList[this.pathList.length - 1] && this.pathList[this.pathList.length - 1].id
  164. }
  165. this.getDetail(data.id);
  166. },
  167. /* 刷新表格 */
  168. reload(where) {
  169. this.$refs.listData.reload(where);
  170. },
  171. // parents:用于返回的数组,childNode:要查询的节点,treeList:json树形数据
  172. findParent(parents, childNode, treeList) {
  173. for (let i = 0; i < treeList.length; i++) {
  174. // 父节点查询条件
  175. if (treeList[i].id === childNode.parentId) {
  176. // 如果找到结果,保存当前节点
  177. parents.push(treeList[i])
  178. // 用当前节点再去原数据查找当前节点的父节点
  179. this.findParent(parents, treeList[i], this.treeList)
  180. break
  181. } else {
  182. if (treeList[i].children instanceof Array) {
  183. // 没找到,遍历该节点的子节点
  184. this.findParent(parents, childNode, treeList[i].children)
  185. }
  186. }
  187. }
  188. return parents
  189. }
  190. }
  191. };
  192. </script>
  193. <style lang="scss" scoped>
  194. .sys-organization-list {
  195. height: calc(100vh - 165px);
  196. box-sizing: border-box;
  197. border-width: 1px;
  198. border-style: solid;
  199. overflow: auto;
  200. }
  201. .sys-organization-list :deep(.el-tree-node__content) {
  202. height: 30px;
  203. &>.el-tree-node__expand-icon {
  204. margin-left: 10px;
  205. }
  206. }
  207. .form-content {
  208. height: 50px;
  209. border: 1px solid;
  210. box-sizing: border-box;
  211. }
  212. .form-wrapper {
  213. padding: 12px 24px;
  214. }
  215. </style>