You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

240 lines
7.8 KiB

2 years ago
2 years ago
2 years ago
2 years ago
  1. <script>
  2. import CustomerInfo from '../../customer/info.vue'
  3. import {
  4. getExternalPartCustomerList,
  5. removeExternalPartCustomer,
  6. saveExternalPartCustomer, updateExternalPartCustomer
  7. } from '../../../../api/part/externalPartCustomer'
  8. import dayjs from 'dayjs'
  9. let customer = {
  10. customerNo: "",
  11. customerName: "",
  12. newCustomerNo:"",
  13. }
  14. export default {
  15. name: 'linkedCustomer',
  16. components: {CustomerInfo},
  17. props:{
  18. dataList:{
  19. type:Array,
  20. default:()=>[],
  21. },
  22. part:{
  23. type:Object,
  24. default:()=>{},
  25. },
  26. height:{
  27. type:Number,
  28. default:350,
  29. },
  30. columnList:{
  31. type:Array,
  32. default:()=>[],
  33. },
  34. visible:{
  35. type:Boolean,
  36. default:true,
  37. }
  38. },
  39. data(){
  40. return{
  41. customerVisible:false,
  42. saveVisible: false,
  43. saveCustomer:{
  44. ...customer,
  45. },
  46. customerRules:{
  47. customerNo: [{ required: true, message: 'Please input Customer No', trigger: ['blur','change']}],
  48. customerName: [{ required: true, message: 'Please input Customer Name', trigger: ['blur','change']}],
  49. newCustomerNo: [{ required: true, message: 'Please input Customer Name', trigger: ['blur','change']}],
  50. },
  51. }
  52. },
  53. watch:{
  54. "saveCustomer.customerNo"(newVal,oldVal){
  55. this.saveCustomer.customerNo = newVal.toUpperCase();
  56. },
  57. "saveCustomer.newCustomerNo"(newVal,oldVal){
  58. this.saveCustomer.newCustomerNo = newVal.toUpperCase();
  59. }
  60. },
  61. methods:{
  62. customerRowClick(row){
  63. if (this.saveCustomer.site){
  64. this.saveCustomer.newCustomerNo = row.customerNo
  65. }else {
  66. this.saveCustomer.customerNo = row.customerNo
  67. }
  68. this.saveCustomer.customerName = row.customerName
  69. this.customerVisible = false
  70. },
  71. saveExternalPartCustomer(){
  72. this.$refs.saveForm.validate((valid,obj) => {
  73. if (valid){
  74. let params = {
  75. ...this.saveCustomer,
  76. partNo: this.part.partNo,
  77. site: this.part.site,
  78. createBy: this.$store.state.user.name,
  79. createTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
  80. }
  81. saveExternalPartCustomer(params).then(({data})=>{
  82. if (data && data.code === 0){
  83. this.$emit('refresh')
  84. this.saveVisible = false
  85. this.$message.success(data.msg)
  86. }else {
  87. this.$message.warning(data.msg)
  88. }
  89. }).catch((error)=>{
  90. this.$message.error(error)
  91. })
  92. }else {
  93. for (let i = 0; i < Object.keys(obj).length; i++) {
  94. this.$message.warning(obj[Object.keys(obj)[i]][0].message)
  95. break
  96. }
  97. }
  98. })
  99. },
  100. removeExternalPartCustomer(row){
  101. removeExternalPartCustomer(row).then(({data})=>{
  102. if (data && data.code === 0){
  103. this.$emit('refresh')
  104. this.saveVisible = false
  105. this.$message.success(data.msg)
  106. }else {
  107. this.$message.warning(data.msg)
  108. }
  109. }).catch((error)=>{
  110. this.$message.error(error)
  111. })
  112. },
  113. closeSavePartCustomer(){
  114. this.saveCustomer = {
  115. ...customer,
  116. }
  117. this.$refs.saveForm.resetFields()
  118. },
  119. handleUpdate(row){
  120. this.saveCustomer = {
  121. ...row,
  122. newCustomerNo: row.customerNo,
  123. }
  124. this.saveVisible = true
  125. },
  126. updateExternalPartCustomer(){
  127. this.$refs.saveForm.validate((valid,obj) => {
  128. if (valid){
  129. let params = {
  130. ...this.saveCustomer,
  131. updateBy: this.$store.state.user.name,
  132. updateTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
  133. }
  134. updateExternalPartCustomer(params).then(({data})=>{
  135. if (data && data.code === 0){
  136. this.$emit('refresh')
  137. this.saveVisible = false
  138. this.$message.success(data.msg)
  139. }else {
  140. this.$message.warning(data.msg)
  141. }
  142. }).catch((error)=>{
  143. this.$message.error(error)
  144. })
  145. }else {
  146. for (let i = 0; i < Object.keys(obj).length; i++) {
  147. this.$message.warning(obj[Object.keys(obj)[i]][0].message)
  148. break
  149. }
  150. }
  151. })
  152. }
  153. }
  154. }
  155. </script>
  156. <template>
  157. <div>
  158. <div v-if="visible">
  159. <el-button type="primary" @click="saveVisible=true">New Customer</el-button>
  160. </div>
  161. <el-table :data="dataList" style="width: 100%;margin-top: 5px" :height="height" border>
  162. <el-table-column
  163. v-if="visible"
  164. header-align="center"
  165. align="center"
  166. width="100"
  167. fixed="left"
  168. label="Actions">
  169. <template slot-scope="scope">
  170. <el-link style="cursor:pointer;" @click="handleUpdate(scope.row)">Edit</el-link>
  171. <el-link style="cursor:pointer;" @click="removeExternalPartCustomer(scope.row)">Delete</el-link>
  172. </template>
  173. </el-table-column>
  174. <el-table-column
  175. v-for="(item,index) in columnList" :key="index"
  176. :sortable="item.columnSortable"
  177. :prop="item.columnProp"
  178. :header-align="item.headerAlign"
  179. :show-overflow-tooltip="item.showOverflowTooltip"
  180. :align="item.align"
  181. :fixed="item.fixed===''?false:item.fixed"
  182. :min-width="item.columnWidth"
  183. :label="item.columnLabel">
  184. <template slot-scope="scope">
  185. <span v-if="!item.columnHidden"> {{ scope.row[item.columnProp] }}</span>
  186. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]"
  187. style="width: 100px; height: 80px"/></span>
  188. </template>
  189. </el-table-column>
  190. </el-table>
  191. <el-dialog v-drag :title="`Linked Customer`" :close-on-click-modal="false" width="400px" @close="closeSavePartCustomer" :visible.sync="saveVisible">
  192. <el-form :model="saveCustomer" label-position="top" ref="saveForm" :rules="customerRules" label-width="100px">
  193. <el-row :gutter="10">
  194. <el-col :span="8">
  195. <el-form-item label="Part No">
  196. <el-input v-model="part.partNo" readonly disabled></el-input>
  197. </el-form-item>
  198. </el-col>
  199. <el-col :span="16">
  200. <el-form-item label="Part Description">
  201. <el-input v-model="part.partDesc" readonly disabled></el-input>
  202. </el-form-item>
  203. </el-col>
  204. <el-col :span="8" v-if="saveCustomer.site">
  205. <el-form-item label="Customer No" :show-message="false" prop="newCustomerNo">
  206. <span slot="label" style="cursor:pointer;" @click="customerVisible=true"><a herf="#">Customer No</a></span>
  207. <el-input v-model="saveCustomer.newCustomerNo" ></el-input>
  208. </el-form-item>
  209. </el-col>
  210. <el-col :span="8" v-else>
  211. <el-form-item label="Customer No" :show-message="false" prop="customerNo">
  212. <span slot="label" style="cursor:pointer;" @click="customerVisible=true"><a herf="#">Customer No</a></span>
  213. <el-input v-model="saveCustomer.customerNo" ></el-input>
  214. </el-form-item>
  215. </el-col>
  216. <el-col :span="24">
  217. <el-form-item label="Customer Name" :show-message="false" prop="customerName">
  218. <el-input v-model="saveCustomer.customerName" disabled></el-input>
  219. </el-form-item>
  220. </el-col>
  221. </el-row>
  222. </el-form>
  223. <div slot="footer" class="dialog-footer">
  224. <el-button type="primary" v-if="saveCustomer.site" @click="updateExternalPartCustomer">Save</el-button>
  225. <el-button type="primary" v-else @click="saveExternalPartCustomer">Save</el-button>
  226. <el-button @click="saveVisible=false">Cancel</el-button>
  227. </div>
  228. </el-dialog>
  229. <el-dialog title="Select Customer" :close-on-click-modal="false" :visible.sync="customerVisible">
  230. <customer-info @rowClick="customerRowClick" v-if="customerVisible" :of-components="true" :height="300"></customer-info>
  231. </el-dialog>
  232. </div>
  233. </template>
  234. <style scoped>
  235. </style>