index.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. <template>
  2. <template-page
  3. ref="pageRef"
  4. :getList="getList"
  5. :exportList="exportList"
  6. :columnParsing="columnParsing"
  7. :optionsEvensGroup="optionsEvensGroup"
  8. :tableAttributes="tableAttributes"
  9. :tableEvents="tableEvents"
  10. >
  11. <div class="cartographer_big">
  12. <el-dialog title="创建工单" width="100%" :modal="false" :visible.sync="formDialog" :before-close="formCancel">
  13. <zj-page-container>
  14. <zj-page-fill class="neibuview">
  15. <zj-form-container ref="formRef" :form-data="formData" :styleSwitch="false">
  16. <zj-form-module title="新增" label-width="90px" :form-data="formData" :form-items="formItems">
  17. </zj-form-module>
  18. </zj-form-container>
  19. </zj-page-fill>
  20. <!-- 操作按钮 -->
  21. <div class="dialog-footer" style="text-align: right; box-sizing: border-box; padding: 20px">
  22. <el-button size="mini" @click="formCancel">取 消</el-button>
  23. <el-button size="mini" @click="formConfirm" type="primary">确 定</el-button>
  24. </div>
  25. </zj-page-container>
  26. </el-dialog>
  27. </div>
  28. </template-page>
  29. </template>
  30. <script>
  31. import TemplatePage from '@/components/template/template-page-1.vue'
  32. import {
  33. partsOldOutList,
  34. partsOldOutExport,
  35. partsOldOutAdd
  36. } from '@/api/material-system/center/center-old-parts-shop-out'
  37. import { getWebsit } from '@/api/customerManagement.js'
  38. import { getGoodsList } from '@/api/auxiliaryFittings/auxiliarySalesReturnOrder'
  39. import operation_mixin from '@/components/template/operation_mixin.js'
  40. export default {
  41. components: { TemplatePage },
  42. mixins: [operation_mixin],
  43. data() {
  44. return {
  45. // 表格属性
  46. tableAttributes: {},
  47. // 表格事件
  48. tableEvents: {},
  49. // 事物类型
  50. objectTypeList: [
  51. { label: '退旧件', value: '退旧件' },
  52. { label: '无件返回', value: '无件返回' },
  53. { label: '新件退库', value: '新件退库' }
  54. ],
  55. websitList: [],
  56. partsList: [],
  57. formDialog: false,
  58. formData: {
  59. objectType: '',
  60. objectTypeName: '',
  61. partsName: '',
  62. partsNumber: '',
  63. qty: '',
  64. applyNo: '',
  65. materialGroupName: '',
  66. remark: '',
  67. goodsStockUnit: '',
  68. voucherNo: '',
  69. totalNumber: 0,
  70. sendWebsitId: '',
  71. sendWebsitName: '',
  72. partsNumberName_: ''
  73. }
  74. }
  75. },
  76. computed: {
  77. optionsEvensGroup() {
  78. return [
  79. [
  80. [
  81. this.optionsEvensAuth('add', {
  82. click: () => {
  83. getWebsit({ type: 'C', status: true, queryPartsWebsit: true }).then(res => {
  84. this.websitList = res.data.map(item => ({ label: item.name, value: item.websitId, ...item }))
  85. this.formDialog = true
  86. })
  87. }
  88. })
  89. ]
  90. ]
  91. ]
  92. },
  93. formItems() {
  94. return [
  95. {
  96. name: 'el-select',
  97. md: 8,
  98. options: this.objectTypeList,
  99. attributes: {
  100. placeholder: '请选择',
  101. clearable: true,
  102. filterable: true
  103. },
  104. formItemAttributes: {
  105. label: '事物类型',
  106. prop: 'objectType',
  107. rules: [{ required: true, message: '请选择', trigger: 'blur' }]
  108. },
  109. events: {
  110. change: val => {
  111. this.formData.partsNumber = ''
  112. this.formData.partsName = ''
  113. this.formData.partsNumberName_ = ''
  114. this.formData.materialGroupName = ''
  115. this.formData.goodsStockUnit = ''
  116. this.formData.totalNumber = ''
  117. if (val) {
  118. this.formData.objectTypeName = this.objectTypeList.find(item => item.value === val)?.label || ''
  119. } else {
  120. this.formData.objectTypeName = ''
  121. }
  122. }
  123. }
  124. },
  125. {
  126. name: 'el-select',
  127. md: 8,
  128. options: this.websitList,
  129. attributes: {
  130. placeholder: '请选择',
  131. clearable: true,
  132. filterable: true
  133. },
  134. formItemAttributes: {
  135. label: '网点',
  136. prop: 'sendWebsitId',
  137. rules: [{ required: true, message: '请选择', trigger: 'blur' }]
  138. },
  139. events: {
  140. change: v => {
  141. var data = this.websitList.find(item => item.websitId === v)
  142. if (data) {
  143. this.formData.sendWebsitName = data?.name
  144. } else {
  145. this.formData.sendWebsitName = ''
  146. }
  147. this.getOptions(v)
  148. }
  149. }
  150. },
  151. {
  152. name: 'el-select',
  153. md: 8,
  154. options: this.partsList,
  155. attributes: {
  156. placeholder: '请选择',
  157. clearable: true,
  158. filterable: true
  159. },
  160. formItemAttributes: {
  161. label: '配件名称',
  162. prop: 'partsNumber',
  163. rules: [{ required: true, message: '请选择', trigger: 'blur' }]
  164. },
  165. events: {
  166. change: async val => {
  167. if (val) {
  168. var item = this.partsList.find(item => item.value === val)
  169. if (item) {
  170. this.formData.partsName = item?.label
  171. this.formData.partsNumberName_ = val
  172. this.formData.materialGroupName = item.data.materialGroupName
  173. this.formData.goodsStockUnit = item.data.goodsStockUnit
  174. this.formData.totalNumber = (() => {
  175. if (!!~['新件退库'].indexOf(this.formData.objectType)) {
  176. return item.data.qty
  177. } else if (!!~['退旧件', '无件返回'].indexOf(this.formData.objectType)) {
  178. return item.data.oldQty
  179. } else {
  180. return 0
  181. }
  182. })()
  183. return
  184. }
  185. }
  186. this.formData.partsName = ''
  187. this.formData.partsNumberName_ = ''
  188. this.formData.materialGroupName = ''
  189. this.formData.goodsStockUnit = ''
  190. this.formData.totalNumber = 0
  191. }
  192. }
  193. },
  194. {
  195. name: 'el-input',
  196. md: 8,
  197. attributes: { placeholder: '请输入', disabled: true },
  198. formItemAttributes: { label: '配件编码', prop: 'partsNumberName_' }
  199. },
  200. {
  201. name: 'el-input',
  202. md: 8,
  203. attributes: { placeholder: '请输入', disabled: true },
  204. formItemAttributes: { label: '物料组名称', prop: 'materialGroupName' }
  205. },
  206. {
  207. name: 'el-input',
  208. md: 8,
  209. attributes: { placeholder: '请输入', disabled: true },
  210. formItemAttributes: { label: '单位名称', prop: 'goodsStockUnit' }
  211. },
  212. {
  213. name: 'el-input',
  214. md: 8,
  215. attributes: { placeholder: '请输入', type: 'number' },
  216. formItemAttributes: {
  217. label: '数量',
  218. prop: 'qty',
  219. rules: [
  220. { required: true, message: '请输入', trigger: 'blur' },
  221. {
  222. validator: (rule, value, callback) => {
  223. if (value && value > this.formData.totalNumber) {
  224. callback(new Error('值不能大于剩余数量'))
  225. } else {
  226. callback()
  227. }
  228. },
  229. trigger: 'blur'
  230. }
  231. ]
  232. }
  233. },
  234. {
  235. name: 'el-input',
  236. md: 8,
  237. attributes: { placeholder: '请输入', type: 'number', disabled: true },
  238. formItemAttributes: { label: '剩余数量', prop: 'totalNumber' }
  239. },
  240. {
  241. name: 'el-input',
  242. md: 8,
  243. attributes: { placeholder: '请输入' },
  244. formItemAttributes: { label: '申请单号', prop: 'applyNo' }
  245. },
  246. {
  247. name: 'el-input',
  248. md: 8,
  249. attributes: { placeholder: '请输入' },
  250. formItemAttributes: { label: '凭证号', prop: 'voucherNo' }
  251. },
  252. {
  253. name: 'el-input',
  254. md: 24,
  255. attributes: { placeholder: '请输入', type: 'textarea', rows: 3 },
  256. formItemAttributes: { label: '开单备注', prop: 'remark' }
  257. }
  258. ]
  259. }
  260. },
  261. methods: {
  262. // 列表请求函数
  263. getList: partsOldOutList,
  264. // 列表导出函数
  265. exportList: partsOldOutExport,
  266. // 表格列解析渲染数据更改
  267. columnParsing(item, defaultData) {
  268. return defaultData
  269. },
  270. // 获取选择下拉
  271. getOptions(websitId) {
  272. if (websitId) {
  273. getGoodsList({
  274. type: 'P',
  275. websitId: websitId
  276. }).then(res => {
  277. this.partsList = res.data.map(item => ({ label: item.partsName, value: item.partsNumber, data: item }))
  278. })
  279. } else {
  280. this.partsList = []
  281. }
  282. },
  283. formCancel() {
  284. this.formData = {
  285. objectType: '',
  286. objectTypeName: '',
  287. partsName: '',
  288. partsNumber: '',
  289. partsNumberName_: '',
  290. qty: '',
  291. applyNo: '',
  292. materialGroupName: '',
  293. remark: '',
  294. goodsStockUnit: '',
  295. voucherNo: '',
  296. totalNumber: 0
  297. }
  298. this.$refs.formRef.$refs['inlineForm'].clearValidate()
  299. this.formDialog = false
  300. },
  301. formConfirm() {
  302. this.$refs.formRef.validate(valid => {
  303. if (valid) {
  304. partsOldOutAdd([this.formData]).then(res => {
  305. this.$refs.pageRef.refreshList()
  306. this.$message({
  307. type: 'success',
  308. message: `添加成功!`
  309. })
  310. this.formCancel()
  311. })
  312. }
  313. })
  314. }
  315. }
  316. }
  317. </script>
  318. <style lang="scss" scoped>
  319. .neibuview {
  320. box-sizing: border-box;
  321. padding-left: 16px;
  322. ::v-deep & > .zj-page-fill-scroll {
  323. box-sizing: border-box;
  324. padding-right: 16px;
  325. & > div:nth-child(1) {
  326. margin-top: 20px;
  327. }
  328. }
  329. }
  330. </style>