Edit.vue 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <template>
  2. <div class="page-card" v-loading="loading">
  3. <el-form :model="form" label-width="90px" style="max-width:880px">
  4. <el-form-item label="产品编码"><el-input v-model="form.code" /></el-form-item>
  5. <el-form-item label="产品名称"><el-input v-model="form.name" /></el-form-item>
  6. <el-form-item label="规格"><el-input v-model="form.spec" /></el-form-item>
  7. <el-form-item label="单位"><el-input v-model="form.unit" /></el-form-item>
  8. <el-form-item label="备注"><el-input v-model="form.remark" type="textarea" /></el-form-item>
  9. <el-form-item label="工序">
  10. <ProcessEditor v-model="form.processes" />
  11. </el-form-item>
  12. <el-form-item>
  13. <el-button type="primary" :loading="saving" @click="onSave">保存</el-button>
  14. <el-button v-if="form.id" type="success" @click="openPrint({ bizType: 'product', bizId: form.id })">套打</el-button>
  15. <el-button v-if="form.id" type="danger" plain @click="onDel">删除</el-button>
  16. <el-button @click="$router.push('/products')">返回</el-button>
  17. </el-form-item>
  18. </el-form>
  19. </div>
  20. </template>
  21. <script setup>
  22. import { onMounted, reactive, ref } from 'vue'
  23. import { useRoute, useRouter } from 'vue-router'
  24. import { ElMessage, ElMessageBox } from 'element-plus'
  25. import ProcessEditor from '@/components/ProcessEditor.vue'
  26. import { productDel, productInfo, productSave } from '@/api/ps'
  27. import { openPrint } from '@/utils/print'
  28. const route = useRoute()
  29. const router = useRouter()
  30. const loading = ref(false)
  31. const saving = ref(false)
  32. const form = reactive({
  33. id: 0,
  34. code: '',
  35. name: '',
  36. spec: '',
  37. unit: '',
  38. remark: '',
  39. status: 'normal',
  40. processes: [],
  41. })
  42. onMounted(async () => {
  43. if (!route.params.id) {
  44. return
  45. }
  46. loading.value = true
  47. try {
  48. const row = await productInfo(route.params.id)
  49. Object.assign(form, row)
  50. form.processes = row.processes || []
  51. } finally {
  52. loading.value = false
  53. }
  54. })
  55. async function onDel() {
  56. await ElMessageBox.confirm('删除后不可恢复,确定删除该产品?', '删除产品')
  57. await productDel(form.id)
  58. ElMessage.success('已删除')
  59. router.push('/products')
  60. }
  61. async function onSave() {
  62. if (!String(form.code || '').trim()) {
  63. ElMessage.warning('请填写产品编码')
  64. return
  65. }
  66. if (!String(form.name || '').trim()) {
  67. ElMessage.warning('请填写产品名称')
  68. return
  69. }
  70. saving.value = true
  71. try {
  72. const { qty, sheet_qty, ...payload } = form
  73. await productSave(payload)
  74. ElMessage.success('已保存')
  75. router.push('/products')
  76. } finally {
  77. saving.value = false
  78. }
  79. }
  80. </script>