contract.vue 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. <template>
  2. <hc-new-card title="合同材料">
  3. <template #extra>
  4. <el-button hc-btn type="primary" @click="rowAddClick">
  5. <HcIcon name="add" />
  6. <span>新增</span>
  7. </el-button>
  8. </template>
  9. <div class="relative h-full flex">
  10. <div class="flex-1">
  11. <hc-card-item>
  12. <hc-table :column="tableColumn" :datas="tableData" :loading="tableLoading" is-new :index-style="{ width: 60 }" is-current-row @row-click="viewRow">
  13. <template #action="{ row }">
  14. <el-link type="success" @click="rowEditClick(row)">修改</el-link>
  15. <el-link type="danger" @click="delRowClick(row)">删除</el-link>
  16. </template>
  17. </hc-table>
  18. <template #action>
  19. <hc-pages :pages="searchForm" @change="pageChange" />
  20. </template>
  21. </hc-card-item>
  22. </div>
  23. <div class="ml-3 w-[400px]">
  24. <hc-card-item title="详情信息" scrollbar>
  25. <el-form label-position="left" :model="formModel" label-width="auto" size="large" disabled>
  26. <el-form-item label="材料编号:">
  27. <el-input v-model="formModel.materialNumber" />
  28. </el-form-item>
  29. <el-form-item label="材料名称:">
  30. <el-input v-model="formModel.materialName" />
  31. </el-form-item>
  32. <el-form-item label="规格型号:">
  33. <el-input v-model="formModel.specification" />
  34. </el-form-item>
  35. <el-form-item label="单位:">
  36. <el-input v-model="formModel.unit" />
  37. </el-form-item>
  38. <el-form-item label="单价:">
  39. <el-input v-model="formModel.price" />
  40. </el-form-item>
  41. <el-form-item label="数量:">
  42. <el-input v-model="formModel.amount" />
  43. </el-form-item>
  44. </el-form>
  45. </hc-card-item>
  46. </div>
  47. </div>
  48. <!-- 新增/修改 -->
  49. <hc-new-dialog widths="30rem" :show="isFormModal" title="合同材料新增" :loading="saveLoaing" @save="modalSave" @close="modalClose">
  50. <el-form ref="formRef" class="p-2" label-position="top" :model="formModel" :rules="formRules" size="large">
  51. <el-form-item label="材料编号:">
  52. <el-input v-model="formModel.materialNumber" />
  53. </el-form-item>
  54. <el-form-item label="材料名称:" prop="materialName">
  55. <el-input v-model="formModel.materialName" />
  56. </el-form-item>
  57. <el-form-item label="规格型号:">
  58. <el-input v-model="formModel.specification" />
  59. </el-form-item>
  60. <el-form-item label="单位:">
  61. <el-input v-model="formModel.unit " />
  62. </el-form-item>
  63. <el-form-item label="单价:">
  64. <el-input v-model="formModel.price" />
  65. </el-form-item>
  66. <el-form-item label="数量:">
  67. <el-input v-model="formModel.amount" />
  68. </el-form-item>
  69. </el-form>
  70. </hc-new-dialog>
  71. </hc-new-card>
  72. </template>
  73. <script setup>
  74. import { onMounted, ref } from 'vue'
  75. import mainApi from '~api/debit-pay/material/contract.js'
  76. import { useAppStore } from '~src/store'
  77. import { getArrValue } from 'js-fast-way'
  78. import { delMessageV2 } from '~com/message/index.js'
  79. const useAppState = useAppStore()
  80. const projectId = ref(useAppState.getProjectId)
  81. const contractId = ref(useAppState.getContractId)
  82. defineOptions({
  83. name: 'DebitPayMaterialContract',
  84. })
  85. //渲染完成
  86. onMounted(() => {
  87. getTableData()
  88. })
  89. //搜索表单
  90. const searchForm = ref({
  91. current: 1, size: 10, total: 0,
  92. })
  93. //分页
  94. const pageChange = ({ current, size }) => {
  95. searchForm.value.current = current
  96. searchForm.value.size = size
  97. }
  98. //表格数据
  99. const tableLoading = ref(false)
  100. const tableColumn = ref([
  101. { key: 'materialNumber', name: '材料编号' },
  102. { key: 'materialName', name: '材料名称' },
  103. { key: 'specification', name: '规格型号' },
  104. { key: 'unit', name: '单位' },
  105. { key: 'price', name: '单价' },
  106. { key: 'amount', name: '数量' },
  107. { key: 'action', name: '操作', width: 100 },
  108. ])
  109. const tableData = ref([])
  110. const getTableData = async () => {
  111. tableLoading.value = true
  112. const { error, code, data } = await mainApi.getPage({
  113. ...searchForm.value,
  114. projectId:projectId.value,
  115. contractId:contractId.value,
  116. })
  117. tableLoading.value = false
  118. if (!error && code === 200) {
  119. tableData.value = getArrValue(data['records'])
  120. if (tableData.value.length > 0) {
  121. formModel.value = tableData.value[0]
  122. // getDetail(tableData.value[0].id)
  123. }
  124. } else {
  125. tableData.value = []
  126. }
  127. }
  128. const viewRow = ({ row })=>{
  129. formModel.value = row
  130. }
  131. //新增
  132. const isFormModal = ref(false)
  133. const rowAddClick = () => {
  134. isFormModal.value = true
  135. formModel.value = {}
  136. }
  137. //表单数据
  138. const formRef = ref(null)
  139. const formModel = ref({})
  140. const formRules = {}
  141. //修改
  142. const rowEditClick = (row) => {
  143. isFormModal.value = true
  144. formModel.value = row
  145. }
  146. //保存
  147. const saveLoaing = ref(false)
  148. const modalSave = async () => {
  149. saveLoaing.value = true
  150. const { error, code, msg } = await mainApi.submit({
  151. ...formModel.value,
  152. projectId:projectId.value,
  153. contractId:contractId.value,
  154. })
  155. //判断状态
  156. saveLoaing.value = false
  157. if (!error && code === 200) {
  158. window?.$message?.success(msg)
  159. }
  160. getTableData()
  161. modalClose()
  162. }
  163. const delRowClick = async (row)=>{
  164. delMessageV2(async (action, instance, done) => {
  165. if (action === 'confirm') {
  166. instance.confirmButtonLoading = true
  167. removeCon(row.id)
  168. instance.confirmButtonLoading = false
  169. done()
  170. } else {
  171. done()
  172. }
  173. })
  174. }
  175. const removeCon = async (id) => {
  176. const { error, code } = await mainApi.remove({
  177. ids: id,
  178. })
  179. if (!error && code === 200) {
  180. window?.$message?.success('删除成功')
  181. getTableData()
  182. formModel.value = {}
  183. }
  184. }
  185. //关闭弹窗
  186. const modalClose = () => {
  187. isFormModal.value = false
  188. }
  189. </script>
  190. <style scoped lang="scss">
  191. </style>