Elizabeth's proactive approach involves introducing urinal toilet attachment , an ingenious concept that optimizes space and functionality.

appointment.vue 44KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775
  1. <template>
  2. <div class="main-contain">
  3. <el-dialog
  4. title="提示"
  5. :visible.sync="exportLogVisible"
  6. width="40%"
  7. >
  8. <div v-for="(item,index) in logs" :key="index">
  9. <span> {{ item.export_time | parseTime('{y}-{m}-{d} {h}:{i}:{s}')}}</span>
  10. <br/>
  11. <br/>
  12. <span>{{getContent(item)}}</span>
  13. <span style="color:blue" @click="generateTxt(item)">点击</span>
  14. <span>查看详情</span>
  15. <br/>
  16. <br/>
  17. </div>
  18. <span slot="footer" class="dialog-footer">
  19. <el-button @click="exportLogVisible = false">取 消</el-button>
  20. <el-button type="primary" @click="exportLogVisible = false">确 定</el-button>
  21. </span>
  22. </el-dialog>
  23. <el-dialog
  24. title="提示"
  25. :visible.sync="dialogVisible"
  26. width="40%"
  27. >
  28. <span>您提交的文档不是系统标准导入模板,请检查您的文档或重新下载文档</span>
  29. <span slot="footer" class="dialog-footer">
  30. <el-button @click="dialogVisible = false">取 消</el-button>
  31. <el-button type="primary" @click="dialogVisible = false">确 定</el-button>
  32. </span>
  33. </el-dialog>
  34. <el-dialog
  35. title="提示"
  36. :visible.sync="isExistRepeatVisible"
  37. width="40%"
  38. >
  39. <span>检查到文档中同一天同个人存在多个排班,请检查并修改您的文档,重新导入</span>
  40. <span slot="footer" class="dialog-footer">
  41. <el-button @click="isExistRepeatVisible = false">取 消</el-button>
  42. <el-button type="primary" @click="isExistRepeatVisible = false">确 定</el-button>
  43. </span>
  44. </el-dialog>
  45. <div class="position">
  46. <bread-crumb :crumbs="crumbs"></bread-crumb>
  47. <el-col :span="15" style="text-align: right;">
  48. <div>
  49. <schedule-upload-excel style="float:left;margin-right: -500px" :on-success='handleSuccess'
  50. :before-upload="beforeUpload"></schedule-upload-excel>
  51. <el-button v-if="isShow()" type="primary" size="small" @click="export_file()"
  52. :loading="downloadLoading"
  53. >
  54. 导出模版
  55. </el-button>
  56. <el-button
  57. @click="generateLog()"
  58. class="filter-item"
  59. type="primary"
  60. size="small"
  61. >下载错误日志
  62. </el-button>
  63. <el-button type="primary" size="small" icon="el-icon-printer" @click="printScheduleAction">打印</el-button>
  64. <el-button type="primary" size="small" icon="el-icon-setting" @click="setScheduleTemplateAction">排班模板
  65. </el-button>
  66. </div>
  67. </el-col>
  68. </div>
  69. <div class="app-container">
  70. <!-- <el-row>
  71. <el-col :span="24"> -->
  72. <el-tabs v-model="activeName" :tab-position="tabPosition" ref="elTabs">
  73. <el-tab-pane name="lastWeek">
  74. <span slot="label"><i class="el-icon-date"></i> 上周 ({{theWeek.lastWeek}})</span>
  75. </el-tab-pane>
  76. <el-tab-pane name="thisWeek">
  77. <span slot="label"><i class="el-icon-date"></i> 本周 ({{theWeek.thisWeek}})</span>
  78. </el-tab-pane>
  79. <el-tab-pane name="nextWeek">
  80. <span slot="label"><i class="el-icon-date"></i> 下一周 ({{theWeek.nextWeek}})</span>
  81. </el-tab-pane>
  82. <el-tab-pane name="nextTwoWeek">
  83. <span slot="label"><i class="el-icon-date"></i> 下两周 ({{theWeek.nextTwoWeek}})</span>
  84. </el-tab-pane>
  85. </el-tabs>
  86. <!-- </el-col>
  87. </el-row> -->
  88. <table-data :week-time="activeName" :partitions-prop="partitions" :schedule-zone-row-prop="scheduleZoneRow"
  89. :schedule-zone-prop="scheduleZone" title=""></table-data>
  90. </div>
  91. </div>
  92. </template>
  93. <script>
  94. import { parseTime } from '@/utils'
  95. import tableData from './components/tableData'
  96. import { exportSchedule, getWeekPanels,initDate } from '@/api/schedule'
  97. import BreadCrumb from '@/xt_pages/components/bread-crumb'
  98. import UploadExcel from '@/xt_pages/components/UploadExcel'
  99. import ScheduleUploadExcel from './components/scheduleUploadExcel/index'
  100. import { generateLog } from '@/api/config'
  101. export default {
  102. name: 'appointment',
  103. data() {
  104. return {
  105. crumbs: [
  106. { path: false, name: '排班管理' },
  107. { path: '/workforce/appointment', name: '排班管理' }
  108. ],
  109. activeName: 'thisWeek',
  110. tabPosition: 'top',
  111. partitions: {},
  112. scheduleZone: [],
  113. days:[],
  114. logs:[],
  115. scheduleZoneRow: [],
  116. downloadLoading: false,
  117. msgTipVisible: false,
  118. dialogVisible: false,
  119. isExistRepeatVisible: false,
  120. exportLogVisible:false,
  121. theWeek: {
  122. lastWeek: 0,
  123. thisWeek: 0,
  124. nextWeek: 0,
  125. nextTwoWeek: 0
  126. }
  127. }
  128. },
  129. components: {
  130. ScheduleUploadExcel,
  131. tableData,
  132. BreadCrumb,
  133. UploadExcel
  134. },
  135. methods: {
  136. generateTxt:function(log) {
  137. var content = ''
  138. var errlog = log.err_logs
  139. for (let i = 0; i< errlog.length; i++){
  140. if (content.length == 0) {
  141. content = errlog[i].err_msg
  142. }else{
  143. content = content +"\n"+errlog[i].err_msg
  144. }
  145. }
  146. var url = new Blob(['\ufeff' + content], { type: 'text/txt,charset=UTF-8' })
  147. if (typeof url === 'object' && url instanceof Blob) {
  148. url = URL.createObjectURL(url) // 创建blob地址
  149. }
  150. const aLink = document.createElement('a')
  151. aLink.href = url
  152. aLink.download = this.timestampToTime(log.export_time)+'错误日志.txt'
  153. aLink.click()
  154. },
  155. timestampToTime(timestamp) {
  156. var date = new Date(timestamp * 1000)//时间戳为10位需*1000,时间戳为13位的话不需乘1000
  157. var Y = date.getFullYear() + '年'
  158. var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '月'
  159. var D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()) + '日 '
  160. var h = (date.getHours() < 10 ? '0' + (date.getHours()) : date.getHours()) + '时'
  161. var m = (date.getMinutes() < 10 ? '0' + (date.getMinutes()) : date.getMinutes()) + '分'
  162. var s = (date.getSeconds() < 10 ? '0' + (date.getSeconds()) : date.getSeconds())+'秒'
  163. return Y + M + D + h + m + s
  164. },
  165. getContent(log) {
  166. return '您导入的文档共' + log.total_num + '条患者数据' + ',' + '已成功导入' + log.success_num + '条,导入失败' + log.fail_num + '条,'
  167. },
  168. generateLog() {
  169. let params = {
  170. 'log_type': 2
  171. }
  172. generateLog(params).then(
  173. response => {
  174. if (response.data.state === 1) {
  175. this.logs = response.data.data.logs
  176. this.exportLogVisible = true
  177. } else {
  178. this.$message.error(response.data.msg)
  179. }
  180. }
  181. )
  182. },
  183. getWeekPanels() {
  184. getWeekPanels(1).then(response => {
  185. if (response.data.state == 0) {
  186. return false
  187. }
  188. var partitions = response.data.data.partitions
  189. this.theWeek.thisWeek = response.data.data.theWeek
  190. this.theWeek.lastWeek = this.theWeek.thisWeek - 1
  191. this.theWeek.nextWeek = this.theWeek.thisWeek + 1
  192. this.theWeek.nextTwoWeek = this.theWeek.thisWeek + 2
  193. // 在控制变量改变的时候进行 强制渲染更新
  194. let childrenRefs = this.$refs.elTabs.$children
  195. this.$nextTick(() => {
  196. childrenRefs.forEach(child => child.$forceUpdate())
  197. })
  198. var that = this
  199. if (partitions.length > 0) {
  200. partitions.forEach(function(partition) {
  201. if (partition.jihaos.length == 0) {
  202. return false
  203. }
  204. that.scheduleZoneRow.push(partition.jihaos.length)
  205. that.partitions[partition.id] = partition
  206. partition.jihaos.forEach(function(jihao) {
  207. var thisPa = {
  208. area: partition.name,
  209. zone_id: partition.id,
  210. zone_type: partition.type,
  211. cut: jihao.number,
  212. jihao_id: jihao.id,
  213. Mon_M: {
  214. schedule_id: 0,
  215. mode_id: 0,
  216. mode_name: '',
  217. patient_id: 0,
  218. patient: ''
  219. },
  220. Mon_A: {
  221. schedule_id: 0,
  222. mode_id: 0,
  223. mode_name: '',
  224. patient_id: 0,
  225. patient: ''
  226. },
  227. Mon_N: {
  228. schedule_id: 0,
  229. mode_id: 0,
  230. mode_name: '',
  231. patient_id: 0,
  232. patient: ''
  233. },
  234. Tue_M: {
  235. schedule_id: 0,
  236. mode_id: 0,
  237. mode_name: '',
  238. patient_id: 0,
  239. patient: ''
  240. },
  241. Tue_A: {
  242. schedule_id: 0,
  243. mode_id: 0,
  244. mode_name: '',
  245. patient_id: 0,
  246. patient: ''
  247. },
  248. Tue_N: {
  249. schedule_id: 0,
  250. mode_id: 0,
  251. mode_name: '',
  252. patient_id: 0,
  253. patient: ''
  254. },
  255. Wed_M: {
  256. schedule_id: 0,
  257. mode_id: 0,
  258. mode_name: '',
  259. patient_id: 0,
  260. patient: ''
  261. },
  262. Wed_A: {
  263. schedule_id: 0,
  264. mode_id: 0,
  265. mode_name: '',
  266. patient_id: 0,
  267. patient: ''
  268. },
  269. Wed_N: {
  270. schedule_id: 0,
  271. mode_id: 0,
  272. mode_name: '',
  273. patient_id: 0,
  274. patient: ''
  275. },
  276. Thurs_M: {
  277. schedule_id: 0,
  278. mode_id: 0,
  279. mode_name: '',
  280. patient_id: 0,
  281. patient: ''
  282. },
  283. Thurs_A: {
  284. schedule_id: 0,
  285. mode_id: 0,
  286. mode_name: '',
  287. patient_id: 0,
  288. patient: ''
  289. },
  290. Thurs_N: {
  291. schedule_id: 0,
  292. mode_id: 0,
  293. mode_name: '',
  294. patient_id: 0,
  295. patient: ''
  296. },
  297. Fri_M: {
  298. schedule_id: 0,
  299. mode_id: 0,
  300. mode_name: '',
  301. patient_id: 0,
  302. patient: ''
  303. },
  304. Fri_A: {
  305. schedule_id: 0,
  306. mode_id: 0,
  307. mode_name: '',
  308. patient_id: 0,
  309. patient: ''
  310. },
  311. Fri_N: {
  312. schedule_id: 0,
  313. mode_id: 0,
  314. mode_name: '',
  315. patient_id: 0,
  316. patient: ''
  317. },
  318. Sat_M: {
  319. schedule_id: 0,
  320. mode_id: 0,
  321. mode_name: '',
  322. patient_id: 0,
  323. patient: ''
  324. },
  325. Sat_A: {
  326. schedule_id: 0,
  327. mode_id: 0,
  328. mode_name: '',
  329. patient_id: 0,
  330. patient: ''
  331. },
  332. Sat_N: {
  333. schedule_id: 0,
  334. mode_id: 0,
  335. mode_name: '',
  336. patient_id: 0,
  337. patient: ''
  338. },
  339. Sun_A: {
  340. schedule_id: 0,
  341. mode_id: 0,
  342. mode_name: '',
  343. patient_id: 0,
  344. patient: ''
  345. },
  346. Sun_N: {
  347. schedule_id: 0,
  348. mode_id: 0,
  349. mode_name: '',
  350. patient_id: 0,
  351. patient: ''
  352. },
  353. Sun_M: {
  354. schedule_id: 0,
  355. mode_id: 0,
  356. mode_name: '',
  357. patient_id: 0,
  358. patient: ''
  359. },
  360. total: 0
  361. }
  362. that.scheduleZone.push(thisPa)
  363. })
  364. })
  365. }
  366. })
  367. },
  368. setScheduleTemplateAction: function() {
  369. this.$router.push({ path: '/workforce/template' })
  370. }, export_file: function() {
  371. this.downloadLoading = true
  372. import('@/vendor/Export2Excel').then(excel => {
  373. const filterVal = [
  374. '区号',
  375. '机号'
  376. ]
  377. const multiHeader = [['区号', '机号', '周一', '', '', '周二', '', '', '周三', '', '', '周四', '', '', '周五', '', '', '周六', '', '', '周日', '', '', '周一', '', '', '周二', '', '', '周三', '', '', '周四', '', '', '周五', '', '', '周六', '', '', '周日', '', '', '周一', '', '', '周二', '', '', '周三', '', '', '周四', '', '', '周五', '', '', '周六', '', '', '周日', '', '']]
  378. const header = ['', '', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上']
  379. // const merges = ['A1:A2', 'B1:B2']
  380. const merges = ['A1:A2', 'B1:B2', 'C1:E1', 'F1:H1', 'I1:K1', 'L1:N1', 'O1:Q1', 'R1:T1', 'U1:W1', 'X1:Z1', 'AA1:AC1', 'AD1:AF1', 'AG1:AI1', 'AJ1:AL1', 'AM1:AO1', 'AP1:AR1', 'AS1:AU1', 'AV1:AX1', 'AY1:BA1', 'BB1:BD1', 'BE1:BG1', 'BH1:BJ1', 'BK1:BM1']
  381. var list = []
  382. let i = 0
  383. for (let key in this.partitions) {
  384. var tempValue
  385. var jihaos = this.partitions[key].jihaos
  386. if (i == 0) {
  387. let m = 'A3' + ':' + 'A' + (2 + jihaos.length)
  388. tempValue = (2 + jihaos.length)
  389. merges.push(m)
  390. } else {
  391. let m = 'A' + (tempValue + 1) + ':' + 'A' + ((tempValue + 1) + jihaos.length - 1)
  392. tempValue = ((tempValue + 1) + jihaos.length - 1)
  393. merges.push(m)
  394. }
  395. for (let b = 0; b < jihaos.length; b++) {
  396. let obj = {}
  397. obj['区号'] = this.partitions[key].name
  398. obj['机号'] = jihaos[b].number.toString()
  399. list.push(obj)
  400. }
  401. i++
  402. }
  403. console.log(list)
  404. const data = this.formatJson(filterVal, list)
  405. const filename = "排班模版"
  406. excel.export_json_to_excel({
  407. multiHeader,
  408. header,
  409. merges,
  410. data,
  411. filename,
  412. })
  413. this.downloadLoading = false
  414. })
  415. }, formatJson(filterVal, jsonData) {
  416. return jsonData.map(v =>
  417. filterVal.map(j => {
  418. console.log(v)
  419. console.log(j)
  420. console.log(v[j])
  421. if (j === 'timestamp') {
  422. return parseTime(v[j])
  423. } else {
  424. return v[j]
  425. }
  426. })
  427. )
  428. },
  429. printScheduleAction: function() {
  430. var date = new Date().getTime()
  431. if (this.activeName == 'lastWeek') {
  432. date = date - 7 * 24 * 60 * 60 * 1000
  433. } else if (this.activeName == 'nextWeek') {
  434. date = date + 7 * 24 * 60 * 60 * 1000
  435. } else if (this.activeName == 'nextTwoWeek') {
  436. date = date + 14 * 24 * 60 * 60 * 1000
  437. }
  438. this.$router.push({
  439. path: '/workforce/schedule/print',
  440. query: { date: date }
  441. })
  442. }, isShow() {
  443. let isShow = false
  444. if (Object.keys(this.partitions).length != 0) {
  445. isShow = true
  446. let i = 0
  447. for (let key in this.partitions) {
  448. if (i == 0) {
  449. if (this.partitions[key].jihaos.length > 0) {
  450. isShow = true
  451. }
  452. }
  453. i++
  454. }
  455. }
  456. return isShow
  457. }, handleSuccess({ results, header }) {
  458. if(results.length > 0) {
  459. let headers = []
  460. for (let key in results[0]) {
  461. headers.push(key)
  462. }
  463. var isHas_1 = headers.includes('区号')
  464. console.log(isHas_1)
  465. var isHas_2 = headers.includes('机号')
  466. console.log(isHas_2)
  467. var isHas_3 = headers.includes('周一')
  468. console.log(isHas_3)
  469. var isHas_4 = headers.includes('')
  470. console.log(isHas_4)
  471. var isHas_5 = headers.includes('_1')
  472. console.log(isHas_5)
  473. var isHas_6 = headers.includes('周二')
  474. console.log(isHas_6)
  475. var isHas_7 = headers.includes('_2')
  476. console.log(isHas_7)
  477. var isHas_8 = headers.includes('_3')
  478. console.log(isHas_8)
  479. var isHas_9 = headers.includes('周三')
  480. console.log(isHas_9)
  481. var isHas_10 = headers.includes('_4')
  482. console.log(isHas_1)
  483. var isHas_11 = headers.includes('_5')
  484. console.log(isHas_1)
  485. var isHas_12 = headers.includes('周四')
  486. console.log(isHas_1)
  487. var isHas_13 = headers.includes('_6')
  488. console.log(isHas_1)
  489. var isHas_14 = headers.includes('_7')
  490. console.log(isHas_1)
  491. var isHas_15 = headers.includes('周五')
  492. console.log(isHas_1)
  493. var isHas_16 = headers.includes('_8')
  494. console.log(isHas_1)
  495. var isHas_17 = headers.includes('_9')
  496. console.log(isHas_1)
  497. var isHas_18 = headers.includes('周六')
  498. console.log(isHas_1)
  499. var isHas_19 = headers.includes('_10')
  500. console.log(isHas_1)
  501. var isHas_20 = headers.includes('_11')
  502. console.log(isHas_1)
  503. var isHas_21 = headers.includes('周日')
  504. console.log(isHas_1)
  505. var isHas_22 = headers.includes('_12')
  506. console.log(isHas_1)
  507. var isHas_23 = headers.includes('_13')
  508. console.log(isHas_1)
  509. var isHas_24 = headers.includes('周一_1')
  510. var isHas_25 = headers.includes('_14')
  511. var isHas_26 = headers.includes('_15')
  512. var isHas_27 = headers.includes('周二_1')
  513. var isHas_28 = headers.includes('_16')
  514. var isHas_29 = headers.includes('_17')
  515. var isHas_30 = headers.includes('周三_1')
  516. var isHas_31 = headers.includes('_18')
  517. var isHas_32 = headers.includes('_19')
  518. var isHas_33 = headers.includes('周四_1')
  519. var isHas_34 = headers.includes('_20')
  520. var isHas_35 = headers.includes('_21')
  521. var isHas_36 = headers.includes('周五_1')
  522. var isHas_37 = headers.includes('_22')
  523. var isHas_38 = headers.includes('_23')
  524. var isHas_39 = headers.includes('周六_1')
  525. var isHas_40 = headers.includes('_24')
  526. var isHas_41 = headers.includes('_25')
  527. var isHas_42 = headers.includes('周日_1')
  528. var isHas_43 = headers.includes('_26')
  529. var isHas_44 = headers.includes('_27')
  530. var isHas_45 = headers.includes('周一_2')
  531. var isHas_46 = headers.includes('_28')
  532. var isHas_47 = headers.includes('_29')
  533. var isHas_48 = headers.includes('周二_2')
  534. var isHas_49 = headers.includes('_30')
  535. var isHas_50 = headers.includes('_31')
  536. var isHas_51 = headers.includes('周三_2')
  537. var isHas_52 = headers.includes('_32')
  538. var isHas_53 = headers.includes('_33')
  539. var isHas_54 = headers.includes('周四_2')
  540. var isHas_55 = headers.includes('_34')
  541. var isHas_56 = headers.includes('_35')
  542. var isHas_57 = headers.includes('周五_2')
  543. var isHas_58 = headers.includes('_36')
  544. var isHas_59 = headers.includes('_37')
  545. var isHas_60 = headers.includes('周六_2')
  546. var isHas_61 = headers.includes('_38')
  547. var isHas_62 = headers.includes('_39')
  548. var isHas_63 = headers.includes('周日_2')
  549. var isHas_64 = headers.includes('_40')
  550. var isHas_65 = headers.includes('_41')
  551. if (!(isHas_1 && isHas_2 && isHas_3 && isHas_4 && isHas_5 &&
  552. isHas_6 && isHas_7 && isHas_8 && isHas_9 && isHas_10 &&
  553. isHas_11 && isHas_12 && isHas_13 && isHas_14 && isHas_15 &&
  554. isHas_16 && isHas_17 && isHas_18 && isHas_19 && isHas_20 &&
  555. isHas_21 && isHas_22 && isHas_23 && isHas_24 && isHas_25 &&
  556. isHas_26 && isHas_27 && isHas_28 && isHas_29 && isHas_30 &&
  557. isHas_31 && isHas_32 && isHas_33 && isHas_34 && isHas_35 &&
  558. isHas_36 && isHas_37 && isHas_38 && isHas_39 && isHas_40 &&
  559. isHas_41 && isHas_42 && isHas_43 && isHas_44 && isHas_45 &&
  560. isHas_46 && isHas_47 && isHas_48 && isHas_49 && isHas_50 &&
  561. isHas_51 && isHas_52 && isHas_53 && isHas_54 && isHas_55 &&
  562. isHas_56 && isHas_57 && isHas_58 && isHas_59 && isHas_60 &&
  563. isHas_61 && isHas_62 && isHas_63 && isHas_64 && isHas_65)) {
  564. this.dialogVisible = true
  565. return
  566. }
  567. }else{
  568. this.dialogVisible = true
  569. return
  570. }
  571. let is_system_zone = true
  572. let is_device_number = true
  573. let zones = []
  574. let deviceNumber = []
  575. for (let i = 0; i < results.length; i++) {
  576. if (results[i + 1] && results[i + 1]['区号'] != undefined) {
  577. zones.push(results[i + 1]['区号'])
  578. }
  579. if (results[i + 1] && results[i + 1]['机号'] != undefined) {
  580. deviceNumber.push(results[i + 1]['机号'])
  581. }
  582. }
  583. const obj = {}
  584. zones = zones.reduce((cur, next) => {
  585. obj[next] ? '' : obj[next] = true && cur.push(next)
  586. return cur
  587. }, []) // 设置cur默认类型为数组,并且初始值为空的数组
  588. const obj2 = {}
  589. deviceNumber = deviceNumber.reduce((cur, next) => {
  590. obj2[next] ? '' : obj2[next] = true && cur.push(next)
  591. return cur
  592. }, []) // 设置cur默认类型为数组,并且初始值为空的数组
  593. var total_zones = []
  594. var total_device_number = []
  595. for (let key in this.partitions) {
  596. total_zones.push(this.partitions[key].name)
  597. }
  598. for (let key in this.partitions) {
  599. var jihaos = this.partitions[key].jihaos
  600. console.log(jihaos)
  601. for (let i = 0; i < jihaos.length; i++) {
  602. total_device_number.push(jihaos[i].number)
  603. }
  604. }
  605. for (let i = 0; i < zones.length; i++) {
  606. if (!total_zones.includes(zones[i])) {
  607. is_system_zone = false
  608. }
  609. }
  610. console.log(deviceNumber)
  611. console.log(total_device_number)
  612. for (let i = 0; i < deviceNumber.length; i++) {
  613. if (!total_device_number.includes(deviceNumber[i])) {
  614. is_device_number = false
  615. }
  616. }
  617. console.log("111111111")
  618. console.log(is_system_zone)
  619. console.log(is_device_number)
  620. console.log("22222222222")
  621. //
  622. let tempObj = null
  623. if (results.length > 0) {
  624. tempObj = results[0]
  625. }
  626. let datas = []
  627. for (let i = 0; i < results.length; i++) {
  628. for (let key in results[i + 1]) {
  629. let tempObjTwo = { partition_name: '', device_number_name: '' }
  630. if (key != '区号' && key != '机号') {
  631. let obj = {}
  632. obj['name'] = results[i + 1][key].trim()
  633. if (tempObj[key] == '上午') {
  634. obj['schedule_type'] = 1
  635. } else if (tempObj[key] == '下午') {
  636. obj['schedule_type'] = 2
  637. } else if (tempObj[key] == '晚上') {
  638. obj['schedule_type'] = 3
  639. } else {
  640. obj['schedule_type'] = 0
  641. }
  642. obj['schedule_week'] = this.getWeekByResultsStr(key)
  643. obj['schedule_date'] = this.getDateByResultsStr(key)
  644. obj['row'] = this.getRow(key)
  645. tempObjTwo = obj
  646. }
  647. tempObjTwo['partition_name'] = results[i + 1]['区号']
  648. tempObjTwo['device_number_name'] = results[i + 1]['机号']
  649. tempObjTwo['index'] = i + 3
  650. if (tempObjTwo['schedule_week'] != undefined && tempObjTwo['name'] != undefined && tempObjTwo['schedule_type'] != undefined && tempObjTwo['schedule_date'] != undefined) {
  651. var current_date = new Date()
  652. var m_year = current_date.getFullYear()
  653. var m_month = current_date.getMonth() + 1
  654. m_month = m_month < 10 ? '0' + m_month.toString() : m_month.toString()
  655. var m_date = current_date.getDate() < 10 ? '0' + current_date.getDate().toString() : current_date.getDate().toString()
  656. var current_date_two = new Date(m_year + '-' + m_month + '-' + m_date)
  657. if(new Date(tempObjTwo['schedule_date']).getTime() >= new Date(current_date_two).getTime()) {
  658. datas.push(tempObjTwo)
  659. }
  660. }
  661. }
  662. }
  663. console.log("333333333")
  664. console.log(datas)
  665. console.log("44444444444")
  666. let date_arr = []
  667. //校验文档是否规范
  668. for (let i = 0; i < datas.length; i++) {
  669. if (datas[i].schedule_date !== '0') {
  670. date_arr.push(datas[i].schedule_date)
  671. }
  672. if (datas[i].device_number_name == undefined) {
  673. console.log(datas[i].name)
  674. is_device_number = false
  675. }
  676. if (datas[i].partition_name == undefined) {
  677. is_system_zone = false
  678. }
  679. if (datas[i].schedule_date === '0') {
  680. is_system_zone = false
  681. }
  682. if (datas[i].schedule_week === '0') {
  683. is_system_zone = false
  684. }
  685. if (datas[i].schedule_type === 0) {
  686. is_system_zone = false
  687. }
  688. }
  689. console.log("333333333")
  690. console.log(is_system_zone)
  691. console.log(is_device_number)
  692. console.log("44444444444")
  693. //校验文档中同一天同个人是否存在多个排班
  694. let is_exist_repeat = false
  695. const obj3 = {}
  696. date_arr = date_arr.reduce((cur, next) => {
  697. obj3[next] ? '' : obj3[next] = true && cur.push(next)
  698. return cur
  699. }, []) // 设置cur默认类型为数组,并且初始值为空的数组
  700. let tempObjArr = []
  701. for (let i = 0; i < date_arr.length; i++) {
  702. let obj = {}
  703. let key = date_arr[i]
  704. let value = []
  705. for (let b = 0; b < datas.length; b++) {
  706. if (key == datas[b].schedule_date) {
  707. value.push(datas[b].name)
  708. }
  709. }
  710. obj[key] = value
  711. tempObjArr.push(obj)
  712. }
  713. for (let i = 0; i < tempObjArr.length; i++) {
  714. for (let key in tempObjArr[i]) {
  715. let arr = tempObjArr[i][key]
  716. const obj = {}
  717. arr = arr.reduce((cur, next) => {
  718. obj[next] ? '' : obj[next] = true && cur.push(next)
  719. return cur
  720. }, []) // 设置cur默认类型为数组,并且初始值为空的数组
  721. if (tempObjArr[i][key].length > arr.length) { //比对原数组和去重后的原数组总数,不同的话则存在重复元素
  722. is_exist_repeat = true
  723. }
  724. }
  725. }
  726. console.log(header.length )
  727. console.log(is_system_zone )
  728. console.log(is_device_number)
  729. if (header.length > 65 || !is_system_zone || !is_device_number) {
  730. this.dialogVisible = true
  731. return
  732. } else {
  733. if (is_exist_repeat) {
  734. this.isExistRepeatVisible = true
  735. return
  736. } else {
  737. let params = {
  738. schedule: datas
  739. }
  740. //今天的时间
  741. var day2 = new Date()
  742. day2.setTime(day2.getTime())
  743. var month = day2.getMonth() + 1 < 10 ? '0' + (day2.getMonth() + 1).toString() : (day2.getMonth() + 1).toString()
  744. var day = day2.getDate() < 10 ? '0' + (day2.getDate()).toString() : (day2.getMonth() + 1).toString()
  745. var date = day2.getFullYear() + '-' + month + '-' + day
  746. exportSchedule(params,date).then(response => {
  747. if (response.data.state == 0) {
  748. return false
  749. }
  750. this.getWeekPanels()
  751. })
  752. }
  753. }
  754. },
  755. getInitDate(){
  756. initDate().then(response => {
  757. if (response.data.state == 0) {
  758. return false
  759. }
  760. this.days = response.data.data.days
  761. })
  762. },
  763. getWeekByResultsStr(key) {
  764. switch (key) {
  765. case '周一':
  766. return '1'
  767. break
  768. case '周一_1':
  769. return '1'
  770. break
  771. case '周一_2':
  772. return '1'
  773. break
  774. case '':
  775. return '1'
  776. break
  777. case '_1':
  778. return '1'
  779. break
  780. case '_14':
  781. return '1'
  782. break
  783. case '_15':
  784. return '1'
  785. break
  786. case '_28':
  787. return '1'
  788. break
  789. case '_29':
  790. return '1'
  791. break
  792. case '周二' :
  793. return '2'
  794. break
  795. case '周二_1':
  796. return '2'
  797. break
  798. case '周二_2' :
  799. return '2'
  800. break
  801. case '_2':
  802. return '2'
  803. break
  804. case '_3':
  805. return '2'
  806. break
  807. case '_16' :
  808. return '2'
  809. break
  810. case '_17' :
  811. return '2'
  812. break
  813. case '_30':
  814. return '2'
  815. break
  816. case '_31':
  817. return '2'
  818. break
  819. case '周三':
  820. return '3'
  821. break
  822. case '周三_1':
  823. return '3'
  824. break
  825. case '周三_2':
  826. return '3'
  827. break
  828. case '_4' :
  829. return '3'
  830. break
  831. case '_5' :
  832. return '3'
  833. break
  834. case '_18' :
  835. return '3'
  836. break
  837. case '_19' :
  838. return '3'
  839. break
  840. case '_32' :
  841. return '3'
  842. break
  843. case '_33' :
  844. return '3'
  845. break
  846. case '周四':
  847. return '4'
  848. break
  849. case '周四_1' :
  850. return '4'
  851. break
  852. case'周四_2' :
  853. return '4'
  854. break
  855. case '_6' :
  856. return '4'
  857. break
  858. case '_7':
  859. return '4'
  860. break
  861. case '_20':
  862. return '4'
  863. break
  864. case '_21':
  865. return '4'
  866. break
  867. case '_34':
  868. return '4'
  869. break
  870. case '_35':
  871. return '4'
  872. break
  873. case '周五' :
  874. return '5'
  875. break
  876. case '周五_1':
  877. return '5'
  878. break
  879. case '周五_2' :
  880. return '5'
  881. break
  882. case '_8':
  883. return '5'
  884. break
  885. case '_9' :
  886. return '5'
  887. break
  888. case '_22' :
  889. return '5'
  890. break
  891. case '_23':
  892. return '5'
  893. break
  894. case '_36':
  895. return '5'
  896. break
  897. case '_37':
  898. return '5'
  899. break
  900. case '周六':
  901. return '6'
  902. break
  903. case '周六_1':
  904. return '6'
  905. break
  906. case '周六_2' :
  907. return '6'
  908. break
  909. case '_10' :
  910. return '6'
  911. break
  912. case '_11':
  913. return '6'
  914. break
  915. case '_24' :
  916. return '6'
  917. break
  918. case '_25' :
  919. return '6'
  920. break
  921. case '_38' :
  922. return '6'
  923. break
  924. case '_39':
  925. return '6'
  926. break
  927. case '周日':
  928. return '7'
  929. break
  930. case '周日_1' :
  931. return '7'
  932. break
  933. case '周日_2' :
  934. return '7'
  935. break
  936. case '_12' :
  937. return '7'
  938. break
  939. case '_13' :
  940. return '7'
  941. break
  942. case '_26':
  943. return '7'
  944. break
  945. case '_27':
  946. return '7'
  947. break
  948. case '_40' :
  949. return '7'
  950. break
  951. case '_41':
  952. return '7'
  953. break
  954. default:
  955. return '0'
  956. break
  957. }
  958. }, getRow(key) {
  959. switch (key) {
  960. case '周一' : //本周一
  961. return 'C'
  962. break
  963. case '': //本周一
  964. return 'D'
  965. break
  966. case '_1': //本周一
  967. return 'E'
  968. break
  969. case '周一_1': //下周一
  970. return 'X'
  971. break
  972. case '_14': //下周一
  973. return 'Y'
  974. break
  975. case '_15': //下周一
  976. return 'Z'
  977. break
  978. case '周一_2' : //下下周一
  979. return 'AS'
  980. break
  981. case '_28': //下下周一
  982. return 'AT'
  983. break
  984. case '_29': //下下周一
  985. return 'AU'
  986. break
  987. case '周二' : //本周二
  988. return 'F'
  989. break
  990. case '_2': //本周二
  991. return 'G'
  992. break
  993. case '_3': //本周二
  994. return 'H'
  995. break
  996. case '周二_1'://下周二
  997. return 'AA'
  998. break
  999. case '_16' ://下周二
  1000. return 'AB'
  1001. break
  1002. case '_17'://下周二
  1003. return 'AC'
  1004. break
  1005. case '周二_2' ://下下周二
  1006. return 'AV'
  1007. break
  1008. case '_30' ://下下周二
  1009. return 'AW'
  1010. break
  1011. case '_31'://下下周二
  1012. return 'AX'
  1013. break
  1014. case '周三' : //本周三
  1015. return 'I'
  1016. break
  1017. case '_4': //本周三
  1018. return 'J'
  1019. break
  1020. case '_5': //本周三
  1021. return 'K'
  1022. break
  1023. case '周三_1': //下周三
  1024. return 'AD'
  1025. break
  1026. case '_18' : //下周三
  1027. return 'AE'
  1028. break
  1029. case '_19': //下周三
  1030. return 'AF'
  1031. break
  1032. case '周三_2' : //下下周三
  1033. return 'AY'
  1034. break
  1035. case '_32' : //下下周三
  1036. return 'AZ'
  1037. break
  1038. case '_33': //下下周三
  1039. return 'BA'
  1040. break
  1041. case '周四':
  1042. return 'L'
  1043. break
  1044. case '_6' :
  1045. return 'M'
  1046. break
  1047. case '_7':
  1048. return 'N'
  1049. break
  1050. case '周四_1':
  1051. return 'AG'
  1052. break
  1053. case '_20' :
  1054. return 'AH'
  1055. break
  1056. case '_21':
  1057. return 'AI'
  1058. break
  1059. case '周四_2' :
  1060. return 'BB'
  1061. break
  1062. case '_34':
  1063. return 'BC'
  1064. break
  1065. case '_35':
  1066. return 'BD'
  1067. break
  1068. case '周五':
  1069. return 'O'
  1070. break
  1071. case '_8':
  1072. return 'P'
  1073. break
  1074. case '_9':
  1075. return 'Q'
  1076. break
  1077. case '周五_1' :
  1078. return 'AJ'
  1079. break
  1080. case '_22' :
  1081. return 'AK'
  1082. break
  1083. case '_23':
  1084. return 'AL'
  1085. break
  1086. case '周五_2' :
  1087. return 'BE'
  1088. break
  1089. case '_36':
  1090. return 'BF'
  1091. break
  1092. case '_37':
  1093. return 'BG'
  1094. break
  1095. case '周六' :
  1096. return 'R'
  1097. break
  1098. case '_10' :
  1099. return 'S'
  1100. break
  1101. case '_11':
  1102. return 'T'
  1103. break
  1104. case '周六_1' :
  1105. return 'AM'
  1106. break
  1107. case '_24' :
  1108. return 'AN'
  1109. break
  1110. case '_25':
  1111. return 'AO'
  1112. break
  1113. case '周六_2' :
  1114. return 'BH'
  1115. break
  1116. case '_38' :
  1117. return 'BI'
  1118. break
  1119. case '_39':
  1120. return 'BJ'
  1121. break
  1122. case '周日' :
  1123. return 'U'
  1124. break
  1125. case '_12' :
  1126. return 'V'
  1127. break
  1128. case '_13':
  1129. return 'W'
  1130. break
  1131. case '周日_1' :
  1132. return 'AP'
  1133. break
  1134. case '_26' :
  1135. return 'AQ'
  1136. break
  1137. case '_27':
  1138. return 'AR'
  1139. break
  1140. case '周日_2':
  1141. return 'BK'
  1142. break
  1143. case '_40':
  1144. return 'BL'
  1145. break
  1146. case '_41':
  1147. return 'BM'
  1148. break
  1149. }
  1150. }, getDateByResultsStr(key) {
  1151. switch (key) {
  1152. case '周一' : //本周一
  1153. return this.days[0]
  1154. break
  1155. case '': //本周一
  1156. return this.days[0]
  1157. break
  1158. case '_1': //本周一
  1159. return this.days[0]
  1160. break
  1161. case '周一_1': //下周一
  1162. return this.days[7]
  1163. break
  1164. case '_14': //下周一
  1165. return this.days[7]
  1166. break
  1167. case '_15': //下周一
  1168. return this.days[7]
  1169. break
  1170. case '周一_2' : //下下周一
  1171. return this.days[14]
  1172. break
  1173. case '_28': //下下周一
  1174. return this.days[14]
  1175. break
  1176. case '_29': //下下周一
  1177. return this.days[14]
  1178. break
  1179. case '周二' : //本周二
  1180. return this.days[1]
  1181. break
  1182. case '_2': //本周二
  1183. return this.days[1]
  1184. break
  1185. case '_3': //本周二
  1186. return this.days[1]
  1187. break
  1188. case '周二_1'://下周二
  1189. return this.days[8]
  1190. break
  1191. case '_16' ://下周二
  1192. return this.days[8]
  1193. break
  1194. case '_17'://下周二
  1195. return this.days[8]
  1196. break
  1197. case '周二_2' ://下下周二
  1198. return this.days[15]
  1199. break
  1200. case '_30' ://下下周二
  1201. return this.days[15]
  1202. break
  1203. case '_31'://下下周二
  1204. return this.days[15]
  1205. break
  1206. case '周三' : //本周三
  1207. return this.days[2]
  1208. break
  1209. case '_4': //本周三
  1210. return this.days[2]
  1211. break
  1212. case '_5': //本周三
  1213. return this.days[2]
  1214. break
  1215. case '周三_1': //下周三
  1216. return this.days[9]
  1217. break
  1218. case '_18' : //下周三
  1219. return this.days[9]
  1220. break
  1221. case '_19': //下周三
  1222. return this.days[9]
  1223. break
  1224. case '周三_2' : //下下周三
  1225. return this.days[16]
  1226. break
  1227. case '_32' : //下下周三
  1228. return this.days[16]
  1229. break
  1230. case '_33': //下下周三
  1231. return this.days[16]
  1232. break
  1233. case '周四':
  1234. return this.days[3]
  1235. break
  1236. case '_6' :
  1237. return this.days[4]
  1238. break
  1239. case '_7':
  1240. return this.days[4]
  1241. break
  1242. case '周四_1':
  1243. return this.days[10]
  1244. break
  1245. case '_20' :
  1246. return this.days[10]
  1247. break
  1248. case '_21':
  1249. return this.days[10]
  1250. break
  1251. case '周四_2' :
  1252. return this.days[17]
  1253. break
  1254. case '_34':
  1255. return this.days[17]
  1256. break
  1257. case '_35':
  1258. return this.days[17]
  1259. break
  1260. case '周五':
  1261. return this.days[4]
  1262. break
  1263. case '_8':
  1264. return this.days[4]
  1265. break
  1266. case '_9':
  1267. return this.days[4]
  1268. break
  1269. case '周五_1' :
  1270. return this.days[11]
  1271. break
  1272. case '_22' :
  1273. return this.days[11]
  1274. break
  1275. case '_23':
  1276. return this.days[11]
  1277. break
  1278. case '周五_2' :
  1279. return this.days[18]
  1280. break
  1281. case '_36':
  1282. return this.days[18]
  1283. break
  1284. case '_37':
  1285. return this.days[18]
  1286. break
  1287. case '周六' :
  1288. return this.days[5]
  1289. break
  1290. case '_10' :
  1291. return this.days[5]
  1292. break
  1293. case '_11':
  1294. return this.days[5]
  1295. break
  1296. case '周六_1' :
  1297. return this.days[12]
  1298. break
  1299. case '_24' :
  1300. return this.days[12]
  1301. break
  1302. case '_25':
  1303. return this.days[12]
  1304. break
  1305. case '周六_2' :
  1306. return this.days[19]
  1307. break
  1308. case '_38' :
  1309. return this.days[19]
  1310. break
  1311. case '_39':
  1312. return this.days[19]
  1313. break
  1314. case '周日' :
  1315. return this.days[6]
  1316. break
  1317. case '_12' :
  1318. return this.days[6]
  1319. break
  1320. case '_13':
  1321. return this.days[6]
  1322. break
  1323. case '周日_1' :
  1324. return this.days[13]
  1325. break
  1326. case '_26' :
  1327. return this.days[13]
  1328. break
  1329. case '_27':
  1330. return this.days[13]
  1331. break
  1332. case '周日_2':
  1333. return this.days[20]
  1334. break
  1335. case '_40':
  1336. return this.days[20]
  1337. break
  1338. case '_41':
  1339. return this.days[20]
  1340. break
  1341. default:
  1342. return '0'
  1343. break
  1344. }
  1345. }
  1346. },
  1347. created() {
  1348. this.getWeekPanels()
  1349. this.getInitDate()
  1350. }
  1351. }
  1352. </script>
  1353. <style rel="stylesheet/css" lang="scss">
  1354. .schedule-table-cell-disable {
  1355. background-color: #F5F5F5 !important;
  1356. }
  1357. </style>