dialog.add.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372
  1. <template>
  2. <div class="question-infos">
  3. <DialogCom title="新增作息" @close="handleClose" :visible.sync="isShow" :close-on-click-modal="false"
  4. custom-class="gxDialog" width="1320px" append-to-body>
  5. <!-- <div class="p-5 work-time">-->
  6. <el-form label-width="90px" label-suffix="" label-position="right">
  7. <el-form-item label="分配机构">
  8. <org-tree-select ref="orgTreeSelect" :checkShow="true" v-model="orgIdList"></org-tree-select>
  9. </el-form-item >
  10. <el-form-item label="调整日期">
  11. <el-button type="primary" @click="addData">新增日期</el-button>
  12. </el-form-item>
  13. <!-- -->
  14. <el-form-item label="作息规则">
  15. <el-table class="w-auto" height="350" border :data="workTimeList">
  16. <el-table-column label="日期" width="160">
  17. <template slot-scope="r" >
  18. <el-date-picker
  19. style="width: 100%"
  20. v-model="r.row.ymdDate"
  21. size="mini"
  22. :clearable=false
  23. popper-class="no-atTheMoment"
  24. :picker-options="startDatepickerOptions"
  25. type="date"
  26. placeholder="请选择日期">
  27. </el-date-picker>
  28. </template>
  29. </el-table-column>
  30. <el-table-column label="星期" width="80">
  31. <template slot-scope="r">
  32. <span>{{parseTime(r.row.ymdDate ,'dddd')}}</span>
  33. </template>
  34. </el-table-column>
  35. <el-table-column label="状态" width="160">
  36. <template slot-scope="r">
  37. <!-- <el-switch-->
  38. <!-- v-model="r.row.isEnable"-->
  39. <!-- :active-value="1"-->
  40. <!-- :inactive-value="0"-->
  41. <!-- @change="onEnableChange(r.row)"-->
  42. <!-- active-text="营业"-->
  43. <!-- inactive-text="歇业">-->
  44. <!-- </el-switch>-->
  45. <el-radio-group
  46. :disabled="r.row.disabled"
  47. v-model="r.row.isEnable"
  48. @change="onEnableChange(r.row)">
  49. <el-radio text-color="#48bb78" :label="1">营业</el-radio>
  50. <el-radio text-color="#f56565" :label="0">歇业</el-radio>
  51. </el-radio-group>
  52. </template>
  53. </el-table-column>
  54. <el-table-column label="是否值班打卡" width="160">
  55. <template slot-scope="r">
  56. <el-switch
  57. v-model="r.row.isDuty"
  58. :active-value="1"
  59. :inactive-value="0"
  60. @change="onEnableChange(r.row)"
  61. active-text="是"
  62. inactive-text="否">
  63. </el-switch>
  64. <!-- <el-radio-group-->
  65. <!-- :disabled="r.row.disabled"-->
  66. <!-- v-model="r.row.isEnable"-->
  67. <!-- @change="onEnableChange(r.row)">-->
  68. <!-- <el-radio text-color="#48bb78" :label="1">营业</el-radio>-->
  69. <!-- <el-radio text-color="#f56565" :label="0">歇业</el-radio>-->
  70. <!-- </el-radio-group>-->
  71. </template>
  72. </el-table-column>
  73. <el-table-column label="上班时间" width="120">
  74. <template slot-scope="r">
  75. <el-time-select
  76. style="width: 100%"
  77. size="mini"
  78. :picker-options="pickerOptions"
  79. :disabled="r.row.disabled || !r.row.isEnable"
  80. v-model="r.row.workTime"/>
  81. </template>
  82. </el-table-column>
  83. <el-table-column label="营业开始" width="120">
  84. <template slot-scope="r">
  85. <el-time-select
  86. style="width: 100%;"
  87. size="mini"
  88. :picker-options="pickerOptions"
  89. :disabled="r.row.disabled || !r.row.isEnable"
  90. v-model="r.row.openTime"/>
  91. </template>
  92. </el-table-column>
  93. <!-- <el-table-column label="午休开始">-->
  94. <!-- <template slot-scope="r">-->
  95. <!-- <el-time-select-->
  96. <!-- style="width: 100%"-->
  97. <!-- size="mini"-->
  98. <!-- :picker-options="pickerOptions"-->
  99. <!-- :disabled="r.row.disabled || !r.row.isEnable"-->
  100. <!-- v-model="r.row.noonbreakStart"/>-->
  101. <!-- </template>-->
  102. <!-- </el-table-column>-->
  103. <!-- <el-table-column label="午休结束">-->
  104. <!-- <template slot-scope="r">-->
  105. <!-- <el-time-select-->
  106. <!-- style="width: 100%"-->
  107. <!-- size="mini"-->
  108. <!-- :picker-options="pickerOptions"-->
  109. <!-- :disabled="r.row.disabled || !r.row.isEnable"-->
  110. <!-- v-model="r.row.noonbreakEnd"/>-->
  111. <!-- </template>-->
  112. <!-- </el-table-column>-->
  113. <el-table-column label="营业结束" width="120">
  114. <template slot-scope="r">
  115. <el-time-select
  116. style="width: 100%"
  117. size="mini"
  118. :picker-options="pickerOptions"
  119. :disabled="r.row.disabled || !r.row.isEnable"
  120. v-model="r.row.closeTime"/>
  121. </template>
  122. </el-table-column>
  123. <el-table-column label="下班时间" width="120">
  124. <template slot-scope="r">
  125. <el-time-select
  126. style="width: 100%"
  127. size="mini"
  128. :picker-options="pickerOptions"
  129. :disabled="r.row.disabled || !r.row.isEnable"
  130. v-model="r.row.workOffTime"/>
  131. </template>
  132. </el-table-column>
  133. <el-table-column label="操作列表" width="140">
  134. <template slot-scope="r">
  135. <btn-tip type="text" @click="deleteData(r.row,r.$index)">删除</btn-tip>
  136. <el-button type="text" @click="coppy(r.$index)">复制至全部</el-button>
  137. </template>
  138. </el-table-column>
  139. </el-table>
  140. </el-form-item>
  141. </el-form>
  142. <!-- </div>-->
  143. <div slot="footer" class="dialog-footer">
  144. <btn-tip tip="确定要提交吗?" type="primary" @click="onSubmit">保存</btn-tip>
  145. <el-button @click="handleClose">取消</el-button>
  146. </div>
  147. </DialogCom>
  148. </div>
  149. </template>
  150. <script>
  151. import OrgTreeSelect from '@/components/orgTreeSelect'
  152. import BtnTip from "@/components/btnTip";
  153. import dayjs from "dayjs";
  154. import {formatTime, timeCheck} from "@/utils/ruoyi";
  155. import {addWorkTimeDay} from "@/views/system/workTimeSet/api";
  156. import day from "@/components/Crontab/day";
  157. export default {
  158. components:{OrgTreeSelect,BtnTip},
  159. data() {
  160. return {
  161. selectTreeStrictly: true,
  162. isShow: false,
  163. workTimeList: [],
  164. orgIdList: [],
  165. nodes:[],
  166. startDatepickerOptions: {
  167. disabledDate(time) {
  168. const date = new Date();
  169. date.setTime(date.getTime()- 3600 * 1000 * 24 );
  170. return time.getTime() < date;
  171. },
  172. },
  173. };
  174. },
  175. props: {},
  176. watch: {
  177. },
  178. computed: {
  179. pickerOptions() {
  180. return {
  181. start: "00:00",
  182. end: "24:00",
  183. step: "00:05",
  184. };
  185. },
  186. },
  187. methods: {
  188. // queryNode(nodes){
  189. // console.log(JSON.parse(nodes),'nodes')
  190. // this.orgIdList = JSON.parse(nodes).map(v=>{return v.id});
  191. // },
  192. add(){
  193. this.isShow = true;
  194. },
  195. async refresh() {
  196. },
  197. reset() {
  198. return {
  199. workTimeList:[]
  200. };
  201. },
  202. addData(){
  203. //获取workTimeList最后一条数据
  204. let workTime = {
  205. isEnable: 1,
  206. workTime: '08:30',
  207. openTime: '09:00',
  208. // noonbreakStart: '12:00',
  209. // noonbreakEnd: '14:00',
  210. closeTime: '17:00',
  211. workOffTime: '17:30',
  212. isDuty:'0',
  213. ymdDate: new Date(),
  214. disabled: false,
  215. };
  216. if(this.workTimeList.length>0){
  217. if(this.workTimeList[this.workTimeList.length-1].ymdDate!=null){
  218. workTime.ymdDate = dayjs(this.workTimeList[this.workTimeList.length-1].ymdDate).add(1,'day').toDate()
  219. }
  220. }
  221. this.workTimeList.push(workTime);
  222. console.log("addData",this.workTimeList);
  223. },
  224. coppy(index){
  225. let workTime = this.workTimeList[index];
  226. for(let i=0;i<this.workTimeList.length;i++){
  227. this.workTimeList[i].isEnable = workTime.isEnable;
  228. // this.workTimeList[i].workTime = workTime.workTime;
  229. this.workTimeList[i].openTime = workTime.openTime;
  230. // this.workTimeList[i].noonbreakStart = workTime.noonbreakStart;
  231. // this.workTimeList[i].noonbreakEnd = workTime.noonbreakEnd;
  232. this.workTimeList[i].closeTime = workTime.closeTime;
  233. // this.workTimeList[i].workOffTime = workTime.workOffTime;
  234. }
  235. },
  236. deleteData(row,index){
  237. console.log(index);
  238. this.workTimeList.splice(index,1);
  239. },
  240. //检查每一项
  241. check(other) {
  242. if(!other.ymdDate){
  243. this.$message.warning(`日期不能为空`);
  244. return;
  245. }
  246. const ds = this.formatTime(other.ymdDate,"YYYY-MM-DD");
  247. console.log(other,'ds')
  248. if ( !other.isEnable === null && !other.disabled ) {
  249. this.$message.warning(`${ds}:未进行配置`);
  250. return;
  251. }
  252. if(other.isEnable){
  253. if(!other.openTime || !other.closeTime){
  254. this.$message.warning(`${ds}:未配置时间`);
  255. return;
  256. }
  257. if(!timeCheck([other.openTime,other.closeTime])){
  258. this.$message.warning(`${ds}:营业开始时间应在营业结束之前`);
  259. return false;
  260. }
  261. }
  262. return true
  263. // if (other.isEnable) {
  264. // if (
  265. // !(
  266. // other.workTime &&
  267. // other.openTime &&
  268. // other.closeTime &&
  269. // other.workOffTime
  270. // )
  271. // ) {
  272. // this.$message.error(`${ds}未配置时间`);
  273. // return;
  274. // }
  275. // if (!other.noonbreakStart ^ !other.noonbreakEnd) {
  276. // this.$message.error(`午休开始及结束时间必须同时配置`);
  277. // return;
  278. // }
  279. // if (
  280. // !timeCheck([
  281. // other.workTime,
  282. // other.openTime,
  283. // other.noonbreakStart,
  284. // other.noonbreakEnd,
  285. // other.closeTime,
  286. // other.workOffTime,
  287. // ])
  288. // ) {
  289. // this.$message.error(
  290. // `${ds}上班时间<=营业时间<=午休开始<=午休结束<=营业终了<=下班时间`
  291. // );
  292. // return false;
  293. // }
  294. // }
  295. // return true;
  296. },
  297. handleClose() {
  298. this.isShow = false;
  299. this.workTimeList = [];
  300. this.orgIdList=[];
  301. this.$refs['orgTreeSelect'].clear();
  302. },
  303. onEnableChange(workTime) {
  304. if (!workTime.isEnable) {
  305. workTime.openTime = null;
  306. workTime.closeTime = null;
  307. // workTime.noonbreakStart = null;
  308. // workTime.noonbreakEnd = null;
  309. // workTime.workTime = null;
  310. // workTime.workOffTime = null;
  311. }
  312. },
  313. async onSubmit() {
  314. if(this.orgIdList.length === 0)return this.$message.warning('请选择机构!');
  315. if(this.workTimeList.length === 0)return this.$message.warning('请添加日期!');
  316. //判断是否有重复的日期
  317. let dateList = [];
  318. let workTimeList = JSON.parse(JSON.stringify(this.workTimeList))
  319. for (let v of workTimeList) {
  320. if (v.ymdDate) {
  321. let date = this.formatTime(v.ymdDate,"YYYY-MM-DD");
  322. if (dateList.indexOf(date) > -1) {
  323. this.$message.error(`日期: ${date} 重复`);
  324. return;
  325. }
  326. dateList.push(date);
  327. }
  328. }
  329. // 校验
  330. for (let workTime of workTimeList) {
  331. if (!this.check(workTime)) {
  332. return;
  333. }
  334. }
  335. let data = {
  336. orgIdList:this.orgIdList,
  337. workTimeList:workTimeList
  338. }
  339. addWorkTimeDay(data).then(res=>{
  340. this.$emit("ok");
  341. this.handleClose();
  342. })
  343. },
  344. },
  345. };
  346. </script>
  347. <style lang="scss" scoped>
  348. .question-infos {
  349. .el-form {
  350. padding-top: 10px;
  351. }
  352. }
  353. .el-rate {
  354. margin-top: 6px;
  355. }
  356. .change-icon {
  357. font-size: 18px;
  358. }
  359. </style>