定时任务管理,告警管理,用户管理,推进记录信息reqMap传参
							parent
							
								
									bb5295e084
								
							
						
					
					
						commit
						27800acfae
					
				| 
						 | 
				
			
			@ -12,6 +12,14 @@
 | 
			
		|||
          :prop="option.key"
 | 
			
		||||
          :rules="option.rules"
 | 
			
		||||
        >
 | 
			
		||||
          <template #label>
 | 
			
		||||
            <div style="display: flex; align-items: center">
 | 
			
		||||
              {{ option.label }}
 | 
			
		||||
              <el-tooltip v-if="option.tip" :content="option.tip">
 | 
			
		||||
                <el-icon :size="12" class="ml-2"><info-filled /></el-icon>
 | 
			
		||||
              </el-tooltip>
 | 
			
		||||
            </div>
 | 
			
		||||
          </template>
 | 
			
		||||
          <slot :name="option.key">
 | 
			
		||||
            <el-input
 | 
			
		||||
              v-if="option.type === 'input' || !option.type"
 | 
			
		||||
| 
						 | 
				
			
			@ -19,6 +27,7 @@
 | 
			
		|||
              :placeholder="'请输入' + option.label"
 | 
			
		||||
              v-bind="fnGetProps(option)"
 | 
			
		||||
            />
 | 
			
		||||
 | 
			
		||||
            <el-input
 | 
			
		||||
              v-else-if="option.type === 'textarea'"
 | 
			
		||||
              v-model="modelValue[option.key]"
 | 
			
		||||
| 
						 | 
				
			
			@ -168,6 +177,7 @@
 | 
			
		|||
<script setup>
 | 
			
		||||
import { omit } from "lodash-es";
 | 
			
		||||
import { unref } from "vue";
 | 
			
		||||
import { InfoFilled } from "@element-plus/icons-vue";
 | 
			
		||||
 | 
			
		||||
defineProps({
 | 
			
		||||
  options: { type: Array, required: true },
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,3 +27,10 @@ export const appFnGetSectorList = async () => {
 | 
			
		|||
  });
 | 
			
		||||
  return dictionariesList;
 | 
			
		||||
};
 | 
			
		||||
// 部门级别
 | 
			
		||||
export const appFnGetDepartmentLevelList = async () => {
 | 
			
		||||
  const { dictionariesList } = await getDataDictionariesList({
 | 
			
		||||
    parentId: "4a661fa8aedc4d158c9cddaa9d2ec47e",
 | 
			
		||||
  });
 | 
			
		||||
  return dictionariesList;
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,9 @@
 | 
			
		|||
import { postRequest } from "@/request/axios";
 | 
			
		||||
export const getAlarmList = (params) =>
 | 
			
		||||
  postRequest("/data/aram/getAramList", params); // 告警列表
 | 
			
		||||
 | 
			
		||||
export const setAlarmUpdate = (params) =>
 | 
			
		||||
  postRequest("/data/aram/updateAramInfo", params); // 告警处理
 | 
			
		||||
 | 
			
		||||
export const getAlarmInfo = (params) =>
 | 
			
		||||
  postRequest("/data/aram/getAramInfo", params); // 告警详情
 | 
			
		||||
| 
						 | 
				
			
			@ -32,3 +32,24 @@ export const setRouteDelete = (params) =>
 | 
			
		|||
export const setRouteIcon = (params) => postRequest("/sys/menu/icon", params); // 菜单管理修改图标
 | 
			
		||||
export const setRouteSort = (params) =>
 | 
			
		||||
  postRequest("/sys/menu/editMenuOrder", params); // 菜单管理排序
 | 
			
		||||
export const getScheduleList = (params) =>
 | 
			
		||||
  postRequest("/sys/schedule/list", params); // 定时任务列表
 | 
			
		||||
export const setScheduleAdd = (params) =>
 | 
			
		||||
  postRequest("/sys/schedule/save", params); // 定时任务添加
 | 
			
		||||
export const setScheduleUpdate = (params) =>
 | 
			
		||||
  postRequest("/sys/schedule/update", params); // 定时任务修改
 | 
			
		||||
export const setScheduleDelete = (params) =>
 | 
			
		||||
  postRequest("/sys/schedule/delete", params); // 定时任务删除
 | 
			
		||||
export const getScheduleInfo = (params) =>
 | 
			
		||||
  postRequest("/sys/schedule/info", params); // 定时任务查看
 | 
			
		||||
export const setSchedulePause = (params) =>
 | 
			
		||||
  postRequest("/sys/schedule/pause", params); // 定时任务暂停
 | 
			
		||||
export const setScheduleResume = (params) =>
 | 
			
		||||
  postRequest("/sys/schedule/resume", params); // 定时任务恢复
 | 
			
		||||
export const setScheduleRun = (params) =>
 | 
			
		||||
  postRequest("/sys/schedule/run", params); // 定时任务立即执行
 | 
			
		||||
export const getScheduleLogList = (params) =>
 | 
			
		||||
  postRequest("/sys/scheduleLog/list", params); // 定时任务日志列表
 | 
			
		||||
 | 
			
		||||
export const getScheduleLogInfo = (params) =>
 | 
			
		||||
  postRequest("/sys/scheduleLog/info", params); // 定时任务日志信息
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,8 +11,13 @@ export const setDepartmentDelete = (params) =>
 | 
			
		|||
export const getDepartmentInfo = (params) =>
 | 
			
		||||
  postRequest("/oa/department/info", params); // 部门信息
 | 
			
		||||
export const getUserList = (params) => postRequest("/sys/user/list", params); // 用户列表
 | 
			
		||||
 | 
			
		||||
export const setUserAdd = (params) => postRequest("/sys/user/save", params); // 用户新增
 | 
			
		||||
export const setUserUpdate = (params) =>
 | 
			
		||||
  postRequest("/sys/user/update", params); // 用户修改
 | 
			
		||||
export const setUserResetPassword = (params) =>
 | 
			
		||||
  postRequest("/sys/user/password", params); // 用户重置密码
 | 
			
		||||
export const setUserDelete = (params) =>
 | 
			
		||||
  postRequest("/sys/user/delete", params); // 用户删除
 | 
			
		||||
export const hasUser = (params) => postRequest("/sys/user/hasUser", params); // 验证用户是否重复
 | 
			
		||||
export const getUserInfo = (params) => postRequest("/sys/user/getInfo", params); // 用户信息
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,91 @@
 | 
			
		|||
<template>
 | 
			
		||||
  <el-dialog v-model="visible" title="告警处理" :before-close="fnClose">
 | 
			
		||||
    <app-form-builder
 | 
			
		||||
      ref="formRef"
 | 
			
		||||
      v-model="form"
 | 
			
		||||
      :rules
 | 
			
		||||
      :options
 | 
			
		||||
      label-width="160px"
 | 
			
		||||
    >
 | 
			
		||||
    </app-form-builder>
 | 
			
		||||
    <template #footer>
 | 
			
		||||
      <el-button type="primary" @click="fnSubmit">提交</el-button>
 | 
			
		||||
      <el-button @click="fnClose">取消</el-button>
 | 
			
		||||
    </template>
 | 
			
		||||
  </el-dialog>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script setup>
 | 
			
		||||
import useForm from "@/hooks/useForm.js";
 | 
			
		||||
import { ref } from "vue";
 | 
			
		||||
import { debounce } from "throttle-debounce";
 | 
			
		||||
import { ElMessage } from "element-plus";
 | 
			
		||||
import AppFormBuilder from "@/components/form_builder/index.vue";
 | 
			
		||||
import { setAlarmUpdate } from "@/request/alarm_management.js";
 | 
			
		||||
const visible = defineModel("visible", { type: Boolean, required: true });
 | 
			
		||||
const props = defineProps({
 | 
			
		||||
  id: {
 | 
			
		||||
    type: Number,
 | 
			
		||||
    required: true,
 | 
			
		||||
  },
 | 
			
		||||
});
 | 
			
		||||
const emits = defineEmits(["getData"]);
 | 
			
		||||
const { formRef, validate, reset } = useForm();
 | 
			
		||||
const form = ref({
 | 
			
		||||
  alarmReason: "",
 | 
			
		||||
  handleBy: "",
 | 
			
		||||
  handleRemark: "",
 | 
			
		||||
  handleResult: "",
 | 
			
		||||
  handleStatus: "",
 | 
			
		||||
});
 | 
			
		||||
const rules = {
 | 
			
		||||
  alarmReason: [
 | 
			
		||||
    { required: true, message: "告警原因不能为空", trigger: "blur" },
 | 
			
		||||
  ],
 | 
			
		||||
  handleBy: [{ required: true, message: "处理人不能为空", trigger: "blur" }],
 | 
			
		||||
  handleRemark: [
 | 
			
		||||
    { required: true, message: "处理备注不能为空", trigger: "blur" },
 | 
			
		||||
  ],
 | 
			
		||||
  handleResult: [
 | 
			
		||||
    { required: true, message: "处理结果不能为空", trigger: "blur" },
 | 
			
		||||
  ],
 | 
			
		||||
  handleStatus: [
 | 
			
		||||
    { required: true, message: "处理状态不能为空", trigger: "change" },
 | 
			
		||||
  ],
 | 
			
		||||
};
 | 
			
		||||
const handleStatusOptions = [
 | 
			
		||||
  // { name: "未处理", id: 1 },
 | 
			
		||||
  { name: "处理成功", id: 2 },
 | 
			
		||||
  { name: "不需要处理", id: 3 },
 | 
			
		||||
];
 | 
			
		||||
const options = [
 | 
			
		||||
  { key: "handleBy", label: "处理人" },
 | 
			
		||||
  { key: "handleRemark", label: "处理备注" },
 | 
			
		||||
  { key: "handleResult", label: "处理结果" },
 | 
			
		||||
  {
 | 
			
		||||
    key: "handleStatus",
 | 
			
		||||
    label: "处理状态",
 | 
			
		||||
    type: "select",
 | 
			
		||||
    options: handleStatusOptions,
 | 
			
		||||
  },
 | 
			
		||||
  { key: "alarmReason", label: "告警原因", type: "textarea", span: 24 },
 | 
			
		||||
];
 | 
			
		||||
const fnSubmit = debounce(
 | 
			
		||||
  1000,
 | 
			
		||||
  async () => {
 | 
			
		||||
    await validate();
 | 
			
		||||
    await setAlarmUpdate({ ...form.value, id: props.id });
 | 
			
		||||
 | 
			
		||||
    ElMessage.success("操作成功");
 | 
			
		||||
    emits("getData");
 | 
			
		||||
    visible.value = false;
 | 
			
		||||
  },
 | 
			
		||||
  { atBegin: true }
 | 
			
		||||
);
 | 
			
		||||
const fnClose = () => {
 | 
			
		||||
  reset();
 | 
			
		||||
  visible.value = false;
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped lang="scss"></style>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,72 @@
 | 
			
		|||
<template>
 | 
			
		||||
  <div>
 | 
			
		||||
    <!-- <app-search v-model="searchForm" :options @submit="resetPagination" /> -->
 | 
			
		||||
    <app-table ref="tableRef" v-model:pagination="pagination" :data="list">
 | 
			
		||||
      <el-table-column prop="companyName" label="企业名称" />
 | 
			
		||||
      <el-table-column prop="servicePlatformName" label="服务平台名称" />
 | 
			
		||||
      <el-table-column prop="thirdPlatformName" label="上级平台名称" />
 | 
			
		||||
      <el-table-column prop="handleStatus" label="处理类型">
 | 
			
		||||
        <template #default="{ row }">
 | 
			
		||||
          <span v-if="row.handleStatus === 1"> 未处理</span>
 | 
			
		||||
          <span v-else-if="row.handleStatus === 2"> 处理成功</span>
 | 
			
		||||
          <span v-else-if="row.handleStatus === 3"> 不需要处理</span>
 | 
			
		||||
        </template>
 | 
			
		||||
      </el-table-column>
 | 
			
		||||
      <el-table-column v-slot="{ row }" label="操作" width="260">
 | 
			
		||||
        <el-button
 | 
			
		||||
          v-if="row.handleStatus === 1"
 | 
			
		||||
          type="primary"
 | 
			
		||||
          text
 | 
			
		||||
          link
 | 
			
		||||
          @click="fnStatus(row)"
 | 
			
		||||
        >
 | 
			
		||||
          处理
 | 
			
		||||
        </el-button>
 | 
			
		||||
        <el-button
 | 
			
		||||
          type="primary"
 | 
			
		||||
          text
 | 
			
		||||
          link
 | 
			
		||||
          @click="
 | 
			
		||||
            router.push({
 | 
			
		||||
              path: '/alarm_management/info',
 | 
			
		||||
              query: { id: row.id },
 | 
			
		||||
            })
 | 
			
		||||
          "
 | 
			
		||||
        >
 | 
			
		||||
          查看
 | 
			
		||||
        </el-button>
 | 
			
		||||
      </el-table-column>
 | 
			
		||||
    </app-table>
 | 
			
		||||
    <edit-dialog
 | 
			
		||||
      v-model:visible="editDialogInfo.visible"
 | 
			
		||||
      :id="editDialogInfo.id"
 | 
			
		||||
      @get-data="resetPagination"
 | 
			
		||||
    ></edit-dialog>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script setup>
 | 
			
		||||
// import AppSearch from "@/components/search/index.vue";
 | 
			
		||||
import { ref } from "vue";
 | 
			
		||||
import useListData from "@/hooks/useListData.js";
 | 
			
		||||
import { getAlarmList } from "@/request/alarm_management.js";
 | 
			
		||||
import AppTable from "@/components/table/index.vue";
 | 
			
		||||
import { useRouter } from "vue-router";
 | 
			
		||||
import editDialog from "./components/edit.vue";
 | 
			
		||||
 | 
			
		||||
const router = useRouter();
 | 
			
		||||
 | 
			
		||||
const { list, pagination, tableRef, resetPagination } =
 | 
			
		||||
  useListData(getAlarmList);
 | 
			
		||||
// const options = [{ key: "jobName", label: "任务名称" }];
 | 
			
		||||
const editDialogInfo = ref({
 | 
			
		||||
  visible: false,
 | 
			
		||||
  id: "",
 | 
			
		||||
});
 | 
			
		||||
const fnStatus = (row) => {
 | 
			
		||||
  editDialogInfo.value.id = row.id;
 | 
			
		||||
  editDialogInfo.value.visible = true;
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped></style>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,49 @@
 | 
			
		|||
<template>
 | 
			
		||||
  <div>
 | 
			
		||||
    <app-info-builder :options :info> </app-info-builder>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script setup>
 | 
			
		||||
import { useRoute } from "vue-router";
 | 
			
		||||
import AppInfoBuilder from "@/components/info_builder/index.vue";
 | 
			
		||||
import { ref } from "vue";
 | 
			
		||||
import { getAlarmInfo } from "@/request/alarm_management.js";
 | 
			
		||||
const route = useRoute();
 | 
			
		||||
const { id } = route.query;
 | 
			
		||||
const info = ref({});
 | 
			
		||||
const fnGetData = async () => {
 | 
			
		||||
  const { data } = await getAlarmInfo({ id });
 | 
			
		||||
  info.value = data;
 | 
			
		||||
  info.value.status = fnStatus(info.value.handleStatus);
 | 
			
		||||
};
 | 
			
		||||
fnGetData();
 | 
			
		||||
const fnStatus = (status) => {
 | 
			
		||||
  switch (status) {
 | 
			
		||||
    case 1:
 | 
			
		||||
      return "未处理";
 | 
			
		||||
    case 2:
 | 
			
		||||
      return "处理成功";
 | 
			
		||||
    case 3:
 | 
			
		||||
      return "不需要处理";
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
const options = [
 | 
			
		||||
  { key: "companyName", label: "企业名称" },
 | 
			
		||||
  { key: "servicePlatformName", label: "服务平台名称" },
 | 
			
		||||
  { key: "thirdPlatformName", label: "上级平台名称" },
 | 
			
		||||
  { key: "alarmReason", label: "告警原因" },
 | 
			
		||||
  { key: "handleBy", label: "	处理人" },
 | 
			
		||||
  { key: "handleRemark", label: "处理备注" },
 | 
			
		||||
  {
 | 
			
		||||
    key: "handleResult",
 | 
			
		||||
    label: "处理结果",
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    key: "status",
 | 
			
		||||
    label: "处理状态",
 | 
			
		||||
  },
 | 
			
		||||
];
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped lang="scss"></style>
 | 
			
		||||
| 
						 | 
				
			
			@ -56,6 +56,7 @@ import AppSearch from "@/components/search/index.vue";
 | 
			
		|||
import AppTable from "@/components/table/index.vue";
 | 
			
		||||
import { translationStatus } from "@/assets/js/utils.js";
 | 
			
		||||
import { useRouter } from "vue-router";
 | 
			
		||||
// import { reqMapArr } from "./reqMap.js";
 | 
			
		||||
const router = useRouter();
 | 
			
		||||
const dataType = defineModel("dataType", {
 | 
			
		||||
  type: Number,
 | 
			
		||||
| 
						 | 
				
			
			@ -68,7 +69,6 @@ const { list, pagination, searchForm, resetPagination, tableRef } = useListData(
 | 
			
		|||
    params: () => ({
 | 
			
		||||
      dataType: dataType.value,
 | 
			
		||||
    }),
 | 
			
		||||
    // apiType: apiType.value,
 | 
			
		||||
  }
 | 
			
		||||
);
 | 
			
		||||
const pushOptions = [
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,6 +23,9 @@
 | 
			
		|||
          {{ translationStatus(row.pushStatus, pushOptions) }}
 | 
			
		||||
        </template>
 | 
			
		||||
      </el-table-column>
 | 
			
		||||
      <template v-for="item in reqMapOptions" :key="item.key">
 | 
			
		||||
        <el-table-column :prop="item.key" :label="item.label" />
 | 
			
		||||
      </template>
 | 
			
		||||
      <el-table-column label="操作" width="240">
 | 
			
		||||
        <template #default="{ row }">
 | 
			
		||||
          <el-button
 | 
			
		||||
| 
						 | 
				
			
			@ -58,18 +61,33 @@ import AppTable from "@/components/table/index.vue";
 | 
			
		|||
import { ElMessage, ElMessageBox } from "element-plus";
 | 
			
		||||
import { translationStatus } from "@/assets/js/utils.js";
 | 
			
		||||
import { useRoute, useRouter } from "vue-router";
 | 
			
		||||
import { reqMapArr } from "./reqMap.js";
 | 
			
		||||
const router = useRouter();
 | 
			
		||||
const route = useRoute();
 | 
			
		||||
const reqMapObj = reqMapArr.find(
 | 
			
		||||
  (item) => item.dataType.indexOf(route.query.dataType) !== -1
 | 
			
		||||
);
 | 
			
		||||
const reqMapOptions = reqMapObj?.options || [];
 | 
			
		||||
const reqMap = reqMapObj?.reqMap;
 | 
			
		||||
 | 
			
		||||
const { list, pagination, searchForm, getData, resetPagination, tableRef } =
 | 
			
		||||
  useListData(getRecordList, {
 | 
			
		||||
    before: (searchForm) => {
 | 
			
		||||
      Object.keys(reqMap).forEach((key) => {
 | 
			
		||||
        reqMap[key] = searchForm[key] || "";
 | 
			
		||||
      });
 | 
			
		||||
      return {
 | 
			
		||||
        reqMap: reqMap,
 | 
			
		||||
      };
 | 
			
		||||
    },
 | 
			
		||||
    params: () => ({
 | 
			
		||||
      thirdPlatformId: route.query.thirdPlatformId,
 | 
			
		||||
      companyId: route.query.companyId,
 | 
			
		||||
      servicePlatformId: route.query.servicePlatformId,
 | 
			
		||||
      dataType: Number(route.query.dataType),
 | 
			
		||||
    }),
 | 
			
		||||
    // apiType: route.query.apiType,
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
const pushOptions = [
 | 
			
		||||
  { id: 1, name: "未推送" },
 | 
			
		||||
  { id: 2, name: "定时推送" },
 | 
			
		||||
| 
						 | 
				
			
			@ -81,7 +99,7 @@ const receiveOptions = [
 | 
			
		|||
  { id: 1, name: "接收正常" },
 | 
			
		||||
  { id: 2, name: "接收异常" },
 | 
			
		||||
];
 | 
			
		||||
const options = [
 | 
			
		||||
const optionsBase = [
 | 
			
		||||
  {
 | 
			
		||||
    key: "receiveStatus",
 | 
			
		||||
    label: "接收状态",
 | 
			
		||||
| 
						 | 
				
			
			@ -95,6 +113,7 @@ const options = [
 | 
			
		|||
    options: pushOptions,
 | 
			
		||||
  },
 | 
			
		||||
];
 | 
			
		||||
const options = [...optionsBase, ...reqMapOptions];
 | 
			
		||||
 | 
			
		||||
const fnDelete = async (id) => {
 | 
			
		||||
  await ElMessageBox.confirm("确定要删除吗?", {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,297 @@
 | 
			
		|||
export const reqMapArr = [
 | 
			
		||||
  {
 | 
			
		||||
    dataType: ["1"],
 | 
			
		||||
    options: [
 | 
			
		||||
      { key: "hazardCode", label: "对象编码" },
 | 
			
		||||
      { key: "riskUnitName", label: "单元名称" },
 | 
			
		||||
      { key: "hazardName", label: "对象名称" },
 | 
			
		||||
      { key: "hazardDep", label: "部门名称" },
 | 
			
		||||
    ],
 | 
			
		||||
    reqMap: {
 | 
			
		||||
      hazardCode: "",
 | 
			
		||||
      riskUnitName: "",
 | 
			
		||||
      hazardName: "",
 | 
			
		||||
      hazardDep: "",
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    dataType: ["2"],
 | 
			
		||||
    options: [
 | 
			
		||||
      { key: "riskEventName", label: "风险事件名称" },
 | 
			
		||||
      { key: "riskEventDep", label: "责任部门" },
 | 
			
		||||
    ],
 | 
			
		||||
    reqMap: {
 | 
			
		||||
      riskEventName: "",
 | 
			
		||||
      riskEventDep: "",
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    dataType: ["3"],
 | 
			
		||||
    options: [{ key: "riskMeasureDep", label: "管控责任部门" }],
 | 
			
		||||
    reqMap: {
 | 
			
		||||
      riskMeasureDep: "",
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    dataType: ["4"],
 | 
			
		||||
    options: [
 | 
			
		||||
      { key: "partName", label: "辨识部位" },
 | 
			
		||||
      { key: "riskEventName", label: "风险事件名称" },
 | 
			
		||||
    ],
 | 
			
		||||
    reqMap: {
 | 
			
		||||
      partName: "",
 | 
			
		||||
      riskEventName: "",
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    dataType: ["6"],
 | 
			
		||||
    options: [
 | 
			
		||||
      { key: "checkRiskName", label: "排查风险名称" },
 | 
			
		||||
      { key: "checkDep", label: "排查部门" },
 | 
			
		||||
      { key: "checker", label: "排查人" },
 | 
			
		||||
      { key: "taskName", label: "任务名称" },
 | 
			
		||||
    ],
 | 
			
		||||
    reqMap: {
 | 
			
		||||
      checkRiskName: "",
 | 
			
		||||
      checkDep: "",
 | 
			
		||||
      checker: "",
 | 
			
		||||
      taskName: "",
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    dataType: ["7"],
 | 
			
		||||
    options: [
 | 
			
		||||
      { key: "dangerName", label: "隐患名称" },
 | 
			
		||||
      { key: "dangerLocation", label: "隐患位置" },
 | 
			
		||||
      { key: "registrant", label: "登记人姓名" },
 | 
			
		||||
      { key: "registerDept", label: "登记部门" },
 | 
			
		||||
    ],
 | 
			
		||||
    reqMap: {
 | 
			
		||||
      dangerName: "",
 | 
			
		||||
      dangerLocation: "",
 | 
			
		||||
      registrant: "",
 | 
			
		||||
      registerDept: "",
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    dataType: ["8"],
 | 
			
		||||
    options: [
 | 
			
		||||
      { key: "plantCode", label: "装置编码" },
 | 
			
		||||
      { key: "plantName", label: "装置名称" },
 | 
			
		||||
      { key: "startPersonName", label: "开停车责任人" },
 | 
			
		||||
    ],
 | 
			
		||||
    reqMap: {
 | 
			
		||||
      plantCode: "",
 | 
			
		||||
      plantName: "",
 | 
			
		||||
      startPersonName: "",
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    dataType: ["9"],
 | 
			
		||||
    options: [
 | 
			
		||||
      { key: "plantCode", label: "装置编码" },
 | 
			
		||||
      { key: "plantName", label: "装置名称" },
 | 
			
		||||
      { key: "projectName", label: "项目名称" },
 | 
			
		||||
    ],
 | 
			
		||||
    reqMap: {
 | 
			
		||||
      plantCode: "",
 | 
			
		||||
      plantName: "",
 | 
			
		||||
      projectName: "",
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    dataType: ["10"],
 | 
			
		||||
    options: [
 | 
			
		||||
      { key: "plantCode", label: "装置编码" },
 | 
			
		||||
      { key: "plantName", label: "装置名称" },
 | 
			
		||||
      { key: "plantPrincipalPersonName", label: "装置负责人" },
 | 
			
		||||
      { key: "maintenanceName", label: "检修任务" },
 | 
			
		||||
      { key: "maintenancePersonName", label: "大检修责任人" },
 | 
			
		||||
    ],
 | 
			
		||||
    reqMap: {
 | 
			
		||||
      plantCode: "",
 | 
			
		||||
      plantName: "",
 | 
			
		||||
      plantPrincipalPersonName: "",
 | 
			
		||||
      maintenanceName: "",
 | 
			
		||||
      maintenancePersonName: "",
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    dataType: ["11"],
 | 
			
		||||
    options: [
 | 
			
		||||
      { key: "planName", label: "名称" },
 | 
			
		||||
      { key: "deptName", label: "部门" },
 | 
			
		||||
      { key: "postName", label: "岗位" },
 | 
			
		||||
      { key: "chargePerson", label: "负责人" },
 | 
			
		||||
    ],
 | 
			
		||||
    reqMap: {
 | 
			
		||||
      planName: "",
 | 
			
		||||
      deptName: "",
 | 
			
		||||
      postName: "",
 | 
			
		||||
      chargePerson: "",
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    dataType: ["12"],
 | 
			
		||||
    options: [{ key: "commitment", label: "承诺人" }],
 | 
			
		||||
    reqMap: {
 | 
			
		||||
      commitment: "",
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    dataType: ["13", "47", "49"],
 | 
			
		||||
    options: [{ key: "hazardCode", label: "危险源编码" }],
 | 
			
		||||
    reqMap: {
 | 
			
		||||
      hazardCode: "",
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    dataType: ["15"],
 | 
			
		||||
    options: [
 | 
			
		||||
      { key: "cnumberplate", label: "车牌号码" },
 | 
			
		||||
      { key: "entranceName", label: "车辆通行卡口名称" },
 | 
			
		||||
      { key: "enterpriseName", label: "企业名称" },
 | 
			
		||||
      { key: "trackgateNum", label: "道闸编号" },
 | 
			
		||||
    ],
 | 
			
		||||
    reqMap: {
 | 
			
		||||
      cnumberplate: "",
 | 
			
		||||
      entranceName: "",
 | 
			
		||||
      enterpriseName: "",
 | 
			
		||||
      trackgateNum: "",
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    dataType: ["16"],
 | 
			
		||||
    options: [
 | 
			
		||||
      { key: "equipmentCode", label: "设备编码" },
 | 
			
		||||
      { key: "staffType", label: "人员名称" },
 | 
			
		||||
      { key: "checkName", label: "通行卡口名称" },
 | 
			
		||||
      { key: "enterpriseName", label: "企业名称" },
 | 
			
		||||
    ],
 | 
			
		||||
    reqMap: {
 | 
			
		||||
      equipmentCode: "",
 | 
			
		||||
      staffType: "",
 | 
			
		||||
      checkName: "",
 | 
			
		||||
      enterpriseName: "",
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    dataType: ["17"],
 | 
			
		||||
    options: [
 | 
			
		||||
      { key: "equipCode", label: "设备编码" },
 | 
			
		||||
      { key: "equipName", label: "设备名称" },
 | 
			
		||||
    ],
 | 
			
		||||
    reqMap: {
 | 
			
		||||
      equipCode: "",
 | 
			
		||||
      equipName: "",
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    dataType: ["18"],
 | 
			
		||||
    options: [
 | 
			
		||||
      { key: "crashNumber", label: "预警事件编号" },
 | 
			
		||||
      { key: "equipCode", label: "设备编码" },
 | 
			
		||||
    ],
 | 
			
		||||
    reqMap: {
 | 
			
		||||
      crashNumber: "",
 | 
			
		||||
      equipCode: "",
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    dataType: ["19"],
 | 
			
		||||
    options: [{ key: "equipCode", label: "设备编码" }],
 | 
			
		||||
    reqMap: {
 | 
			
		||||
      equipCode: "",
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    dataType: ["20"],
 | 
			
		||||
    options: [
 | 
			
		||||
      { key: "personName", label: "人员姓名" },
 | 
			
		||||
      { key: "positionName", label: "岗位" },
 | 
			
		||||
      { key: "departmentName", label: "部门" },
 | 
			
		||||
      { key: "enterpriseName", label: "企业名称" },
 | 
			
		||||
    ],
 | 
			
		||||
    reqMap: {
 | 
			
		||||
      personName: "",
 | 
			
		||||
      positionName: "",
 | 
			
		||||
      departmentName: "",
 | 
			
		||||
      enterpriseName: "",
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    dataType: ["21"],
 | 
			
		||||
    options: [{ key: "licenseNumber", label: "证件号码" }],
 | 
			
		||||
    reqMap: {
 | 
			
		||||
      licenseNumber: "",
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    dataType: ["24"],
 | 
			
		||||
    options: [{ key: "zoneName", label: "区域名称" }],
 | 
			
		||||
    reqMap: {
 | 
			
		||||
      zoneName: "",
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    dataType: ["27"],
 | 
			
		||||
    options: [
 | 
			
		||||
      { key: "processNodes", label: "流程节点名称" },
 | 
			
		||||
      { key: "processPersonnel", label: "处理人员名称" },
 | 
			
		||||
    ],
 | 
			
		||||
    reqMap: {
 | 
			
		||||
      processNodes: "",
 | 
			
		||||
      processPersonnel: "",
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    dataType: ["28"],
 | 
			
		||||
    options: [{ key: "confirmPerson", label: "确认人" }],
 | 
			
		||||
    reqMap: {
 | 
			
		||||
      confirmPerson: "",
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    dataType: ["29"],
 | 
			
		||||
    options: [
 | 
			
		||||
      { key: "gasName", label: "气体名称" },
 | 
			
		||||
      { key: "analyst", label: "分析人" },
 | 
			
		||||
    ],
 | 
			
		||||
    reqMap: {
 | 
			
		||||
      gasName: "",
 | 
			
		||||
      analyst: "",
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    dataType: ["32"],
 | 
			
		||||
    options: [{ key: "fileName", label: "附件名称" }],
 | 
			
		||||
    reqMap: {
 | 
			
		||||
      fileName: "",
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    dataType: [
 | 
			
		||||
      "33",
 | 
			
		||||
      "34",
 | 
			
		||||
      "35",
 | 
			
		||||
      "36",
 | 
			
		||||
      "37",
 | 
			
		||||
      "38",
 | 
			
		||||
      "39",
 | 
			
		||||
      "40",
 | 
			
		||||
      "41",
 | 
			
		||||
      "42",
 | 
			
		||||
      "43",
 | 
			
		||||
      "44",
 | 
			
		||||
      "45",
 | 
			
		||||
    ],
 | 
			
		||||
    options: [
 | 
			
		||||
      { key: "workName", label: "作业名称" },
 | 
			
		||||
      { key: "workNumber", label: "作业票编号" },
 | 
			
		||||
    ],
 | 
			
		||||
    reqMap: {
 | 
			
		||||
      workName: "",
 | 
			
		||||
      workNumber: "",
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
];
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,96 @@
 | 
			
		|||
<template>
 | 
			
		||||
  <el-dialog
 | 
			
		||||
    v-model="visible"
 | 
			
		||||
    :title="type === 'edit' ? '修改' : '新增'"
 | 
			
		||||
    :before-close="fnClose"
 | 
			
		||||
  >
 | 
			
		||||
    <app-form-builder
 | 
			
		||||
      ref="formRef"
 | 
			
		||||
      v-model="form"
 | 
			
		||||
      :rules
 | 
			
		||||
      :options
 | 
			
		||||
      label-width="160px"
 | 
			
		||||
    >
 | 
			
		||||
    </app-form-builder>
 | 
			
		||||
    <template #footer>
 | 
			
		||||
      <el-button type="primary" @click="fnSubmit">提交</el-button>
 | 
			
		||||
      <el-button @click="fnClose">取消</el-button>
 | 
			
		||||
    </template>
 | 
			
		||||
  </el-dialog>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script setup>
 | 
			
		||||
import useForm from "@/hooks/useForm.js";
 | 
			
		||||
import { ref } from "vue";
 | 
			
		||||
import { debounce } from "throttle-debounce";
 | 
			
		||||
import { ElMessage } from "element-plus";
 | 
			
		||||
import AppFormBuilder from "@/components/form_builder/index.vue";
 | 
			
		||||
import {
 | 
			
		||||
  setScheduleAdd,
 | 
			
		||||
  setScheduleUpdate,
 | 
			
		||||
  getScheduleInfo,
 | 
			
		||||
} from "@/request/system_management.js";
 | 
			
		||||
const visible = defineModel("visible", { type: Boolean, required: true });
 | 
			
		||||
const props = defineProps({
 | 
			
		||||
  info: { type: Object, required: true },
 | 
			
		||||
  type: { type: String, required: true },
 | 
			
		||||
});
 | 
			
		||||
const emits = defineEmits(["getData"]);
 | 
			
		||||
const { formRef, validate, reset } = useForm();
 | 
			
		||||
const form = ref({
 | 
			
		||||
  beanName: "",
 | 
			
		||||
  chargeName: "",
 | 
			
		||||
  jobName: "",
 | 
			
		||||
  params: "",
 | 
			
		||||
  cronExpression: "",
 | 
			
		||||
  remark: "",
 | 
			
		||||
  status: 0,
 | 
			
		||||
});
 | 
			
		||||
const rules = {
 | 
			
		||||
  beanName: [{ required: true, message: "名称不能为空", trigger: "blur" }],
 | 
			
		||||
  jobName: [{ required: true, message: "任务名称不能为空", trigger: "blur" }],
 | 
			
		||||
  chargeName: [{ required: true, message: "负责人不能为空", trigger: "blur" }],
 | 
			
		||||
  cronExpression: [
 | 
			
		||||
    { required: true, message: "cron表达式不能为空", trigger: "blur" },
 | 
			
		||||
  ],
 | 
			
		||||
};
 | 
			
		||||
const options = [
 | 
			
		||||
  { key: "beanName", label: "bean名称" },
 | 
			
		||||
  { key: "jobName", label: "任务名称" },
 | 
			
		||||
  { key: "chargeName", label: "负责人" },
 | 
			
		||||
  { key: "params", label: "参数" },
 | 
			
		||||
  {
 | 
			
		||||
    key: "cronExpression",
 | 
			
		||||
    label: "cron表达式",
 | 
			
		||||
  },
 | 
			
		||||
  { key: "remark", label: "备注" },
 | 
			
		||||
];
 | 
			
		||||
const fnGetData = async () => {
 | 
			
		||||
  if (!props.info.id) return;
 | 
			
		||||
  if (visible.value) {
 | 
			
		||||
    const { schedule } = await getScheduleInfo({ jobId: props.info.id });
 | 
			
		||||
    form.value = schedule;
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
fnGetData();
 | 
			
		||||
const fnSubmit = debounce(
 | 
			
		||||
  1000,
 | 
			
		||||
  async () => {
 | 
			
		||||
    await validate();
 | 
			
		||||
    !props.info.id
 | 
			
		||||
      ? await setScheduleAdd(form.value)
 | 
			
		||||
      : await setScheduleUpdate(form.value);
 | 
			
		||||
 | 
			
		||||
    ElMessage.success("操作成功");
 | 
			
		||||
    emits("getData");
 | 
			
		||||
    visible.value = false;
 | 
			
		||||
  },
 | 
			
		||||
  { atBegin: true }
 | 
			
		||||
);
 | 
			
		||||
const fnClose = () => {
 | 
			
		||||
  reset();
 | 
			
		||||
  visible.value = false;
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped lang="scss"></style>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,155 @@
 | 
			
		|||
<template>
 | 
			
		||||
  <div>
 | 
			
		||||
    <app-search v-model="searchForm" :options @submit="resetPagination" />
 | 
			
		||||
    <app-table
 | 
			
		||||
      ref="tableRef"
 | 
			
		||||
      v-model:pagination="pagination"
 | 
			
		||||
      :data="list"
 | 
			
		||||
      @get-data="getData"
 | 
			
		||||
    >
 | 
			
		||||
      <el-table-column prop="beanName" label="bean名称" />
 | 
			
		||||
      <el-table-column prop="jobName" label="任务名称" />
 | 
			
		||||
      <el-table-column prop="chargeName" label="负责人" />
 | 
			
		||||
      <el-table-column prop="params" label="参数" />
 | 
			
		||||
      <el-table-column prop="cronExpression" label="cron表达式" />
 | 
			
		||||
      <el-table-column prop="remark" label="备注" />
 | 
			
		||||
      <el-table-column prop="status" label="状态">
 | 
			
		||||
        <template #default="{ row }">
 | 
			
		||||
          <el-tag v-if="row.status === 0" type="success">正常</el-tag>
 | 
			
		||||
          <el-tag v-else type="danger">暂停</el-tag>
 | 
			
		||||
        </template>
 | 
			
		||||
      </el-table-column>
 | 
			
		||||
      <el-table-column v-slot="{ row }" label="操作" width="260">
 | 
			
		||||
        <el-button
 | 
			
		||||
          type="primary"
 | 
			
		||||
          text
 | 
			
		||||
          link
 | 
			
		||||
          @click="fnAddOrEdit('edit', row.jobId)"
 | 
			
		||||
        >
 | 
			
		||||
          修改
 | 
			
		||||
        </el-button>
 | 
			
		||||
        <el-button
 | 
			
		||||
          type="danger"
 | 
			
		||||
          text
 | 
			
		||||
          link
 | 
			
		||||
          @click="fnDelete(row.jobId, row.beanName)"
 | 
			
		||||
        >
 | 
			
		||||
          删除
 | 
			
		||||
        </el-button>
 | 
			
		||||
        <el-button
 | 
			
		||||
          v-if="row.status === 0"
 | 
			
		||||
          type="primary"
 | 
			
		||||
          text
 | 
			
		||||
          link
 | 
			
		||||
          @click="fnPause(row.jobId, row.beanName)"
 | 
			
		||||
        >
 | 
			
		||||
          暂停
 | 
			
		||||
        </el-button>
 | 
			
		||||
        <el-button
 | 
			
		||||
          v-if="row.status === 1"
 | 
			
		||||
          type="primary"
 | 
			
		||||
          text
 | 
			
		||||
          link
 | 
			
		||||
          @click="fnResume(row.jobId, row.beanName)"
 | 
			
		||||
        >
 | 
			
		||||
          恢复
 | 
			
		||||
        </el-button>
 | 
			
		||||
        <el-button
 | 
			
		||||
          type="primary"
 | 
			
		||||
          text
 | 
			
		||||
          link
 | 
			
		||||
          @click="fnRun(row.jobId, row.beanName)"
 | 
			
		||||
        >
 | 
			
		||||
          立即执行
 | 
			
		||||
        </el-button>
 | 
			
		||||
      </el-table-column>
 | 
			
		||||
      <template #button>
 | 
			
		||||
        <el-button type="primary" @click="fnAddOrEdit('add', '')">
 | 
			
		||||
          新增
 | 
			
		||||
        </el-button>
 | 
			
		||||
      </template>
 | 
			
		||||
    </app-table>
 | 
			
		||||
    <edit-dialog
 | 
			
		||||
      v-if="addOrEditDialog.visible"
 | 
			
		||||
      v-model:visible="addOrEditDialog.visible"
 | 
			
		||||
      :type="addOrEditDialog.type"
 | 
			
		||||
      :info="addOrEditDialog.info"
 | 
			
		||||
      @get-data="resetPagination"
 | 
			
		||||
    ></edit-dialog>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script setup>
 | 
			
		||||
import { ref } from "vue";
 | 
			
		||||
import AppSearch from "@/components/search/index.vue";
 | 
			
		||||
import useListData from "@/hooks/useListData.js";
 | 
			
		||||
import {
 | 
			
		||||
  getScheduleList,
 | 
			
		||||
  setScheduleDelete,
 | 
			
		||||
  setSchedulePause,
 | 
			
		||||
  setScheduleResume,
 | 
			
		||||
  setScheduleRun,
 | 
			
		||||
} from "@/request/system_management.js";
 | 
			
		||||
import AppTable from "@/components/table/index.vue";
 | 
			
		||||
import { ElMessage, ElMessageBox } from "element-plus";
 | 
			
		||||
import editDialog from "./components/add.vue";
 | 
			
		||||
 | 
			
		||||
const { list, pagination, getData, searchForm, resetPagination, tableRef } =
 | 
			
		||||
  useListData(getScheduleList);
 | 
			
		||||
const addOrEditDialog = ref({
 | 
			
		||||
  visible: false,
 | 
			
		||||
  type: "",
 | 
			
		||||
  info: {
 | 
			
		||||
    id: "",
 | 
			
		||||
  },
 | 
			
		||||
  form: {
 | 
			
		||||
    beanName: "",
 | 
			
		||||
    chargeName: "",
 | 
			
		||||
    jobName: "",
 | 
			
		||||
    params: "",
 | 
			
		||||
    cronExpression: "",
 | 
			
		||||
    remark: "",
 | 
			
		||||
    status: 0,
 | 
			
		||||
  },
 | 
			
		||||
});
 | 
			
		||||
const options = [{ key: "jobName", label: "任务名称" }];
 | 
			
		||||
const fnAddOrEdit = async (type, id) => {
 | 
			
		||||
  addOrEditDialog.value.type = type;
 | 
			
		||||
  // addOrEditDialog.value.visible = true;
 | 
			
		||||
  // await nextTick();
 | 
			
		||||
  // if (type === "add") {
 | 
			
		||||
  //   addOrEditDialog.value.info = { id: "" };
 | 
			
		||||
  // } else {
 | 
			
		||||
  // }
 | 
			
		||||
  addOrEditDialog.value.info = { id: id };
 | 
			
		||||
  addOrEditDialog.value.visible = true;
 | 
			
		||||
};
 | 
			
		||||
const fnDelete = async (id, name) => {
 | 
			
		||||
  await ElMessageBox.confirm(`确定要删除【${name}】吗?`, { type: "warning" });
 | 
			
		||||
  await setScheduleDelete({ jobId: id });
 | 
			
		||||
  ElMessage.success("删除成功");
 | 
			
		||||
  resetPagination();
 | 
			
		||||
};
 | 
			
		||||
const fnPause = async (id, name) => {
 | 
			
		||||
  await ElMessageBox.confirm(`确定要暂停【${name}】吗?`, { type: "warning" });
 | 
			
		||||
  await setSchedulePause({ jobId: id });
 | 
			
		||||
  ElMessage.success("操作成功");
 | 
			
		||||
  resetPagination();
 | 
			
		||||
};
 | 
			
		||||
const fnResume = async (id, name) => {
 | 
			
		||||
  await ElMessageBox.confirm(`确定要恢复【${name}】吗?`, { type: "warning" });
 | 
			
		||||
  await setScheduleResume({ jobId: id });
 | 
			
		||||
  ElMessage.success("操作成功");
 | 
			
		||||
  resetPagination();
 | 
			
		||||
};
 | 
			
		||||
const fnRun = async (id, name) => {
 | 
			
		||||
  await ElMessageBox.confirm(`确定要立即执行【${name}】吗?`, {
 | 
			
		||||
    type: "warning",
 | 
			
		||||
  });
 | 
			
		||||
  await setScheduleRun({ jobId: id });
 | 
			
		||||
  ElMessage.success("操作成功");
 | 
			
		||||
  resetPagination();
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped></style>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,51 @@
 | 
			
		|||
<template>
 | 
			
		||||
  <div>
 | 
			
		||||
    <app-search v-model="searchForm" :options @submit="resetPagination" />
 | 
			
		||||
    <app-table ref="tableRef" v-model:pagination="pagination" :data="list">
 | 
			
		||||
      <el-table-column prop="beanName" label="bean名称" />
 | 
			
		||||
      <el-table-column prop="jobName" label="任务名称" />
 | 
			
		||||
      <el-table-column prop="params" label="参数" />
 | 
			
		||||
      <el-table-column prop="status" label="状态">
 | 
			
		||||
        <template #default="{ row }">
 | 
			
		||||
          <el-tag v-if="row.status === 0" type="success">正常</el-tag>
 | 
			
		||||
          <el-tag v-else type="danger">暂停</el-tag>
 | 
			
		||||
        </template>
 | 
			
		||||
      </el-table-column>
 | 
			
		||||
      <el-table-column prop="error" label="失败信息" />
 | 
			
		||||
      <el-table-column prop="times" label="耗时(毫秒)" />
 | 
			
		||||
      <el-table-column prop="createTime" label="创建时间" />
 | 
			
		||||
 | 
			
		||||
      <el-table-column v-slot="{ row }" label="操作" width="260">
 | 
			
		||||
        <el-button
 | 
			
		||||
          type="primary"
 | 
			
		||||
          text
 | 
			
		||||
          link
 | 
			
		||||
          @click="
 | 
			
		||||
            router.push({
 | 
			
		||||
              path: '/schedule_management/scheduleLog/info',
 | 
			
		||||
              query: { logId: row.logId },
 | 
			
		||||
            })
 | 
			
		||||
          "
 | 
			
		||||
        >
 | 
			
		||||
          查看
 | 
			
		||||
        </el-button>
 | 
			
		||||
      </el-table-column>
 | 
			
		||||
    </app-table>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script setup>
 | 
			
		||||
import AppSearch from "@/components/search/index.vue";
 | 
			
		||||
import useListData from "@/hooks/useListData.js";
 | 
			
		||||
import { getScheduleLogList } from "@/request/system_management.js";
 | 
			
		||||
import AppTable from "@/components/table/index.vue";
 | 
			
		||||
import { useRouter } from "vue-router";
 | 
			
		||||
 | 
			
		||||
const router = useRouter();
 | 
			
		||||
 | 
			
		||||
const { list, pagination, searchForm, resetPagination, tableRef } =
 | 
			
		||||
  useListData(getScheduleLogList);
 | 
			
		||||
const options = [{ key: "jobName", label: "任务名称" }];
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped></style>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,35 @@
 | 
			
		|||
<template>
 | 
			
		||||
  <div>
 | 
			
		||||
    <app-info-builder :options :info> </app-info-builder>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script setup>
 | 
			
		||||
import { useRoute } from "vue-router";
 | 
			
		||||
import AppInfoBuilder from "@/components/info_builder/index.vue";
 | 
			
		||||
import { ref } from "vue";
 | 
			
		||||
import { getScheduleLogInfo } from "@/request/system_management.js";
 | 
			
		||||
const route = useRoute();
 | 
			
		||||
const { logId } = route.query;
 | 
			
		||||
const info = ref({});
 | 
			
		||||
const options = [
 | 
			
		||||
  { key: "beanName", label: "bean名称" },
 | 
			
		||||
  { key: "jobName", label: "任务名称" },
 | 
			
		||||
  { key: "params", label: "参数" },
 | 
			
		||||
  {
 | 
			
		||||
    key: "status",
 | 
			
		||||
    label: "状态",
 | 
			
		||||
    value: info.value.status === 0 ? "正常" : "暂停",
 | 
			
		||||
  },
 | 
			
		||||
  { key: "error", label: "失败信息" },
 | 
			
		||||
  { key: "times", label: "耗时(毫秒)" },
 | 
			
		||||
  { key: "createTime", label: "创建时间" },
 | 
			
		||||
];
 | 
			
		||||
const fnGetData = async () => {
 | 
			
		||||
  const { log } = await getScheduleLogInfo({ logId });
 | 
			
		||||
  info.value = log;
 | 
			
		||||
};
 | 
			
		||||
fnGetData();
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped lang="scss"></style>
 | 
			
		||||
| 
						 | 
				
			
			@ -13,70 +13,31 @@
 | 
			
		|||
          </el-form-item>
 | 
			
		||||
        </el-col>
 | 
			
		||||
        <el-col :span="12">
 | 
			
		||||
          <el-form-item label="行政区域级别" prop="level">
 | 
			
		||||
            <el-select
 | 
			
		||||
              v-model="form.level"
 | 
			
		||||
              placeholder="请选择"
 | 
			
		||||
              @change="fnChangeLevel"
 | 
			
		||||
            >
 | 
			
		||||
          <el-form-item label="部门级别" prop="level">
 | 
			
		||||
            <el-select v-model="form.level">
 | 
			
		||||
              <el-option
 | 
			
		||||
                v-for="item in ADMINISTRATIVE_REGION_LEVEL_LIST"
 | 
			
		||||
                :key="item.id"
 | 
			
		||||
                v-for="item in departmentLevelList"
 | 
			
		||||
                :key="item.dictionaryId"
 | 
			
		||||
                :label="item.name"
 | 
			
		||||
                :value="item.id"
 | 
			
		||||
              />
 | 
			
		||||
                :value="item.dictionaryId"
 | 
			
		||||
              ></el-option>
 | 
			
		||||
            </el-select>
 | 
			
		||||
          </el-form-item>
 | 
			
		||||
        </el-col>
 | 
			
		||||
        <el-col v-if="form.level" :span="12">
 | 
			
		||||
          <el-form-item :key="form.level" label="所属区域" prop="area">
 | 
			
		||||
            <app-area-cascader
 | 
			
		||||
              v-model="form.area"
 | 
			
		||||
              control-level
 | 
			
		||||
              :level="form.level"
 | 
			
		||||
            />
 | 
			
		||||
          </el-form-item>
 | 
			
		||||
        </el-col>
 | 
			
		||||
        <el-col v-if="type === '2'" :span="12">
 | 
			
		||||
          <el-form-item label="部门类别" prop="category">
 | 
			
		||||
            <el-select v-model="form.category" placeholder="请选择">
 | 
			
		||||
              <el-option
 | 
			
		||||
                v-for="item in categoryList"
 | 
			
		||||
                :key="item.id"
 | 
			
		||||
                :label="item.name"
 | 
			
		||||
                :value="item.id"
 | 
			
		||||
              />
 | 
			
		||||
            </el-select>
 | 
			
		||||
          </el-form-item>
 | 
			
		||||
        </el-col>
 | 
			
		||||
        <el-col v-if="parentId === '0'" :span="12">
 | 
			
		||||
          <el-form-item label="是否监管部门" prop="supervisory">
 | 
			
		||||
            <el-select v-model="form.supervisory" placeholder="请选择">
 | 
			
		||||
              <el-option
 | 
			
		||||
                v-for="item in WHETHER_LIST"
 | 
			
		||||
                :key="item.id"
 | 
			
		||||
                :label="item.name"
 | 
			
		||||
                :value="item.id"
 | 
			
		||||
              />
 | 
			
		||||
            </el-select>
 | 
			
		||||
          </el-form-item>
 | 
			
		||||
        </el-col>
 | 
			
		||||
        <template v-if="!!departmentId">
 | 
			
		||||
          <el-col :span="12">
 | 
			
		||||
            <el-form-item label="主管负责人" prop="headman">
 | 
			
		||||
              <app-user v-model="form.headman" splicing-label />
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
          </el-col>
 | 
			
		||||
          <el-col :span="12">
 | 
			
		||||
            <el-form-item label="分管领导" prop="lrman">
 | 
			
		||||
              <app-user v-model="form.lrman" splicing-label />
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
          </el-col>
 | 
			
		||||
        </template>
 | 
			
		||||
        <el-col :span="12">
 | 
			
		||||
          <el-form-item label="排序" prop="depOrder">
 | 
			
		||||
          <el-form-item label="部门负责人" prop="headman">
 | 
			
		||||
            <el-input v-model="form.headman" splicing-label />
 | 
			
		||||
          </el-form-item>
 | 
			
		||||
        </el-col>
 | 
			
		||||
        <el-col :span="12">
 | 
			
		||||
          <el-form-item label="手机号" prop="phone">
 | 
			
		||||
            <el-input v-model="form.phone" splicing-label />
 | 
			
		||||
          </el-form-item>
 | 
			
		||||
        </el-col>
 | 
			
		||||
        <el-col :span="12">
 | 
			
		||||
          <el-form-item label="排序" prop="orderBy">
 | 
			
		||||
            <el-input
 | 
			
		||||
              v-model.number="form.depOrder"
 | 
			
		||||
              v-model.number="form.orderBy"
 | 
			
		||||
              placeholder="这里输入排序..."
 | 
			
		||||
            />
 | 
			
		||||
          </el-form-item>
 | 
			
		||||
| 
						 | 
				
			
			@ -93,12 +54,8 @@
 | 
			
		|||
import { ref } from "vue";
 | 
			
		||||
import useForm from "@/hooks/useForm.js";
 | 
			
		||||
import { useRoute, useRouter } from "vue-router";
 | 
			
		||||
import AppAreaCascader from "@/components/area_cascader/index.vue";
 | 
			
		||||
import AppUser from "@/components/user/index.vue";
 | 
			
		||||
import {
 | 
			
		||||
  ADMINISTRATIVE_REGION_LEVEL_LIST,
 | 
			
		||||
  WHETHER_LIST,
 | 
			
		||||
} from "@/assets/js/constant.js";
 | 
			
		||||
import { appFnGetDepartmentLevelList } from "@/data_dictionary/data_dictionary.js";
 | 
			
		||||
import useDataDictionary from "@/hooks/useDataDictionary.js";
 | 
			
		||||
import { debounce } from "throttle-debounce";
 | 
			
		||||
import {
 | 
			
		||||
  getDepartmentInfo,
 | 
			
		||||
| 
						 | 
				
			
			@ -106,92 +63,46 @@ import {
 | 
			
		|||
  setDepartmentUpdate,
 | 
			
		||||
} from "@/request/user_management.js";
 | 
			
		||||
import { ElMessage } from "element-plus";
 | 
			
		||||
import { MOBILE_PHONE } from "@/assets/js/regular.js";
 | 
			
		||||
 | 
			
		||||
const route = useRoute();
 | 
			
		||||
const router = useRouter();
 | 
			
		||||
const { parentId, parentName, type, departmentId } = route.query;
 | 
			
		||||
const { parentId, parentName, departmentId } = route.query;
 | 
			
		||||
const { formRef, validate } = useForm();
 | 
			
		||||
const form = ref({
 | 
			
		||||
  name: "",
 | 
			
		||||
  level: "",
 | 
			
		||||
  area: [],
 | 
			
		||||
  category: "",
 | 
			
		||||
  supervisory: "",
 | 
			
		||||
  headman: "",
 | 
			
		||||
  lrman: "",
 | 
			
		||||
  depOrder: "",
 | 
			
		||||
  phone: "",
 | 
			
		||||
  orderBy: "",
 | 
			
		||||
});
 | 
			
		||||
const parentInfo = {
 | 
			
		||||
  parentIds: "",
 | 
			
		||||
  parentNames: "",
 | 
			
		||||
  treeIds: "",
 | 
			
		||||
  treeNames: "",
 | 
			
		||||
};
 | 
			
		||||
const rules = {
 | 
			
		||||
  name: [{ required: true, message: "请输入部门名称", trigger: "blur" }],
 | 
			
		||||
  level: [{ required: true, message: "请选择部门级别", trigger: "change" }],
 | 
			
		||||
  area: [{ required: true, message: "请选择所属区域", trigger: "change" }],
 | 
			
		||||
  category: [{ required: true, message: "请选择部门类别", trigger: "change" }],
 | 
			
		||||
  supervisory: [
 | 
			
		||||
    { required: true, message: "请选择是否监管部门", trigger: "change" },
 | 
			
		||||
  phone: [
 | 
			
		||||
    { required: false, message: "手机号", trigger: "blur" },
 | 
			
		||||
    { pattern: MOBILE_PHONE, message: "请输入正确的手机号码", trigger: "blur" },
 | 
			
		||||
  ],
 | 
			
		||||
  depOrder: [{ required: true, message: "请输入排序", trigger: "blur" }],
 | 
			
		||||
  orderBy: [{ required: true, message: "请输入排序", trigger: "blur" }],
 | 
			
		||||
};
 | 
			
		||||
const categoryList = [
 | 
			
		||||
  { id: "1", name: "行业监管" },
 | 
			
		||||
  { id: "2", name: "综合监管" },
 | 
			
		||||
];
 | 
			
		||||
const { data: departmentLevelList } = useDataDictionary(
 | 
			
		||||
  appFnGetDepartmentLevelList
 | 
			
		||||
);
 | 
			
		||||
const fnGetData = async () => {
 | 
			
		||||
  if (!departmentId) return;
 | 
			
		||||
  const { data } = await getDepartmentInfo(departmentId);
 | 
			
		||||
  form.value = data;
 | 
			
		||||
  form.value.area = [
 | 
			
		||||
    data.province,
 | 
			
		||||
    data.city,
 | 
			
		||||
    data.county,
 | 
			
		||||
    data.village,
 | 
			
		||||
    data.street,
 | 
			
		||||
  ].filter(Boolean);
 | 
			
		||||
  parentInfo.parentIds = data.parentIds;
 | 
			
		||||
  parentInfo.parentNames = data.parentNames;
 | 
			
		||||
  parentInfo.treeIds = data.treeIds;
 | 
			
		||||
  parentInfo.treeNames = data.treeNames;
 | 
			
		||||
  const { department } = await getDepartmentInfo({
 | 
			
		||||
    departmentId: departmentId,
 | 
			
		||||
  });
 | 
			
		||||
  form.value = department;
 | 
			
		||||
};
 | 
			
		||||
fnGetData();
 | 
			
		||||
const fnGetDataParent = async () => {
 | 
			
		||||
  if (parentId === "0" || departmentId) return;
 | 
			
		||||
  const { data } = await getDepartmentInfo(parentId);
 | 
			
		||||
  const parentIds = data.parentIds.split(",");
 | 
			
		||||
  const parentNames = data.parentNames.split(",");
 | 
			
		||||
  const treeIds = data.treeIds.split(",");
 | 
			
		||||
  const treeNames = data.treeNames.split(",");
 | 
			
		||||
  parentIds.push(parentId);
 | 
			
		||||
  parentNames.push(parentName);
 | 
			
		||||
  parentInfo.parentIds = parentIds.filter(Boolean).join(",");
 | 
			
		||||
  parentInfo.parentNames = parentNames.filter(Boolean).join(",");
 | 
			
		||||
  parentInfo.treeIds = treeIds.filter(Boolean).join(",");
 | 
			
		||||
  parentInfo.treeNames = treeNames.filter(Boolean).join(",");
 | 
			
		||||
};
 | 
			
		||||
fnGetDataParent();
 | 
			
		||||
const fnChangeLevel = (event) => {
 | 
			
		||||
  if (event === 1) form.value.area = ["130000", "130300"];
 | 
			
		||||
  else form.value.area = [];
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const fnSubmit = debounce(
 | 
			
		||||
  1000,
 | 
			
		||||
  async () => {
 | 
			
		||||
    await validate();
 | 
			
		||||
    const [province = "", city = "", county = "", village = "", street = ""] =
 | 
			
		||||
      form.value.area;
 | 
			
		||||
    const params = {
 | 
			
		||||
      ...form.value,
 | 
			
		||||
      ...parentInfo,
 | 
			
		||||
      province,
 | 
			
		||||
      city,
 | 
			
		||||
      county,
 | 
			
		||||
      village,
 | 
			
		||||
      street,
 | 
			
		||||
      type,
 | 
			
		||||
      parentId,
 | 
			
		||||
    };
 | 
			
		||||
    !departmentId
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,20 +1,6 @@
 | 
			
		|||
<template>
 | 
			
		||||
  <div style="display: flex; gap: 20px">
 | 
			
		||||
    <div style="width: 300px">
 | 
			
		||||
      <app-area-view-tree
 | 
			
		||||
        :default-expanded-keys="code"
 | 
			
		||||
        @node-click="fnNavigation({ code: $event.bianma, level: $event.level })"
 | 
			
		||||
      />
 | 
			
		||||
    </div>
 | 
			
		||||
    <div style="flex: 1">
 | 
			
		||||
      <el-tabs v-model="activeTab" @tab-change="fnNavigation({ type: $event })">
 | 
			
		||||
        <el-tab-pane
 | 
			
		||||
          v-for="tab in tabs"
 | 
			
		||||
          :key="tab.id"
 | 
			
		||||
          :name="tab.id"
 | 
			
		||||
          :label="tab.name"
 | 
			
		||||
        />
 | 
			
		||||
      </el-tabs>
 | 
			
		||||
      <app-table
 | 
			
		||||
        v-model:pagination="pagination"
 | 
			
		||||
        :data="list"
 | 
			
		||||
| 
						 | 
				
			
			@ -35,24 +21,9 @@
 | 
			
		|||
            {{ row.name }}
 | 
			
		||||
          </el-button>
 | 
			
		||||
        </el-table-column>
 | 
			
		||||
        <el-table-column v-slot="{ row }" prop="category" label="部门类型">
 | 
			
		||||
          <div v-if="row.category === '1'">行业监管</div>
 | 
			
		||||
          <div v-if="row.category === '2'">综合监管</div>
 | 
			
		||||
        </el-table-column>
 | 
			
		||||
        <el-table-column prop="headmanName" label="部门负责人" />
 | 
			
		||||
        <el-table-column v-slot="{ row }" label="属地">
 | 
			
		||||
          {{
 | 
			
		||||
            [
 | 
			
		||||
              row.provinceName,
 | 
			
		||||
              row.cityName,
 | 
			
		||||
              row.countyName,
 | 
			
		||||
              row.villageName,
 | 
			
		||||
              row.streetName,
 | 
			
		||||
            ]
 | 
			
		||||
              .filter(Boolean)
 | 
			
		||||
              .join("--")
 | 
			
		||||
          }}
 | 
			
		||||
        </el-table-column>
 | 
			
		||||
        <el-table-column prop="levelName" label="部门级别" />
 | 
			
		||||
        <el-table-column prop="headman" label="部门负责人" />
 | 
			
		||||
        <el-table-column prop="phone" label="手机号" />
 | 
			
		||||
        <el-table-column v-slot="{ row }" label="操作" width="120">
 | 
			
		||||
          <el-button
 | 
			
		||||
            type="primary"
 | 
			
		||||
| 
						 | 
				
			
			@ -64,7 +35,6 @@
 | 
			
		|||
                query: {
 | 
			
		||||
                  parentId,
 | 
			
		||||
                  parentName,
 | 
			
		||||
                  type: activeTab,
 | 
			
		||||
                  departmentId: row.departmentId,
 | 
			
		||||
                },
 | 
			
		||||
              })
 | 
			
		||||
| 
						 | 
				
			
			@ -73,7 +43,6 @@
 | 
			
		|||
            修改
 | 
			
		||||
          </el-button>
 | 
			
		||||
          <el-button
 | 
			
		||||
            v-if="parentId !== '0' || isRootAdd"
 | 
			
		||||
            type="danger"
 | 
			
		||||
            text
 | 
			
		||||
            link
 | 
			
		||||
| 
						 | 
				
			
			@ -84,12 +53,12 @@
 | 
			
		|||
        </el-table-column>
 | 
			
		||||
        <template #button>
 | 
			
		||||
          <el-button
 | 
			
		||||
            v-if="parentId !== '0' || isRootAdd"
 | 
			
		||||
            v-if="parentId !== '0'"
 | 
			
		||||
            type="primary"
 | 
			
		||||
            @click="
 | 
			
		||||
              router.push({
 | 
			
		||||
                path: '/user_management/department/add',
 | 
			
		||||
                query: { parentId, parentName, type: activeTab },
 | 
			
		||||
                query: { parentId, parentName },
 | 
			
		||||
              })
 | 
			
		||||
            "
 | 
			
		||||
          >
 | 
			
		||||
| 
						 | 
				
			
			@ -109,9 +78,7 @@
 | 
			
		|||
</template>
 | 
			
		||||
 | 
			
		||||
<script setup>
 | 
			
		||||
import AppAreaViewTree from "@/components/area_view_tree/index.vue";
 | 
			
		||||
import { ref } from "vue";
 | 
			
		||||
import { useUserStore } from "@/pinia/user.js";
 | 
			
		||||
import useListData from "@/hooks/useListData.js";
 | 
			
		||||
import {
 | 
			
		||||
  getDepartmentList,
 | 
			
		||||
| 
						 | 
				
			
			@ -121,73 +88,27 @@ import AppTable from "@/components/table/index.vue";
 | 
			
		|||
import { ArrowLeft } from "@element-plus/icons-vue";
 | 
			
		||||
import { onBeforeRouteUpdate, useRoute, useRouter } from "vue-router";
 | 
			
		||||
import { ElMessage, ElMessageBox } from "element-plus";
 | 
			
		||||
import { DEPARTMENT_CATEGORY_LIST } from "@/assets/js/constant.js";
 | 
			
		||||
 | 
			
		||||
const userStore = useUserStore();
 | 
			
		||||
const userInfo = userStore.getUserInfo;
 | 
			
		||||
const router = useRouter();
 | 
			
		||||
const route = useRoute();
 | 
			
		||||
const defaultQuery = {
 | 
			
		||||
  parentId: "0",
 | 
			
		||||
  parentName: "(无)此项为顶级部门",
 | 
			
		||||
  type: "1",
 | 
			
		||||
  code: "",
 | 
			
		||||
  level: "",
 | 
			
		||||
};
 | 
			
		||||
const parentId = ref(route.query.parentId || defaultQuery.parentId);
 | 
			
		||||
const parentName = ref(route.query.parentName || defaultQuery.parentName);
 | 
			
		||||
const activeTab = ref(route.query.type || defaultQuery.type);
 | 
			
		||||
const code = ref(route.query.code || defaultQuery.code);
 | 
			
		||||
const level = ref(route.query.level || defaultQuery.level);
 | 
			
		||||
const isRootAdd = ref(true);
 | 
			
		||||
const tabs = ref(
 | 
			
		||||
  DEPARTMENT_CATEGORY_LIST.map((item) => ({
 | 
			
		||||
    ...item,
 | 
			
		||||
    show: true,
 | 
			
		||||
  }))
 | 
			
		||||
);
 | 
			
		||||
const fnInitTabs = () => {
 | 
			
		||||
  if (userInfo.userId === "1") return;
 | 
			
		||||
  const roleId = "6084ca2e939f4fa6bed93ce01786df35";
 | 
			
		||||
  const roleIndex = userInfo.rolesId?.indexOf(roleId);
 | 
			
		||||
  if (roleIndex !== -1) {
 | 
			
		||||
    activeTab.value = "1";
 | 
			
		||||
    tabs.value.forEach((item, index) => {
 | 
			
		||||
      item.show = index !== 3;
 | 
			
		||||
    });
 | 
			
		||||
  } else if (userInfo.type === 2) {
 | 
			
		||||
    isRootAdd.value = false;
 | 
			
		||||
    activeTab.value = "2";
 | 
			
		||||
    tabs.value.forEach((item, index) => {
 | 
			
		||||
      item.show = index === 1;
 | 
			
		||||
    });
 | 
			
		||||
  } else if (userInfo.type === 3) {
 | 
			
		||||
    isRootAdd.value = false;
 | 
			
		||||
    activeTab.value = "3";
 | 
			
		||||
    tabs.value.forEach((item, index) => {
 | 
			
		||||
      item.show = index === 2;
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
  tabs.value = tabs.value.filter((item) => item.show);
 | 
			
		||||
};
 | 
			
		||||
fnInitTabs();
 | 
			
		||||
 | 
			
		||||
const { list, pagination, getData, resetPagination } = useListData(
 | 
			
		||||
  getDepartmentList,
 | 
			
		||||
  {
 | 
			
		||||
    params: () => ({
 | 
			
		||||
      type: activeTab.value,
 | 
			
		||||
      code: code.value,
 | 
			
		||||
      level: level.value,
 | 
			
		||||
      departmentId: parentId.value,
 | 
			
		||||
      parentId: parentId.value,
 | 
			
		||||
    }),
 | 
			
		||||
  }
 | 
			
		||||
);
 | 
			
		||||
onBeforeRouteUpdate((to) => {
 | 
			
		||||
  parentId.value = to.query.parentId || defaultQuery.parentId;
 | 
			
		||||
  parentName.value = to.query.parentName || defaultQuery.parentName;
 | 
			
		||||
  activeTab.value = to.query.type || defaultQuery.type;
 | 
			
		||||
  code.value = to.query.code || defaultQuery.code;
 | 
			
		||||
  level.value = to.query.level || defaultQuery.level;
 | 
			
		||||
  resetPagination();
 | 
			
		||||
});
 | 
			
		||||
const fnNavigation = (query) => {
 | 
			
		||||
| 
						 | 
				
			
			@ -201,7 +122,7 @@ const fnNavigation = (query) => {
 | 
			
		|||
};
 | 
			
		||||
const fnDelete = async (departmentId, name) => {
 | 
			
		||||
  await ElMessageBox.confirm(`确定要删除【${name}】吗?`, { type: "warning" });
 | 
			
		||||
  await setDepartmentDelete({ ids: [departmentId] });
 | 
			
		||||
  await setDepartmentDelete({ departmentId: departmentId });
 | 
			
		||||
  ElMessage.success("删除成功");
 | 
			
		||||
  resetPagination();
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,92 +2,6 @@
 | 
			
		|||
  <div>
 | 
			
		||||
    <el-form ref="formRef" :rules="rules" :model="form" label-width="110px">
 | 
			
		||||
      <el-row :gutter="12">
 | 
			
		||||
        <el-col :span="12">
 | 
			
		||||
          <el-form-item label="角色" prop="roleId">
 | 
			
		||||
            <el-select v-model="form.roleId">
 | 
			
		||||
              <el-option
 | 
			
		||||
                v-for="item in roleList"
 | 
			
		||||
                :key="item.roleId"
 | 
			
		||||
                :label="item.roleName"
 | 
			
		||||
                :value="item.roleId"
 | 
			
		||||
              />
 | 
			
		||||
            </el-select>
 | 
			
		||||
          </el-form-item>
 | 
			
		||||
        </el-col>
 | 
			
		||||
        <el-col v-if="form.roleId" :span="12">
 | 
			
		||||
          <el-form-item label="行政区域级别" prop="level">
 | 
			
		||||
            <el-select v-model="form.level">
 | 
			
		||||
              <el-option
 | 
			
		||||
                v-for="item in ADMINISTRATIVE_REGION_LEVEL_LIST"
 | 
			
		||||
                :key="item.id"
 | 
			
		||||
                :label="item.name"
 | 
			
		||||
                :value="item.id"
 | 
			
		||||
              />
 | 
			
		||||
            </el-select>
 | 
			
		||||
          </el-form-item>
 | 
			
		||||
        </el-col>
 | 
			
		||||
        <el-col
 | 
			
		||||
          v-if="form.roleId && form.level && form.level !== '-1'"
 | 
			
		||||
          :span="12"
 | 
			
		||||
        >
 | 
			
		||||
          <el-form-item :key="form.level" label="所属区域" prop="area">
 | 
			
		||||
            <app-area-cascader v-model="form.area" />
 | 
			
		||||
          </el-form-item>
 | 
			
		||||
        </el-col>
 | 
			
		||||
        <el-col
 | 
			
		||||
          v-if="form.roleId && form.level && form.area.length > 0"
 | 
			
		||||
          :span="12"
 | 
			
		||||
        >
 | 
			
		||||
          <el-form-item label="部门类别" prop="type">
 | 
			
		||||
            <el-select v-model="form.type">
 | 
			
		||||
              <el-option
 | 
			
		||||
                v-for="item in DEPARTMENT_CATEGORY_LIST"
 | 
			
		||||
                :key="item.id"
 | 
			
		||||
                :label="item.name"
 | 
			
		||||
                :value="item.id"
 | 
			
		||||
              />
 | 
			
		||||
            </el-select>
 | 
			
		||||
          </el-form-item>
 | 
			
		||||
        </el-col>
 | 
			
		||||
        <el-col
 | 
			
		||||
          v-if="form.roleId && form.level && form.area.length > 0 && pd.type"
 | 
			
		||||
          :span="12"
 | 
			
		||||
        >
 | 
			
		||||
          <el-form-item label="部门" prop="departmentId">
 | 
			
		||||
            <app-department v-model="form.departmentId" />
 | 
			
		||||
          </el-form-item>
 | 
			
		||||
        </el-col>
 | 
			
		||||
        <el-col v-if="form.roleId && form.level && form.type === 1" :span="12">
 | 
			
		||||
          <el-form-item label="安委会部门" prop="departmentCommission">
 | 
			
		||||
            <app-department v-model="form.departmentCommission" />
 | 
			
		||||
          </el-form-item>
 | 
			
		||||
        </el-col>
 | 
			
		||||
        <el-col :span="12">
 | 
			
		||||
          <el-form-item label="职务" prop="duty">
 | 
			
		||||
            <el-select v-model="form.duty" allow-create default-first-option>
 | 
			
		||||
              <el-option
 | 
			
		||||
                v-for="item in dutyList"
 | 
			
		||||
                :key="item.bianma"
 | 
			
		||||
                :label="item.name"
 | 
			
		||||
                :value="item.bianma"
 | 
			
		||||
              />
 | 
			
		||||
            </el-select>
 | 
			
		||||
          </el-form-item>
 | 
			
		||||
        </el-col>
 | 
			
		||||
        <el-col
 | 
			
		||||
          v-if="
 | 
			
		||||
            form.type === 3 &&
 | 
			
		||||
            (form.level === '2' || form.level === '3' || form.level === '4')
 | 
			
		||||
          "
 | 
			
		||||
          :span="12"
 | 
			
		||||
        >
 | 
			
		||||
          <el-form-item label="网格" prop="grid">
 | 
			
		||||
            <el-select v-model="form.grid">
 | 
			
		||||
              <el-option label="网格长" value="0" />
 | 
			
		||||
              <el-option v-if="form.level === '4'" label="网格员" value="1" />
 | 
			
		||||
            </el-select>
 | 
			
		||||
          </el-form-item>
 | 
			
		||||
        </el-col>
 | 
			
		||||
        <el-col :span="12">
 | 
			
		||||
          <el-form-item label="用户名" prop="username">
 | 
			
		||||
            <el-input v-model="form.username" />
 | 
			
		||||
| 
						 | 
				
			
			@ -99,8 +13,8 @@
 | 
			
		|||
          </el-form-item>
 | 
			
		||||
        </el-col>
 | 
			
		||||
        <el-col :span="12">
 | 
			
		||||
          <el-form-item label="手机号" prop="phone">
 | 
			
		||||
            <el-input v-model="form.phone" />
 | 
			
		||||
          <el-form-item label="手机号" prop="mobile">
 | 
			
		||||
            <el-input v-model="form.mobile" />
 | 
			
		||||
          </el-form-item>
 | 
			
		||||
        </el-col>
 | 
			
		||||
        <el-col :span="12">
 | 
			
		||||
| 
						 | 
				
			
			@ -109,11 +23,38 @@
 | 
			
		|||
          </el-form-item>
 | 
			
		||||
        </el-col>
 | 
			
		||||
        <el-col :span="12">
 | 
			
		||||
          <el-form-item label="备注" prop="bz">
 | 
			
		||||
            <el-input v-model="form.bz" type="textarea" />
 | 
			
		||||
          <el-form-item label="部门" prop="departmentId">
 | 
			
		||||
            <app-department v-model="form.departmentId"></app-department>
 | 
			
		||||
          </el-form-item>
 | 
			
		||||
        </el-col>
 | 
			
		||||
        <el-col :span="12">
 | 
			
		||||
          <el-form-item label="人员类型" prop="userType">
 | 
			
		||||
            <el-select v-model="form.userType">
 | 
			
		||||
              <el-option
 | 
			
		||||
                v-for="item in userTypeList"
 | 
			
		||||
                :key="item.id"
 | 
			
		||||
                :label="item.name"
 | 
			
		||||
                :value="item.id"
 | 
			
		||||
              />
 | 
			
		||||
            </el-select>
 | 
			
		||||
          </el-form-item>
 | 
			
		||||
        </el-col>
 | 
			
		||||
        <el-col :span="12">
 | 
			
		||||
          <el-form-item label="角色" prop="rolesId">
 | 
			
		||||
            <el-select v-model="form.rolesId">
 | 
			
		||||
              <el-option
 | 
			
		||||
                v-for="item in roleList"
 | 
			
		||||
                :key="item.roleId"
 | 
			
		||||
                :label="item.roleName"
 | 
			
		||||
                :value="item.roleId"
 | 
			
		||||
              />
 | 
			
		||||
            </el-select>
 | 
			
		||||
          </el-form-item>
 | 
			
		||||
        </el-col>
 | 
			
		||||
      </el-row>
 | 
			
		||||
      <div class="mt-10 tc">
 | 
			
		||||
        <el-button type="primary" @click="fnSubmit">保存</el-button>
 | 
			
		||||
      </div>
 | 
			
		||||
    </el-form>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
| 
						 | 
				
			
			@ -121,16 +62,26 @@
 | 
			
		|||
<script setup>
 | 
			
		||||
import { ref } from "vue";
 | 
			
		||||
import useForm from "@/hooks/useForm.js";
 | 
			
		||||
import { useRoute, useRouter } from "vue-router";
 | 
			
		||||
import { getRoleListAll } from "@/request/system_management.js";
 | 
			
		||||
import AppAreaCascader from "@/components/area_cascader/index.vue";
 | 
			
		||||
import AppDepartment from "@/components/department/index.vue";
 | 
			
		||||
import { MOBILE_PHONE } from "@/assets/js/regular.js";
 | 
			
		||||
import { hasUser } from "@/request/user_management.js";
 | 
			
		||||
import {
 | 
			
		||||
  ADMINISTRATIVE_REGION_LEVEL_LIST,
 | 
			
		||||
  DEPARTMENT_CATEGORY_LIST,
 | 
			
		||||
} from "@/assets/js/constant.js";
 | 
			
		||||
 | 
			
		||||
  hasUser,
 | 
			
		||||
  getUserInfo,
 | 
			
		||||
  setUserAdd,
 | 
			
		||||
  setUserUpdate,
 | 
			
		||||
} from "@/request/user_management.js";
 | 
			
		||||
import { ElMessage } from "element-plus";
 | 
			
		||||
import { debounce } from "throttle-debounce";
 | 
			
		||||
const route = useRoute();
 | 
			
		||||
const router = useRouter();
 | 
			
		||||
const { userId } = route.query;
 | 
			
		||||
const userTypeList = [
 | 
			
		||||
  { id: 1, name: "销售" },
 | 
			
		||||
  { id: 2, name: "服务" },
 | 
			
		||||
  { id: 3, name: "专家" },
 | 
			
		||||
];
 | 
			
		||||
const fnHasUser = async (_, value, callback) => {
 | 
			
		||||
  const { user } = await hasUser({
 | 
			
		||||
    username: value,
 | 
			
		||||
| 
						 | 
				
			
			@ -139,40 +90,17 @@ const fnHasUser = async (_, value, callback) => {
 | 
			
		|||
  if (!user) callback();
 | 
			
		||||
  else callback(new Error("用户名重复"));
 | 
			
		||||
};
 | 
			
		||||
const { formRef, validate } = useForm();
 | 
			
		||||
const form = ref({
 | 
			
		||||
  roleId: "",
 | 
			
		||||
  level: "",
 | 
			
		||||
  area: [],
 | 
			
		||||
  type: "",
 | 
			
		||||
  rolesId: "",
 | 
			
		||||
  departmentId: "",
 | 
			
		||||
  departmentCommission: "",
 | 
			
		||||
  duty: "",
 | 
			
		||||
  grid: "",
 | 
			
		||||
  username: "",
 | 
			
		||||
  name: "",
 | 
			
		||||
  phone: "",
 | 
			
		||||
  mobile: "",
 | 
			
		||||
  email: "",
 | 
			
		||||
  bz: "",
 | 
			
		||||
  userType: "",
 | 
			
		||||
});
 | 
			
		||||
const rules = {
 | 
			
		||||
  roleId: [{ required: true, message: "角色不能为空", trigger: "blur" }],
 | 
			
		||||
  area: [{ required: true, message: "所属区域不能为空", trigger: "blur" }],
 | 
			
		||||
  type: [{ required: true, message: "部门类别不能为空", trigger: "change" }],
 | 
			
		||||
  level: [{ required: true, message: "行政区域级别不能为空", trigger: "blur" }],
 | 
			
		||||
  departmentId: [
 | 
			
		||||
    {
 | 
			
		||||
      required: true,
 | 
			
		||||
      message: "部门不能为空",
 | 
			
		||||
      trigger: ["input", "change"],
 | 
			
		||||
    },
 | 
			
		||||
  ],
 | 
			
		||||
  departmentCommission: [
 | 
			
		||||
    {
 | 
			
		||||
      required: true,
 | 
			
		||||
      message: "安委会部门不能为空",
 | 
			
		||||
      trigger: ["input", "change"],
 | 
			
		||||
    },
 | 
			
		||||
  ],
 | 
			
		||||
  username: [
 | 
			
		||||
    { required: true, message: "用户名不能为空", trigger: "blur" },
 | 
			
		||||
    { min: 2, max: 30, message: "长度在 2 到 30 个字符", trigger: "blur" },
 | 
			
		||||
| 
						 | 
				
			
			@ -182,18 +110,49 @@ const rules = {
 | 
			
		|||
    { required: true, message: "姓名不能为空", trigger: "blur" },
 | 
			
		||||
    { min: 2, max: 30, message: "长度在 2 到 30 个字符", trigger: "blur" },
 | 
			
		||||
  ],
 | 
			
		||||
  phone: [
 | 
			
		||||
  mobile: [
 | 
			
		||||
    { required: true, message: "手机号码不能为空", trigger: "blur" },
 | 
			
		||||
    { pattern: MOBILE_PHONE, message: "请输入正确的手机号码", trigger: "blur" },
 | 
			
		||||
  ],
 | 
			
		||||
  rolesId: [{ required: true, message: "角色不能为空", trigger: "change" }],
 | 
			
		||||
  departmentId: [
 | 
			
		||||
    {
 | 
			
		||||
      required: true,
 | 
			
		||||
      message: "部门不能为空",
 | 
			
		||||
      trigger: ["input", "change"],
 | 
			
		||||
    },
 | 
			
		||||
  ],
 | 
			
		||||
  userType: [
 | 
			
		||||
    { required: true, message: "人员类型不能为空", trigger: "change" },
 | 
			
		||||
  ],
 | 
			
		||||
};
 | 
			
		||||
const roleList = ref([]);
 | 
			
		||||
const dutyList = ref([]);
 | 
			
		||||
const { formRef } = useForm();
 | 
			
		||||
(async () => {
 | 
			
		||||
  const resData = await getRoleListAll();
 | 
			
		||||
  roleList.value = resData.roleList;
 | 
			
		||||
})();
 | 
			
		||||
const fnGetData = async () => {
 | 
			
		||||
  if (!userId) return;
 | 
			
		||||
  const { user } = await getUserInfo({
 | 
			
		||||
    userId: userId,
 | 
			
		||||
  });
 | 
			
		||||
  form.value = user;
 | 
			
		||||
};
 | 
			
		||||
fnGetData();
 | 
			
		||||
const fnSubmit = debounce(
 | 
			
		||||
  1000,
 | 
			
		||||
  async () => {
 | 
			
		||||
    await validate();
 | 
			
		||||
    const params = {
 | 
			
		||||
      ...form.value,
 | 
			
		||||
      roleIdList: [form.value.rolesId],
 | 
			
		||||
    };
 | 
			
		||||
    !userId ? await setUserAdd(params) : await setUserUpdate(params);
 | 
			
		||||
    ElMessage.success("操作成功");
 | 
			
		||||
    router.back();
 | 
			
		||||
  },
 | 
			
		||||
  { atBegin: true }
 | 
			
		||||
);
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped lang="scss"></style>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,101 +1,69 @@
 | 
			
		|||
<template>
 | 
			
		||||
  <div style="display: flex; gap: 20px">
 | 
			
		||||
    <div
 | 
			
		||||
      v-if="userType === 3 && (userLevel === 2 || userLevel === 3)"
 | 
			
		||||
      style="width: 300px"
 | 
			
		||||
  <div style="gap: 20px">
 | 
			
		||||
    <app-search v-model="searchForm" :options @submit="resetPagination" />
 | 
			
		||||
    <app-table
 | 
			
		||||
      ref="tableRef"
 | 
			
		||||
      v-model:pagination="pagination"
 | 
			
		||||
      :data="list"
 | 
			
		||||
      row-key="userId"
 | 
			
		||||
      show-selection
 | 
			
		||||
      @get-data="getData"
 | 
			
		||||
    >
 | 
			
		||||
      <app-area-view-tree
 | 
			
		||||
        :default-expanded-keys="code"
 | 
			
		||||
        @node-click="fnNavigation({ code: $event.bianma, level: $event.level })"
 | 
			
		||||
      />
 | 
			
		||||
    </div>
 | 
			
		||||
    <div style="flex: 1">
 | 
			
		||||
      <app-search v-model="searchForm" :options @submit="resetPagination" />
 | 
			
		||||
      <app-table
 | 
			
		||||
        ref="tableRef"
 | 
			
		||||
        v-model:pagination="pagination"
 | 
			
		||||
        :data="list"
 | 
			
		||||
        row-key="userId"
 | 
			
		||||
        show-selection
 | 
			
		||||
        @get-data="getData"
 | 
			
		||||
      >
 | 
			
		||||
        <el-table-column prop="username" label="用户名" />
 | 
			
		||||
        <el-table-column prop="name" label="姓名" />
 | 
			
		||||
        <el-table-column prop="roleName" label="角色" />
 | 
			
		||||
        <el-table-column v-slot="{ row }" label="部门">
 | 
			
		||||
          {{ row.DEPARTMENT_FULL_NAME.replace(",", "/") }}
 | 
			
		||||
        </el-table-column>
 | 
			
		||||
        <el-table-column prop="dutyName" label="职务" />
 | 
			
		||||
        <el-table-column v-slot="{ row }" label="用户类别" width="90">
 | 
			
		||||
          <div v-if="row.type === 1">安委会用户</div>
 | 
			
		||||
          <div v-else-if="row.type === 2">行业用户</div>
 | 
			
		||||
          <div v-else-if="row.type === 3">
 | 
			
		||||
            <div v-if="row.grid === '0'">
 | 
			
		||||
              <div v-if="row.gridLevel === '1'">一级网格长</div>
 | 
			
		||||
              <div v-else-if="row.gridLevel === '2'">二级网格长</div>
 | 
			
		||||
              <div v-else-if="row.gridLevel === '3'">三级网格长</div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div v-else-if="row.grid === '1'">网格员</div>
 | 
			
		||||
            <div v-else>属地用户</div>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div v-else>其它用户</div>
 | 
			
		||||
        </el-table-column>
 | 
			
		||||
        <el-table-column prop="lastLogin" label="最近登录" width="140" />
 | 
			
		||||
        <el-table-column prop="ip" label="上次登录IP" width="120" />
 | 
			
		||||
        <el-table-column v-slot="{ row }" label="操作" width="150">
 | 
			
		||||
          <el-button
 | 
			
		||||
            type="primary"
 | 
			
		||||
            text
 | 
			
		||||
            link
 | 
			
		||||
            @click="
 | 
			
		||||
              router.push({
 | 
			
		||||
                url: '/user_management/user/add',
 | 
			
		||||
                query: { userId: row.userId },
 | 
			
		||||
              })
 | 
			
		||||
            "
 | 
			
		||||
          >
 | 
			
		||||
            修改
 | 
			
		||||
          </el-button>
 | 
			
		||||
          <el-button
 | 
			
		||||
            type="primary"
 | 
			
		||||
            text
 | 
			
		||||
            link
 | 
			
		||||
            @click="fnResetPassword(row.userId, row.username)"
 | 
			
		||||
          >
 | 
			
		||||
            重置密码
 | 
			
		||||
          </el-button>
 | 
			
		||||
          <el-button
 | 
			
		||||
            type="danger"
 | 
			
		||||
            text
 | 
			
		||||
            link
 | 
			
		||||
            @click="fnDelete(row.userId, row.username)"
 | 
			
		||||
          >
 | 
			
		||||
            删除
 | 
			
		||||
          </el-button>
 | 
			
		||||
        </el-table-column>
 | 
			
		||||
        <template #button>
 | 
			
		||||
          <el-button
 | 
			
		||||
            type="primary"
 | 
			
		||||
            @click="router.push({ path: '/user_management/user/add' })"
 | 
			
		||||
          >
 | 
			
		||||
            新建
 | 
			
		||||
          </el-button>
 | 
			
		||||
          <el-button type="danger" @click="fnDelete('', '')">
 | 
			
		||||
            批量删除
 | 
			
		||||
          </el-button>
 | 
			
		||||
        </template>
 | 
			
		||||
      </app-table>
 | 
			
		||||
    </div>
 | 
			
		||||
      <el-table-column prop="name" label="姓名" />
 | 
			
		||||
      <el-table-column prop="username" label="用户名" />
 | 
			
		||||
      <el-table-column prop="mobile" label="手机号" />
 | 
			
		||||
      <el-table-column prop="departmentName" label="部门"> </el-table-column>
 | 
			
		||||
      <el-table-column v-slot="{ row }" label="操作" width="150">
 | 
			
		||||
        <el-button
 | 
			
		||||
          type="primary"
 | 
			
		||||
          text
 | 
			
		||||
          link
 | 
			
		||||
          @click="
 | 
			
		||||
            router.push({
 | 
			
		||||
              path: '/user_management/user/edit',
 | 
			
		||||
              query: { userId: row.userId },
 | 
			
		||||
            })
 | 
			
		||||
          "
 | 
			
		||||
        >
 | 
			
		||||
          修改
 | 
			
		||||
        </el-button>
 | 
			
		||||
        <el-button
 | 
			
		||||
          type="primary"
 | 
			
		||||
          text
 | 
			
		||||
          link
 | 
			
		||||
          @click="fnResetPassword(row.userId, row.username)"
 | 
			
		||||
        >
 | 
			
		||||
          重置密码
 | 
			
		||||
        </el-button>
 | 
			
		||||
        <el-button
 | 
			
		||||
          type="danger"
 | 
			
		||||
          text
 | 
			
		||||
          link
 | 
			
		||||
          @click="fnDelete(row.userId, row.username)"
 | 
			
		||||
        >
 | 
			
		||||
          删除
 | 
			
		||||
        </el-button>
 | 
			
		||||
      </el-table-column>
 | 
			
		||||
      <template #button>
 | 
			
		||||
        <el-button
 | 
			
		||||
          type="primary"
 | 
			
		||||
          @click="router.push({ path: '/user_management/user/add' })"
 | 
			
		||||
        >
 | 
			
		||||
          新建
 | 
			
		||||
        </el-button>
 | 
			
		||||
        <el-button type="danger" @click="fnDelete('', '')">
 | 
			
		||||
          批量删除
 | 
			
		||||
        </el-button>
 | 
			
		||||
      </template>
 | 
			
		||||
    </app-table>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script setup>
 | 
			
		||||
import AppSearch from "@/components/search/index.vue";
 | 
			
		||||
import { useUserStore } from "@/pinia/user.js";
 | 
			
		||||
import { getRoleListAll } from "@/request/system_management.js";
 | 
			
		||||
import { ref } from "vue";
 | 
			
		||||
import AppAreaViewTree from "@/components/area_view_tree/index.vue";
 | 
			
		||||
import { onBeforeRouteUpdate, useRoute, useRouter } from "vue-router";
 | 
			
		||||
import { useRouter } from "vue-router";
 | 
			
		||||
import useListData from "@/hooks/useListData.js";
 | 
			
		||||
import {
 | 
			
		||||
  getUserList,
 | 
			
		||||
| 
						 | 
				
			
			@ -104,49 +72,13 @@ import {
 | 
			
		|||
} from "@/request/user_management.js";
 | 
			
		||||
import AppTable from "@/components/table/index.vue";
 | 
			
		||||
import { ElMessage, ElMessageBox } from "element-plus";
 | 
			
		||||
import { DEPARTMENT_CATEGORY_LIST } from "@/assets/js/constant.js";
 | 
			
		||||
 | 
			
		||||
const userStore = useUserStore();
 | 
			
		||||
const {
 | 
			
		||||
  rolesId,
 | 
			
		||||
  userId,
 | 
			
		||||
  type: userType,
 | 
			
		||||
  level: userLevel,
 | 
			
		||||
} = userStore.getUserInfo;
 | 
			
		||||
const router = useRouter();
 | 
			
		||||
const route = useRoute();
 | 
			
		||||
const defaultQuery = {
 | 
			
		||||
  code: "",
 | 
			
		||||
  level: "",
 | 
			
		||||
};
 | 
			
		||||
const code = ref(route.query.code || defaultQuery.code);
 | 
			
		||||
const level = ref(route.query.level || defaultQuery.level);
 | 
			
		||||
const roleList = ref([]);
 | 
			
		||||
const { list, pagination, searchForm, getData, resetPagination, tableRef } =
 | 
			
		||||
  useListData(getUserList, {
 | 
			
		||||
    params: () => ({
 | 
			
		||||
      code: code.value,
 | 
			
		||||
      level: level.value,
 | 
			
		||||
    }),
 | 
			
		||||
  });
 | 
			
		||||
  useListData(getUserList);
 | 
			
		||||
const options = [
 | 
			
		||||
  { key: "roleName", label: "关键字", tip: "帐号、姓名、手机号" },
 | 
			
		||||
  {
 | 
			
		||||
    key: "type",
 | 
			
		||||
    label: "部门类别",
 | 
			
		||||
    type: "select",
 | 
			
		||||
    options: DEPARTMENT_CATEGORY_LIST,
 | 
			
		||||
    hidden: !(rolesId?.indexOf("1") !== -1 || userId === "1"),
 | 
			
		||||
  },
 | 
			
		||||
  { key: "departmentName", label: "部门名称" },
 | 
			
		||||
  {
 | 
			
		||||
    key: "roleId",
 | 
			
		||||
    label: "角色",
 | 
			
		||||
    type: "select",
 | 
			
		||||
    options: roleList,
 | 
			
		||||
    valueKey: "roleId",
 | 
			
		||||
    labelKey: "roleName",
 | 
			
		||||
  },
 | 
			
		||||
  { key: "name", label: "姓名" },
 | 
			
		||||
  { key: "username", label: "用户名" },
 | 
			
		||||
];
 | 
			
		||||
(async () => {
 | 
			
		||||
  const resData = await getRoleListAll();
 | 
			
		||||
| 
						 | 
				
			
			@ -169,35 +101,24 @@ const fnDelete = async (userId, name) => {
 | 
			
		|||
    });
 | 
			
		||||
    ids.push(userId);
 | 
			
		||||
  } else {
 | 
			
		||||
    ids = tableRef.value.getSelectionRows();
 | 
			
		||||
    const selectData = tableRef.value.getSelectionRows();
 | 
			
		||||
    ids = selectData.map((item) => item.userId);
 | 
			
		||||
    if (ids.length === 0) {
 | 
			
		||||
      return ElMessage.error("请选择要删除的数据");
 | 
			
		||||
    }
 | 
			
		||||
    await ElMessageBox.confirm(
 | 
			
		||||
      `"确定要删除【${ids.map((item) => item.username).join("、")}】吗?"`,
 | 
			
		||||
      `"确定要删除【${selectData
 | 
			
		||||
        .map((item) => item.username)
 | 
			
		||||
        .join("、")}】吗?"`,
 | 
			
		||||
      {
 | 
			
		||||
        type: "warning",
 | 
			
		||||
      }
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
  await setUserDelete({ ids });
 | 
			
		||||
  await setUserDelete({ userIds: ids });
 | 
			
		||||
  ElMessage.success("删除成功");
 | 
			
		||||
  resetPagination();
 | 
			
		||||
};
 | 
			
		||||
onBeforeRouteUpdate((to) => {
 | 
			
		||||
  code.value = to.query.code || defaultQuery.code;
 | 
			
		||||
  level.value = to.query.level || defaultQuery.level;
 | 
			
		||||
  resetPagination();
 | 
			
		||||
});
 | 
			
		||||
const fnNavigation = (query) => {
 | 
			
		||||
  router.push({
 | 
			
		||||
    path: "/user_management/user",
 | 
			
		||||
    query: {
 | 
			
		||||
      ...route.query,
 | 
			
		||||
      ...query,
 | 
			
		||||
    },
 | 
			
		||||
  });
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped></style>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue