WorkshopDrawer-shangfei.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. <template>
  2. <div>
  3. <el-drawer
  4. class="test"
  5. :model-value="true"
  6. @close="() => emit('onClose')"
  7. with-header="true"
  8. size="35%"
  9. >
  10. <template #header="{ titleId }">
  11. <p :id="titleId">{{ title }}</p>
  12. </template>
  13. <el-form
  14. ref="ruleFormRef"
  15. :model="ruleForm"
  16. :rules="rules"
  17. label-width="120px"
  18. class="demo-ruleForm"
  19. size="default"
  20. status-icon
  21. >
  22. <el-form-item label="车间名称" prop="name">
  23. <el-select v-model="ruleForm.name" placeholder="请选择车间" style="width: 200px">
  24. <el-option
  25. v-for="item in workshopList"
  26. :key="item.workshopCode"
  27. :label="item.workshopName"
  28. :value="item.workshopName"
  29. :disabled="!item.isEnable"
  30. @click="changeWorkShopCode(item.workshopCode, item.isEnable)"
  31. />
  32. </el-select>
  33. </el-form-item>
  34. <el-form-item label="所属公司" prop="seniorScene">
  35. <el-input v-model="ruleForm.seniorScene" disabled />
  36. </el-form-item>
  37. <el-form-item label="状态">
  38. <el-switch
  39. v-model="ruleForm.isDisabled"
  40. :active-value="IS_DISABLED.FALSE"
  41. :inactive-value="IS_DISABLED.TRUE"
  42. class="switchUse"
  43. />
  44. </el-form-item>
  45. </el-form>
  46. <div style="position: absolute; left: 108px; bottom: 67px">
  47. <el-button v-if="!props.detail.id" @click="resetDraw">重置</el-button>
  48. <el-button v-if="!props.detail.id" type="primary" @click="addNewType(ruleFormRef)">
  49. 提交
  50. </el-button>
  51. <el-button v-if="props.detail.id" type="primary" @click="editedSub(ruleFormRef)">
  52. 提交
  53. </el-button>
  54. </div>
  55. </el-drawer></div
  56. >
  57. </template>
  58. <script setup lang="ts">
  59. import { computed, reactive, ref, defineProps, defineEmits, watch } from 'vue';
  60. import { IS_DISABLED } from '@/types/scene/constant.ts';
  61. import { type FormInstance, type FormRules } from 'element-plus';
  62. import { addWorkshop, editWorkshop } from '@/api/scene/scene.ts';
  63. import { getWorkshopInfoList } from '@/api/workShopData';
  64. type WorkshopListType = {
  65. isEnable: boolean;
  66. workshopCode: string;
  67. workshopName: string;
  68. };
  69. const workshopList = ref<WorkshopListType[]>([]);
  70. getWorkshopInfoList().then((res) => {
  71. workshopList.value = res;
  72. });
  73. const changeWorkShopCode = (workshopCode: string, isEnable: boolean) => {
  74. if (isEnable === false) return;
  75. ruleForm.code = workshopCode;
  76. };
  77. const props = defineProps<{
  78. detail: {
  79. id?: number;
  80. code?: string;
  81. name?: string;
  82. seniorScene?: string;
  83. isDisabled?: IS_DISABLED;
  84. companyId?: number;
  85. };
  86. }>();
  87. //将表单数据传至父组件
  88. const emit = defineEmits<{
  89. (e: 'onOk'): unknown;
  90. (e: 'onClose'): unknown;
  91. }>();
  92. //表格中的规则
  93. const ruleFormRef = ref<FormInstance>();
  94. const title = computed(() => {
  95. if (props.detail.id) {
  96. return '编辑车间';
  97. }
  98. return '添加车间';
  99. });
  100. interface RuleForm {
  101. name: string; //名称
  102. code: string; //车间code
  103. seniorScene: string; //上级场景
  104. isDisabled?: IS_DISABLED; //状态
  105. }
  106. const ruleForm = reactive<RuleForm>({
  107. name: '',
  108. code: '',
  109. seniorScene: '',
  110. isDisabled: IS_DISABLED.FALSE,
  111. });
  112. const rules = reactive<FormRules>({
  113. name: [
  114. { required: true, message: '车间名称不能为空', trigger: 'blur' },
  115. { min: 1, max: 100, message: 'Length should be 3 to 5', trigger: 'blur' },
  116. ],
  117. seniorScene: [
  118. { required: true, message: '', trigger: 'blur' },
  119. { min: 1, max: 100, message: 'Length should be 1 to 100', trigger: 'blur' },
  120. ],
  121. });
  122. //编辑时需要传入子组件的数据
  123. watch(
  124. () => props.detail,
  125. (data) => {
  126. ruleForm.name = data.name!;
  127. ruleForm.seniorScene = data.seniorScene!;
  128. ruleForm.isDisabled = data.isDisabled;
  129. },
  130. { immediate: true },
  131. );
  132. //添加新车间的提交
  133. const addNewType = (formEl: FormInstance | undefined) => {
  134. if (!formEl) return;
  135. formEl.validate((valid) => {
  136. if (!valid) {
  137. return;
  138. }
  139. const newAddData = {
  140. companyId: props.detail.companyId,
  141. name: ruleForm.name,
  142. code: ruleForm.code,
  143. isDisabled: ruleForm.isDisabled,
  144. };
  145. addWorkshop(newAddData)
  146. .then(() => {
  147. console.log('成功添加车间');
  148. })
  149. .catch((err) => {
  150. console.log(err);
  151. })
  152. .finally(() => {
  153. emit('onOk');
  154. });
  155. });
  156. };
  157. //编辑公司时的提交
  158. const editedSub = (formEl: FormInstance | undefined) => {
  159. if (!formEl) return;
  160. formEl.validate((valid) => {
  161. if (!valid) {
  162. return;
  163. }
  164. const editNewWorkshopData = {
  165. id: props.detail.id,
  166. code: ruleForm.code,
  167. name: ruleForm.name,
  168. isDisabled: ruleForm.isDisabled,
  169. };
  170. editWorkshop(editNewWorkshopData)
  171. .then(() => {
  172. console.log('成功修改车间');
  173. })
  174. .catch((err) => {
  175. console.log(err);
  176. })
  177. .finally(() => {
  178. emit('onOk');
  179. });
  180. });
  181. };
  182. //重置编辑框
  183. const resetDraw = () => {
  184. ruleForm.name = '';
  185. ruleForm.code = '';
  186. ruleForm.isDisabled = IS_DISABLED.FALSE;
  187. };
  188. </script>
  189. <style scoped>
  190. .tag-select {
  191. margin-right: 10px;
  192. margin-bottom: 10px;
  193. border-radius: 4px;
  194. border: 1px solid rgba(0, 0, 0, 0.15);
  195. }
  196. </style>