BOM-search.vue 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. <!-- 搜索表单 -->
  2. <template>
  3. <el-form
  4. label-width="77px"
  5. class="ele-form-search"
  6. @keyup.enter.native="search"
  7. @submit.native.prevent
  8. >
  9. <el-row :gutter="10">
  10. <el-col v-bind="styleResponsive ? { md: 4 } : { span: 4 }">
  11. <el-form-item label="物品编码">
  12. <el-input
  13. size="mini"
  14. clearable
  15. v-model.trim="where.categoryCode"
  16. placeholder="请输入"
  17. />
  18. </el-form-item>
  19. </el-col>
  20. <el-col v-bind="styleResponsive ? { md: 4 } : { span: 4 }">
  21. <el-form-item label="名称">
  22. <el-input
  23. size="mini"
  24. clearable
  25. v-model.trim="where.categoryName"
  26. placeholder="请输入"
  27. />
  28. </el-form-item>
  29. </el-col>
  30. <el-col v-bind="styleResponsive ? { md: 4 } : { span: 4 }">
  31. <el-form-item label="状态">
  32. <el-select
  33. clearable
  34. v-model.trim="where.status"
  35. placeholder="请选择"
  36. class="w100"
  37. size="mini"
  38. >
  39. <el-option
  40. v-for="item in Object.entries(statusOpt)"
  41. :key="item[0]"
  42. :label="item[1]"
  43. :value="item[0]"
  44. ></el-option>
  45. </el-select>
  46. </el-form-item>
  47. </el-col>
  48. <el-col v-bind="styleResponsive ? { md: 4 } : { span: 4 }">
  49. <el-form-item label="级别">
  50. <el-select
  51. clearable
  52. v-model.trim="where.level"
  53. placeholder="请选择"
  54. class="w100"
  55. size="mini"
  56. >
  57. <el-option
  58. v-for="item in bomLevelList"
  59. :key="item.value"
  60. :value="item.value"
  61. :label="item.label"
  62. ></el-option>
  63. </el-select>
  64. </el-form-item>
  65. </el-col>
  66. <el-col v-bind="styleResponsive ? { md: 4 } : { span: 4 }">
  67. <el-form-item label="存货类型">
  68. <el-select
  69. clearable
  70. v-model.trim="where.attributeType"
  71. placeholder="请选择"
  72. class="w100"
  73. size="mini"
  74. >
  75. <el-option
  76. v-for="item in attributeList"
  77. :key="item.value"
  78. :value="item.value"
  79. :label="item.label"
  80. ></el-option>
  81. </el-select>
  82. </el-form-item>
  83. </el-col>
  84. <el-col v-bind="styleResponsive ? { md: 4 } : { span: 4 }">
  85. <el-form-item label="规格">
  86. <el-input
  87. size="mini"
  88. clearable
  89. v-model.trim="where.specification"
  90. placeholder="请输入"
  91. />
  92. </el-form-item>
  93. </el-col>
  94. <el-col v-bind="styleResponsive ? { md: 4 } : { span: 4 }">
  95. <el-form-item label="型号">
  96. <el-input
  97. size="mini"
  98. clearable
  99. v-model.trim="where.modeType"
  100. placeholder="请输入"
  101. />
  102. </el-form-item>
  103. </el-col>
  104. <!-- <el-col v-bind="styleResponsive ? { lg: 5, md: 10 } : { span: 5}">
  105. <el-form-item label="组织机构:">
  106. <auth-selection size="mini" v-model.trim="where.deptIds" style="width: 100%"></auth-selection>
  107. </el-form-item>
  108. </el-col> -->
  109. <el-col v-bind="styleResponsive ? { md: 8 } : { span: 4 }">
  110. <div class="ele-form-actions">
  111. <el-button
  112. type="primary"
  113. icon="el-icon-search"
  114. class="ele-btn-icon"
  115. @click="search"
  116. size="mini"
  117. >
  118. 查询
  119. </el-button>
  120. <el-button
  121. @click="reset"
  122. icon="el-icon-refresh"
  123. class="ele-btn-icon"
  124. size="mini"
  125. >重置</el-button
  126. >
  127. <el-button
  128. v-if="isUpload && $hasPermission('main:categoryparam:saveBom')"
  129. @click="uploadFile"
  130. type="primary"
  131. size="mini"
  132. icon="el-icon-upload2"
  133. plain
  134. >批量导入</el-button
  135. >
  136. </div>
  137. </el-col>
  138. </el-row>
  139. <importDialog
  140. :defModule="moudleName"
  141. ref="importDialogRef"
  142. @success="success"
  143. />
  144. </el-form>
  145. </template>
  146. <script>
  147. import importDialog from './import-dialog.vue';
  148. import { getByCode } from '@/api/system/dictionary-data';
  149. export default {
  150. components: {
  151. importDialog
  152. },
  153. props: {
  154. statusOpt: Object,
  155. categoryCode: String,
  156. isUpload: {
  157. type: Boolean,
  158. default: false
  159. }
  160. },
  161. data() {
  162. // 默认表单数据
  163. const defaultWhere = {
  164. name: '',
  165. code: '',
  166. categoryCode: this.categoryCode,
  167. categoryName: '',
  168. status: '',
  169. attributeType: '',
  170. specification: '',
  171. modeType: '',
  172. level: ''
  173. };
  174. return {
  175. defaultWhere,
  176. // 表单数据
  177. where: { ...defaultWhere },
  178. moudleName: 'mainUser',
  179. attributeList: [],
  180. bomLevelList: []
  181. };
  182. },
  183. computed: {
  184. // 是否开启响应式布局
  185. styleResponsive() {
  186. return this.$store.state.theme.styleResponsive;
  187. }
  188. },
  189. mounted() {
  190. this.getAttributeList('inventory_type');
  191. this.getBomLevel('bom_query_level');
  192. },
  193. methods: {
  194. /* 搜索 */
  195. search() {
  196. this.$emit('search', this.where);
  197. },
  198. /* 重置 */
  199. reset() {
  200. this.where = { ...this.defaultWhere };
  201. this.search();
  202. },
  203. uploadFile() {
  204. this.$refs.importDialogRef.open();
  205. },
  206. success() {
  207. this.search();
  208. },
  209. async getBomLevel(code) {
  210. let { data: res } = await getByCode(code);
  211. this.bomLevelList = res.map((item) => {
  212. let values = Object.keys(item);
  213. return {
  214. value: values[0],
  215. label: item[values[0]]
  216. };
  217. });
  218. console.log(this.bomLevelList, 'bomLevelList');
  219. },
  220. async getAttributeList(code) {
  221. let res = await getByCode(code);
  222. // this.attributeList = res.data.map((item) => {
  223. // let values = Object.keys(item);
  224. // return {
  225. // value: values[0],
  226. // label: item[values[0]]
  227. // };
  228. // });
  229. let list = res.data.map((item) => {
  230. let key = Object.keys(item)[0];
  231. return { value: Number(key), label: item[key] };
  232. });
  233. this.attributeList = list;
  234. }
  235. }
  236. };
  237. </script>