dutyadd.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548
  1. <template>
  2. <el-dialog title="新增值班表"
  3. :visible.sync="dialogvisible"
  4. width="80%"
  5. :before-close="handleCloseAdd">
  6. <el-form size="mini"
  7. :model="testlistform"
  8. :rules="rulestestlistform"
  9. label-width="100px"
  10. ref="testlistform">
  11. <el-row :gutter="20"
  12. class="donorsaddformcss">
  13. <el-col :span="8">
  14. <el-form-item label="学年"
  15. prop="Year"
  16. label-width="120px">
  17. <el-select ref="reftube"
  18. v-model="testlistform.Year"
  19. placeholder="请选择学年"
  20. style="width:100%">
  21. <el-option v-for="item in years"
  22. :key="item.value"
  23. :label="item.label"
  24. :value="item.value">
  25. </el-option>
  26. </el-select>
  27. </el-form-item>
  28. </el-col>
  29. <el-col :span="8">
  30. <el-form-item label="学期"
  31. prop="Term"
  32. label-width="120px">
  33. <el-input v-model="testlistform.Term"
  34. placeholder="请输入"
  35. style="width:100%"></el-input>
  36. </el-form-item>
  37. </el-col>
  38. <el-col :span="8">
  39. <el-form-item label="地点"
  40. label-width="120px">
  41. <el-checkbox :indeterminate="isIndeterminate"
  42. v-model="checkAll"
  43. @change="handleCheckAllChange">全选</el-checkbox>
  44. <div style="margin: 15px 0;"></div>
  45. <el-checkbox-group v-model="checkedCities"
  46. @change="handleCheckedCitiesChange">
  47. <el-checkbox v-for="city in cities"
  48. :label="city"
  49. :key="city">{{city}}</el-checkbox>
  50. </el-checkbox-group>
  51. </el-form-item>
  52. </el-col>
  53. <el-col :span="8">
  54. <el-form-item label="值班人员"
  55. label-width="120px">
  56. <el-checkbox v-model="checked1"
  57. label="张三"
  58. border></el-checkbox>
  59. <el-checkbox v-model="checked2"
  60. label="李四"
  61. border></el-checkbox>
  62. </el-form-item>
  63. </el-col>
  64. </el-row>
  65. <template>
  66. <ag-grid-vue class="table ag-theme-balham"
  67. style="width: 100%; height: 335px;"
  68. id="grid1"
  69. :gridOptions="gridOptions"
  70. :columnDefs="columnDefs"
  71. :rowData="rowData"
  72. @gridReady="onGridReady">
  73. </ag-grid-vue>
  74. </template>
  75. </el-form>
  76. <span slot="footer">
  77. <el-button size="mini"
  78. type="primary"
  79. @click="savedata()">保存</el-button>
  80. <el-button size="mini"
  81. @click="handleCloseAdd">关闭</el-button>
  82. </span>
  83. </el-dialog>
  84. </template>
  85. <script>
  86. const cityOptions = ['计算机楼', '主楼', '科技楼'];
  87. import DutyApi from '@/api/duty'
  88. import axios from 'axios'
  89. import { AgGridVue } from 'ag-grid-vue'
  90. import uploadajax from '@/assets/js/uploadajax.js'
  91. export default {
  92. name: 'dutyadd',
  93. components: { AgGridVue },
  94. data () {
  95. return {
  96. // ag-grid相关变量
  97. gridOptions: null,
  98. gridApi: null,
  99. columnApi: null,
  100. columnDefs: null,
  101. defaultColDef: null,
  102. rowData: [{
  103. Local: '计算机楼',
  104. Time: '8:00-10:00',
  105. Monday: '',
  106. Tuesday: '',
  107. Wednesday: '',
  108. Thursday: '',
  109. Friday: '',
  110. Saturday: '',
  111. Sunday: ''
  112. },
  113. {
  114. Local: '',
  115. Time: '',
  116. Monday: '',
  117. Tuesday: '',
  118. Wednesday: '',
  119. Thursday: '',
  120. Friday: '',
  121. Saturday: '',
  122. Sunday: ''
  123. },
  124. {
  125. Local: '',
  126. Time: '',
  127. Monday: '',
  128. Tuesday: '',
  129. Wednesday: '',
  130. Thursday: '',
  131. Friday: '',
  132. Saturday: '',
  133. Sunday: ''
  134. },
  135. {
  136. Local: '',
  137. Time: '',
  138. Monday: '',
  139. Tuesday: '',
  140. Wednesday: '',
  141. Thursday: '',
  142. Friday: '',
  143. Saturday: '',
  144. Sunday: ''
  145. },
  146. {
  147. Local: '',
  148. Time: '',
  149. Monday: '',
  150. Tuesday: '',
  151. Wednesday: '',
  152. Thursday: '',
  153. Friday: '',
  154. Saturday: '',
  155. Sunday: ''
  156. },
  157. {
  158. Local: '',
  159. Time: '',
  160. Monday: '',
  161. Tuesday: '',
  162. Wednesday: '',
  163. Thursday: '',
  164. Friday: '',
  165. Saturday: '',
  166. Sunday: ''
  167. }],
  168. prenum: '',
  169. multipleSelection: [],
  170. //详细list
  171. tableData: [],
  172. Local: '',
  173. Time: '',
  174. checkedDetail: [],
  175. checked1: '',
  176. checked2: '',
  177. checkAll: false,
  178. checkedCities: ['上海', '北京'],
  179. cities: cityOptions,
  180. isIndeterminate: true,
  181. years: [],
  182. form: {
  183. recentYear: ''
  184. },
  185. fileList: [],
  186. FileUrl: {},
  187. uploadFile: {},
  188. dialogvisible: false,
  189. formtype: '1',
  190. disabledbarcode: false,
  191. testlistform: {
  192. Term: '',
  193. Year: '',
  194. Classification: '',
  195. Responsible: '',
  196. State: 1,
  197. Remarks: '',
  198. CalibrationDeadlineType: 3,
  199. CalibrationTime: new Date(),
  200. CalibrationDeadline: 1,
  201. HeartbeatTime: new Date(),
  202. TimeNotification: 0,
  203. MaintenCycle: 1,
  204. CycleType: 3
  205. },
  206. Advancetime: 0,
  207. triggerlist: {},
  208. TimeNotification: false, // 有效期提醒
  209. classificationlist: [],
  210. getsupplierlist: [],
  211. rulestestlistform: {
  212. Code: [{
  213. required: true,
  214. message: '请输入设备编码',
  215. trigger: 'blur'
  216. }],
  217. Name: [{
  218. required: true,
  219. message: '请输入设备名称',
  220. trigger: 'blur'
  221. }]
  222. }
  223. }
  224. },
  225. beforeMount () {
  226. this.gridOptions = {
  227. rowHeight: 32, // 设置行高为32px
  228. // 缺省列属性
  229. defaultColDef: {
  230. width: 200,
  231. resizable: true,
  232. editable: true,//单元表格是否可编辑
  233. },
  234. // onCellEditingStopped: this.changesq,
  235. onCellClicked: this.changeClick,
  236. onRowSelected: this.handleSelectionChange, // 行选中
  237. onSortChanged: this.handleSortChange // 排序传递后台
  238. }
  239. this.columnDefs = [
  240. {
  241. headerName: '地点', field: 'Local'
  242. },
  243. {
  244. headerName: '时间段', field: 'Time'
  245. },
  246. {
  247. headerName: '周一', field: 'Monday'
  248. },
  249. {
  250. headerName: '周二', field: 'Tuesday'
  251. },
  252. {
  253. headerName: '周三', field: 'Wednesday'
  254. },
  255. {
  256. headerName: '周四', field: 'Thursday'
  257. },
  258. {
  259. headerName: '周五', field: 'Friday'
  260. },
  261. {
  262. headerName: '周六', field: 'Saturday'
  263. },
  264. {
  265. headerName: '周日', field: 'Sunday'
  266. }
  267. ]
  268. },
  269. created () {
  270. this.init()
  271. },
  272. mounted () {
  273. this.gridOptions.context = { page: this }
  274. this.gridApi = this.gridOptions.api
  275. this.gridColumnApi = this.gridOptions.columnApi
  276. this.doRefresh()
  277. },
  278. methods: {
  279. // 表格就绪后后执行
  280. onGridReady (params) {
  281. // 调整表格列宽大小自适应
  282. this.gridApi.sizeColumnsToFit()
  283. },
  284. handleSortChange (val) {
  285. var sortState = this.gridApi.getSortModel()
  286. // 获取排序的字段
  287. if (sortState && sortState.length > 0) {
  288. var item = sortState[0]
  289. this.sort.prop = item.colId
  290. this.sort.order = item.sort
  291. }
  292. this.doRefresh()
  293. },
  294. //单选框选中数据
  295. handleDetailSelectionChange (selection) {
  296. if (selection.length > 1) {
  297. this.$refs.multipleTable.clearSelection();
  298. this.$refs.multipleTable.toggleRowSelection(selection.pop());
  299. } else {
  300. this.checkedDetail = selection;
  301. }
  302. },
  303. // 表格就绪后后执行
  304. onGridReady (params) {
  305. this.gridApi = params.api
  306. this.columnApi = params.columnApi
  307. // 调整表格列宽大小自适应
  308. this.gridApi.sizeColumnsToFit()
  309. },
  310. // 选择
  311. changeClick (event) {
  312. // 判断是否选取的是ABCDEFGH列
  313. // if (event.colDef.field === 'k') {
  314. var _this = this
  315. var rowNode = this.gridOptions.api.getRowNode(event.rowIndex)
  316. var rows = JSON.parse(JSON.stringify(rowNode.data))
  317. var headerArr = ['Local', 'Time', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
  318. headerArr.forEach(function (key, num) {
  319. if (rows[key]) {
  320. var evRow = event.rowIndex + 1
  321. var evNum = num + 1
  322. var ev = evRow.toString() + evNum.toString()
  323. var rowsNodeArray = rows[key].split(',')
  324. // 如果是黄色则变为绿色
  325. // 黄色
  326. if (rowsNodeArray.length < 4) {
  327. if (rowsNodeArray[1] === '0') {
  328. // 变为绿色
  329. rowNode.data[key] = rowsNodeArray[0] + ',1,' + rowsNodeArray[2]
  330. // 加入数组
  331. _this.tableNum[ev] = event.rowIndex
  332. _this.tableField[ev] = key
  333. } else if (rowsNodeArray[1] === '1') {
  334. // 绿色则改成黄色,并从数组清空数值
  335. rowNode.data[key] = rowsNodeArray[0] + ',0,' + rowsNodeArray[2]
  336. _this.tableNum[ev] = ''
  337. _this.tableField[ev] = ''
  338. }
  339. }
  340. }
  341. })
  342. // 刷新表格
  343. // this.refreshAll()
  344. // }
  345. // 获取单元格颜色
  346. var span = 0
  347. var nowColor = event.event.toElement.style.backgroundColor
  348. if (!nowColor) {
  349. span = 1
  350. // 点击到了<span>文本上
  351. nowColor = event.event.toElement.parentElement.style.backgroundColor
  352. }
  353. // 判断是否有数据
  354. if (nowColor !== 'rgb(0, 255, 0)' && nowColor !== 'yellow') {
  355. // return false
  356. }
  357. var evArray = event.value.split(',')
  358. if (evArray[1] != 0 && evArray[1] != 1 && evArray.length > 3) {
  359. return false
  360. }
  361. if (evArray.length < 4) {
  362. // 根据颜色存入数组,列值,单元格值
  363. var evNum = event.rowIndex + 1
  364. var ev = evNum + event.colDef.headerName
  365. var eventArray = event.value.split(',')
  366. if (nowColor === 'rgb(0, 255, 0)') {
  367. this.nowclick.set(event.rowIndex.toString() + event.colDef.headerName, eventArray[2])
  368. // event.event.toElement.parentElement.style.backgroundColor = 'yellow'
  369. this.tableNum[ev] = ''
  370. this.tableField[ev] = ''
  371. if (span === 0) {
  372. event.event.toElement.style.backgroundColor = 'yellow'
  373. } else {
  374. event.event.toElement.parentElement.style.backgroundColor = 'yellow'
  375. }
  376. // 当点击改变为黄色时候,赋值,0
  377. event.data[event.colDef.field] = eventArray[0] + ',0,' + eventArray[2]
  378. } else if (nowColor === 'yellow') {
  379. this.nowclick.set(event.rowIndex.toString() + event.colDef.headerName, eventArray[2])
  380. this.tableNum[ev] = event.rowIndex
  381. this.tableField[ev] = event.colDef.field
  382. if (span === 0) {
  383. event.event.toElement.style.backgroundColor = '#00FF00'
  384. } else {
  385. event.event.toElement.parentElement.style.backgroundColor = '#FF0000'
  386. }
  387. event.data[event.colDef.field] = eventArray[0] + ',1,' + eventArray[2]
  388. }
  389. }
  390. },
  391. // 获取孔号详情
  392. getHoleInfoP () {
  393. let _this = this
  394. _this.rowData = []
  395. // 传入后台获取第一板的内容
  396. let params = {
  397. boardid: _this.mainBoardForm.Id
  398. }
  399. BoardApi.getHolePre(params)
  400. .then(res => {
  401. _this.rowData = res
  402. for (let row of _this.rowData) {
  403. let headerArr = ['Local', 'Time', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
  404. headerArr.forEach(function (key, num) {
  405. let rowarr = row[key].split(',')
  406. if (row[key] != '' && rowarr.length >= 3) {
  407. _this.samids.push(rowarr[2])
  408. }
  409. })
  410. }
  411. this.getIsQuick()
  412. })
  413. },
  414. // 处理列表选择
  415. handleSelectionChange () {
  416. let _this = this
  417. _this.multipleSelection = _this.gridOptions.api.getSelectedRows()
  418. _this.deleteBtnVisible = !_this.multipleSelection || _this.multipleSelection.length === 0
  419. if (!_this.deleteBtnVisible) {
  420. _this.deleteIds = []
  421. // 赋值删除id列表
  422. _this.multipleSelection.forEach((item, k) => {
  423. _this.deleteIds.push(item.Id)
  424. })
  425. } else {
  426. _this.deleteIds = []
  427. }
  428. },
  429. // 列表选择
  430. handle (row, column, event, cell) {
  431. console.log(row)
  432. console.log(column)
  433. console.log(event)
  434. console.log(cell)
  435. },
  436. // 学校地点多选框
  437. handleCheckAllChange (val) {
  438. this.checkedCities = val ? cityOptions : [];
  439. this.isIndeterminate = false;
  440. },
  441. // 学校地点多选框
  442. handleCheckedCitiesChange (value) {
  443. let checkedCount = value.length;
  444. this.checkAll = checkedCount === this.cities.length;
  445. this.isIndeterminate = checkedCount > 0 && checkedCount < this.cities.length;
  446. },
  447. init () {
  448. var myDate = new Date;
  449. var year = myDate.getFullYear();//获取当前年
  450. this.initSelectYear(year)
  451. this.form.recentYear = year;
  452. },
  453. initSelectYear (year) {
  454. this.years = [];
  455. for (let i = 0; i < 30; i++) {
  456. this.years.push({ value: (year - i), label: (year - i) + "年" });
  457. }
  458. },
  459. yearChange (value) {
  460. this.form.recentYear = value
  461. },
  462. // 保存新增班级信息
  463. savedata () {
  464. DutyApi.addduty(this.testlistform, {})
  465. .then(res => {
  466. // response
  467. this.$emit('closeAddDialog')
  468. this.dialogvisible = false
  469. this.fileList = []
  470. // 刷新
  471. })
  472. .catch(err => {
  473. // handle error
  474. console.error(err)
  475. })
  476. },
  477. refreshData () {
  478. this.$emit('refreshData')
  479. },
  480. closedialog () {
  481. this.dialogvisible = false
  482. },
  483. handleCloseAdd () {
  484. this.$refs['testlistform'].resetFields()
  485. // this.$refs['uploader'].clearFiles()
  486. this.testlistform.Code = ''
  487. this.testlistform.Name = ''
  488. this.testlistform.Brand = ''
  489. this.testlistform.SupplierId = ''
  490. this.testlistform.FactoryNum = ''
  491. this.testlistform.Responsible = ''
  492. this.testlistform.CalibrationDeadline = 1
  493. this.testlistform.MaintenCycle = 1
  494. this.testlistform.Model = ''
  495. this.testlistform.Remarks = ''
  496. this.testlistform.Classification = ''
  497. this.$emit('closeAddDialog')
  498. },
  499. // 计算日期
  500. addDate (date, days) {
  501. if (days === undefined || days === '') {
  502. days = 1
  503. }
  504. var dates = new Date(date)
  505. dates.setDate(dates.getDate() + days)
  506. var month = dates.getMonth() + 1
  507. var day = dates.getDate()
  508. var mm = "'" + month + "'"
  509. var dd = "'" + day + "'"
  510. // 单位数前面加0
  511. if (mm.length === 3) {
  512. month = '0' + month
  513. }
  514. if (dd.length === 3) {
  515. day = '0' + day
  516. }
  517. var time = dates.getFullYear() + '-' + month + '-' + day
  518. return time
  519. }
  520. }
  521. }
  522. </script>
  523. <style lang="scss">
  524. .button {
  525. padding: 0;
  526. float: right;
  527. }
  528. .donorsaddformcss .el-col-8 {
  529. height: 58px;
  530. }
  531. </style>