WorkspaceDrawer.vue 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  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-input v-model="ruleForm.name" />
  24. </el-form-item>
  25. <el-form-item label="上级场景" prop="seniorScene">
  26. <el-input v-model="ruleForm.seniorScene" disabled />
  27. </el-form-item>
  28. <el-form-item label="工位代码" prop="code">
  29. <el-input v-model="ruleForm.code" />
  30. </el-form-item>
  31. <el-form-item label="负责人" prop="principal">
  32. <el-input v-model="ruleForm.principal" />
  33. </el-form-item>
  34. <el-form-item label="状态">
  35. <el-switch
  36. v-model="ruleForm.addEnable"
  37. :active-value="ENABLED.TRUE"
  38. :inactive-value="ENABLED.FALSE"
  39. class="switchUse"
  40. />
  41. </el-form-item>
  42. </el-form>
  43. <div style="position: absolute; left: 108px; bottom: 67px">
  44. <el-button v-if="!props.detail.principal" type="warning" @click="resetDraw">重置</el-button>
  45. <el-button v-if="!props.detail.principal" type="primary" @click="addNewType">
  46. 提交
  47. </el-button>
  48. <el-button v-if="props.detail.principal" type="primary" @click="editedSub">
  49. 提交
  50. </el-button>
  51. </div>
  52. </el-drawer></div
  53. >
  54. </template>
  55. <script setup lang="ts">
  56. import { computed, reactive, ref, defineProps, defineEmits, watch } from 'vue';
  57. import { ENABLED } from './constant';
  58. import { ElMessageBox, type FormInstance, type FormRules } from 'element-plus';
  59. import { addWorkspace, editWorkspace } from '@/api/scene/sceneOperate';
  60. const props = defineProps<{
  61. allCodes: string[];
  62. detail: {
  63. id?: number;
  64. name?: string;
  65. code?: string;
  66. seniorScene?: string;
  67. principal?: string;
  68. addEnable?: ENABLED;
  69. };
  70. }>();
  71. const emit = defineEmits<{
  72. (e: 'onOk'): unknown;
  73. (e: 'onClose'): unknown;
  74. }>();
  75. const title = computed(() => {
  76. if (props.detail.principal) {
  77. return '编辑工位';
  78. }
  79. return '添加工位';
  80. });
  81. //表格中的规则
  82. const ruleFormRef = ref<FormInstance>();
  83. interface RuleForm {
  84. name: string; //名称
  85. seniorScene: string; //上级场景
  86. code: string; //代码
  87. principal?: string; //负责人
  88. addEnable?: ENABLED;
  89. }
  90. const ruleForm = reactive<RuleForm>({
  91. name: '',
  92. seniorScene: '',
  93. code: '',
  94. principal: '',
  95. addEnable: ENABLED.TRUE,
  96. });
  97. const rules = reactive<FormRules>({
  98. name: [
  99. { required: true, message: '', trigger: 'blur' },
  100. { min: 1, max: 100, message: 'Length should be 3 to 5', trigger: 'blur' },
  101. ],
  102. seniorScene: [
  103. { required: true, message: '', trigger: 'blur' },
  104. { min: 1, max: 100, message: 'Length should be 1 to 100', trigger: 'blur' },
  105. ],
  106. code: [
  107. { required: true, message: '', trigger: 'blur' },
  108. { min: 1, max: 100, message: 'Length should be 1 to 100', trigger: 'blur' },
  109. ],
  110. principal: [
  111. { required: true, message: '', trigger: 'blur' },
  112. { min: 1, max: 100, message: 'Length should be 1 to 100', trigger: 'blur' },
  113. ],
  114. });
  115. watch(
  116. () => props.detail,
  117. (data) => {
  118. ruleForm.name = data.name!;
  119. ruleForm.seniorScene = data.seniorScene!;
  120. ruleForm.code = data.code!;
  121. ruleForm.principal = data.principal;
  122. ruleForm.addEnable = data.addEnable;
  123. },
  124. { immediate: true },
  125. );
  126. //添加新公司的提交
  127. const addNewType = (formEl: FormInstance | undefined) => {
  128. if (!formEl) return;
  129. if (props.allCodes.indexOf(ruleForm.code) > -1) {
  130. ElMessageBox.confirm('场景代码重复,请重新填写', '代码重复', {
  131. confirmButtonText: '确认',
  132. cancelButtonText: '取消',
  133. type: 'error',
  134. })
  135. .then(() => {
  136. console.log('场景代码重复,请重新填写');
  137. })
  138. .catch(() => {
  139. console.log('取消删除物件');
  140. });
  141. } else {
  142. const newAddData = {
  143. code: ruleForm.code,
  144. workshopId: props.detail.id,
  145. isDeleted: 0,
  146. name: ruleForm.name,
  147. principal: ruleForm.principal,
  148. status: Number(ruleForm.addEnable),
  149. serial: 0,
  150. };
  151. addWorkspace(newAddData)
  152. .catch((err) => {
  153. console.log(err);
  154. })
  155. .catch((err) => {
  156. console.log(err);
  157. })
  158. .finally(() => {
  159. emit('onOk');
  160. });
  161. }
  162. };
  163. //编辑公司时的提交
  164. const editedSub = (formEl: FormInstance | undefined) => {
  165. if (!formEl) return;
  166. if (props.allCodes.indexOf(ruleForm.code) > -1) {
  167. if (props.detail.code !== ruleForm.code) {
  168. ElMessageBox.confirm('场景代码重复,请重新填写', '代码重复', {
  169. confirmButtonText: '确认',
  170. cancelButtonText: '取消',
  171. type: 'error',
  172. })
  173. .then(() => {
  174. console.log('代码重复');
  175. })
  176. .catch(() => {
  177. console.log('取消删除物件');
  178. });
  179. return;
  180. }
  181. }
  182. const editNewWorkspaceData = {
  183. code: ruleForm.code,
  184. name: ruleForm.name,
  185. status: Number(ruleForm.addEnable),
  186. id: props.detail.id,
  187. principal: ruleForm.principal,
  188. };
  189. //编辑车间并上传
  190. editWorkspace(editNewWorkspaceData)
  191. .catch((err) => {
  192. console.log(err);
  193. })
  194. .catch((err) => {
  195. console.log(err);
  196. })
  197. .finally(() => {
  198. emit('onOk');
  199. });
  200. };
  201. //重置编辑框
  202. const resetDraw = () => {
  203. ruleForm.name = '';
  204. ruleForm.code = '';
  205. ruleForm.addEnable = ENABLED.TRUE;
  206. ruleForm.principal = '';
  207. };
  208. </script>
  209. <style scoped>
  210. .tag-select {
  211. margin-right: 10px;
  212. margin-bottom: 10px;
  213. border-radius: 4px;
  214. border: 1px solid rgba(0, 0, 0, 0.15);
  215. }
  216. </style>