CompanyDrawer-shangfei.vue 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. <template>
  2. <div>
  3. <el-drawer
  4. ref="companyDrawerRef"
  5. class="test"
  6. :model-value="true"
  7. @close="() => emit('onClose')"
  8. with-header="true"
  9. size="35%"
  10. >
  11. <template #header="{ titleId }">
  12. <p :id="titleId">{{ title }}</p>
  13. </template>
  14. <el-form
  15. ref="ruleFormRef"
  16. :model="ruleForm"
  17. :rules="rules"
  18. label-width="90px"
  19. class="demo-ruleForm"
  20. size="default"
  21. status-icon
  22. >
  23. <el-form-item label="公司名称" prop="name">
  24. <el-input
  25. v-model="ruleForm.name"
  26. style="width: 200px"
  27. disabled
  28. placeholder="上海飞机制造有限公司"
  29. />
  30. </el-form-item>
  31. <el-form-item label="所在省市" prop="regionCode" required>
  32. <el-select v-model="ruleForm.regionCode" placeholder="请选择省市" style="width: 200px">
  33. <el-option
  34. v-for="item in provinceList"
  35. :key="item.regionCode"
  36. :label="item.regionName"
  37. :value="item.regionCode"
  38. />
  39. </el-select>
  40. </el-form-item>
  41. <el-form-item label="坐标经度" prop="longitude"
  42. ><el-input v-model="ruleForm.longitude" type="number" style="width: 200px"></el-input
  43. ></el-form-item>
  44. <el-form-item label="坐标纬度" prop="latitude"
  45. ><el-input v-model="ruleForm.latitude" type="number" style="width: 200px"></el-input
  46. ></el-form-item>
  47. <el-form-item label="备注" prop="remark">
  48. <el-input v-model="ruleForm.remark" style="width: 200px" />
  49. </el-form-item>
  50. <!-- <el-form-item label="状态">
  51. <el-switch
  52. v-model="ruleForm.isDisabled"
  53. :active-value="IS_DISABLED.FALSE"
  54. :inactive-value="IS_DISABLED.TRUE"
  55. class="switchUse"
  56. />
  57. </el-form-item> -->
  58. </el-form>
  59. <div style="position: absolute; left: 108px; bottom: 67px">
  60. <el-button v-if="!props.detail.id" @click="resetDrawCom">重置</el-button>
  61. <el-button type="primary" v-if="!props.detail.id" @click="newCompanyAdd"> 提交 </el-button>
  62. <el-button type="primary" v-if="props.detail.id" @click="editedSub(ruleFormRef)">
  63. 提交
  64. </el-button>
  65. </div>
  66. </el-drawer>
  67. </div>
  68. </template>
  69. <script setup lang="ts">
  70. import { computed, reactive, ref, defineProps, defineEmits, watch } from 'vue';
  71. import { addCompany, editCompany } from '@/api/scene/scene.ts';
  72. // import { IS_DISABLED } from '@/types/scene/constant.ts';
  73. import type { FormInstance, FormRules } from 'element-plus';
  74. import { getProvinceList } from '@/api/system/region';
  75. import { useRequest } from 'vue-hooks-plus';
  76. const props = defineProps<{
  77. detail: {
  78. id?: number; // 传不传id关系到是不是修改
  79. name?: string;
  80. // isDisabled?: IS_DISABLED;
  81. remark?: string;
  82. longitude?: number; //经度
  83. latitude?: number; //纬度
  84. regionCode?: string;
  85. companyId?: number;
  86. };
  87. }>();
  88. const title = computed(() => {
  89. if (props.detail.id) {
  90. return '编辑公司';
  91. }
  92. return '添加公司';
  93. });
  94. const emit = defineEmits<{
  95. (e: 'onOk'): unknown;
  96. (e: 'onClose'): unknown;
  97. }>();
  98. //表格中的规则
  99. const ruleFormRef = ref<FormInstance>();
  100. //匹配规则
  101. // const pattern = /经度\s*[::]\s*([0-9.]+)\s*[;;]\s*纬度\s*[::]\s*([0-9.]+)/;
  102. interface RuleForm {
  103. name: string; //名称
  104. regionCode?: string; //省市
  105. remark?: string; //备注
  106. longitude?: number; //经度
  107. latitude?: number; //纬度
  108. // isDisabled?: IS_DISABLED;
  109. }
  110. const ruleForm = reactive<RuleForm>({
  111. name: '上海飞机制造有限公司',
  112. // isDisabled: IS_DISABLED.FALSE,
  113. remark: '',
  114. longitude: undefined,
  115. latitude: undefined,
  116. regionCode: '',
  117. });
  118. const rules = reactive<FormRules>({
  119. // name: [
  120. // { required: true, message: '公司名称不能为空', trigger: 'blur' },
  121. // { min: 1, max: 100, message: '长度在1-100之间', trigger: 'blur' },
  122. // ],
  123. regionCode: [{ required: true, message: '省市不能为空', trigger: 'blur' }],
  124. });
  125. const { data: provinceList } = useRequest(getProvinceList);
  126. //编辑时需要传入子组件的数据
  127. watch(
  128. () => props.detail,
  129. (data) => {
  130. // ruleForm.name = data.name!; //上飞定制不可变
  131. // ruleForm.isDisabled = data.isDisabled;
  132. ruleForm.remark = data.remark;
  133. ruleForm.latitude = data.latitude;
  134. ruleForm.longitude = data.longitude;
  135. ruleForm.regionCode = data.regionCode;
  136. },
  137. { immediate: true },
  138. );
  139. //添加新公司的提交
  140. const newCompanyAdd = () => {
  141. if (!ruleFormRef.value) return;
  142. ruleFormRef.value.validate((valid) => {
  143. if (!valid) {
  144. return;
  145. }
  146. const newComData = {
  147. name: ruleForm.name,
  148. // isDisabled: ruleForm.isDisabled,
  149. remark: ruleForm.remark,
  150. longitude: ruleForm.longitude,
  151. latitude: ruleForm.latitude,
  152. regionCode: ruleForm.regionCode,
  153. };
  154. //提交数据并重置关闭el-draw
  155. addCompany(newComData)
  156. .then(() => {
  157. console.log('添加成功');
  158. })
  159. .catch((err) => {
  160. console.log(err);
  161. })
  162. .finally(() => {
  163. emit('onOk');
  164. });
  165. });
  166. };
  167. //编辑公司时的提交
  168. const editedSub = (formEl: FormInstance | undefined) => {
  169. if (!formEl) return;
  170. formEl.validate((valid) => {
  171. if (!valid) {
  172. return;
  173. }
  174. const editNewCom = {
  175. id: props.detail.id,
  176. name: ruleForm.name,
  177. // isDisabled: ruleForm.isDisabled,
  178. remark: ruleForm.remark,
  179. longitude: ruleForm.longitude,
  180. latitude: ruleForm.latitude,
  181. regionCode: ruleForm.regionCode,
  182. };
  183. // 编辑上传
  184. editCompany(editNewCom)
  185. .then(() => {
  186. console.log('编辑成功');
  187. })
  188. .finally(() => {
  189. emit('onOk');
  190. });
  191. });
  192. };
  193. //重置编辑框
  194. const resetDrawCom = () => {
  195. ruleForm.name = '';
  196. // ruleForm.isDisabled = IS_DISABLED.FALSE;
  197. ruleForm.regionCode = '';
  198. ruleForm.remark = '';
  199. ruleForm.latitude = undefined;
  200. ruleForm.longitude = undefined;
  201. };
  202. </script>
  203. <style scoped></style>