selectGoods.vue 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. <template>
  2. <el-dialog
  3. width="980px"
  4. title="商品列表"
  5. :visible.sync="innerVisible"
  6. append-to-body
  7. :close-on-click-modal="false"
  8. @close="$emit('close')"
  9. >
  10. <div class="screen-container">
  11. <el-form ref="tableScreenForm" :model="tableScreenForm" label-width="70px" size="small" label-position="left">
  12. <el-row :gutter="20">
  13. <el-col :xs="24" :sm="8" :lg="8">
  14. <el-form-item label="商品编号" prop="goodsId">
  15. <el-input v-model="tableScreenForm.goodsId" placeholder="商品编号" size="small" />
  16. </el-form-item>
  17. </el-col>
  18. <el-col :xs="24" :sm="8" :lg="8">
  19. <el-form-item label="辅材名称" prop="goodsName">
  20. <el-input v-model="tableScreenForm.goodsName" placeholder="辅材名称" size="small" />
  21. </el-form-item>
  22. </el-col>
  23. <el-col :xs="24" :sm="8" :lg="8">
  24. <el-form-item label="辅材小类" prop="categoryId">
  25. <el-cascader
  26. v-model="tableScreenForm.categoryId"
  27. placeholder="辅材小类"
  28. size="small"
  29. :show-all-levels="false"
  30. clearable
  31. :options="materialCategoryTree"
  32. :props="{
  33. options: materialCategoryTree,
  34. value: 'categoryId',
  35. label: 'categoryName',
  36. children: 'child',
  37. emitPath: false
  38. }"
  39. >
  40. </el-cascader>
  41. </el-form-item>
  42. </el-col>
  43. <el-col :xs="24" :sm="8" :lg="8">
  44. <el-form-item label="商品代码" prop="goodsCode">
  45. <el-input v-model="tableScreenForm.goodsCode" placeholder="商品代码" size="small" />
  46. </el-form-item>
  47. </el-col>
  48. <el-col :xs="24" :sm="8" :lg="8">
  49. <el-form-item label="规格型号" prop="goodsSpecification">
  50. <el-input v-model="tableScreenForm.goodsSpecification" placeholder="规格型号" size="small" />
  51. </el-form-item>
  52. </el-col>
  53. <el-col :xs="24" :sm="8" :lg="8" class="tr">
  54. <el-form-item label="">
  55. <el-button size="small" type="primary" @click="getGoodsListByScreen">搜索</el-button>
  56. </el-form-item>
  57. </el-col>
  58. </el-row>
  59. </el-form>
  60. </div>
  61. <el-table
  62. ref="goodsTable"
  63. :data="goodsList"
  64. :row-key="getRowKeys"
  65. height="350"
  66. size="mini"
  67. border
  68. header-cell-class-name="headerRowColor"
  69. style="width: 100%"
  70. @selection-change="handleChooseGoods"
  71. >
  72. <el-table-column type="selection" width="55" :reserve-selection="true" :selectable="selectable" />
  73. <el-table-column prop="parentCategoryName" label="大类类名称" />
  74. <el-table-column prop="categoryName" label="小类名称" />
  75. <el-table-column prop="goodsName" label="辅材名称" />
  76. <el-table-column prop="goodsId" label="商品编码" />
  77. <el-table-column prop="goodsCode" label="商品代码" />
  78. <el-table-column prop="goodsStockUnit" label="单位" />
  79. <el-table-column prop="goodsSpecification" label="规格型号" />
  80. <el-table-column prop="remark" label="备注" />
  81. </el-table>
  82. <div class="pagination clearfix" style="margin-top: 20px">
  83. <div class="fr">
  84. <el-pagination
  85. :current-page="table_currentPage"
  86. :page-size="table_pageSize"
  87. background
  88. layout="prev, pager, next"
  89. :total="table_listTotal"
  90. @current-change="handleTableCurrentChange"
  91. />
  92. </div>
  93. </div>
  94. <div slot="footer" class="dialog-footer">
  95. <el-button type="primary" @click="selGoods">确 定</el-button>
  96. </div>
  97. </el-dialog>
  98. </template>
  99. <script>
  100. import { materialCategoryTree } from '@/api/auxiliaryMaterialClass'
  101. import { newGetList } from '@/api/masterAuxiliaryMaterials'
  102. export default {
  103. props: {
  104. guolvList: {
  105. type: Array,
  106. default: () => []
  107. }
  108. },
  109. data() {
  110. return {
  111. innerVisible: true,
  112. tableScreenForm: {
  113. goodsId: '',
  114. goodsName: '',
  115. goodsCode: '',
  116. categoryId: '',
  117. goodsSpecification: ''
  118. },
  119. goodsList: [],
  120. table_currentPage: 1,
  121. table_pageSize: 10,
  122. table_listTotal: 0,
  123. table_chooseGoods: [],
  124. materialCategoryTree: []
  125. }
  126. },
  127. created() {
  128. // 获取小类筛选
  129. materialCategoryTree({ state: 'ON' }).then(res2 => {
  130. this.materialCategoryTree = res2.data.filter(item => item.child && item.child.length > 0)
  131. })
  132. // 获取列表数据
  133. this.getGoodsList()
  134. },
  135. methods: {
  136. selectable(row, index) {
  137. return !~this.guolvList.indexOf(row.goodsId)
  138. },
  139. // 获取商品列表
  140. getGoodsList() {
  141. newGetList({
  142. pageNum: this.table_currentPage,
  143. pageSize: this.table_pageSize,
  144. params: [
  145. ...(() => {
  146. if (this.tableScreenForm.goodsId) {
  147. return [{ param: 'a.goods_id', compare: 'like', value: this.tableScreenForm.goodsId }]
  148. } else {
  149. return []
  150. }
  151. })(),
  152. ...(() => {
  153. if (this.tableScreenForm.goodsName) {
  154. return [{ param: 'a.goods_name', compare: 'like', value: this.tableScreenForm.goodsName }]
  155. } else {
  156. return []
  157. }
  158. })(),
  159. ...(() => {
  160. if (this.tableScreenForm.goodsCode) {
  161. return [{ param: 'a.goods_code', compare: 'like', value: this.tableScreenForm.goodsCode }]
  162. } else {
  163. return []
  164. }
  165. })(),
  166. ...(() => {
  167. if (this.tableScreenForm.goodsSpecification) {
  168. return [
  169. { param: 'a.goods_specification', compare: 'like', value: this.tableScreenForm.goodsSpecification }
  170. ]
  171. } else {
  172. return []
  173. }
  174. })(),
  175. ...(() => {
  176. if (this.tableScreenForm.categoryId) {
  177. return [{ param: 'b.category_id', compare: '=', value: this.tableScreenForm.categoryId }]
  178. } else {
  179. return []
  180. }
  181. })()
  182. ]
  183. }).then(res => {
  184. this.goodsList = res.data.records
  185. console.log(res.data.records)
  186. this.table_listTotal = res.data.total
  187. })
  188. },
  189. // 搜索
  190. getGoodsListByScreen() {
  191. this.handleTableCurrentChange(1)
  192. },
  193. // 更改列表当前页
  194. handleTableCurrentChange(val) {
  195. if (this.table_chooseGoods.length > 0) {
  196. return this.$errorMsg('当前已选择商品')
  197. }
  198. this.table_currentPage = val
  199. this.getGoodsList()
  200. },
  201. // id
  202. getRowKeys(row) {
  203. return row.goodsId
  204. },
  205. // table点击选择商品
  206. handleChooseGoods(val) {
  207. this.table_chooseGoods = val
  208. },
  209. selGoods() {
  210. console.log(this.table_chooseGoods)
  211. this.$emit('confirm', this.table_chooseGoods)
  212. }
  213. }
  214. }
  215. </script>
  216. <style lang="scss" scoped></style>