customerSelect.vue 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. <template>
  2. <span class="select-component">
  3. <el-select
  4. v-model="value"
  5. :placeholder="configuration.placeholder"
  6. style="width: 80%;border-right: none"
  7. :disabled="disabled?disabled:false"
  8. :multiple="configuration.multiple?configuration.multiple:false"
  9. :collapse-tags="configuration.collapseTags?configuration.collapseTags:false">
  10. <el-option
  11. v-for="item in configuration.dicData.length !== 0?configuration.dicData:dicData"
  12. :key="item.id"
  13. :label="item.cname"
  14. :value="item.id"
  15. />
  16. </el-select>
  17. <el-button icon="el-icon-edit" @click="dialogVisible = true" :disabled="disabled?disabled:false" style="width: 20%"></el-button>
  18. <el-dialog
  19. title="导入客户"
  20. :visible.sync="dialogVisible"
  21. class="el-dialogDeep"
  22. append-to-body
  23. width="80%">
  24. <el-row style="margin-top: -5px;height: 0">
  25. <el-col :span="5">
  26. <div class="box">
  27. <el-scrollbar>
  28. <basic-container>
  29. <avue-tree :option="treeOption" :data="treeData" @node-click="nodeClick"/>
  30. </basic-container>
  31. </el-scrollbar>
  32. </div>
  33. </el-col>
  34. <el-col :span="19">
  35. <basic-container>
  36. <avue-crud :option="option"
  37. :data="dataList"
  38. ref="crud"
  39. v-model="form"
  40. :page.sync="page"
  41. :before-open="beforeOpen"
  42. :before-close="beforeClose"
  43. @search-change="searchChange"
  44. @search-reset="searchReset"
  45. @refresh-change="refreshChange"
  46. @selection-change="selectionChange"
  47. @on-load="onLoad"
  48. @tree-load="treeLoad">
  49. </avue-crud>
  50. </basic-container>
  51. </el-col>
  52. </el-row>
  53. <span slot="footer" class="dialog-footer">
  54. <el-button @click="dialogVisible = false">取 消</el-button>
  55. <el-button type="primary" @click="confirmSelection" :disabled="configuration.multipleChoices === true?false:selection.length === 1?false:true">确 定</el-button>
  56. </span>
  57. </el-dialog>
  58. </span>
  59. </template>
  60. <script>
  61. import option from "./configuration/mainList.json";
  62. import {customerList, typeSave, deleteDetails, getDeptLazyTree} from "@/api/basicData/customerInformation"
  63. export default {
  64. name: "customerInformation",
  65. props:{
  66. disabled:Boolean,
  67. value:String,
  68. configuration:Object,
  69. },
  70. model:{
  71. prop:'value',
  72. event:'returnBack'
  73. },
  74. data() {
  75. return {
  76. form: {},
  77. dicData:[],
  78. dialogVisible: false,
  79. value:'',
  80. option: option,
  81. parentId: 0,
  82. dataList: [],
  83. selection:[],
  84. treeOption: {
  85. nodeKey: 'id',
  86. lazy: true,
  87. treeLoad: function (node, resolve) {
  88. const parentId = (node.level === 0) ? 0 : node.data.id;
  89. getDeptLazyTree(parentId).then(res => {
  90. resolve(res.data.data.map(item => {
  91. return {
  92. ...item,
  93. leaf: !item.hasChildren
  94. }
  95. }))
  96. });
  97. },
  98. addBtn: false,
  99. menu: false,
  100. size: 'small',
  101. props: {
  102. labelText: '标题',
  103. label: 'title',
  104. value: 'value',
  105. children: 'children'
  106. }
  107. },
  108. page: {
  109. pageSize: 10,
  110. pagerCount: 5,
  111. total: 0,
  112. }
  113. }
  114. },
  115. created() {
  116. this.option.searchShow = this.configuration.searchShow?this.configuration.searchShow:false
  117. },
  118. methods: {
  119. //刷新触发
  120. refreshChange(){
  121. this.page = {
  122. pageSize: 10,
  123. pagerCount: 5,
  124. total: 0,
  125. }
  126. },
  127. //确认导出触发
  128. confirmSelection(){
  129. if (this.configuration.multipleChoices === true){
  130. let value = []
  131. for (let item in this.selection){
  132. this.dicData.push({id:this.selection[item].id,cname:this.selection[item].cname})
  133. value.push(this.selection[item].id)
  134. }
  135. this.value = value
  136. }else {
  137. this.dicData.push({id:this.selection[0].id,cname:this.selection[0].cname})
  138. this.value = this.selection[0].id
  139. }
  140. this.selection = []
  141. this.$emit('returnBack',this.value)
  142. this.dialogVisible = false
  143. },
  144. //选中触发
  145. selectionChange(selection){
  146. this.selection = selection
  147. },
  148. nodeClick(data) {
  149. this.treeDeptId = data.id;
  150. this.page.currentPage = 1;
  151. this.onLoad(this.page);
  152. },
  153. //查询全部
  154. initData() {
  155. customerList().then(res => {
  156. console.log(this.form);
  157. const column = this.findObject(this.option.column, "parentId");
  158. column.dicData = res.data.data.records;
  159. });
  160. },
  161. //新增子项触发
  162. handleAdd(row) {
  163. this.parentId = row.id;
  164. const column = this.findObject(this.option.column, "parentId");
  165. column.value = row.id;
  166. column.addDisabled = true;
  167. this.$refs.crud.rowAdd();
  168. },
  169. //新增跳转页面
  170. beforeOpen(row, index) {
  171. this.$router.push({
  172. path: "/detailsPageEdit",
  173. query: {id: JSON.stringify(row.id)},
  174. });
  175. },
  176. //点击新增时触发
  177. beforeClose(done) {
  178. this.parentId = "";
  179. const column = this.findObject(this.option.column, "parentId");
  180. column.value = "";
  181. column.addDisabled = false;
  182. done();
  183. },
  184. //点击搜索按钮触发
  185. searchChange(params, done) {
  186. console.log(params)
  187. this.page.currentPage = 1;
  188. this.onLoad(this.page, params);
  189. done()
  190. },
  191. //搜索重置按钮触发
  192. searchReset() {
  193. this.treeDeptId = '';
  194. this.onLoad(this.page);
  195. },
  196. onLoad(page, params = {parentId: 0}) {
  197. let queryParams = Object.assign({}, params, {
  198. size: page.pageSize,
  199. current: page.currentPage,
  200. corpsTypeId: this.treeDeptId
  201. })
  202. customerList(queryParams).then(res => {
  203. this.dataList = res.data.data.records
  204. console.log(res.data.data.total)
  205. this.page.total = res.data.data.total
  206. console.log(this.page)
  207. })
  208. },
  209. //树桩列点击展开触发
  210. treeLoad(tree, treeNode, resolve) {
  211. const parentId = tree.id;
  212. customerList({parentId: parentId}).then(res => {
  213. resolve(res.data.data.records);
  214. });
  215. }
  216. }
  217. };
  218. </script>
  219. <style scoped lang="scss">
  220. .el-dialogDeep {
  221. ::v-deep .el-dialog {
  222. margin: 1vh auto 0 !important;
  223. padding-bottom: 10px !important;
  224. .el-dialog__body, .el-dialog__footer {
  225. padding-bottom: 0 !important;
  226. padding-top: 0 !important;
  227. }
  228. }
  229. }
  230. </style>