productlist.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383
  1. <template>
  2. <el-row :gutter="10">
  3. <el-col :span="setcol">
  4. <el-button class="inline-16" v-if="data.status === '新建'" style="margin:0 0 10px 0px" size="small" type="primary" @click="drawer = true">{{setcol === 24?'添 加':'取 消'}}</el-button>
  5. <excel class="inline-16" :tablecols="columnTitle" :param="param" :total="total" :excelTitle="excelTitle"></excel>
  6. <!-- <el-button v-if="data.status === '新建'" style="margin:0 0 10px 0px" size="small" type="primary" @click="setcol = setcol === 24?12:24">{{setcol === 24?'添 加':'取 消'}}</el-button>-->
  7. <el-table
  8. ref="multipleTable"
  9. :data="tableData"
  10. height="500px"
  11. style="width: 100%;"
  12. size="small"
  13. stripe
  14. border>
  15. <!-- <el-table-column
  16. type="selection"
  17. width="55"
  18. align="center">
  19. </el-table-column> -->
  20. <el-table-column
  21. prop="rowno"
  22. label="行号"
  23. width="50">
  24. </el-table-column>
  25. <el-table-column
  26. prop="itemname"
  27. label="产品名称"
  28. width="180">
  29. </el-table-column>
  30. <el-table-column
  31. prop="itemno"
  32. label="产品编号"
  33. width="180">
  34. </el-table-column>
  35. <el-table-column
  36. label="型号/规格"
  37. prop="model">
  38. <template slot-scope="scope">
  39. <p><span>{{scope.row.model}}</span>&nbsp;/&nbsp;<span>{{scope.row.spec}}</span></p>
  40. </template>
  41. </el-table-column>
  42. <el-table-column
  43. label="数量"
  44. width="180"
  45. prop="qty">
  46. <template slot-scope="scope">
  47. <el-input-number :controls="true" controls-position='right' :step-strictly="true" v-if="data.status === '新建'" size="mini" v-model="scope.row.qty" :min="scope.row.orderminqty" :step="scope.row.orderaddqty" label="输入数量" @change="qtyChange(scope.row,scope.$index)"></el-input-number>
  48. <span v-else>{{scope.row.qty}}</span>
  49. </template>
  50. </el-table-column>
  51. <el-table-column
  52. prop="marketprice"
  53. label="牌价"
  54. width="100">
  55. </el-table-column>
  56. <el-table-column
  57. prop="defaultprice"
  58. label="折前价格"
  59. width="100">
  60. </el-table-column>
  61. <el-table-column
  62. prop="defaultamount"
  63. label="折前金额"
  64. width="100">
  65. <template slot-scope="scope">
  66. <p style="color:red;font-weight:500">¥&nbsp;{{tool.formatAmount(scope.row.defaultprice * scope.row.qty,2)}}</p>
  67. </template>
  68. </el-table-column>
  69. <el-table-column
  70. label="折后单价"
  71. prop="price">
  72. <template slot-scope="scope">
  73. <p>¥&nbsp;{{scope.row.price}}</p>
  74. </template>
  75. </el-table-column>
  76. <el-table-column
  77. label="折后金额"
  78. width="150"
  79. prop="amount">
  80. <template slot-scope="scope">
  81. <p style="color:red;font-weight:500">¥&nbsp;{{tool.formatAmount(scope.row.amount,2)}}</p>
  82. </template>
  83. </el-table-column>
  84. <el-table-column
  85. label="需求日期"
  86. prop="needdate"
  87. width="200">
  88. <template slot="header" slot-scope="scope">
  89. <div>
  90. <el-date-picker
  91. style="width:180px"
  92. v-if="data.status === '新建'"
  93. v-model="value2"
  94. value-format="yyyy-MM-dd"
  95. slot="reference"
  96. align="right"
  97. type="date"
  98. size="mini"
  99. placeholder="一键交期"
  100. @change="dateChange(scope.row)">
  101. </el-date-picker>
  102. <span v-else>需求日期</span>
  103. </div>
  104. </template>
  105. <template slot-scope="scope">
  106. <el-date-picker
  107. v-if="scope.row.delivery > 0 && data.status === '新建'"
  108. v-model="scope.row.needdate"
  109. type="date"
  110. placeholder="选择日期"
  111. value-format="yyyy-MM-dd"
  112. size="mini"
  113. style="width:150px"
  114. :picker-options="pickerOptions"
  115. @change="onDateChange(scope.row)"
  116. @focus="setPickerOptions(scope.row)">
  117. </el-date-picker>
  118. <div v-else>
  119. <p v-if="scope.row.delivery === 0 ">不管控交期</p>
  120. <p v-else>{{scope.row.needdate}}</p>
  121. </div>
  122. </template>
  123. </el-table-column>
  124. <el-table-column
  125. prop="deliverydate"
  126. label="回复交期"
  127. width="120">
  128. </el-table-column>
  129. <el-table-column
  130. prop="unit"
  131. label="计量单位"
  132. width="90">
  133. <template slot-scope="scope">
  134. <el-tag size="mini" type="info" effect="plain">{{scope.row.unit}}</el-tag>
  135. </template>
  136. </el-table-column>
  137. <el-table-column
  138. prop="remarks"
  139. label="备注"
  140. width="300"
  141. fixed="right">
  142. <template slot-scope="scope">
  143. <el-input type="textarea" @blur="onConfirm([scope.row],true)" size="small" v-model="scope.row.remarks" placeholder="请输入备注"></el-input>
  144. </template>
  145. </el-table-column>
  146. <el-table-column v-if="data.status === '新建'" width="90" fixed="right">
  147. <template slot-scope="scope">
  148. <el-button type="text" size="mini" @click="deleteOrderProduct(scope.row)">删 除</el-button>
  149. </template>
  150. </el-table-column>
  151. </el-table>
  152. <div style="margin-top:16px;text-align:right">
  153. <el-pagination
  154. background
  155. small
  156. @size-change="handleSizeChange"
  157. @current-change="handleCurrentChange"
  158. :current-page="currentPage"
  159. :page-size="param.content.pageSize"
  160. layout="total, prev, pager, next, jumper"
  161. :total="total">
  162. </el-pagination>
  163. </div>
  164. </el-col>
  165. <el-col :span="24 - setcol">
  166. <el-drawer
  167. title="添加商品"
  168. :visible.sync="drawer"
  169. append-to-body
  170. direction="rtl"
  171. size="80%">
  172. <div class="drawer__panel">
  173. <addProduct :drawer="drawer" :data="data" @onConfirm="onConfirm"></addProduct>
  174. </div>
  175. </el-drawer>
  176. </el-col>
  177. </el-row>
  178. </template>
  179. <script>
  180. import addProduct from '@/template/orderCanUseProduct/index.vue'
  181. export default {
  182. props:['data','type'],
  183. data () {
  184. return {
  185. drawer:false,
  186. setcol:24,
  187. dataRefresh:true,
  188. tableData:[],
  189. columnTitle:[],
  190. excelTitle:'订单明细',
  191. param:{
  192. "id": 20221109093902,
  193. "content": {
  194. "sa_orderid": 0, //订单ID
  195. "pageNumber": 1,
  196. "pageSize": 20,
  197. "where": {
  198. "condition": ""
  199. }
  200. },
  201. },
  202. pickerOptions: {
  203. disabledDate(time) {
  204. return time.getTime() < (Date.now() - 24 * 3600 * 1000);
  205. },
  206. },
  207. total:0,
  208. currentPage:0,
  209. time: null,
  210. value2:''
  211. }
  212. },
  213. components:{
  214. /*excel:() => import('../export_excel'),*/
  215. excel:() => import('../details/export_excel'),
  216. addProduct
  217. },
  218. methods:{
  219. async listData () {
  220. this.param.content.sa_orderid = this.$route.query.id
  221. const res = await this.$api.requested(this.param)
  222. this.tableData = res.data
  223. this.total = res.total
  224. this.currentPage = res.pageNumber
  225. },
  226. handleSizeChange(val) {
  227. // console.log(`每页 ${val} 条`);
  228. this.params.content.pageSize = val
  229. this.listData()
  230. },
  231. handleCurrentChange(val) {
  232. // console.log(`当前页: ${val}`);
  233. this.params.content.pageNumber = val
  234. this.listData()
  235. },
  236. async deleteOrderProduct (row) {
  237. const res = await this.$api.requested({
  238. "id": 20221109093702,
  239. "content": {
  240. "sa_orderid":this.$route.query.id,
  241. "sa_orderitemsids": [row.sa_orderitemsid]
  242. },
  243. })
  244. this.tool.showMessage(res,()=>{
  245. this.listData()
  246. this.$emit('onSuccess')
  247. })
  248. },
  249. // async updateOrderProduct (val) {
  250. // const res = await this.$api.requested({
  251. // "id": 20221110145302,
  252. // "content": val
  253. // })
  254. // this.$emit('onSuccess')
  255. // },
  256. qtyChange (val,index) {
  257. let that = this
  258. this.$set(this.tableData,index,val)
  259. // // 防抖
  260. if(this.time !== null){
  261. clearTimeout(this.time);
  262. }
  263. this.time = setTimeout(() => {
  264. that.updateOrder({
  265. "sa_orderid": this.data.sa_orderid, //订单ID
  266. "sys_enterpriseid": this.data.sys_enterpriseid, //企业ID
  267. "sa_contractid": this.data.contacts.contactsid, //合同ID
  268. "type": this.data.type, //订单类型
  269. "items": [{
  270. "sa_orderitemsid": val.sa_orderitemsid,//0表示新增
  271. "itemid": val.itemid, //商品ID
  272. "qty": val.qty, //数量
  273. "needdate": val.needdate//可以不传,修改交期
  274. }]
  275. })
  276. this.$emit("qtyChange")
  277. },500)
  278. },
  279. onDateChange (val){
  280. let that = this
  281. that.value2 = ''
  282. that.updateOrder({
  283. "sa_orderid": this.data.sa_orderid, //订单ID
  284. "sys_enterpriseid": this.data.sys_enterpriseid, //企业ID
  285. "sa_contractid": this.data.contacts.contactsid, //合同ID
  286. "type": this.data.type, //订单类型
  287. "items": [{
  288. "sa_orderitemsid": val.sa_orderitemsid,//0表示新增
  289. "itemid": val.itemid, //商品ID
  290. "qty": val.qty, //数量
  291. "needdate": val.needdate//可以不传,修改交期
  292. }]
  293. })
  294. },
  295. async dateChange (row) {
  296. this.tableData = this.tableData.filter(e=>{
  297. if (e.delivery > 0) {
  298. e.needdate = this.value2
  299. }
  300. return e
  301. })
  302. const res = await this.$api.requested({
  303. "id": 20230104143802,
  304. "content": {
  305. "sa_orderid": this.$route.query.id,
  306. "needdate": this.value2
  307. },
  308. })
  309. },
  310. async updateOrder (val) {
  311. const res = await this.$api.requested({
  312. "id": 20221109093602,
  313. "content": val
  314. })
  315. this.$emit('onSuccess')
  316. },
  317. setPickerOptions (val) {
  318. var startDate = val.deliverydate
  319. startDate = startDate.replace(new RegExp("-","gm"),"/")
  320. var startDateM = (new Date(startDate)).getTime()
  321. this.pickerOptions = {
  322. disabledDate(time) {
  323. return time.getTime() < startDateM;
  324. },
  325. }
  326. },
  327. // 订单添加商品
  328. async onConfirm (data,edit) {
  329. const res = await this.$api.requested({
  330. "id": 20221109093602,
  331. "content": {
  332. "sa_orderid": this.$route.query.id, //订单ID
  333. "sys_enterpriseid": this.data.sys_enterpriseid, //企业ID
  334. "type": this.data.type, //订单类型
  335. "items": data.map(e=>{
  336. return {
  337. sa_orderitemsid:edit?e.sa_orderitemsid : 0,
  338. itemid:e.itemid,
  339. qty:e.orderminqty,
  340. needdate:e.deliverydate,
  341. remarks:e.remarks
  342. }
  343. })
  344. },
  345. })
  346. this.tool.showMessage(res,()=>{
  347. this.drawer = false
  348. this.listData()
  349. this.$emit('onSuccess')
  350. })
  351. },
  352. },
  353. mounted () {
  354. this.listData()
  355. console.log("表结构")
  356. this.columnTitle = []
  357. this.$refs.multipleTable.$children.forEach(obj => {
  358. let columnChild = {'columnname':obj.prop,'filter':0,'rowindex':'','sequence':'','title':obj.label,'width':obj.width}
  359. // 存到columnTitle数组中
  360. this.columnTitle.push(columnChild)
  361. })
  362. console.log(this.columnTitle)
  363. },
  364. watch:{
  365. value2 (val) {
  366. console.log(val)
  367. }
  368. }
  369. }
  370. </script>
  371. <style>
  372. </style>