workSchedule-detail.vue 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. <style scoped>
  2. .user-panel {
  3. margin: 10px auto;
  4. }
  5. </style>
  6. <template>
  7. <el-dialog
  8. :visible.sync="showDialog"
  9. :title="title"
  10. :modal-append-to-body="false"
  11. style="text-align: left"
  12. @close="closeDialog"
  13. :close-on-click-modal="false"
  14. >
  15. <div class="user-panel" v-loading="loading">
  16. <el-form
  17. ref="form"
  18. :model="formModel"
  19. :rules="ruleValidate"
  20. :label-width="'120px'"
  21. >
  22. <el-form-item label="企业名称" prop="companyId">
  23. <el-select-tree
  24. :props="companyProps"
  25. :options="companyResult"
  26. v-model="formModel.companyId"
  27. style="width: 300px"
  28. size="mediumn"
  29. ></el-select-tree>
  30. </el-form-item>
  31. <el-form-item label="班次名称" prop="name">
  32. <el-input
  33. v-model="formModel.name"
  34. placeholder="请输入班次名称"
  35. style="width: 300px"
  36. ></el-input>
  37. </el-form-item>
  38. <el-form-item label="周工作日" prop="weekdays">
  39. <el-select
  40. v-model="formModel.weekdays"
  41. filterable
  42. multiple
  43. placeholder="请选择"
  44. style="width:100% "
  45. >
  46. <el-option
  47. v-for="item in options"
  48. :key="item.value"
  49. :label="item.label"
  50. :value="item.value"
  51. ></el-option>
  52. </el-select>
  53. </el-form-item>
  54. <el-form-item label="上班时间" prop="startTime">
  55. <el-time-picker
  56. v-model="formModel.startTime"
  57. class="date-box"
  58. format="HH:mm"
  59. value-format="HH:mm"
  60. ></el-time-picker>
  61. </el-form-item>
  62. <el-form-item label="上班提前" prop="startAdvanceMinutes">
  63. <el-input
  64. v-model="formModel.startAdvanceMinutes"
  65. placeholder="请输入上班提前分钟"
  66. style="width: 200px"
  67. >
  68. <template slot="append">分钟</template>
  69. </el-input>
  70. </el-form-item>
  71. <el-form-item label="上班延迟" prop="startDelayMinutes">
  72. <el-input
  73. v-model="formModel.startDelayMinutes"
  74. placeholder="请输入上班延迟分钟"
  75. style="width: 200px"
  76. >
  77. <template slot="append">分钟算迟到</template>
  78. </el-input>
  79. </el-form-item>
  80. <el-form-item label="下班时间" prop="endTime">
  81. <el-time-picker
  82. v-model="formModel.endTime"
  83. class="date-box"
  84. format="HH:mm"
  85. value-format="HH:mm"
  86. ></el-time-picker>
  87. </el-form-item>
  88. <el-form-item label="下班提前" prop="endAdvanceMinutes">
  89. <el-input
  90. v-model="formModel.endAdvanceMinutes"
  91. placeholder="请输入下班提前分钟"
  92. style="width: 200px"
  93. >
  94. <template slot="append">分钟算早退</template>
  95. </el-input>
  96. </el-form-item>
  97. <el-form-item label="下班延迟" prop="endDelayMinutes">
  98. <el-input
  99. v-model="formModel.endDelayMinutes"
  100. placeholder="请输入下班延迟分钟"
  101. style="width: 200px"
  102. >
  103. <template slot="append">分钟</template>
  104. </el-input>
  105. </el-form-item>
  106. </el-form>
  107. </div>
  108. <span slot="footer" class="dialog-footer">
  109. <el-button @click="closeDialog">取 消</el-button>
  110. <el-button type="primary" @click="handleSubmit" :loading="submitting"
  111. >确 定</el-button
  112. >
  113. </span>
  114. </el-dialog>
  115. </template>
  116. <script>
  117. import Constant from "@/constant";
  118. import workScheduleApi from "@/api/base/workSchedule";
  119. import companyInfoApi from "@/api/base/companyInfo";
  120. import SelectTree from "@/components/SelectTree";
  121. export default {
  122. props: ["businessKey", "title"],
  123. data() {
  124. return {
  125. formModel: {},
  126. ruleValidate: {
  127. name: [
  128. { required: true, message: "班次名称不能为空", trigger: "blur" },
  129. ],
  130. weekdays: [
  131. { required: true, message: "周工作日不能为空", trigger: "blur" },
  132. ],
  133. startTime: [
  134. { required: true, message: "上班时间不能为空", trigger: "blur" },
  135. ],
  136. startAdvanceMinutes: [
  137. { required: true, message: "上班提前分钟不能为空", trigger: "blur" },
  138. ],
  139. startDelayMinutes: [
  140. { required: true, message: "上班延迟分钟不能为空", trigger: "blur" },
  141. ],
  142. endTime: [
  143. { required: true, message: "下班时间不能为空", trigger: "blur" },
  144. ],
  145. endAdvanceMinutes: [
  146. { required: true, message: "下班提前分钟不能为空", trigger: "blur" },
  147. ],
  148. endDelayMinutes: [
  149. { required: true, message: "下班延迟分钟不能为空", trigger: "blur" },
  150. ],
  151. },
  152. showDialog: true,
  153. loading: false,
  154. submitting: false,
  155. options: [
  156. {
  157. value: "1",
  158. label: "周一"
  159. },
  160. {
  161. value: "2",
  162. label: "周二"
  163. },
  164. {
  165. value: "3",
  166. label: "周三"
  167. },
  168. {
  169. value: "4",
  170. label: "周四"
  171. },
  172. {
  173. value: "5",
  174. label: "周五"
  175. },
  176. {
  177. value: "6",
  178. label: "周六"
  179. },
  180. {
  181. value: "7",
  182. label: "星期天"
  183. }
  184. ],
  185. companyResult: [],
  186. companyProps: {
  187. value: "id",
  188. label: "name",
  189. children: "children"
  190. },
  191. };
  192. },
  193. created() {
  194. var self = this;
  195. companyInfoApi.list({scope:"all"}).then(function(response) {
  196. var jsonData = response.data;
  197. if (jsonData.result) {
  198. self.companyResult = jsonData.data;
  199. }
  200. });
  201. },
  202. methods: {
  203. closeDialog() {
  204. this.$emit("close", false);
  205. },
  206. handleSubmit() {
  207. var self = this;
  208. this.$refs["form"].validate((valid) => {
  209. if (valid) {
  210. (function () {
  211. var id = self.formModel.id;
  212. self.submitting = true;
  213. var requestModel = JSON.parse(JSON.stringify(self.formModel));
  214. if (requestModel.weekdays != null) {
  215. var weekdays = requestModel.weekdays.join(",");
  216. requestModel.weekdays = weekdays;
  217. }
  218. if (id == null || id.length == 0) {
  219. return workScheduleApi.add(requestModel);
  220. } else {
  221. return workScheduleApi.update(requestModel);
  222. }
  223. })().then(function (response) {
  224. self.submitting = false;
  225. var jsonData = response.data;
  226. if (jsonData.result) {
  227. self.$message({
  228. message: "保存成功!",
  229. type: "success",
  230. });
  231. self.$emit("close", true);
  232. } else {
  233. self.$message({
  234. message: jsonData.message + "",
  235. type: "warning",
  236. });
  237. self.$emit("close", false);
  238. }
  239. });
  240. }
  241. });
  242. },
  243. },
  244. mounted: function () {
  245. var self = this;
  246. (function () {
  247. if (self.businessKey.length == 0) {
  248. return workScheduleApi.create();
  249. } else {
  250. return workScheduleApi.edit(self.businessKey);
  251. }
  252. })()
  253. .then((response) => {
  254. var jsonData = response.data;
  255. self.loading = false;
  256. if (jsonData.result) {
  257. self.formModel = jsonData.data;
  258. var weekdays = self.formModel.weekdays;
  259. if (weekdays != null) {
  260. self.formModel.weekdays = weekdays.split(",");
  261. }
  262. } else {
  263. self.$message.error(jsonData.message + "");
  264. }
  265. })
  266. .catch((error) => {
  267. self.$message.error(error + "");
  268. });
  269. },
  270. components: {
  271. "el-select-tree": SelectTree
  272. },
  273. };
  274. </script>