PositionDrawer.vue 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. <template>
  2. <a-drawer :title="title" :width="540" :visible="open" :body-style="{ paddingBottom: '80px' }"
  3. :footer-style="{ textAlign: 'right' }" @close="onClose">
  4. <a-form ref="formRef" :model="form" :rules="rules" :label-col="labelCol" :wrapper-col="wrapperCol">
  5. <!-- 名称 -->
  6. <a-form-item label="岗位名称" name="name">
  7. <a-input v-model:value="form.name" style="width: 100%" placeholder="请输入名称" />
  8. </a-form-item>
  9. <!-- 职责 -->
  10. <a-form-item label="岗位职责" name="duty">
  11. <a-input v-model:value="form.duty" style="width: 100%" placeholder="请输入职责" />
  12. </a-form-item>
  13. <!-- 排序 -->
  14. <a-form-item label="排序" name="sort">
  15. <a-input v-model:value="form.sort" style="width: 100%" placeholder="请输入序号" />
  16. </a-form-item>
  17. </a-form>
  18. <div :style="{
  19. position: 'absolute',
  20. right: 0,
  21. bottom: 0,
  22. width: '100%',
  23. borderTop: '1px solid #e9e9e9',
  24. padding: '10px 16px',
  25. background: '#fff',
  26. textAlign: 'right',
  27. zIndex: 1,
  28. }">
  29. <a-button style="margin-right: 8px" @click="onClose">取消</a-button>
  30. <a-button type="primary" @click="onSubmit">确定</a-button>
  31. </div>
  32. </a-drawer>
  33. </template>
  34. <script>
  35. import { defineComponent, reactive, ref, onMounted, watch } from 'vue';
  36. import { message } from 'ant-design-vue';
  37. import { v4 as uuidv4 } from 'uuid';
  38. import { savePosition } from '/@/api/sys/position';
  39. const props = {
  40. formData: {
  41. type: Object,
  42. default: () => {
  43. return {}
  44. }
  45. },
  46. drawerTitle: {
  47. type: String,
  48. default: "新增岗位"
  49. }
  50. }
  51. export default defineComponent({
  52. name: 'positionDrawer',
  53. components: {},
  54. props,
  55. setup(props, { emit }) {
  56. const form = reactive({
  57. id: "",
  58. orgid: "",
  59. oabaseid: "",
  60. name: '',
  61. duty: '',
  62. sort: '',
  63. });
  64. const rules = {
  65. name: [{
  66. required: true,
  67. message: '请输入岗位名称',
  68. trigger: 'blur'
  69. }],
  70. duty: [{
  71. required: true,
  72. message: '请输入岗位职责',
  73. trigger: 'blur'
  74. }],
  75. sort: [{
  76. required: true,
  77. message: '请输入序号',
  78. trigger: 'blur'
  79. }]
  80. };
  81. const title = ref(props.drawerTitle)
  82. const open = ref(false);
  83. const formRef = ref()
  84. onMounted(() => {
  85. if (Object.keys(props.formData).length) {
  86. for (let key in form) {
  87. form[key] = props.formData[key]
  88. }
  89. }
  90. form.sort+=''
  91. })
  92. watch(
  93. () => [props.formData, props.drawerTitle],
  94. ([newF, newD]) => {
  95. for (let key in form) {
  96. form[key] = props.formData[key]
  97. }
  98. form.sort+=''
  99. title.value = newD
  100. },
  101. {
  102. immediate: true,
  103. deep: true
  104. }
  105. )
  106. const showDrawer = () => {
  107. open.value = true;
  108. };
  109. const onClose = () => {
  110. open.value = false;
  111. resetForm()
  112. };
  113. const onSubmit = () => {
  114. console.log(form);
  115. formRef.value.validate().then(() => {
  116. //此处调用新增
  117. if (title.value === '新增岗位') {
  118. form.id = uuidv4()
  119. }
  120. form.sort = parseInt(form.sort)
  121. savePosition(form).then(res => {
  122. if (res.datas === 1) {
  123. message.success('操作成功')
  124. emit('onSubmit', true)
  125. } else {
  126. message.error('操作失败')
  127. emit('onSubmit', false)
  128. }
  129. onClose()
  130. })
  131. }).catch((error) => {
  132. console.log('error', error);
  133. });
  134. };
  135. const resetForm = () => {
  136. formRef.value.resetFields();
  137. };
  138. return {
  139. form,
  140. rules,
  141. title,
  142. open,
  143. formRef,
  144. labelCol: { span: 6 },
  145. wrapperCol: { span: 18 },
  146. showDrawer,
  147. onClose,
  148. onSubmit,
  149. resetForm
  150. };
  151. },
  152. });
  153. </script>