WorkspaceDrawer.vue 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  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" @click="resetDraw">重置</el-button>
  45. <el-button v-if="!props.detail.principal" type="primary" @click="addNewType(ruleFormRef)">
  46. 提交
  47. </el-button>
  48. <el-button v-if="props.detail.principal" type="primary" @click="editedSub(ruleFormRef)">
  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. formEl.validate((valid) => {
  130. if (!valid) {
  131. return;
  132. }
  133. if (props.allCodes.indexOf(ruleForm.code) > -1) {
  134. ElMessageBox.confirm('场景代码重复,请重新填写', '代码重复', {
  135. confirmButtonText: '确认',
  136. cancelButtonText: '取消',
  137. type: 'error',
  138. })
  139. .then(() => {
  140. console.log('场景代码重复,请重新填写');
  141. })
  142. .catch(() => {
  143. console.log('取消删除物件');
  144. });
  145. } else {
  146. const newAddData = {
  147. code: ruleForm.code,
  148. workshopId: props.detail.id,
  149. isDeleted: 0,
  150. name: ruleForm.name,
  151. principal: ruleForm.principal,
  152. status: Number(ruleForm.addEnable),
  153. serial: 0,
  154. };
  155. addWorkspace(newAddData)
  156. .catch((err) => {
  157. console.log(err);
  158. })
  159. .catch((err) => {
  160. console.log(err);
  161. })
  162. .finally(() => {
  163. emit('onOk');
  164. });
  165. }
  166. });
  167. };
  168. //编辑公司时的提交
  169. const editedSub = (formEl: FormInstance | undefined) => {
  170. if (!formEl) return;
  171. formEl.validate((valid) => {
  172. if (!valid) {
  173. return;
  174. }
  175. if (props.allCodes.indexOf(ruleForm.code) > -1) {
  176. if (props.detail.code !== ruleForm.code) {
  177. ElMessageBox.confirm('场景代码重复,请重新填写', '代码重复', {
  178. confirmButtonText: '确认',
  179. cancelButtonText: '取消',
  180. type: 'error',
  181. })
  182. .then(() => {
  183. console.log('代码重复');
  184. })
  185. .catch(() => {
  186. console.log('取消删除物件');
  187. });
  188. return;
  189. }
  190. }
  191. const editNewWorkspaceData = {
  192. code: ruleForm.code,
  193. name: ruleForm.name,
  194. status: Number(ruleForm.addEnable),
  195. id: props.detail.id,
  196. principal: ruleForm.principal,
  197. };
  198. //编辑车间并上传
  199. editWorkspace(editNewWorkspaceData)
  200. .catch((err) => {
  201. console.log(err);
  202. })
  203. .catch((err) => {
  204. console.log(err);
  205. })
  206. .finally(() => {
  207. emit('onOk');
  208. });
  209. });
  210. };
  211. //重置编辑框
  212. const resetDraw = () => {
  213. ruleForm.name = '';
  214. ruleForm.code = '';
  215. ruleForm.addEnable = ENABLED.TRUE;
  216. ruleForm.principal = '';
  217. };
  218. </script>
  219. <style scoped>
  220. .tag-select {
  221. margin-right: 10px;
  222. margin-bottom: 10px;
  223. border-radius: 4px;
  224. border: 1px solid rgba(0, 0, 0, 0.15);
  225. }
  226. </style>