trunksEdit.vue 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. <template>
  2. <div class="system-add-menu-container">
  3. <el-dialog title="修改线路" v-model="state.isShowDialog" draggable>
  4. <el-form :model="state.ruleForm" ref="ruleFormRef" label-width="150px">
  5. <el-row :gutter="35">
  6. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  7. <el-form-item label="线路号" prop="trunkId" :rules="[{ required: true, message: '请输入线路号', trigger: 'blur' }]">
  8. <el-input v-model="state.ruleForm.trunkId" placeholder="请输入线路号" clearable></el-input>
  9. </el-form-item>
  10. </el-col>
  11. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  12. <el-form-item label="早上开始时间" prop="morningBegin"
  13. :rules="[{ required: true, message: '请选择早上开始时间', trigger: 'change' }]">
  14. <el-time-select v-model="state.ruleForm.morningBegin" :max-time="state.ruleForm.morningEnd"
  15. placeholder="请选择早上开始时间" start="00:00" step="00:30" end="23:30" class="w100" />
  16. </el-form-item>
  17. </el-col>
  18. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  19. <el-form-item label="早上结束时间" prop="morningEnd"
  20. :rules="[{ required: true, message: '请选择早上结束时间', trigger: 'change' }]">
  21. <el-time-select v-model="state.ruleForm.morningEnd" :min-time="state.ruleForm.morningBegin"
  22. placeholder="请选择早上结束时间" start="00:00" step="00:30" end="23:30" class="w100" />
  23. </el-form-item>
  24. </el-col>
  25. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  26. <el-form-item label="下午开始时间" prop="afterBegin"
  27. :rules="[{ required: true, message: '请选择下午开始时间', trigger: 'change' }]">
  28. <el-time-select v-model="state.ruleForm.afterBegin" :max-time="state.ruleForm.afterEnd"
  29. placeholder="请选择下午开始时间" start="00:00" step="00:30" end="23:30" class="w100" />
  30. </el-form-item>
  31. </el-col>
  32. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  33. <el-form-item label="下午结束时间" prop="afterEnd"
  34. :rules="[{ required: true, message: '请选择下午结束时间', trigger: 'change' }]">
  35. <el-time-select v-model="state.ruleForm.afterEnd" :min-time="state.ruleForm.afterBegin"
  36. placeholder="请选择下午结束时间" start="00:00" step="00:30" end="23:30" class="w100" />
  37. </el-form-item>
  38. </el-col>
  39. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  40. <el-form-item label="工作日" prop="workDay"
  41. :rules="[{ required: true, message: '请选择工作日', trigger: 'change' }]">
  42. <el-select v-model="state.ruleForm.workDay" placeholder="请选择工作日" value-key="weekValue" class="w100"
  43. multiple>
  44. <el-option v-for="item in state.workDayList" :key="item.weekValue" :label="item.weekName"
  45. :value="item" />
  46. </el-select>
  47. </el-form-item>
  48. </el-col>
  49. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  50. <el-form-item label="工作时间IVR" prop="workCategory"
  51. :rules="[{ required: true, message: '请选择工作时间IVR', trigger: 'change' }]">
  52. <el-select v-model="state.ruleForm.workCategory" value-key="id" placeholder="请选择工作时间IVR" class="w100">
  53. <el-option v-for="item in state.workCategoryList" :key="item.id" :label="item.name" :value="item.id" />
  54. </el-select>
  55. </el-form-item>
  56. </el-col>
  57. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  58. <el-form-item label="休息时间IVR" prop="restCategory"
  59. :rules="[{ required: true, message: '请选择休息时间IVR', trigger: 'change' }]">
  60. <el-select v-model="state.ruleForm.restCategory" value-key="id" placeholder="请选择休息时间IVR" class="w100">
  61. <el-option v-for="item in state.restCategoryList" :key="item.id" :label="item.name" :value="item.id" />
  62. </el-select>
  63. </el-form-item>
  64. </el-col>
  65. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  66. <el-form-item label="工作时间直转分机组" prop="workToGroup"
  67. :rules="[{ required: true, message: '请选择工作时间直转分机组', trigger: 'change' }]">
  68. <el-select v-model="state.ruleForm.workToGroup" value-key="no" placeholder="请选择工作时间直转分机组" class="w100">
  69. <el-option v-for="item in state.workToGroupList" :key="item.no" :label="item.name" :value="item.no" />
  70. </el-select>
  71. </el-form-item>
  72. </el-col>
  73. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  74. <el-form-item label="休息时间直转分机组" prop="restToGroup"
  75. :rules="[{ required: true, message: '请选择休息时间直转分机组', trigger: 'change' }]">
  76. <el-select v-model="state.ruleForm.restToGroup" value-key="no" placeholder="请选择休息时间直转分机组" class="w100">
  77. <el-option v-for="item in state.restToGroupList" :key="item.no" :label="item.name" :value="item.no" />
  78. </el-select>
  79. </el-form-item>
  80. </el-col>
  81. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  82. <el-form-item label="是否启用" prop="isEnable"
  83. :rules="[{ required: false, message: '是否启用', trigger: 'change' }]">
  84. <el-switch v-model="state.ruleForm.isEnable" inline-prompt active-text="启" inactive-text="禁"></el-switch>
  85. </el-form-item>
  86. </el-col>
  87. </el-row>
  88. </el-form>
  89. <template #footer>
  90. <span class="dialog-footer">
  91. <el-button @click="onCancel" class="default-button">取 消</el-button>
  92. <el-button type="primary" @click="onSubmit(ruleFormRef)" v-waves="'light'" :loading="state.loading">确 定
  93. </el-button>
  94. </span>
  95. </template>
  96. </el-dialog>
  97. </div>
  98. </template>
  99. <script setup lang="ts" name="trunksEdit">
  100. import { reactive, ref } from 'vue';
  101. import { ElMessage, FormInstance } from 'element-plus';
  102. import { storeToRefs } from 'pinia';
  103. import { useUserInfo } from '/@/stores/userInfo';
  104. import { updatetrunk, getTrunkDetail, baseInfo } from '/@/api/device/trunks';
  105. // 定义接口来定义对象的类型
  106. interface OrgFormState {
  107. isShowDialog: boolean;
  108. ruleForm: {
  109. trunkId: string; // 线路号
  110. morningBegin: string; //早上开始时间
  111. morningEnd: string; // 早上结束时间
  112. afterBegin: string; // 下午开始时间
  113. afterEnd: string; //下午结束时间
  114. workDay: Array<any>; //工作日
  115. workCategory: string; //工作时间IVR
  116. restCategory: string; // 休息时间IVR
  117. workToGroup: string; // 工作时间直转分机组
  118. restToGroup: string; //休息时间直转分机组
  119. isEnable: boolean, //是否启用
  120. };
  121. workDayList: Array<any>; // 工作日数据
  122. workCategoryList: Array<any>; // 工作时间IVR数据
  123. restCategoryList: Array<any>; // 休息时间IVR数据
  124. workToGroupList: Array<any>; // 工作时间直转分机组数据
  125. restToGroupList: Array<any>; // 休息时间直转分机组数据
  126. loading: boolean;
  127. }
  128. // 定义子组件向父组件传值/事件
  129. const emit = defineEmits(['updateList']);
  130. // 定义变量内容
  131. const ruleFormRef = ref<FormInstance>()
  132. const state = reactive<OrgFormState>({
  133. isShowDialog: false,
  134. ruleForm: {
  135. trunkId: '',
  136. morningBegin: '',
  137. morningEnd: '',
  138. afterBegin: '',
  139. afterEnd: '',
  140. workDay: [],
  141. workCategory: '',
  142. restCategory: '',
  143. workToGroup: '',
  144. restToGroup: '',
  145. isEnable: true,
  146. },
  147. workDayList: [],
  148. workCategoryList: [],
  149. restCategoryList: [],
  150. workToGroupList: [],
  151. restToGroupList: [],
  152. loading: false,
  153. });
  154. const storesUserInfo = useUserInfo();
  155. const { userInfos } = storeToRefs(storesUserInfo);
  156. // 打开弹窗
  157. const openDialog = (row: any) => {
  158. ruleFormRef.value?.clearValidate();
  159. ruleFormRef.value?.resetFields();
  160. // 获取详情
  161. if (userInfos?.value.authBtnList.includes('300501')) { // 获取路线对象
  162. getTrunkDetail(row.id).then((res: any) => {
  163. getOptions();
  164. state.ruleForm = res.result;
  165. state.isShowDialog = true;
  166. })
  167. } else {
  168. ElMessage.warning('您没有获取路线对象权限');
  169. }
  170. };
  171. // 获取选项框数据
  172. const getOptions = async () => {
  173. const res: any = await baseInfo();
  174. const { workDay, restCategory, workCategorys, workToGroup, restToGroup } = res.result;
  175. state.workDayList = workDay;
  176. state.workCategoryList = workCategorys;
  177. state.restCategoryList = restCategory;
  178. state.workToGroupList = workToGroup;
  179. state.restToGroupList = restToGroup;
  180. }
  181. // 关闭弹窗
  182. const closeDialog = () => {
  183. state.isShowDialog = false;
  184. };
  185. // 取消
  186. const onCancel = () => {
  187. closeDialog();
  188. };
  189. // 编辑保存
  190. const onSubmit = async (formEl: FormInstance | undefined) => {
  191. if (!formEl) return;
  192. await formEl.validate((valid, fields) => {
  193. if (valid) {
  194. updatetrunk(state.ruleForm).then(() => {
  195. emit("updateList");
  196. closeDialog(); // 关闭弹窗
  197. ElMessage.success('操作成功');
  198. })
  199. } else {
  200. console.log('error submit!', fields)
  201. }
  202. })
  203. };
  204. // 暴露变量
  205. defineExpose({
  206. openDialog,
  207. closeDialog
  208. });
  209. </script>