pfperson.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421
  1. <template>
  2. <div class="branch">
  3. <el-form
  4. :inline="true"
  5. :model="dataForm"
  6. @keyup.enter.native="getDataList()">
  7. <el-form-item>
  8. <el-input
  9. v-model="dataForm.key"
  10. placeholder="用户名/用户操作"
  11. clearable
  12. ></el-input>
  13. </el-form-item>
  14. <el-form-item>
  15. <el-button @click="getDataList()">查询</el-button>
  16. </el-form-item>
  17. <el-form-item>
  18. <el-button v-if="isAuth('sys:role:save')" type="primary" @click="addOrUpdateHandle()">新增</el-button>
  19. </el-form-item>
  20. <el-form-item>
  21. <el-button v-if="isAuth('sys:role:delete')" type="danger" @click="deleteHandle()" :disabled="selectionDataList.length <= 0">批量删除</el-button>
  22. </el-form-item>
  23. </el-form>
  24. <el-table
  25. height="670"
  26. :data="dataList"
  27. @selection-change="selectionChangeHandle"
  28. v-loading="dataListLoading"
  29. style="width: 100%">
  30. <el-table-column
  31. type="selection"
  32. header-align="center"
  33. align="center"
  34. width="50">
  35. </el-table-column>
  36. <el-table-column
  37. prop="name"
  38. header-align="center"
  39. align="center"
  40. label="养殖员姓名">
  41. </el-table-column>
  42. <el-table-column
  43. prop="position"
  44. header-align="center"
  45. align="center"
  46. label="职位">
  47. </el-table-column>
  48. <el-table-column
  49. prop="approachTime"
  50. header-align="center"
  51. align="center"
  52. label="入场时间">
  53. </el-table-column>
  54. <el-table-column
  55. prop="departureTime"
  56. header-align="center"
  57. align="center"
  58. label="离场时间">
  59. </el-table-column>
  60. <el-table-column
  61. header-align="center"
  62. align="center"
  63. label="当前在职">
  64. <template slot-scope="scope">
  65. {{scope.row.jobStatus? '是': '否'}}
  66. </template>
  67. </el-table-column>
  68. <el-table-column
  69. fixed="right"
  70. header-align="center"
  71. align="center"
  72. label="操作">
  73. <template slot-scope="scope">
  74. <el-button v-if="isAuth('sys:user:update')" type="text" size="small" @click="addOrUpdateHandle(scope.row)">修改</el-button>
  75. <el-button v-if="isAuth('sys:user:delete')" type="text" size="small" @click="deleteHandle(scope.row.id)">删除</el-button>
  76. </template>
  77. </el-table-column>
  78. </el-table>
  79. <div class="block">
  80. <el-pagination
  81. @size-change="sizeChangeHandle"
  82. @current-change="currentChangeHandle"
  83. :current-page="pageIndex"
  84. :page-sizes="[10, 12, 15, 20]"
  85. :page-size="pageSize"
  86. layout="total, sizes, prev, pager, next, jumper"
  87. :total="totalPage">
  88. </el-pagination>
  89. </div>
  90. <el-dialog
  91. :title="!form.id ? '新增' : '修改'"
  92. :close-on-click-modal="false"
  93. :visible.sync="visible"
  94. @close="cancel">
  95. <el-form :model="form" ref="form" @keyup.enter.native="formSubmit()" label-width="80px">
  96. <el-form-item label="姓名">
  97. <el-input v-model="form.name" placeholder="养殖员姓名"></el-input>
  98. </el-form-item>
  99. <el-form-item label="职位">
  100. <el-input v-model="form.position" placeholder="职位"></el-input>
  101. </el-form-item>
  102. <el-form-item label="当前在职">
  103. <el-select v-model="form.jobStatus" placeholder="请选择当前是否在岗">
  104. <el-option
  105. v-for="item in options"
  106. :key="item.value"
  107. :label="item.label"
  108. :value="item.value">
  109. </el-option>
  110. </el-select>
  111. </el-form-item>
  112. <el-form-item label="入场时间">
  113. <el-date-picker
  114. v-model="form.approachTime"
  115. type="datetime"
  116. value-format="yyyy-MM-dd HH:mm:ss"
  117. placeholder="选择日期时间">
  118. </el-date-picker>
  119. </el-form-item>
  120. <el-form-item label="离场时间">
  121. <el-date-picker
  122. v-model="form.departureTime"
  123. type="datetime"
  124. value-format="yyyy-MM-dd HH:mm:ss"
  125. placeholder="选择日期时间">
  126. </el-date-picker>
  127. </el-form-item>
  128. </el-form>
  129. <span slot="footer" class="dialog-footer">
  130. <el-button @click="cancel">取消</el-button>
  131. <el-button type="primary" @click="formSubmit()">确定</el-button>
  132. </span>
  133. </el-dialog>
  134. </div>
  135. </template>
  136. <script>
  137. export default {
  138. data () {
  139. return {
  140. dataForm: {
  141. key: ''
  142. },
  143. dataList: [
  144. {
  145. buildTime: '',
  146. id: '',
  147. location: '',
  148. manager: '',
  149. name: '',
  150. }
  151. ],
  152. pageIndex: 1,
  153. pageSize: 10,
  154. totalPage: 0,
  155. dataListLoading: false,
  156. selectionDataList: [],
  157. visible: false,
  158. form: {
  159. id: '',
  160. name: '',
  161. position: '',
  162. approachTime: '',
  163. departureTime: '',
  164. jobStatus: ''
  165. },
  166. options: [
  167. {
  168. value: true,
  169. label: '是'
  170. },
  171. {
  172. value: false,
  173. label: '否'
  174. }
  175. ],
  176. pigs: []
  177. }
  178. },
  179. created () {
  180. this.getDataList()
  181. },
  182. mounted () {
  183. // this.getCascader()
  184. },
  185. methods: {
  186. // 获取数据列表
  187. getDataList () {
  188. this.dataListLoading = true
  189. this.$http({
  190. url: this.$http.adornUrl('/management/employee/list'),
  191. method: 'post',
  192. params: this.$http.adornParams({
  193. page: this.pageIndex,
  194. limit: this.pageSize,
  195. keywords: this.dataForm.key
  196. })
  197. }).then(({ data }) => {
  198. console.log(data);
  199. if (data && data.code === 0) {
  200. this.dataList = data.page.list
  201. this.totalPage = data.page.totalCount
  202. } else {
  203. this.dataList = []
  204. this.totalPage = 0
  205. this.$confirm(`查询养殖员信息失败`, '提示', {
  206. confirmButtonText: '确定',
  207. cancelButtonText: '取消',
  208. type: 'warning'
  209. }).then(() => {
  210. return
  211. }).catch(() => {})
  212. }
  213. this.dataListLoading = false
  214. })
  215. },
  216. // 每页数
  217. sizeChangeHandle (val) {
  218. this.pageSize = val
  219. this.pageIndex = 1
  220. this.getDataList()
  221. },
  222. // 当前页
  223. currentChangeHandle (val) {
  224. this.pageIndex = val
  225. this.getDataList()
  226. },
  227. // 新增 or 修改谱系信息
  228. addOrUpdateHandle (row) {
  229. // 显示谱系新增 or 修改面板
  230. this.visible = true
  231. if (row) {
  232. for (let key of Object.keys(this.form)) {
  233. this.form[key] = row[key]
  234. }
  235. this.form.id = row.id
  236. }
  237. },
  238. // 选择n个养殖员
  239. selectionChangeHandle (val) {
  240. this.selectionDataList = []
  241. val.forEach(item => {
  242. this.selectionDataList.push(item.id)
  243. });
  244. },
  245. // 删除n个养殖员
  246. deleteHandle (id) {
  247. this.$confirm(`确定删除养殖员信息?`, '提示', {
  248. confirmButtonText: '确定',
  249. cancelButtonText: '取消',
  250. type: 'warning'
  251. }).then(() => {
  252. // 删除操作
  253. if (id) {
  254. this.selectionDataList.push(id)
  255. }
  256. if (this.selectionDataList.length <= 0) {
  257. return
  258. }
  259. this.$http({
  260. url: this.$http.adornUrl('/management/employee/delete'),
  261. method: 'post',
  262. data: this.$http.adornData(this.selectionDataList, false)
  263. }).then(result => {
  264. if (result.data.code === 0) {
  265. this.$message({
  266. message: '成功删除养殖员信息',
  267. type: 'success',
  268. duration: 1000
  269. })
  270. // pageIndex修正
  271. this.totalPage -= this.selectionDataList.length
  272. let pages = Math.ceil(this.totalPage / this.pageSize)
  273. this.pageIndex = this.pageIndex > pages? pages: this.pageIndex
  274. this.pageIndex = this.pageIndex < 1? pages: this.pageIndex
  275. } else {
  276. this.$message.error('删除养殖员信息失败');
  277. }
  278. this.resetForm()
  279. this.selectionDataList = []
  280. })
  281. }).catch(() => {})
  282. },
  283. formSubmit () {
  284. if (this.form.id) {
  285. // 修改
  286. if (!this.confirmComplete()) {
  287. return
  288. }
  289. // 检查入场时间、离开场时间
  290. if (!this.confirmJobStatus()) {
  291. return
  292. }
  293. // 进行修改操作
  294. this.$http({
  295. url: this.$http.adornUrl('/management/employee/update'),
  296. method: 'post',
  297. data: this.$http.adornData({
  298. id: this.form.id,
  299. position: this.form.position,
  300. approachTime: this.form.approachTime,
  301. departureTime: this.form.departureTime,
  302. jobStatus: this.form.jobStatus
  303. })
  304. }).then(result => {
  305. if (result.data.code === 0) {
  306. this.resetForm();
  307. this.visible = false;
  308. this.$message({
  309. message: '成功修改养殖员信息',
  310. type: 'success',
  311. duration: 1000
  312. })
  313. } else {
  314. this.$message.error('修改养殖员信息失败');
  315. }
  316. })
  317. } else {
  318. /** 新增 */
  319. // 输入是否完整
  320. if (!this.confirmComplete(1)) {
  321. return
  322. }
  323. // 检查入场时间、立场时间、当前在岗
  324. if (!this.confirmJobStatus()) {
  325. return
  326. }
  327. // 进行新增操作
  328. this.$http({
  329. url: this.$http.adornUrl('/management/employee/save'),
  330. method: 'post',
  331. data: this.$http.adornData({
  332. name: this.form.name,
  333. position: this.form.position,
  334. approachTime: this.form.approachTime,
  335. departureTime: this.form.departureTime,
  336. jobStatus: this.form.jobStatus
  337. })
  338. }).then(result => {
  339. if (result.data.code === 0) {
  340. // 新增pageIndex的修正
  341. this.totalPage++
  342. let pages = Math.ceil(this.totalPage / this.pageSize)
  343. this.pageIndex = this.pageIndex < pages? pages: this.pageIndex
  344. this.resetForm();
  345. this.visible = false;
  346. this.$message({
  347. message: '成功添加养殖员信息',
  348. type: 'success',
  349. duration: 1000
  350. })
  351. } else {
  352. this.$message.error('添加养殖员信息失败');
  353. }
  354. })
  355. }
  356. },
  357. // 判断新增/修改时是否输入完整
  358. validComplete (val) {
  359. val && (delete this.form.id)
  360. for (let i in this.form) {
  361. if (!this.form[i].toString()) {
  362. return false
  363. }
  364. }
  365. return true
  366. },
  367. // 如不完整,则提示
  368. confirmComplete (val) {
  369. if (this.validComplete(val)) {
  370. return true
  371. }
  372. this.$confirm(`请输入完整`, '提示', {
  373. confirmButtonText: '确定',
  374. cancelButtonText: '取消',
  375. type: 'warning'
  376. }).then(() => {
  377. console.log('输入不完整');
  378. }).catch(() => {})
  379. return false
  380. },
  381. // 清空form
  382. resetForm () {
  383. for (let i in this.form) {
  384. this.form[i] = ''
  385. }
  386. this.getDataList()
  387. },
  388. // 取消
  389. cancel () {
  390. this.visible = false
  391. this.resetForm()
  392. },
  393. // 判断当前在岗是否正确
  394. getJobStatus () {
  395. let start = new Date(this.form.approachTime)
  396. let end = new Date(this.form.departureTime)
  397. if (start <= end) {
  398. return true
  399. }
  400. return false
  401. },
  402. // 判断当前在岗与入场时间、离场时间是否有冲突
  403. confirmJobStatus () {
  404. if (this.getJobStatus()) {
  405. return true
  406. }
  407. this.$confirm(`请检查入场时间与离场时间`, '提示', {
  408. confirmButtonText: '确定',
  409. cancelButtonText: '取消',
  410. type: 'warning'
  411. }).then(() => {
  412. // return false
  413. console.log('新增养殖员有误');
  414. }).catch(() => {})
  415. return false
  416. }
  417. }
  418. }
  419. </script>
  420. <style scoped>
  421. </style>