dialog.add.vue 12 KB

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