hour.vue 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. <template>
  2. <div>
  3. <el-row>
  4. <el-col :span="3">
  5. <el-select
  6. v-model="peopleId"
  7. placeholder="请选择工作人员"
  8. clearable
  9. filterable
  10. @clear="changePeopleId"
  11. >
  12. <el-option
  13. v-for="item in peopleList"
  14. :key="item.ID"
  15. :label="item.nickName"
  16. :value="item.ID"
  17. />
  18. </el-select>
  19. </el-col>
  20. <el-col
  21. :span="4"
  22. :offset="1"
  23. >
  24. <el-date-picker
  25. v-model="condition.yearTime"
  26. type="year"
  27. placeholder="请选择年份"
  28. format="YYYY"
  29. value-format="YYYY"
  30. clearable
  31. @clear="condition.yearTime = ''"
  32. />
  33. </el-col>
  34. <el-col
  35. :span="4"
  36. >
  37. <el-date-picker
  38. v-model="condition.time"
  39. type="month"
  40. placeholder="请选择月份"
  41. format="YYYY-MM"
  42. value-format="YYYY-MM"
  43. clearable
  44. @clear="condition.time = ''"
  45. />
  46. </el-col>
  47. <el-col
  48. :span="2"
  49. >
  50. <el-button
  51. type="primary"
  52. :icon="Search"
  53. @click="retrievalTime"
  54. >查询</el-button>
  55. </el-col>
  56. <el-col
  57. :span="2"
  58. >
  59. <el-button
  60. type="primary"
  61. :icon="Plus"
  62. @click="changeAddTimeShow"
  63. >新增</el-button>
  64. </el-col>
  65. </el-row>
  66. <el-row style="margin-top: 20px">
  67. <el-col :span="16">
  68. <el-table
  69. :data="hour.timeList"
  70. stripe
  71. height="495px"
  72. >
  73. <el-table-column
  74. label="工作人员"
  75. prop="Name"
  76. />
  77. <el-table-column
  78. label="工作天数"
  79. prop="SumDay"
  80. />
  81. <el-table-column
  82. label="总工资"
  83. prop="PriceSum"
  84. />
  85. </el-table>
  86. </el-col>
  87. </el-row>
  88. <el-row>
  89. <el-col
  90. :span="16"
  91. style="display: flex;justify-content: end"
  92. >
  93. <el-pagination
  94. v-model:current-page="condition.pageInfo.page"
  95. background
  96. layout="prev, pager, next"
  97. :page-size="8"
  98. :total="hour.timeTotal"
  99. @change="changeHourPage"
  100. />
  101. </el-col>
  102. </el-row>
  103. <el-dialog
  104. v-model="addTimeShow"
  105. title="新增工时"
  106. width="40%"
  107. >
  108. <el-form label-width="100px">
  109. <el-form-item label="工人名称:">
  110. <el-select
  111. v-model="addCondition.people"
  112. placeholder="请选择工作人员"
  113. clearable
  114. filterable
  115. @change="changeWorkPeople"
  116. @clear="addCondition.people = ''"
  117. >
  118. <el-option
  119. v-for="item in peopleList"
  120. :key="item.ID"
  121. :label="item.nickName"
  122. :value="item.ID"
  123. />
  124. </el-select>
  125. </el-form-item>
  126. <el-form-item label="工作天数:">
  127. <el-input-number v-model="addCondition.days" />
  128. </el-form-item>
  129. <el-form-item label="人天单价:">
  130. <el-input-number
  131. v-model="addCondition.price"
  132. :disabled="true"
  133. />
  134. </el-form-item>
  135. <el-form-item label="报工时间:">
  136. <el-date-picker
  137. v-model="addCondition.peopleTime"
  138. placeholder="请选择报工时间"
  139. format="YYYY-MM-DD"
  140. value-format="YYYY-MM-DD"
  141. clearable
  142. @clear="addCondition.peopleTime = ''"
  143. />
  144. </el-form-item>
  145. </el-form>
  146. <template #footer>
  147. <el-button
  148. type="primary"
  149. size="large"
  150. @click="addTime"
  151. >
  152. 确认
  153. </el-button>
  154. </template>
  155. </el-dialog>
  156. </div>
  157. </template>
  158. <script setup>
  159. import { reactive, onMounted, ref, defineExpose } from 'vue'
  160. import { hourOperate } from '@/pinia/hour/Hour'
  161. import { codeOperate } from '@/pinia/code/code'
  162. import { createWorkingHours } from '@/api/finance'
  163. import { Search, Plus } from '@element-plus/icons-vue'
  164. import { ElMessage } from 'element-plus'
  165. import { getAllUsers } from '@/api/user'
  166. defineOptions({
  167. name: 'Hour'
  168. })
  169. const hour = hourOperate()
  170. const serial = codeOperate()
  171. const condition = reactive({
  172. pageInfo: {
  173. page: 1,
  174. pageSize: 8
  175. },
  176. code: '',
  177. time: '',
  178. yearTime: '',
  179. people: 0
  180. })
  181. const addCondition = reactive({
  182. projectCode: '',
  183. people: '',
  184. days: 0,
  185. price: 0,
  186. peopleTime: ''
  187. })
  188. const peopleId = ref('')
  189. const peopleList = reactive([])
  190. const addTimeShow = ref(false)
  191. onMounted(() => {
  192. getAllUsers().then(res => {
  193. if (res.code === 0) {
  194. peopleList.length = 0
  195. peopleList.push(...res.data)
  196. }
  197. })
  198. })
  199. const retrievalTime = () => {
  200. peopleId.value === '' ? condition.people = 0 : condition.people = parseFloat(peopleId.value)
  201. condition.code = serial.currentCode
  202. hour.getTimeList(condition)
  203. }
  204. const addTime = () => {
  205. addCondition.projectCode = serial.currentCode
  206. // for (const i in addCondition) {
  207. // if (addCondition[i] === '' || addCondition[i] === null || addCondition[i] === 0) {
  208. // ElMessage({
  209. // message: '请将信息填写完整',
  210. // type: 'error',
  211. // showClose: true,
  212. // duration: 2000
  213. // })
  214. // return
  215. // }
  216. // }
  217. createWorkingHours(addCondition).then(res => {
  218. if (res.code === 0) {
  219. ElMessage.success('添加成功')
  220. addTimeShow.value = false
  221. retrievalTime()
  222. addCondition.days = 0
  223. addCondition.people = ''
  224. addCondition.price = 0
  225. addCondition.peopleTime = ''
  226. }
  227. })
  228. }
  229. const changeHourPage = (page) => {
  230. condition.pageInfo.page = page
  231. retrievalTime()
  232. }
  233. const outsideChangePage = () => {
  234. condition.pageInfo.page = 1
  235. }
  236. defineExpose({
  237. outsideChangePage
  238. })
  239. const changeAddTimeShow = () => {
  240. addTimeShow.value = true
  241. }
  242. const changePeopleId = () => {
  243. peopleId.value = ''
  244. }
  245. const changeWorkPeople = (id) => {
  246. peopleList.forEach(item => {
  247. if (item.ID === id) {
  248. addCondition.price = parseFloat(item.onePrice)
  249. }
  250. })
  251. }
  252. </script>
  253. <style scoped>
  254. </style>