material.vue 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <template>
  2. <el-row>
  3. <el-col :span="3">
  4. <el-input placeholder="请输入材料名称" v-model="condition.name"></el-input>
  5. </el-col>
  6. <el-col :span="1" style="margin-left: 20px">
  7. <el-button @click="searchMaterial" icon="Search" type="primary">搜索</el-button>
  8. </el-col>
  9. <el-col :span="2" style="margin-left: 30px">
  10. <el-button
  11. @click="openMaterial"
  12. type="primary"
  13. icon="Plus">
  14. 新增
  15. </el-button>
  16. </el-col>
  17. </el-row>
  18. <!-- <div>{{ id.currentCode }}</div>-->
  19. <el-row style="margin-top: 10px">
  20. <el-col :span="18">
  21. <el-table :data="materialList">
  22. <el-table-column label="材料名称" prop="name" align="center"></el-table-column>
  23. <el-table-column label="计量单位" prop="unit" align="center"></el-table-column>
  24. <el-table-column label="数量" prop="number" align="center"></el-table-column>
  25. <el-table-column label="操作" align="center">
  26. <template #default="scope">
  27. <el-button text icon="Edit" type="primary" @click="openMaterialEdit(scope.row)">编辑</el-button>
  28. <el-button text icon="ChatLineSquare" type="primary">备注</el-button>
  29. <el-button text icon="Edit" type="primary" @click="deleteMaterial">删除</el-button>
  30. </template>
  31. </el-table-column>
  32. </el-table>
  33. </el-col>
  34. </el-row>
  35. <el-drawer
  36. v-model="drawerShow"
  37. title="新增材料"
  38. direction="rtl"
  39. :before-close="handleClose"
  40. >
  41. <el-form size="large" label-width="80" label-position="left">
  42. <el-form-item label="材料名称">
  43. <el-input placeholder="请输入材料名称" v-model="addCondition.name"/>
  44. </el-form-item>
  45. <el-form-item label="单位">
  46. <el-input placeholder="请输入材料单位" v-model="addCondition.unit" />
  47. </el-form-item>
  48. <el-form-item label="数量">
  49. <el-input
  50. v-model="addCondition.number"
  51. type="number"/>
  52. </el-form-item>
  53. <el-form-item label="备注">
  54. <el-input
  55. v-model="addCondition.remarks"
  56. :rows="3"
  57. type="textarea"
  58. placeholder="请输入备注"/>
  59. </el-form-item>
  60. </el-form>
  61. <template #footer>
  62. <div class="drawer-footer">
  63. <el-button @click="drawerShow = false">取消</el-button>
  64. <el-button type="primary" @click="addMaterial">
  65. 确认
  66. </el-button>
  67. </div>
  68. </template>
  69. </el-drawer>
  70. </template>
  71. <script setup>
  72. import { codeOperate } from '@/pinia/code/code'
  73. import { queryProjectMaterial, createProjectMaterial, updateProjectMaterial } from '@/api/material'
  74. import { defineExpose, reactive, ref } from "vue";
  75. import { ElMessage, ElMessageBox } from "element-plus";
  76. const drawerShow = ref(false)
  77. const id = codeOperate()
  78. const condition = reactive({
  79. pageInfo: {
  80. page: 1,
  81. pageSize: 100
  82. },
  83. code: "",
  84. name: ""
  85. })
  86. const addCondition = reactive({
  87. name: "",
  88. unit: "",
  89. number: 0,
  90. remarks: "",
  91. projectCode: ""
  92. })
  93. const materialList = reactive([])
  94. // 0表示新增 1表示编辑
  95. const currentOperation = ref(0)
  96. // 编辑id
  97. const editId = ref(0)
  98. const getProjectMaterial = (code) => {
  99. condition.code = code
  100. addCondition.projectCode = code
  101. queryProjectMaterial(condition).then(res => {
  102. if (res.code === 0) {
  103. materialList.length = 0
  104. console.log(res.data.list)
  105. materialList.push(...res.data.list)
  106. }
  107. })
  108. }
  109. const openMaterial = () => {
  110. currentOperation.value = 0
  111. drawerShow.value = true
  112. addCondition.name = ''
  113. addCondition.unit = ''
  114. addCondition.number = 0
  115. addCondition.remarks = ''
  116. }
  117. const openMaterialEdit = (row) => {
  118. currentOperation.value = 1
  119. editId.value = row.ID
  120. drawerShow.value = true
  121. addCondition.name = row.name
  122. addCondition.unit = row.unit
  123. addCondition.number = row.number
  124. addCondition.remarks = row.remarks
  125. }
  126. const addMaterial = () => {
  127. addCondition.number = Number(addCondition.number)
  128. if(currentOperation.value === 0) {
  129. createProjectMaterial(addCondition).then(res => {
  130. if (res.code === 0) {
  131. drawerShow.value = false
  132. ElMessage.success('新增成功')
  133. }
  134. })
  135. } else {
  136. const editData = {
  137. id: editId.value,
  138. name: addCondition.name,
  139. unit: addCondition.unit,
  140. number: addCondition.number,
  141. remarks: addCondition.remarks,
  142. projectCode: addCondition.projectCode
  143. }
  144. updateProjectMaterial(editData).then(res => {
  145. if (res.code === 0) {
  146. drawerShow.value = false
  147. ElMessage.success('编辑成功')
  148. }
  149. })
  150. }
  151. }
  152. const handleClose = () => {
  153. drawerShow.value = false
  154. }
  155. const deleteMaterial = () => {}
  156. const searchMaterial = () => {
  157. queryProjectMaterial(condition).then(res => {
  158. if (res.code === 0) {
  159. console.log(res.data)
  160. }
  161. })
  162. }
  163. defineExpose({
  164. getProjectMaterial
  165. })
  166. </script>
  167. <style scoped>
  168. </style>