template.vue 53KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205
  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="msgTipVisible"
  37. width="40%"
  38. >
  39. <span>如果导入成功,会将当前已有的排版会被全部清除,是否继续导入排版数据</span>
  40. <span slot="footer" class="dialog-footer">
  41. <el-button @click="msgTipVisible = false">取 消</el-button>
  42. <el-button type="primary" @click="export_file()">确 定</el-button>
  43. </span>
  44. </el-dialog>
  45. <el-dialog
  46. title="提示"
  47. :visible.sync="isExistRepeatVisible"
  48. width="40%"
  49. >
  50. <span>检查到文档中同一天同个人存在多个排班,请检查并修改您的文档,重新导入</span>
  51. <span slot="footer" class="dialog-footer">
  52. <el-button @click="isExistRepeatVisible = false">取 消</el-button>
  53. <el-button type="primary" @click="isExistRepeatVisible = false">确 定</el-button>
  54. </span>
  55. </el-dialog>
  56. <div class="position">
  57. <bread-crumb :crumbs="crumbs"></bread-crumb>
  58. <div style="display:flex;align-items:center">
  59. <!-- <el-col :span="3" style="text-align: right;"> -->
  60. <el-button v-loading="downloadLoading" v-if="template_mode&&(template_mode.mode == 1 || template_mode.mode == 2)"
  61. size="small" icon="el-icon-setting" type="primary" @click="import_file()">导出模版
  62. </el-button>
  63. <el-button
  64. @click="generateLog()"
  65. class="filter-item"
  66. type="primary"
  67. size="small"
  68. >下载错误日志
  69. </el-button>
  70. <!--<upload-excel style="float:right;" :on-success='handleSuccess' :before-upload="beforeUpload"></upload-excel>-->
  71. <schedule-template-upload-excel style="margin-right:10px;" :on-success='handleSuccess'
  72. :before-upload="beforeUpload"></schedule-template-upload-excel>
  73. <el-button size="small" icon="el-icon-setting" type="primary" @click="setScheduleTemplateAction">设置模板</el-button>
  74. </div>
  75. <!-- </el-col> -->
  76. </div>
  77. <div class="app-container">
  78. <!-- <el-row>
  79. <el-col :span="21"> -->
  80. <el-tabs v-model="activeName" tab-position="top">
  81. <el-tab-pane name="schedules">
  82. <span slot="label"> 排班信息 </span>
  83. <template-table :editable="false" :device_numbers="device_numbers" :template="this_week_schedules"
  84. :patients="patients"></template-table>
  85. </el-tab-pane>
  86. <el-tab-pane name="first" :disabled="template_mode.mode == 0">
  87. <span slot="label"> 第一周 </span>
  88. <template-table :editable="true" :device_numbers="device_numbers" :template="first_template"
  89. :patients="patients"></template-table>
  90. </el-tab-pane>
  91. <el-tab-pane name="second" :disabled="template_mode.mode != 2">
  92. <span slot="label"> 第二周 </span>
  93. <template-table :editable="true" :device_numbers="device_numbers" :template="second_template"
  94. :patients="patients"></template-table>
  95. </el-tab-pane>
  96. </el-tabs>
  97. <set-up-template-dialog ref="setup_dialog" :template_mode="template_mode" :origin_mode="origin_mode"
  98. @chenge_mode="didChangeTemplateMode"></set-up-template-dialog>
  99. </div>
  100. </div>
  101. </template>
  102. <script>
  103. import SetUpTemplateDialog from './components/setup_template_dialog'
  104. import TemplateTable from './components/template_table'
  105. import { getTemplateInitData } from '@/api/schedule_template/patient'
  106. import BreadCrumb from '@/xt_pages/components/bread-crumb'
  107. import { exportScheduleTemplate, getWeekPanels,initDate } from '@/api/schedule'
  108. import ScheduleTemplateUploadExcel from './components/scheduleTemplateUploadExcel/index'
  109. import { generateLog } from '@/api/config'
  110. export default {
  111. name: 'WorkforceTemplate',
  112. components: {
  113. ScheduleTemplateUploadExcel,
  114. SetUpTemplateDialog,
  115. TemplateTable,
  116. BreadCrumb
  117. },
  118. data: function() {
  119. return {
  120. crumbs: [
  121. { path: false, name: '排班管理' },
  122. { path: 'workforce/template', name: '排班模版' }
  123. ],
  124. partitions: {},
  125. scheduleZone: [],
  126. activeName: 'schedules',
  127. downloadLoading: false,
  128. isExistRepeatVisible:false,
  129. exportLogVisible:false,
  130. logs:[],
  131. days:[],
  132. msgTipVisible: false,
  133. dialogVisible: false,
  134. template_mode: {
  135. id: 0,
  136. mode: 0
  137. },
  138. origin_mode: 0,
  139. device_numbers: [],
  140. patients: [],
  141. first_template: {
  142. items: []
  143. },
  144. second_template: {
  145. items: []
  146. },
  147. this_week_schedules: {
  148. id: 0,
  149. items: []
  150. }
  151. }
  152. },
  153. created() {
  154. this.getWeekPanels()
  155. this.getInitDate()
  156. getTemplateInitData().then(rs => {
  157. var resp = rs.data
  158. if (resp.state == 1) {
  159. var mode = resp.data.template_mode
  160. var device_numbers = resp.data.device_numbers
  161. var templates = resp.data.templates
  162. var patients = resp.data.patients
  163. var schedules = resp.data.schedules
  164. this.template_mode = mode
  165. this.origin_mode = mode.mode
  166. this.device_numbers = device_numbers
  167. console.log(this.device_numbers)
  168. this.patients = patients
  169. this.first_template = templates[0]
  170. this.second_template = templates[1]
  171. var fakeTemplateItems = []
  172. for (let index = 0; index < schedules.length; index++) {
  173. const schedule = schedules[index]
  174. var item = {}
  175. this.$set(item, 'id', schedule.id)
  176. this.$set(item, 'template_id', 0)
  177. this.$set(item, 'device_number_id', schedule.bed_id)
  178. this.$set(item, 'treat_mode', schedule.mode_id)
  179. this.$set(item, 'weekday', schedule.schedule_week)
  180. this.$set(item, 'time_type', schedule.schedule_type)
  181. var patient = {}
  182. this.$set(patient, 'id', schedule.patient_id)
  183. this.$set(patient, 'name', schedule.patient)
  184. this.$set(item, 'patient', patient)
  185. fakeTemplateItems.push(item)
  186. }
  187. this.this_week_schedules.items = fakeTemplateItems
  188. } else {
  189. this.$message(resp.msg)
  190. }
  191. })
  192. },
  193. methods: {
  194. generateTxt:function(log) {
  195. var content = ''
  196. var errlog = log.err_logs
  197. content = this.getContent(log)
  198. for (let i = 0; i< errlog.length; i++){
  199. if (content.length == 0) {
  200. content = errlog[i].err_msg
  201. }else{
  202. content = content +"\n"+errlog[i].err_msg
  203. }
  204. }
  205. var url = new Blob(['\ufeff' + content], { type: 'text/txt,charset=UTF-8' })
  206. if (typeof url === 'object' && url instanceof Blob) {
  207. url = URL.createObjectURL(url) // 创建blob地址
  208. }
  209. const aLink = document.createElement('a')
  210. aLink.href = url
  211. aLink.download = this.timestampToTime(log.export_time)+'错误日志.txt'
  212. aLink.click()
  213. },
  214. timestampToTime(timestamp) {
  215. var date = new Date(timestamp * 1000)//时间戳为10位需*1000,时间戳为13位的话不需乘1000
  216. var Y = date.getFullYear() + '年'
  217. var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '月'
  218. var D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()) + '日 '
  219. var h = (date.getHours() < 10 ? '0' + (date.getHours()) : date.getHours()) + '时'
  220. var m = (date.getMinutes() < 10 ? '0' + (date.getMinutes()) : date.getMinutes()) + '分'
  221. var s = (date.getSeconds() < 10 ? '0' + (date.getSeconds()) : date.getSeconds())+'秒'
  222. return Y + M + D + h + m + s
  223. },
  224. getContent(log) {
  225. return '您导入的文档共' + log.total_num + '条患者数据' + ',' + '已成功导入' + log.success_num + '条,导入失败' + log.fail_num + '条,'
  226. },
  227. generateLog() {
  228. let params = {
  229. 'log_type': 3
  230. }
  231. generateLog(params).then(
  232. response => {
  233. if (response.data.state === 1) {
  234. this.logs = response.data.data.logs
  235. this.exportLogVisible = true
  236. } else {
  237. this.$message.error(response.data.msg)
  238. }
  239. }
  240. )
  241. },
  242. getInitDate(){
  243. initDate().then(response => {
  244. if (response.data.state == 0) {
  245. return false
  246. }
  247. this.days = response.data.data.days
  248. })
  249. },
  250. handleSuccess({ results, header }) {
  251. console.log(this.template_mode.mode)
  252. if (this.template_mode.mode == 1) {
  253. if(results.length > 0) {
  254. let headers = []
  255. for (let key in results[0]) {
  256. headers.push(key)
  257. }
  258. var isHas_1 = headers.includes('区号')
  259. console.log(isHas_1)
  260. var isHas_2 = headers.includes('机号')
  261. console.log(isHas_2)
  262. var isHas_3 = headers.includes('周一')
  263. console.log(isHas_3)
  264. var isHas_4 = headers.includes('')
  265. console.log(isHas_4)
  266. var isHas_5 = headers.includes('_1')
  267. console.log(isHas_5)
  268. var isHas_6 = headers.includes('周二')
  269. console.log(isHas_6)
  270. var isHas_7 = headers.includes('_2')
  271. console.log(isHas_7)
  272. var isHas_8 = headers.includes('_3')
  273. console.log(isHas_8)
  274. var isHas_9 = headers.includes('周三')
  275. console.log(isHas_9)
  276. var isHas_10 = headers.includes('_4')
  277. console.log(isHas_1)
  278. var isHas_11 = headers.includes('_5')
  279. console.log(isHas_1)
  280. var isHas_12 = headers.includes('周四')
  281. console.log(isHas_1)
  282. var isHas_13 = headers.includes('_6')
  283. console.log(isHas_1)
  284. var isHas_14 = headers.includes('_7')
  285. console.log(isHas_1)
  286. var isHas_15 = headers.includes('周五')
  287. console.log(isHas_1)
  288. var isHas_16 = headers.includes('_8')
  289. console.log(isHas_1)
  290. var isHas_17 = headers.includes('_9')
  291. console.log(isHas_1)
  292. var isHas_18 = headers.includes('周六')
  293. console.log(isHas_1)
  294. var isHas_19 = headers.includes('_10')
  295. console.log(isHas_1)
  296. var isHas_20 = headers.includes('_11')
  297. console.log(isHas_1)
  298. var isHas_21 = headers.includes('周日')
  299. console.log(isHas_1)
  300. var isHas_22 = headers.includes('_12')
  301. console.log(isHas_1)
  302. var isHas_23 = headers.includes('_13')
  303. console.log(isHas_1)
  304. if (!(isHas_1 && isHas_2 && isHas_3 && isHas_4 && isHas_5 &&
  305. isHas_6 && isHas_7 && isHas_8 && isHas_9 && isHas_10 &&
  306. isHas_11 && isHas_12 && isHas_13 && isHas_14 && isHas_15 &&
  307. isHas_16 && isHas_17 && isHas_18 && isHas_19 && isHas_20 &&
  308. isHas_21 && isHas_22 && isHas_23 )) {
  309. this.dialogVisible = true
  310. return
  311. }
  312. }else{
  313. this.dialogVisible = true
  314. return
  315. }
  316. }else if(this.template_mode.mode == 2){
  317. if(results.length > 0) {
  318. let headers = []
  319. for (let key in results[0]) {
  320. headers.push(key)
  321. }
  322. var isHas_1 = headers.includes('区号')
  323. console.log(isHas_1)
  324. var isHas_2 = headers.includes('机号')
  325. console.log(isHas_2)
  326. var isHas_3 = headers.includes('周一')
  327. console.log(isHas_3)
  328. var isHas_4 = headers.includes('')
  329. console.log(isHas_4)
  330. var isHas_5 = headers.includes('_1')
  331. console.log(isHas_5)
  332. var isHas_6 = headers.includes('周二')
  333. console.log(isHas_6)
  334. var isHas_7 = headers.includes('_2')
  335. console.log(isHas_7)
  336. var isHas_8 = headers.includes('_3')
  337. console.log(isHas_8)
  338. var isHas_9 = headers.includes('周三')
  339. console.log(isHas_9)
  340. var isHas_10 = headers.includes('_4')
  341. console.log(isHas_1)
  342. var isHas_11 = headers.includes('_5')
  343. console.log(isHas_1)
  344. var isHas_12 = headers.includes('周四')
  345. console.log(isHas_1)
  346. var isHas_13 = headers.includes('_6')
  347. console.log(isHas_1)
  348. var isHas_14 = headers.includes('_7')
  349. console.log(isHas_1)
  350. var isHas_15 = headers.includes('周五')
  351. console.log(isHas_1)
  352. var isHas_16 = headers.includes('_8')
  353. console.log(isHas_1)
  354. var isHas_17 = headers.includes('_9')
  355. console.log(isHas_1)
  356. var isHas_18 = headers.includes('周六')
  357. console.log(isHas_1)
  358. var isHas_19 = headers.includes('_10')
  359. console.log(isHas_1)
  360. var isHas_20 = headers.includes('_11')
  361. console.log(isHas_1)
  362. var isHas_21 = headers.includes('周日')
  363. console.log(isHas_1)
  364. var isHas_22 = headers.includes('_12')
  365. console.log(isHas_1)
  366. var isHas_23 = headers.includes('_13')
  367. console.log(isHas_1)
  368. var isHas_24 = headers.includes('周一_1')
  369. var isHas_25 = headers.includes('_14')
  370. var isHas_26 = headers.includes('_15')
  371. var isHas_27 = headers.includes('周二_1')
  372. var isHas_28 = headers.includes('_16')
  373. var isHas_29 = headers.includes('_17')
  374. var isHas_30 = headers.includes('周三_1')
  375. var isHas_31 = headers.includes('_18')
  376. var isHas_32 = headers.includes('_19')
  377. var isHas_33 = headers.includes('周四_1')
  378. var isHas_34 = headers.includes('_20')
  379. var isHas_35 = headers.includes('_21')
  380. var isHas_36 = headers.includes('周五_1')
  381. var isHas_37 = headers.includes('_22')
  382. var isHas_38 = headers.includes('_23')
  383. var isHas_39 = headers.includes('周六_1')
  384. var isHas_40 = headers.includes('_24')
  385. var isHas_41 = headers.includes('_25')
  386. var isHas_42 = headers.includes('周日_1')
  387. var isHas_43 = headers.includes('_26')
  388. var isHas_44 = headers.includes('_27')
  389. if (!(isHas_1 && isHas_2 && isHas_3 && isHas_4 && isHas_5 &&
  390. isHas_6 && isHas_7 && isHas_8 && isHas_9 && isHas_10 &&
  391. isHas_11 && isHas_12 && isHas_13 && isHas_14 && isHas_15 &&
  392. isHas_16 && isHas_17 && isHas_18 && isHas_19 && isHas_20 &&
  393. isHas_21 && isHas_22 && isHas_23 && isHas_24 && isHas_25 &&
  394. isHas_26 && isHas_27 && isHas_28 && isHas_29 && isHas_30 &&
  395. isHas_31 && isHas_32 && isHas_33 && isHas_34 && isHas_35 &&
  396. isHas_36 && isHas_37 && isHas_38 && isHas_39 && isHas_40 &&
  397. isHas_41 && isHas_42 && isHas_43 && isHas_44)){
  398. this.dialogVisible = true
  399. return
  400. }
  401. }else{
  402. this.dialogVisible = true
  403. return
  404. }
  405. } else {
  406. this.dialogVisible = true
  407. return
  408. }
  409. let is_system_zone = true
  410. let is_device_number = true
  411. let zones = []
  412. let deviceNumber = []
  413. for (let i = 0; i < results.length; i++) {
  414. if (results[i + 1] && results[i + 1]['区号'] != undefined) {
  415. zones.push(results[i + 1]['区号'])
  416. }
  417. if (results[i + 1] && results[i + 1]['机号'] != undefined) {
  418. deviceNumber.push(results[i + 1]['机号'])
  419. }
  420. }
  421. const obj = {}
  422. zones = zones.reduce((cur, next) => {
  423. obj[next] ? '' : obj[next] = true && cur.push(next)
  424. return cur
  425. }, []) // 设置cur默认类型为数组,并且初始值为空的数组
  426. const obj2 = {}
  427. deviceNumber = deviceNumber.reduce((cur, next) => {
  428. obj2[next] ? '' : obj2[next] = true && cur.push(next)
  429. return cur
  430. }, []) // 设置cur默认类型为数组,并且初始值为空的数组
  431. var total_zones = []
  432. var total_device_number = []
  433. for (let key in this.partitions) {
  434. total_zones.push(this.partitions[key].name)
  435. }
  436. for (let key in this.partitions) {
  437. var jihaos = this.partitions[key].jihaos
  438. for (let i = 0; i < jihaos.length; i++) {
  439. total_device_number.push(jihaos[i].number)
  440. }
  441. }
  442. for (let i = 0; i < zones.length; i++) {
  443. if (!total_zones.includes(zones[i])) {
  444. is_system_zone = false
  445. }
  446. }
  447. for (let i = 0; i < deviceNumber.length; i++) {
  448. if (!total_device_number.includes(deviceNumber[i])) {
  449. is_device_number = false
  450. }
  451. }
  452. //
  453. let tempObj = null
  454. if (results.length > 0) {
  455. tempObj = results[0]
  456. }
  457. let datas = []
  458. for (let i = 0; i < results.length; i++) {
  459. for (let key in results[i + 1]) {
  460. let tempObjTwo = { partition_name: '', device_number_name: '' }
  461. if (key != '区号' && key != '机号') {
  462. let obj = {}
  463. obj['name'] = results[i + 1][key].replace(/\s/g,"")
  464. if (tempObj[key] == '上午') {
  465. obj['schedule_type'] = 1
  466. } else if (tempObj[key] == '下午') {
  467. obj['schedule_type'] = 2
  468. } else if (tempObj[key] == '晚上') {
  469. obj['schedule_type'] = 3
  470. } else {
  471. obj['schedule_type'] = 0
  472. }
  473. obj['schedule_week'] = this.getWeekByResultsStr(key)
  474. obj['schedule_date'] = this.getDateByResultsStr(key)
  475. obj['template_id'] = this.getTemplateByWeek(key)
  476. obj['row'] = this.getRow(key)
  477. tempObjTwo = obj
  478. }
  479. tempObjTwo['partition_name'] = results[i + 1]['区号']
  480. tempObjTwo['device_number_name'] = results[i + 1]['机号']
  481. tempObjTwo['index'] = i + 3
  482. if (tempObjTwo['schedule_week'] != undefined && tempObjTwo['name'] != undefined && tempObjTwo['schedule_type'] != undefined && tempObjTwo['schedule_date'] != undefined) {
  483. var current_date = new Date()
  484. var m_year = current_date.getFullYear()
  485. var m_month = current_date.getMonth() + 1
  486. m_month = m_month < 10 ? '0' + m_month.toString() : m_month.toString()
  487. var m_date = current_date.getDate() < 10 ? '0' + current_date.getDate().toString() : current_date.getDate().toString()
  488. var current_date_two = new Date(m_year + '-' + m_month + '-' + m_date)
  489. datas.push(tempObjTwo)
  490. }
  491. }
  492. }
  493. let date_arr = []
  494. //校验文档是否规范
  495. for (let i = 0; i < datas.length; i++) {
  496. if (datas[i].schedule_date !== '0') {
  497. date_arr.push(datas[i].schedule_date)
  498. }
  499. if (datas[i].device_number_name == undefined) {
  500. is_device_number = false
  501. }
  502. if (datas[i].partition_name == undefined) {
  503. is_system_zone = false
  504. }
  505. if (datas[i].schedule_date === '0') {
  506. is_system_zone = false
  507. }
  508. if (datas[i].schedule_week === '0') {
  509. is_system_zone = false
  510. }
  511. if (datas[i].schedule_type === 0) {
  512. is_system_zone = false
  513. }
  514. }
  515. //校验文档中同一天同个人是否存在多个排班
  516. let is_exist_repeat = false
  517. const obj3 = {}
  518. date_arr = date_arr.reduce((cur, next) => {
  519. obj3[next] ? '' : obj3[next] = true && cur.push(next)
  520. return cur
  521. }, []) // 设置cur默认类型为数组,并且初始值为空的数组
  522. let tempObjArr = []
  523. for (let i = 0; i < date_arr.length; i++) {
  524. let obj = {}
  525. let key = date_arr[i]
  526. let value = []
  527. for (let b = 0; b < datas.length; b++) {
  528. if (key == datas[b].schedule_date) {
  529. value.push(datas[b].name)
  530. }
  531. }
  532. obj[key] = value
  533. tempObjArr.push(obj)
  534. }
  535. for (let i = 0; i < tempObjArr.length; i++) {
  536. for (let key in tempObjArr[i]) {
  537. let arr = tempObjArr[i][key]
  538. const obj = {}
  539. arr = arr.reduce((cur, next) => {
  540. obj[next] ? '' : obj[next] = true && cur.push(next)
  541. return cur
  542. }, []) // 设置cur默认类型为数组,并且初始值为空的数组
  543. if (tempObjArr[i][key].length > arr.length) { //比对原数组和去重后的原数组总数,不同的话则存在重复元素
  544. is_exist_repeat = true
  545. }
  546. }
  547. }
  548. if (!is_system_zone || !is_device_number) {
  549. this.dialogVisible = true
  550. return
  551. } else {
  552. if (is_exist_repeat) {
  553. this.isExistRepeatVisible = true
  554. return
  555. } else {
  556. let params = {
  557. schedule: datas
  558. }
  559. //今天的时间
  560. var day2 = new Date()
  561. day2.setTime(day2.getTime())
  562. var month = day2.getMonth() + 1 < 10 ? '0' + (day2.getMonth() + 1).toString() : (day2.getMonth() + 1).toString()
  563. var day = day2.getDate() < 10 ? '0' + (day2.getDate()).toString() : (day2.getMonth() + 1).toString()
  564. exportScheduleTemplate(params).then(response => {
  565. if (response.data.state == 0) {
  566. return false
  567. }
  568. this.getWeekPanels()
  569. getTemplateInitData().then(rs => {
  570. var resp = rs.data
  571. if (resp.state == 1) {
  572. var mode = resp.data.template_mode
  573. var device_numbers = resp.data.device_numbers
  574. var templates = resp.data.templates
  575. var patients = resp.data.patients
  576. var schedules = resp.data.schedules
  577. this.template_mode = mode
  578. this.origin_mode = mode.mode
  579. this.device_numbers = device_numbers
  580. console.log(this.device_numbers)
  581. this.patients = patients
  582. this.first_template = templates[0]
  583. this.second_template = templates[1]
  584. var fakeTemplateItems = []
  585. for (let index = 0; index < schedules.length; index++) {
  586. const schedule = schedules[index]
  587. var item = {}
  588. this.$set(item, 'id', schedule.id)
  589. this.$set(item, 'template_id', 0)
  590. this.$set(item, 'device_number_id', schedule.bed_id)
  591. this.$set(item, 'treat_mode', schedule.mode_id)
  592. this.$set(item, 'weekday', schedule.schedule_week)
  593. this.$set(item, 'time_type', schedule.schedule_type)
  594. var patient = {}
  595. this.$set(patient, 'id', schedule.patient_id)
  596. this.$set(patient, 'name', schedule.patient)
  597. this.$set(item, 'patient', patient)
  598. fakeTemplateItems.push(item)
  599. }
  600. this.this_week_schedules.items = fakeTemplateItems
  601. } else {
  602. this.$message(resp.msg)
  603. }
  604. })
  605. })
  606. }
  607. }
  608. }, getTemplateByWeek(key) {
  609. console.log(key)
  610. switch (key) {
  611. case '周一' : //本周一
  612. return this.first_template.id
  613. break
  614. case '': //本周一
  615. return this.first_template.id
  616. break
  617. case '_1': //本周一
  618. return this.first_template.id
  619. break
  620. case '周一_1': //下周一
  621. return this.second_template.id
  622. break
  623. case '_14': //下周一
  624. return this.second_template.id
  625. break
  626. case '_15': //下周一
  627. return this.second_template.id
  628. break
  629. case '周二' : //本周二
  630. return this.first_template.id
  631. break
  632. case '_2': //本周二
  633. return this.first_template.id
  634. break
  635. case '_3': //本周二
  636. return this.first_template.id
  637. break
  638. case '周二_1'://下周二
  639. return this.second_template.id
  640. break
  641. case '_16' ://下周二
  642. return this.second_template.id
  643. break
  644. case '_17'://下周二
  645. return this.second_template.id
  646. break
  647. case '周三' : //本周三
  648. return this.first_template.id
  649. break
  650. case '_4': //本周三
  651. return this.first_template.id
  652. break
  653. case '_5': //本周三
  654. return this.first_template.id
  655. break
  656. case '周三_1': //下周三
  657. return this.second_template.id
  658. break
  659. case '_18' : //下周三
  660. return this.second_template.id
  661. break
  662. case '_19': //下周三
  663. return this.second_template.id
  664. break
  665. case '周四':
  666. return this.first_template.id
  667. break
  668. case '_6' :
  669. return this.first_template.id
  670. break
  671. case '_7':
  672. return this.first_template.id
  673. break
  674. case '周四_1':
  675. return this.second_template.id
  676. break
  677. case '_20' :
  678. return this.second_template.id
  679. break
  680. case '_21':
  681. return this.second_template.id
  682. break
  683. case '周五':
  684. return this.first_template.id
  685. break
  686. case '_8':
  687. return this.first_template.id
  688. break
  689. case '_9':
  690. return this.first_template.id
  691. break
  692. case '周五_1' :
  693. return this.second_template.id
  694. break
  695. case '_22' :
  696. return this.second_template.id
  697. break
  698. case '_23':
  699. return this.second_template.id
  700. break
  701. case '周六' :
  702. return this.first_template.id
  703. break
  704. case '_10' :
  705. return this.first_template.id
  706. break
  707. case '_11':
  708. return this.first_template.id
  709. break
  710. case '周六_1' :
  711. return this.second_template.id
  712. break
  713. case '_24' :
  714. return this.second_template.id
  715. break
  716. case '_25':
  717. return this.second_template.id
  718. break
  719. break
  720. case '周日' :
  721. return this.first_template.id
  722. break
  723. case '_12' :
  724. return this.first_template.id
  725. break
  726. case '_13':
  727. return this.first_template.id
  728. break
  729. case '周日_1' :
  730. return this.second_template.id
  731. break
  732. case '_26' :
  733. return this.second_template.id
  734. break
  735. case '_27':
  736. return this.second_template.id
  737. break
  738. }
  739. },
  740. getWeekByResultsStr(key) {
  741. switch (key) {
  742. case '周一':
  743. return '1'
  744. break
  745. case '周一_1':
  746. return '1'
  747. break
  748. case '周一_2':
  749. return '1'
  750. break
  751. case '':
  752. return '1'
  753. break
  754. case '_1':
  755. return '1'
  756. break
  757. case '_14':
  758. return '1'
  759. break
  760. case '_15':
  761. return '1'
  762. break
  763. case '_28':
  764. return '1'
  765. break
  766. case '_29':
  767. return '1'
  768. break
  769. case '周二' :
  770. return '2'
  771. break
  772. case '周二_1':
  773. return '2'
  774. break
  775. case '周二_2' :
  776. return '2'
  777. break
  778. case '_2':
  779. return '2'
  780. break
  781. case '_3':
  782. return '2'
  783. break
  784. case '_16' :
  785. return '2'
  786. break
  787. case '_17' :
  788. return '2'
  789. break
  790. case '_30':
  791. return '2'
  792. break
  793. case '_31':
  794. return '2'
  795. break
  796. case '周三':
  797. return '3'
  798. break
  799. case '周三_1':
  800. return '3'
  801. break
  802. case '周三_2':
  803. return '3'
  804. break
  805. case '_4' :
  806. return '3'
  807. break
  808. case '_5' :
  809. return '3'
  810. break
  811. case '_18' :
  812. return '3'
  813. break
  814. case '_19' :
  815. return '3'
  816. break
  817. case '_32' :
  818. return '3'
  819. break
  820. case '_33' :
  821. return '3'
  822. break
  823. case '周四':
  824. return '4'
  825. break
  826. case '周四_1' :
  827. return '4'
  828. break
  829. case'周四_2' :
  830. return '4'
  831. break
  832. case '_6' :
  833. return '4'
  834. break
  835. case '_7':
  836. return '4'
  837. break
  838. case '_20':
  839. return '4'
  840. break
  841. case '_21':
  842. return '4'
  843. break
  844. case '_34':
  845. return '4'
  846. break
  847. case '_35':
  848. return '4'
  849. break
  850. case '周五' :
  851. return '5'
  852. break
  853. case '周五_1':
  854. return '5'
  855. break
  856. case '周五_2' :
  857. return '5'
  858. break
  859. case '_8':
  860. return '5'
  861. break
  862. case '_9' :
  863. return '5'
  864. break
  865. case '_22' :
  866. return '5'
  867. break
  868. case '_23':
  869. return '5'
  870. break
  871. case '_36':
  872. return '5'
  873. break
  874. case '_37':
  875. return '5'
  876. break
  877. case '周六':
  878. return '6'
  879. break
  880. case '周六_1':
  881. return '6'
  882. break
  883. case '周六_2' :
  884. return '6'
  885. break
  886. case '_10' :
  887. return '6'
  888. break
  889. case '_11':
  890. return '6'
  891. break
  892. case '_24' :
  893. return '6'
  894. break
  895. case '_25' :
  896. return '6'
  897. break
  898. case '_38' :
  899. return '6'
  900. break
  901. case '_39':
  902. return '6'
  903. break
  904. case '周日':
  905. return '7'
  906. break
  907. case '周日_1' :
  908. return '7'
  909. break
  910. case '周日_2' :
  911. return '7'
  912. break
  913. case '_12' :
  914. return '7'
  915. break
  916. case '_13' :
  917. return '7'
  918. break
  919. case '_26':
  920. return '7'
  921. break
  922. case '_27':
  923. return '7'
  924. break
  925. case '_40' :
  926. return '7'
  927. break
  928. case '_41':
  929. return '7'
  930. break
  931. default:
  932. return '0'
  933. break
  934. }
  935. },
  936. getRow(key) {
  937. switch (key) {
  938. case '周一' : //本周一
  939. return 'C'
  940. break
  941. case '': //本周一
  942. return 'D'
  943. break
  944. case '_1': //本周一
  945. return 'E'
  946. break
  947. case '周一_1': //下周一
  948. return 'X'
  949. break
  950. case '_14': //下周一
  951. return 'Y'
  952. break
  953. case '_15': //下周一
  954. return 'Z'
  955. break
  956. case '周一_2' : //下下周一
  957. return 'AS'
  958. break
  959. case '_28': //下下周一
  960. return 'AT'
  961. break
  962. case '_29': //下下周一
  963. return 'AU'
  964. break
  965. case '周二' : //本周二
  966. return 'F'
  967. break
  968. case '_2': //本周二
  969. return 'G'
  970. break
  971. case '_3': //本周二
  972. return 'H'
  973. break
  974. case '周二_1'://下周二
  975. return 'AA'
  976. break
  977. case '_16' ://下周二
  978. return 'AB'
  979. break
  980. case '_17'://下周二
  981. return 'AC'
  982. break
  983. case '周二_2' ://下下周二
  984. return 'AV'
  985. break
  986. case '_30' ://下下周二
  987. return 'AW'
  988. break
  989. case '_31'://下下周二
  990. return 'AX'
  991. break
  992. case '周三' : //本周三
  993. return 'I'
  994. break
  995. case '_4': //本周三
  996. return 'J'
  997. break
  998. case '_5': //本周三
  999. return 'K'
  1000. break
  1001. case '周三_1': //下周三
  1002. return 'AD'
  1003. break
  1004. case '_18' : //下周三
  1005. return 'AE'
  1006. break
  1007. case '_19': //下周三
  1008. return 'AF'
  1009. break
  1010. case '周三_2' : //下下周三
  1011. return 'AY'
  1012. break
  1013. case '_32' : //下下周三
  1014. return 'AZ'
  1015. break
  1016. case '_33': //下下周三
  1017. return 'BA'
  1018. break
  1019. case '周四':
  1020. return 'L'
  1021. break
  1022. case '_6' :
  1023. return 'M'
  1024. break
  1025. case '_7':
  1026. return 'N'
  1027. break
  1028. case '周四_1':
  1029. return 'AG'
  1030. break
  1031. case '_20' :
  1032. return 'AH'
  1033. break
  1034. case '_21':
  1035. return 'AI'
  1036. break
  1037. case '周四_2' :
  1038. return 'BB'
  1039. break
  1040. case '_34':
  1041. return 'BC'
  1042. break
  1043. case '_35':
  1044. return 'BD'
  1045. break
  1046. case '周五':
  1047. return 'O'
  1048. break
  1049. case '_8':
  1050. return 'P'
  1051. break
  1052. case '_9':
  1053. return 'Q'
  1054. break
  1055. case '周五_1' :
  1056. return 'AJ'
  1057. break
  1058. case '_22' :
  1059. return 'AK'
  1060. break
  1061. case '_23':
  1062. return 'AL'
  1063. break
  1064. case '周五_2' :
  1065. return 'BE'
  1066. break
  1067. case '_36':
  1068. return 'BF'
  1069. break
  1070. case '_37':
  1071. return 'BG'
  1072. break
  1073. case '周六' :
  1074. return 'R'
  1075. break
  1076. case '_10' :
  1077. return 'S'
  1078. break
  1079. case '_11':
  1080. return 'T'
  1081. break
  1082. case '周六_1' :
  1083. return 'AM'
  1084. break
  1085. case '_24' :
  1086. return 'AN'
  1087. break
  1088. case '_25':
  1089. return 'AO'
  1090. break
  1091. case '周六_2' :
  1092. return 'BH'
  1093. break
  1094. case '_38' :
  1095. return 'BI'
  1096. break
  1097. case '_39':
  1098. return 'BJ'
  1099. break
  1100. case '周日' :
  1101. return 'U'
  1102. break
  1103. case '_12' :
  1104. return 'V'
  1105. break
  1106. case '_13':
  1107. return 'W'
  1108. break
  1109. case '周日_1' :
  1110. return 'AP'
  1111. break
  1112. case '_26' :
  1113. return 'AQ'
  1114. break
  1115. case '_27':
  1116. return 'AR'
  1117. break
  1118. case '周日_2':
  1119. return 'BK'
  1120. break
  1121. case '_40':
  1122. return 'BL'
  1123. break
  1124. case '_41':
  1125. return 'BM'
  1126. break
  1127. }
  1128. },
  1129. getDateByResultsStr(key) {
  1130. switch (key) {
  1131. case '周一' : //本周一
  1132. return this.days[0]
  1133. break
  1134. case '': //本周一
  1135. return this.days[0]
  1136. break
  1137. case '_1': //本周一
  1138. return this.days[0]
  1139. break
  1140. case '周一_1': //下周一
  1141. return this.days[7]
  1142. break
  1143. case '_14': //下周一
  1144. return this.days[7]
  1145. break
  1146. case '_15': //下周一
  1147. return this.days[7]
  1148. break
  1149. case '周一_2' : //下下周一
  1150. return this.days[14]
  1151. break
  1152. case '_28': //下下周一
  1153. return this.days[14]
  1154. break
  1155. case '_29': //下下周一
  1156. return this.days[14]
  1157. break
  1158. case '周二' : //本周二
  1159. return this.days[1]
  1160. break
  1161. case '_2': //本周二
  1162. return this.days[1]
  1163. break
  1164. case '_3': //本周二
  1165. return this.days[1]
  1166. break
  1167. case '周二_1'://下周二
  1168. return this.days[8]
  1169. break
  1170. case '_16' ://下周二
  1171. return this.days[8]
  1172. break
  1173. case '_17'://下周二
  1174. return this.days[8]
  1175. break
  1176. case '周二_2' ://下下周二
  1177. return this.days[15]
  1178. break
  1179. case '_30' ://下下周二
  1180. return this.days[15]
  1181. break
  1182. case '_31'://下下周二
  1183. return this.days[15]
  1184. break
  1185. case '周三' : //本周三
  1186. return this.days[2]
  1187. break
  1188. case '_4': //本周三
  1189. return this.days[2]
  1190. break
  1191. case '_5': //本周三
  1192. return this.days[2]
  1193. break
  1194. case '周三_1': //下周三
  1195. return this.days[9]
  1196. break
  1197. case '_18' : //下周三
  1198. return this.days[9]
  1199. break
  1200. case '_19': //下周三
  1201. return this.days[9]
  1202. break
  1203. case '周三_2' : //下下周三
  1204. return this.days[16]
  1205. break
  1206. case '_32' : //下下周三
  1207. return this.days[16]
  1208. break
  1209. case '_33': //下下周三
  1210. return this.days[16]
  1211. break
  1212. case '周四':
  1213. return this.days[3]
  1214. break
  1215. case '_6' :
  1216. return this.days[4]
  1217. break
  1218. case '_7':
  1219. return this.days[4]
  1220. break
  1221. case '周四_1':
  1222. return this.days[10]
  1223. break
  1224. case '_20' :
  1225. return this.days[10]
  1226. break
  1227. case '_21':
  1228. return this.days[10]
  1229. break
  1230. case '周四_2' :
  1231. return this.days[17]
  1232. break
  1233. case '_34':
  1234. return this.days[17]
  1235. break
  1236. case '_35':
  1237. return this.days[17]
  1238. break
  1239. case '周五':
  1240. return this.days[4]
  1241. break
  1242. case '_8':
  1243. return this.days[4]
  1244. break
  1245. case '_9':
  1246. return this.days[4]
  1247. break
  1248. case '周五_1' :
  1249. return this.days[11]
  1250. break
  1251. case '_22' :
  1252. return this.days[11]
  1253. break
  1254. case '_23':
  1255. return this.days[11]
  1256. break
  1257. case '周五_2' :
  1258. return this.days[18]
  1259. break
  1260. case '_36':
  1261. return this.days[18]
  1262. break
  1263. case '_37':
  1264. return this.days[18]
  1265. break
  1266. case '周六' :
  1267. return this.days[5]
  1268. break
  1269. case '_10' :
  1270. return this.days[5]
  1271. break
  1272. case '_11':
  1273. return this.days[5]
  1274. break
  1275. case '周六_1' :
  1276. return this.days[12]
  1277. break
  1278. case '_24' :
  1279. return this.days[12]
  1280. break
  1281. case '_25':
  1282. return this.days[12]
  1283. break
  1284. case '周六_2' :
  1285. return this.days[19]
  1286. break
  1287. case '_38' :
  1288. return this.days[19]
  1289. break
  1290. case '_39':
  1291. return this.days[19]
  1292. break
  1293. case '周日' :
  1294. return this.days[6]
  1295. break
  1296. case '_12' :
  1297. return this.days[6]
  1298. break
  1299. case '_13':
  1300. return this.days[6]
  1301. break
  1302. case '周日_1' :
  1303. return this.days[13]
  1304. break
  1305. case '_26' :
  1306. return this.days[13]
  1307. break
  1308. case '_27':
  1309. return this.days[13]
  1310. break
  1311. case '周日_2':
  1312. return this.days[20]
  1313. break
  1314. case '_40':
  1315. return this.days[20]
  1316. break
  1317. case '_41':
  1318. return this.days[20]
  1319. break
  1320. default:
  1321. return '0'
  1322. break
  1323. }
  1324. },
  1325. getWeekPanels() {
  1326. getWeekPanels(1).then(response => {
  1327. if (response.data.state == 0) {
  1328. return false
  1329. }
  1330. var partitions = response.data.data.partitions
  1331. var that = this
  1332. if (partitions.length > 0) {
  1333. partitions.forEach(function(partition) {
  1334. if (partition.jihaos.length == 0) {
  1335. return false
  1336. }
  1337. that.partitions[partition.id] = partition
  1338. partition.jihaos.forEach(function(jihao) {
  1339. var thisPa = {
  1340. area: partition.name,
  1341. zone_id: partition.id,
  1342. zone_type: partition.type,
  1343. cut: jihao.number,
  1344. jihao_id: jihao.id,
  1345. Mon_M: {
  1346. schedule_id: 0,
  1347. mode_id: 0,
  1348. mode_name: '',
  1349. patient_id: 0,
  1350. patient: ''
  1351. },
  1352. Mon_A: {
  1353. schedule_id: 0,
  1354. mode_id: 0,
  1355. mode_name: '',
  1356. patient_id: 0,
  1357. patient: ''
  1358. },
  1359. Mon_N: {
  1360. schedule_id: 0,
  1361. mode_id: 0,
  1362. mode_name: '',
  1363. patient_id: 0,
  1364. patient: ''
  1365. },
  1366. Tue_M: {
  1367. schedule_id: 0,
  1368. mode_id: 0,
  1369. mode_name: '',
  1370. patient_id: 0,
  1371. patient: ''
  1372. },
  1373. Tue_A: {
  1374. schedule_id: 0,
  1375. mode_id: 0,
  1376. mode_name: '',
  1377. patient_id: 0,
  1378. patient: ''
  1379. },
  1380. Tue_N: {
  1381. schedule_id: 0,
  1382. mode_id: 0,
  1383. mode_name: '',
  1384. patient_id: 0,
  1385. patient: ''
  1386. },
  1387. Wed_M: {
  1388. schedule_id: 0,
  1389. mode_id: 0,
  1390. mode_name: '',
  1391. patient_id: 0,
  1392. patient: ''
  1393. },
  1394. Wed_A: {
  1395. schedule_id: 0,
  1396. mode_id: 0,
  1397. mode_name: '',
  1398. patient_id: 0,
  1399. patient: ''
  1400. },
  1401. Wed_N: {
  1402. schedule_id: 0,
  1403. mode_id: 0,
  1404. mode_name: '',
  1405. patient_id: 0,
  1406. patient: ''
  1407. },
  1408. Thurs_M: {
  1409. schedule_id: 0,
  1410. mode_id: 0,
  1411. mode_name: '',
  1412. patient_id: 0,
  1413. patient: ''
  1414. },
  1415. Thurs_A: {
  1416. schedule_id: 0,
  1417. mode_id: 0,
  1418. mode_name: '',
  1419. patient_id: 0,
  1420. patient: ''
  1421. },
  1422. Thurs_N: {
  1423. schedule_id: 0,
  1424. mode_id: 0,
  1425. mode_name: '',
  1426. patient_id: 0,
  1427. patient: ''
  1428. },
  1429. Fri_M: {
  1430. schedule_id: 0,
  1431. mode_id: 0,
  1432. mode_name: '',
  1433. patient_id: 0,
  1434. patient: ''
  1435. },
  1436. Fri_A: {
  1437. schedule_id: 0,
  1438. mode_id: 0,
  1439. mode_name: '',
  1440. patient_id: 0,
  1441. patient: ''
  1442. },
  1443. Fri_N: {
  1444. schedule_id: 0,
  1445. mode_id: 0,
  1446. mode_name: '',
  1447. patient_id: 0,
  1448. patient: ''
  1449. },
  1450. Sat_M: {
  1451. schedule_id: 0,
  1452. mode_id: 0,
  1453. mode_name: '',
  1454. patient_id: 0,
  1455. patient: ''
  1456. },
  1457. Sat_A: {
  1458. schedule_id: 0,
  1459. mode_id: 0,
  1460. mode_name: '',
  1461. patient_id: 0,
  1462. patient: ''
  1463. },
  1464. Sat_N: {
  1465. schedule_id: 0,
  1466. mode_id: 0,
  1467. mode_name: '',
  1468. patient_id: 0,
  1469. patient: ''
  1470. },
  1471. Sun_A: {
  1472. schedule_id: 0,
  1473. mode_id: 0,
  1474. mode_name: '',
  1475. patient_id: 0,
  1476. patient: ''
  1477. },
  1478. Sun_N: {
  1479. schedule_id: 0,
  1480. mode_id: 0,
  1481. mode_name: '',
  1482. patient_id: 0,
  1483. patient: ''
  1484. },
  1485. Sun_M: {
  1486. schedule_id: 0,
  1487. mode_id: 0,
  1488. mode_name: '',
  1489. patient_id: 0,
  1490. patient: ''
  1491. },
  1492. total: 0
  1493. }
  1494. })
  1495. })
  1496. }
  1497. })
  1498. },
  1499. setScheduleTemplateAction: function() {
  1500. this.$refs.setup_dialog.show()
  1501. },
  1502. didChangeTemplateMode: function(mode) {
  1503. if (this.origin_mode != mode) {
  1504. if (this.origin_mode == 0) { // 0 -> 1 或 0 -> 2
  1505. // 不处理模板 item
  1506. } else if (mode == 0) { // 1 -> 0 或 2 -> 0 清除所有模板的 item
  1507. this.first_template.items.splice(0, this.first_template.items.length)
  1508. this.second_template.items.splice(0, this.second_template.items.length)
  1509. if (this.activeName != 'schedules') {
  1510. this.activeName = 'schedules'
  1511. }
  1512. } else if (this.origin_mode == 1 && mode == 2) { // 1 -> 2
  1513. // 不处理模板 item
  1514. } else if (this.origin_mode == 2 && mode == 1) { // 2 -> 1 清除第二个模板的 item
  1515. this.second_template.items.splice(0, this.second_template.items.length)
  1516. if (this.activeName == 'second') {
  1517. this.activeName = 'schedules'
  1518. }
  1519. }
  1520. this.origin_mode = mode
  1521. }
  1522. }, formatJson(filterVal, jsonData) {
  1523. return jsonData.map(v =>
  1524. filterVal.map(j => {
  1525. return v[j]
  1526. })
  1527. )
  1528. }, import_file: function() {
  1529. this.downloadLoading = true
  1530. import('@/vendor/Export2Excel').then(excel => {
  1531. const filterVal = [
  1532. '区号',
  1533. '机号'
  1534. ]
  1535. const multiHeaderForModeOne = [['区号', '机号', '周一', '', '', '周二', '', '', '周三', '', '', '周四', '', '', '周五', '', '', '周六', '', '', '周日', '', '']]
  1536. const multiHeaderForModeTwo = [['区号', '机号', '周一', '', '', '周二', '', '', '周三', '', '', '周四', '', '', '周五', '', '', '周六', '', '', '周日', '', '', '周一', '', '', '周二', '', '', '周三', '', '', '周四', '', '', '周五', '', '', '周六', '', '', '周日', '', '']]
  1537. const headerForModeOne = ['', '', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上']
  1538. const headerForModeTwo = ['', '', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上', '上午', '下午', '晚上']
  1539. // const merges = ['A1:A2', 'B1:B2']
  1540. 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']
  1541. var list = []
  1542. let i = 0
  1543. for (let key in this.partitions) {
  1544. var tempValue
  1545. var jihaos = this.partitions[key].jihaos
  1546. if (i == 0) {
  1547. let m = 'A3' + ':' + 'A' + (2 + jihaos.length)
  1548. tempValue = (2 + jihaos.length)
  1549. merges.push(m)
  1550. } else {
  1551. let m = 'A' + (tempValue + 1) + ':' + 'A' + ((tempValue + 1) + jihaos.length - 1)
  1552. tempValue = ((tempValue + 1) + jihaos.length - 1)
  1553. merges.push(m)
  1554. }
  1555. for (let b = 0; b < jihaos.length; b++) {
  1556. let obj = {}
  1557. obj['区号'] = this.partitions[key].name
  1558. obj['机号'] = jihaos[b].number.toString()
  1559. list.push(obj)
  1560. }
  1561. i++
  1562. }
  1563. const data = this.formatJson(filterVal, list)
  1564. const filename = "排班模版"
  1565. // excel.export_json_to_excel({
  1566. // multiHeaderForModeOne,
  1567. // headerForModeOne,
  1568. // merges,
  1569. // data
  1570. // })
  1571. if (this.template_mode.mode == 1) {
  1572. let multiHeader = multiHeaderForModeOne
  1573. let header = headerForModeOne
  1574. excel.export_json_to_excel({
  1575. multiHeader,
  1576. header,
  1577. merges,
  1578. data,
  1579. filename
  1580. })
  1581. } else if (this.template_mode.mode == 2) {
  1582. let multiHeader = multiHeaderForModeTwo
  1583. let header = headerForModeTwo
  1584. excel.export_json_to_excel({
  1585. multiHeader,
  1586. header,
  1587. merges,
  1588. data,
  1589. filename
  1590. })
  1591. }
  1592. this.downloadLoading = false
  1593. })
  1594. }
  1595. }
  1596. }
  1597. </script>
  1598. <style scoped>
  1599. </style>