addProduct.vue 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. <template>
  2. <div>
  3. <el-button size="small" type="text" @click="onShow(drawer = true)">添加产品</el-button>
  4. <el-drawer
  5. title="添加产品"
  6. :visible.sync="drawer"
  7. append-to-body
  8. direction="rtl"
  9. :show-close="false"
  10. size="80%">
  11. <div class="drawer__panel">
  12. <div class="flex-align-center flex-between " style="margin-top:-10px;margin-bottom: 10px">
  13. <div class="flex-align-center">
  14. <el-input size="small" suffix-icon="el-icon-search" v-model="param.content.where.condition" placeholder="产品名称,编号" @keyup.enter.native="listData(param.content.pageNumber = 1)" @clear="listData(param.content.pageNumber = 1)" clearable></el-input>&nbsp;
  15. </div>
  16. <div style="float: right">
  17. <el-button style="float: right" type="primary" size="mini" @click="onSubmit" :disabled="tableSelectData.length === 0 ">批量添加</el-button>
  18. </div>
  19. </div>
  20. <div class="produtMag-panel" style="margin-top: 10px">
  21. <el-table
  22. ref="multipleTable"
  23. :data="list"
  24. style="width: 100%"
  25. :header-cell-style="{height:'50px',color:'#606266',fontWeight:'400'}"
  26. :cell-style="{height:'50px',color:'#666666',fontWeight:'400'}"
  27. @selection-change="selectionChange">
  28. <el-table-column
  29. type="selection"
  30. width="55">
  31. </el-table-column>
  32. <el-table-column
  33. align="center"
  34. label="产品图"
  35. width="80">
  36. <template slot-scope="scope">
  37. <div v-if="scope.row.attinfos[0]">
  38. <previewImage style="height:38px;width:38px" :image="scope.row.attinfos[0]" :list="scope.row.attinfos" :deletebtn="false"></previewImage>
  39. </div>
  40. </template>
  41. </el-table-column>
  42. <el-table-column
  43. prop="itemno"
  44. label="产品编号"
  45. width="180">
  46. </el-table-column>
  47. <el-table-column
  48. prop="itemname"
  49. label="产品名称"
  50. width="180">
  51. </el-table-column>
  52. <el-table-column
  53. label="型号/规格">
  54. <template slot-scope="scope">
  55. <p><span>{{scope.row.model}}</span>&nbsp;/&nbsp;<span>{{scope.row.spec}}</span></p>
  56. </template>
  57. </el-table-column>
  58. <el-table-column
  59. prop="caliber"
  60. label="口径"
  61. width="180">
  62. </el-table-column>
  63. <el-table-column
  64. prop="pressure"
  65. label="压力"
  66. width="180">
  67. </el-table-column>
  68. <el-table-column
  69. prop="material"
  70. label="材质"
  71. width="180">
  72. </el-table-column>
  73. <el-table-column
  74. prop="brand"
  75. label="品牌"
  76. width="180">
  77. <template slot-scope="scope">
  78. <p v-for="(item,index) in scope.row.brand" :key="index">
  79. <span style="float: left" v-if="index === scope.row.brand.length -1">{{item?item.brandname+'':'--'}}</span>
  80. <span style="float: left" v-else>{{item?item.brandname+',':'--'}}</span>
  81. </p>
  82. </template>
  83. </el-table-column>
  84. <el-table-column
  85. prop="itemclass"
  86. label="类别"
  87. width="180">
  88. <template slot-scope="scope">
  89. <p v-for="(item,index) in scope.row.itemclass" :key="index">
  90. <span style="float: left" v-if="index === scope.row.itemclass.length -1">{{item?item.itemclassname+'':'--'}}</span>
  91. <span style="float: left" v-else>{{item?item.itemclassname+',':'--'}}</span>
  92. </p>
  93. </template>
  94. </el-table-column>
  95. <el-table-column
  96. prop="unitid"
  97. label="计量单位"
  98. width="100">
  99. <template slot-scope="scope">
  100. <el-tag size="mini" type="info" effect="plain">{{scope.row.unitname}}/{{scope.row.axunitname}}</el-tag>
  101. </template>
  102. </el-table-column>
  103. <el-table-column
  104. prop="marketprice"
  105. label="牌价"
  106. width="100">
  107. </el-table-column>
  108. <el-table-column
  109. label="操作"
  110. width="90"
  111. fixed="right">
  112. <template slot-scope="scope">
  113. <el-button type="text" size="small" @click="addProduct(scope.row)">添加</el-button>
  114. </template>
  115. </el-table-column>
  116. </el-table>
  117. <!-- <div class="container normal-panel" style="text-align:right">
  118. <el-pagination
  119. background
  120. @size-change="handleSizeChange"
  121. @current-change="handleCurrentChange"
  122. :current-page="currentPage"
  123. :page-sizes="[20, 50, 100, 200]"
  124. layout="total,sizes, prev, pager, next, jumper"
  125. :total="total">
  126. </el-pagination>
  127. </div>-->
  128. <div>
  129. <div style="float: left">已选:{{selectTotal}}个商品</div>
  130. <div style="margin-top:16px;text-align:right">
  131. <el-pagination
  132. background
  133. small
  134. @size-change="handleSizeChange"
  135. @current-change="handleCurrentChange"
  136. :current-page="currentPage"
  137. :page-sizes="[20, 50, 100, 200]"
  138. layout="total, prev, pager, next, jumper"
  139. :total="total">
  140. </el-pagination>
  141. </div>
  142. </div>
  143. </div>
  144. </div>
  145. </el-drawer>
  146. </div>
  147. </template>
  148. <script>
  149. import previewImage from '@/components/previewImage/index.vue'
  150. export default {
  151. props:['id','mainData'],
  152. components:{
  153. previewImage
  154. },
  155. data () {
  156. return {
  157. drawer:false,
  158. param:{
  159. "id": 20221208105403,
  160. "content": {
  161. "sa_projectid":this.id,
  162. "where": {
  163. "condition": ""
  164. }
  165. }
  166. },
  167. list:[],
  168. currentPage:0,
  169. selectTotal:0,
  170. total:0,
  171. tableSelectData:[],
  172. selectData:[]
  173. }
  174. },
  175. methods:{
  176. async listData () {
  177. this.param.content.sa_salesforecastbillid = this.$route.query.id
  178. const res = await this.$api.requested(this.param)
  179. this.list = res.data
  180. this.total = res.total
  181. this.currentPage = res.pageNumber
  182. },
  183. handleSizeChange(val) {
  184. // console.log(`每页 ${val} 条`);
  185. this.param.content.pageSize = val
  186. this.listData()
  187. },
  188. handleCurrentChange(val) {
  189. // console.log(`当前页: ${val}`);
  190. this.param.content.pageNumber = val
  191. this.listData()
  192. },
  193. onShow () {
  194. console.log(this.mainData)
  195. this.listData()
  196. this.selectListData()
  197. },
  198. async addProduct (row) {
  199. console.log(row,"添加商品")
  200. row.sa_salesforecastid = 0
  201. const res = await this.$api.requested({
  202. "id": 20220906155003,
  203. "content": {
  204. "sa_salesforecastmodelid":this.mainData.sa_salesforecastmodelid,
  205. "sa_salesforecastbillid":this.$route.query.id,
  206. "sa_projectid":this.id,
  207. "itemclassinfos": [{
  208. "sa_salesforecastid":0,
  209. "itemid":row.itemid,
  210. "itemclassnum":'',
  211. "orderqty": 1,
  212. "orderamount": row.marketprice,
  213. "invoiceqty": 1,
  214. "invoiceamount": row.marketprice,
  215. "outqty": 1,
  216. "outamount": row.marketprice
  217. }]
  218. }
  219. })
  220. this.tool.showMessage(res,()=>{
  221. this.$emit('onSuccess')
  222. this.listData()
  223. this.selectListData()
  224. })
  225. },
  226. /*选择要添加的数据*/
  227. selectionChange(val){
  228. console.log(val)
  229. this.tableSelectData = []
  230. this.tableSelectData = val
  231. let obj = this.tableSelectData.map(e=>{
  232. return {
  233. "sa_salesforecastid":0,
  234. "itemid":e.itemid,
  235. "itemclassnum":'',
  236. "orderqty": 1,
  237. "orderamount": e.marketprice,
  238. "invoiceqty": 1,
  239. "invoiceamount": e.marketprice,
  240. "outqty": 1,
  241. "outamount": e.marketprice
  242. }
  243. })
  244. this.selectData = obj
  245. console.log(this.selectData)
  246. },
  247. /*批量添加产品*/
  248. async onSubmit(){
  249. const res = await this.$api.requested({
  250. "id": 20220906155003,
  251. "content": {
  252. "sa_salesforecastmodelid":this.mainData.sa_salesforecastmodelid,
  253. "sa_salesforecastbillid":this.$route.query.id,
  254. "sa_projectid":this.id,
  255. "itemclassinfos": this.selectData
  256. }
  257. })
  258. this.tool.showMessage(res,()=>{
  259. this.$emit('onSuccess')
  260. this.listData()
  261. this.selectListData()
  262. })
  263. },
  264. /*已选产品*/
  265. async selectListData(){
  266. const res = await this.$api.requested({
  267. "id": 20220906154703,
  268. "content": {
  269. "sa_salesforecastbillid":this.$route.query.id,
  270. "where":{
  271. "sa_projectid":'',
  272. "condition":""
  273. }
  274. }
  275. })
  276. this.selectTotal = res.total
  277. }
  278. },
  279. mounted () {
  280. }
  281. }
  282. </script>
  283. <style>
  284. </style>