grade-operation.vue 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. <template>
  2. <el-dialog
  3. width="500px"
  4. :title="dialogTitle"
  5. :visible.sync="operationVisible"
  6. :before-close="onClose"
  7. append-to-body
  8. >
  9. <el-form
  10. class="elForm"
  11. ref="elForm"
  12. label-position="top"
  13. :model="forms"
  14. :inline="false"
  15. label-width="100px"
  16. >
  17. <el-form-item
  18. label="考级标题"
  19. :rules="[{ required: true, message: '请输入考级标题' }]"
  20. prop="name"
  21. >
  22. <el-input
  23. type="text"
  24. clearable
  25. maxlength="20"
  26. v-model="forms.name"
  27. placeholder="请输入考级标题"
  28. />
  29. </el-form-item>
  30. <el-form-item
  31. label="适用分部"
  32. :rules="[{ required: true, message: '请选择适用分部' }]"
  33. prop="organIds"
  34. >
  35. <select-all
  36. v-model.trim="forms.organIds"
  37. style="width: 100%"
  38. class="organSelect"
  39. filterable
  40. placeholder="请选择适用分部"
  41. multiple
  42. clearable
  43. >
  44. <el-option
  45. v-for="(item, index) in selects.branchs"
  46. :key="index"
  47. :label="item.name"
  48. :value="item.id"
  49. ></el-option>
  50. </select-all>
  51. </el-form-item>
  52. <el-form-item
  53. label="考级开始日期"
  54. prop="startTime"
  55. :rules="[{ required: true, message: '请选择考级开始日期' }]"
  56. >
  57. <el-date-picker
  58. v-model.trim="forms.startTime"
  59. type="date"
  60. value-format="yyyy-MM-dd"
  61. placeholder="请选择考级开始日期"
  62. :picker-options="startBigin()"
  63. :disabled="status != 'NOT_START'"
  64. @change="
  65. () => {
  66. forms.endTime = null;
  67. }
  68. "
  69. ></el-date-picker>
  70. </el-form-item>
  71. <el-form-item
  72. label="考级结束日期"
  73. prop="endTime"
  74. :rules="[{ required: true, message: '请选择考级结束日期' }]"
  75. >
  76. <el-date-picker
  77. v-model.trim="forms.endTime"
  78. type="date"
  79. value-format="yyyy-MM-dd"
  80. placeholder="请选择考级结束日期"
  81. :picker-options="beginDate()"
  82. ></el-date-picker>
  83. </el-form-item>
  84. <el-form-item
  85. label="登录日期"
  86. prop="registrationTime"
  87. :rules="[{ required: true, message: '请选择登录日期' }]"
  88. >
  89. <el-date-picker
  90. v-model.trim="forms.registrationTime"
  91. type="date"
  92. value-format="yyyy-MM-dd"
  93. placeholder="请选择登记日期"
  94. ></el-date-picker>
  95. </el-form-item>
  96. </el-form>
  97. <div slot="footer" class="dialog-footer">
  98. <el-button @click="onClose()">取 消</el-button>
  99. <el-button type="primary" @click="onSubmit">确 定</el-button>
  100. </div>
  101. </el-dialog>
  102. </template>
  103. <script>
  104. import { getTimes } from "@/utils";
  105. import { degreeSave, degreeUpdate } from "../levelManageApi";
  106. import dayjs from "dayjs";
  107. export default {
  108. name: "grade-operation",
  109. data() {
  110. return {
  111. dialogTitle: "",
  112. status: "NOT_START",
  113. dialogType: "create",
  114. operationVisible: false,
  115. forms: {
  116. name: null,
  117. organIds: [],
  118. startTime: null,
  119. endTime: null,
  120. registrationTime: null
  121. }
  122. };
  123. },
  124. mounted() {
  125. this.$store.dispatch("setBranchs");
  126. },
  127. methods: {
  128. startBigin() {
  129. let timer = dayjs().format("YYYY-MM-DD");
  130. return {
  131. firstDayOfWeek: 1,
  132. disabledDate(time) {
  133. return dayjs(timer).valueOf() >= dayjs(time).valueOf();
  134. }
  135. };
  136. },
  137. beginDate() {
  138. const startTime = this.forms.startTime;
  139. return {
  140. firstDayOfWeek: 1,
  141. disabledDate(time) {
  142. if (startTime) {
  143. return (
  144. new Date(startTime).getTime() >=
  145. time.getTime() + 24 * 60 * 60 * 1000
  146. );
  147. }
  148. }
  149. };
  150. },
  151. onClose() {
  152. this.$refs.elForm && this.$refs.elForm.resetFields();
  153. this.status = "NOT_START";
  154. this.operationVisible = false;
  155. },
  156. onSubmit() {
  157. this.$refs.elForm.validate(async res => {
  158. console.log(res, this.forms, "res");
  159. if (!res) return;
  160. const forms = this.forms;
  161. const params = {
  162. ...forms,
  163. organIds: forms.organIds ? forms.organIds.join(",") : ""
  164. };
  165. try {
  166. if (this.dialogType === "create") {
  167. await degreeSave(params);
  168. this.$message.success("新增成功");
  169. } else {
  170. await degreeUpdate(params);
  171. this.$message.success("修改成功");
  172. }
  173. this.operationVisible = false;
  174. this.onClose();
  175. this.$emit("getList");
  176. } catch {}
  177. });
  178. },
  179. openDialog(type, row) {
  180. console.log(type, row);
  181. this.dialogTitle = type === "update" ? "修改考级" : "新增考级";
  182. this.dialogType = type || "create";
  183. this.operationVisible = true;
  184. this.$nextTick(() => {
  185. if (type === "update") {
  186. this.status = row.status;
  187. this.forms = {
  188. id: row.id,
  189. name: row.name,
  190. organIds: row.organIds
  191. ? row.organIds.split(",").map(value => Number(value))
  192. : [],
  193. startTime: row.startTime,
  194. endTime: row.endTime,
  195. registrationTime: row.registrationTime
  196. };
  197. }
  198. });
  199. }
  200. }
  201. };
  202. </script>
  203. <style lang="scss" scoped>
  204. ::v-deep .el-form-item__label {
  205. padding: 0;
  206. }
  207. .el-form-title {
  208. margin: 0 !important;
  209. }
  210. .el-from-type {
  211. display: flex;
  212. ::v-deep .el-form-item__label {
  213. width: 100px !important;
  214. }
  215. }
  216. .btnGroup {
  217. .el-button + .el-button {
  218. margin-left: 5px;
  219. }
  220. }
  221. </style>