getCode.vue 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. <!-- 用户编辑弹窗 -->
  2. <template>
  3. <ele-modal
  4. width="500px"
  5. :visible.sync="showEditFlag"
  6. :close-on-click-modal="false"
  7. custom-class="ele-dialog-form"
  8. append-to-body
  9. @close="cancel"
  10. title="申请编码"
  11. >
  12. <el-form ref="form" :model="form" :rules="rules" label-width="82px">
  13. <el-row :gutter="15">
  14. <el-col :span="24">
  15. <el-form-item label="编码分类" prop="type">
  16. <ele-tree-select
  17. clearable
  18. :data="list"
  19. v-model="form.type"
  20. placeholder="请选择"
  21. default-expand-all
  22. labelKey="name"
  23. childrenKey="sonDirectoryList"
  24. valueKey="id"
  25. @change="typeChange"
  26. />
  27. </el-form-item>
  28. </el-col>
  29. <el-col :span="24">
  30. <el-form-item label="编码方案" prop="type1">
  31. <el-select
  32. v-model="form.type1"
  33. placeholder="请选择"
  34. style="width: 100%"
  35. @change="type1Change"
  36. >
  37. <el-option
  38. v-for="item in options"
  39. :key="item.id"
  40. :label="item.name"
  41. :value="item.id"
  42. >
  43. </el-option>
  44. </el-select>
  45. </el-form-item>
  46. </el-col>
  47. <el-col :span="24">
  48. <el-form-item label="编码预览" prop="code">
  49. <el-input v-model="form.code" disabled></el-input>
  50. </el-form-item>
  51. </el-col>
  52. <el-col :span="24">
  53. <headerTitle title="编码码段"></headerTitle>
  54. <template v-for="item in segmentList">
  55. <el-form-item :label="item.name" :prop="item.id" :key="item.id">
  56. <el-input
  57. v-if="item.roughRule == 5 || item.roughRule == 4"
  58. :disabled="true"
  59. v-model="item.currentValue"
  60. ></el-input>
  61. <el-select
  62. v-else
  63. v-model="item.currentValue"
  64. placeholder="请选择"
  65. style="width: 100%"
  66. >
  67. <el-option
  68. v-for="(segmentValue, index) in item.value"
  69. :key="index"
  70. :label="segmentValue.value"
  71. :value="segmentValue.value"
  72. @click.native="
  73. segmentValueChange(item.id, segmentValue.value, index)
  74. "
  75. >
  76. </el-option>
  77. </el-select>
  78. </el-form-item>
  79. </template>
  80. </el-col>
  81. </el-row>
  82. </el-form>
  83. <template v-slot:footer>
  84. <el-button @click="cancel">取消</el-button>
  85. <el-button type="primary" @click="save"> 确认 </el-button>
  86. </template>
  87. </ele-modal>
  88. </template>
  89. <script>
  90. import {
  91. selectTreeList,
  92. listParentId,
  93. pageSegment,
  94. getCode
  95. } from './api/index.js';
  96. import headerTitle from '@/components/header-title/index.vue';
  97. export default {
  98. data() {
  99. return {
  100. rules: {
  101. type: [{ required: true, message: '请选择', trigger: 'blur' }],
  102. type1: [{ required: true, message: '请选择', trigger: 'blur' }],
  103. code: [{ required: true, message: '请申请', trigger: 'blur' }]
  104. },
  105. list: [],
  106. options: [],
  107. segmentList: [],
  108. // 表单数据
  109. form: {
  110. type: '',
  111. code: '',
  112. type1: ''
  113. },
  114. nodeData: null,
  115. showEditFlag: false
  116. };
  117. },
  118. computed: {},
  119. components: {
  120. headerTitle
  121. },
  122. created() {},
  123. methods: {
  124. async open(nodeData) {
  125. this.list = await selectTreeList();
  126. this.nodeData = nodeData;
  127. this.setTree(this.list);
  128. this.showEditFlag = true;
  129. },
  130. setTree(data) {
  131. data.forEach((item) => {
  132. item.sonDirectoryList = item.sonDirectoryList.filter(
  133. (item) => item.type == 1
  134. );
  135. if (item.sonDirectoryList.length > 0) {
  136. this.setTree(item.sonDirectoryList);
  137. }
  138. });
  139. },
  140. async typeChange(val) {
  141. let data = await listParentId({
  142. pageNum: 1,
  143. size: 100,
  144. parentId: val,
  145. objId: this.nodeData?.id,
  146. objParentId: this.nodeData?.parentId
  147. });
  148. this.options = data.list.filter((item) => item.type == 2);
  149. this.form.type1 = '';
  150. this.form.code = '';
  151. this.segmentList = [];
  152. },
  153. async type1Change(val) {
  154. let codeData = await getCode({
  155. categoryId: val
  156. });
  157. this.form.code = codeData.codeStr;
  158. let data = await pageSegment({
  159. pageNum: 1,
  160. size: 100,
  161. businessCodeCategoryId: val
  162. });
  163. this.segmentList = data.list.map((item, index) => {
  164. item['currentValue'] = codeData.values[index];
  165. return item;
  166. });
  167. },
  168. async segmentValueChange() {
  169. // codeManageId:id,
  170. // code:value,
  171. let codeData = await getCode({
  172. categoryId: this.form.type1,
  173. codeManageArray: this.segmentList.map((item) => {
  174. return {
  175. codeManageId: item.id,
  176. code: item.currentValue
  177. };
  178. }),
  179. isUpdateNo: 1
  180. });
  181. this.form.code = codeData.codeStr;
  182. },
  183. /* 保存编辑 */
  184. save() {
  185. this.$emit('setCode', this.form.code);
  186. this.cancel();
  187. },
  188. cancel() {
  189. this.form.type = '';
  190. this.form.code = '';
  191. this.form.type1 = '';
  192. this.showEditFlag = false;
  193. this.segmentList = [];
  194. this.options = [];
  195. }
  196. }
  197. };
  198. </script>
  199. <style scoped lang="scss">
  200. .aaa {
  201. width: 100%;
  202. ::v-deep .upload-demo {
  203. width: 100%;
  204. .el-upload--text {
  205. width: 100%;
  206. button {
  207. width: 100%;
  208. background: #ffffff;
  209. border: 1px solid #dbdbdb;
  210. border-radius: 5px;
  211. }
  212. }
  213. .el-upload-list {
  214. transform: translate(10px, -39px);
  215. position: absolute;
  216. }
  217. }
  218. }
  219. </style>