index.vue 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. <template>
  2. <div>
  3. <el-button size="small" type="primary" @click="onShow" >{{title}}</el-button>
  4. <el-drawer
  5. title="添加商品"
  6. :visible.sync="dialogFormVisible"
  7. size="90%"
  8. direction="rtl"
  9. :show-close="false"
  10. append-to-body
  11. @close="onClose">
  12. <div class="drawer__panel">
  13. <div class="flex-between">
  14. <el-select v-model="sa_brandid" placeholder="选择品牌" size="small" clearable class="inline-24" @change="brandChange" :disabled="querySa_brandid > 0">
  15. <el-option
  16. v-for="item in options.brands"
  17. :key="item.sa_brandid"
  18. :label="item.brandname"
  19. :value="item.sa_brandid">
  20. </el-option>
  21. </el-select>
  22. <el-cascader
  23. placeholder="选择分类" size="small"
  24. v-model="itemclassid"
  25. :options="options.itemclass"
  26. :props="{ checkStrictly: true,children:'subdep',label:'itemclassname',value:'itemclassid' }"
  27. clearable @change="classChange"></el-cascader>
  28. </div>
  29. <div class="top-margin">
  30. <uploadAllData
  31. class="inline-16"
  32. :total="total"
  33. @handlePullApi="handlePullApi"
  34. @handleUploadApi="handleUploadApi"
  35. @onSuccess="onSuccess"
  36. ></uploadAllData>
  37. <el-button :disabled="items.length === 0" :type="items.length > 0?'primary':''" size="small" class="inline-24 bottom-margin" @click="batchAdd">添加选中商品</el-button>
  38. <el-input style="width:200px;" placeholder="商品名称/编码/品号" :suffix-icon="params.content.where.condition?params.content.where.condition.length > 0?'':'':'el-icon-search'" v-model="params.content.where.condition" @keyup.native.enter="listData(params.content.pageNumber = 1)" @clear="listData(params.content.pageNumber = 1)" size="small" class="input-with-select inline-24 layout_search__panel bottom-margin" clearable>
  39. </el-input>
  40. <el-select v-model="itemstandard" placeholder="选择标准" size="small" clearable class="inline-24 bottom-margin" @change="queryChange">
  41. <el-option
  42. v-for="item in options.itemstandards"
  43. :key="item.value"
  44. :label="item.value"
  45. :value="item.value">
  46. <span style="float: left">{{ item.value }}</span>
  47. <span style="float: right; color: #8492a6; font-size: 12px">{{ item.remarks?item.remarks:'暂无描述' }}</span>
  48. </el-option>
  49. </el-select>
  50. <el-select v-model="itemmaterial" placeholder="选择材质" size="small" clearable class="inline-24 bottom-margin" @change="queryChange">
  51. <el-option
  52. v-for="item in options.itemmaterials"
  53. :key="item.value"
  54. :label="item.value"
  55. :value="item.value">
  56. <span style="float: left">{{ item.value }}</span>
  57. <span style="float: right; color: #8492a6; font-size: 12px">{{ item.remarks?item.remarks:'暂无描述' }}</span>
  58. </el-option>
  59. </el-select>
  60. <el-input style="width:200px;" placeholder="型号" :suffix-icon="params.content.where.model?params.content.where.model.length > 0?'':'':'el-icon-search'" v-model="params.content.where.model" @keyup.native.enter="listData(params.content.pageNumber = 1)" @clear="listData(params.content.pageNumber = 1)" size="small" class="bottom-margin input-with-select inline-24 layout_search__panel" clearable>
  61. </el-input>
  62. <el-input style="width:200px;" placeholder="规格" :suffix-icon="params.content.where.spec?params.content.where.spec.length > 0?'':'':'el-icon-search'" v-model="params.content.where.spec" @keyup.native.enter="listData(params.content.pageNumber = 1)" @clear="listData(params.content.pageNumber = 1)" size="small" class="bottom-margin input-with-select inline-24 layout_search__panel" clearable>
  63. </el-input>
  64. </div>
  65. <div >
  66. <tableTemp :data="list" :layout="tablecolsAdd" :opwidth="200" :custom="true" height="calc(100vh - 370px)" @checkboxCallBack="checkboxCallBack" fixedName="operation">
  67. <template v-slot:customcol="scope">
  68. <p >{{scope.column.data[scope.column.columnname]}}</p>
  69. </template>
  70. <template v-slot:opreation="scope">
  71. <el-button type="text" size="mini" @click="addProduct(scope)">添 加</el-button>
  72. </template>
  73. </tableTemp>
  74. <div class="container normal-panel" style="text-align:right">
  75. <el-pagination
  76. background
  77. @size-change="handleSizeChange"
  78. @current-change="handleCurrentChange"
  79. :current-page="params.content.pageNumber"
  80. :page-sizes="[20, 50, 100, 200]"
  81. :page-size="100"
  82. layout="total,sizes, prev, pager, next, jumper"
  83. :total="total">
  84. </el-pagination>
  85. </div>
  86. </div>
  87. </div>
  88. </el-drawer>
  89. </div>
  90. </template>
  91. <script>
  92. import tableTemp from './table'
  93. import uploadAllData from '@/components/uploadAllData/index'
  94. export default {
  95. name: "index",
  96. props:["data","tradefield","discountrate","params","title","tablecolsAdd","sa_projectid","querySa_brandid"],
  97. components:{tableTemp,uploadAllData},
  98. data(){
  99. return {
  100. dialogFormVisible:false,
  101. sa_brandid:'',
  102. itemclassid:'',
  103. itemstandard:'',
  104. itemmaterial:'',
  105. list:[],
  106. total:0,
  107. options:{
  108. brands:[],
  109. itemclass:[],
  110. itemstandards:[],
  111. itemmaterials:[]
  112. },
  113. items:[]
  114. }
  115. },
  116. methods:{
  117. onShow(){
  118. this.dialogFormVisible = true
  119. this.$store.dispatch('optiontypeselect','itemstandards').then(res=>{
  120. this.options.itemstandards = res.data
  121. })
  122. this.$store.dispatch('optiontypeselect','itemmaterial').then(res=>{
  123. this.options.itemmaterials = res.data
  124. })
  125. this.querySa_brandid !== '' ?this.sa_brandid = this.querySa_brandid : this.sa_brandid = ''
  126. this.queryBrands()
  127. this.queryClass()
  128. this.listData()
  129. },
  130. /*可添加商品*/
  131. async listData(){
  132. console.log(this.tradefield,'领域')
  133. if (this.data){
  134. switch (this.data.type) {
  135. case '标准订单':
  136. this.params.id = 20221109153502
  137. break;
  138. case '项目订单':
  139. this.params.id = 20230103155002
  140. break;
  141. case '促销订单':
  142. this.params.id = 20230107182302
  143. break;
  144. case '工具订单':
  145. this.params.id = 20221109153502
  146. break;
  147. default:
  148. this.params.id = 20221109153502
  149. break;
  150. }
  151. }
  152. this.params.content.where.tradefield = this.tradefield
  153. const res = await this.$api.requested(this.params)
  154. this.list = res.data
  155. this.total = res.total
  156. },
  157. /*获取品牌*/
  158. async queryBrands () {
  159. const res = await this.$api.requested({
  160. "id": "20220924163702",
  161. "content": {
  162. "pageSize":1000,
  163. "where":{
  164. "condition":""
  165. }
  166. }
  167. })
  168. this.options.brands = res.data
  169. console.log("获取品牌",res.data)
  170. this.sa_brandid = res.data[0].sa_brandid
  171. this.queryClass()
  172. },
  173. brandChange(){
  174. this.params.content.where.sa_brandid = this.sa_brandid
  175. this.listData()
  176. this.queryClass()
  177. },
  178. /*获取分类*/
  179. async queryClass () {
  180. const res = await this.$api.requested({
  181. "id":"20220922110403",
  182. "content":{
  183. "sa_brandid":this.sa_brandid !== '' ? this.sa_brandid : 0
  184. }
  185. })
  186. this.options.itemclass = res.data[0].ttemclass
  187. },
  188. classChange(){
  189. this.params.content.where.itemclassid = this.itemclassid[this.itemclassid.length -1]
  190. this.listData()
  191. },
  192. queryChange(){
  193. this.params.content.where.standards = this.itemstandard
  194. this.params.content.where.material = this.itemmaterial
  195. this.listData()
  196. },
  197. /*拉取数据*/
  198. handlePullApi (pullApi) {
  199. pullApi.content = JSON.parse(JSON.stringify(this.params.content))
  200. pullApi.id = this.params.id
  201. /*pullApi.content.sa_projectid = this.$route.query.id*/
  202. },
  203. /*上传数据*/
  204. handleUploadApi (uploadApi,data) {
  205. this.$emit('uploadData',uploadApi,data)
  206. },
  207. /*勾选*/
  208. checkboxCallBack(val){
  209. this.items = val
  210. },
  211. /*批量添加*/
  212. batchAdd(){
  213. console.log(this.items,'item')
  214. this.$emit('addSuccess',this.items)
  215. },
  216. /*添加商品*/
  217. addProduct(val){
  218. console.log(val,'添加商品')
  219. this.items = val
  220. this.$emit('addProduct',this.items.data)
  221. },
  222. onSuccess () {
  223. console.log('成功')
  224. this.listData()
  225. },
  226. onClose(){
  227. this.dialogFormVisible = false
  228. this.sa_brandid = ''
  229. this.itemclassid = ''
  230. this.itemstandard = ''
  231. this.itemmaterial = ''
  232. this.$emit("closeDrawer")
  233. },
  234. handleSizeChange(val) {
  235. // console.log(`每页 ${val} 条`);
  236. this.params.content.pageSize = val
  237. this.listData()
  238. },
  239. handleCurrentChange(val) {
  240. // console.log(`当前页: ${val}`);
  241. this.params.content.pageNumber = val
  242. this.listData()
  243. },
  244. },
  245. mounted() {
  246. },
  247. created() {
  248. }
  249. }
  250. </script>
  251. <style scoped>
  252. .top-margin{
  253. margin-top: 20px;
  254. }
  255. .bottom-margin{
  256. margin-bottom: 20px;
  257. }
  258. /deep/ input::-webkit-input-placeholder {
  259. color: #58585d;
  260. }
  261. /deep/ input::-moz-input-placeholder {
  262. color: #58585d;
  263. }
  264. /deep/ input::-ms-input-placeholder {
  265. color: #58585d;
  266. }
  267. </style>