hour.vue 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. <template>
  2. <div>
  3. <el-row>
  4. <el-col :span="4">
  5. <el-select
  6. v-model="peopleId"
  7. placeholder="请选择工作人员"
  8. clearable
  9. @clear="changePeopleId"
  10. >
  11. <el-option
  12. v-for="item in peopleList"
  13. :key="item.ID"
  14. :label="item.nickName"
  15. :value="item.ID"
  16. />
  17. </el-select>
  18. </el-col>
  19. <el-col
  20. :span="5"
  21. :offset="1"
  22. >
  23. <el-date-picker
  24. v-model="condition.yearTime"
  25. type="year"
  26. placeholder="请选择年份"
  27. format="YYYY"
  28. value-format="YYYY"
  29. clearable
  30. @clear="condition.yearTime = ''"
  31. />
  32. </el-col>
  33. <el-col
  34. :span="5"
  35. :offset="1"
  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. :offset="1"
  50. >
  51. <el-button
  52. type="primary"
  53. :icon="Search"
  54. @click="retrievalTime"
  55. >查询</el-button>
  56. </el-col>
  57. <el-col
  58. :span="2"
  59. style="margin-left: 20px"
  60. >
  61. <el-button
  62. type="primary"
  63. :icon="Plus"
  64. @click="changeAddTimeShow"
  65. >新增</el-button>
  66. </el-col>
  67. </el-row>
  68. <el-row style="margin-top: 20px">
  69. <el-col :span="23">
  70. <el-table
  71. :data="hour.timeList"
  72. stripe
  73. >
  74. <el-table-column
  75. label="工作人员"
  76. prop="Name"
  77. />
  78. <el-table-column
  79. label="工作天数"
  80. prop="SumDay"
  81. />
  82. <el-table-column
  83. label="总工资"
  84. prop="PriceSum"
  85. />
  86. </el-table>
  87. </el-col>
  88. </el-row>
  89. <el-row>
  90. <el-col
  91. :span="23"
  92. style="display: flex;justify-content: end"
  93. >
  94. <el-pagination
  95. v-model:current-page="condition.pageInfo.page"
  96. background
  97. layout="prev, pager, next"
  98. :page-size="8"
  99. :total="hour.timeTotal"
  100. @change="changeHourPage"
  101. />
  102. </el-col>
  103. </el-row>
  104. <el-dialog
  105. v-model="addTimeShow"
  106. title="新增工时"
  107. width="40%"
  108. >
  109. <el-form label-width="100px">
  110. <el-form-item label="工人名称:">
  111. <el-select
  112. v-model="addCondition.people"
  113. placeholder="请选择工作人员"
  114. clearable
  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>