'-'
zhangwei
2025-07-29 2aa2da6ff94c0e88e7ba0638606881a3c04cf579
'-'
12个文件已修改
1个文件已添加
237 ■■■■■ 已修改文件
src/layout/components/lay-navbar/index.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/lay-tag/index.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/hooks/useNav.ts 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/hooks/useTag.ts 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/utils.ts 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/modules/multiTags.ts 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/modules/user.ts 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/home/component/myFooter.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/home/component/myHeader.vue 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/home/index.vue 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/dept/form.vue 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/dept/index.vue 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/dept/utils/hook.tsx 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/lay-navbar/index.vue
@@ -62,6 +62,7 @@
        </span>
        <template #dropdown>
          <el-dropdown-menu class="logout">
            <template v-if="userRolesList && userRolesList.length > 1">
            <el-dropdown-item
              v-for="item in userRolesList"
              :key="item.code"
@@ -69,6 +70,7 @@
            >
              {{ item.name }}
            </el-dropdown-item>
            </template>
            <el-dropdown-item @click="logout">
              <!-- <IconifyIconOffline
                :icon="LogoutCircleRLine"
src/layout/components/lay-tag/index.vue
@@ -46,6 +46,7 @@
  currentSelect,
  scheduleIsActive,
  getContextMenuStyle,
  userRoles,
  closeMenu,
  onMounted,
  onMouseenter,
@@ -186,6 +187,7 @@
    if (!hasValue) {
      arr.forEach((arrItem: any) => {
        if (arrItem.path === value) {
          console.log(arrItem.path, value, "arrItem.path === value");
          useMultiTagsStoreHook().handleTags("push", {
            path: value,
            meta: arrItem.meta,
src/layout/hooks/useNav.ts
@@ -52,7 +52,7 @@
      : useUserStoreHook()?.nickname;
  });
  /** 角色 */
  /** 当前角色 */
  const userRoles = computed(() => {
    return useUserStoreHook()?.nowRole;
  });
src/layout/hooks/useTag.ts
@@ -8,7 +8,6 @@
  getCurrentInstance
} from "vue";
import type { tagsViewsType } from "../types";
import { useUserStoreHook } from "@/store/modules/user";
import { useRoute, useRouter } from "vue-router";
import { responsiveStorageNameSpace } from "@/config";
import { useSettingStoreHook } from "@/store/modules/settings";
@@ -43,7 +42,6 @@
  // 当前右键选中的路由信息
  const currentSelect = ref({});
  const isScrolling = ref(false);
  const hasFlash = useUserStoreHook()?.nowRole.hasFlsh;
  /** 显示模式,默认灵动模式 */
  const showModel = ref(
src/router/utils.ts
@@ -21,6 +21,7 @@
import { userKey, type DataInfo } from "@/utils/auth";
import { type menuType, routerArrays } from "@/layout/types";
import { useMultiTagsStoreHook } from "@/store/modules/multiTags";
import { useUserStoreHook } from "@/store/modules/user";
import { usePermissionStoreHook } from "@/store/modules/permission";
const IFrame = () => import("@/layout/frame.vue");
// https://cn.vitejs.dev/guide/features.html#glob-import
@@ -387,7 +388,7 @@
    usePermissionStoreHook().wholeMenus[0]?.children[0]
  );
  tag && useMultiTagsStoreHook().handleTags("push", topMenu);
  console.log(topMenu, "topMenu");
  // console.log(topMenu, "topMenu");
  return topMenu;
}
src/store/modules/multiTags.ts
@@ -62,6 +62,8 @@
      value?: T | multiType,
      position?: positionType
    ): T {
      console.log(mode, "--------------",value);
      switch (mode) {
        case "equal":
          this.multiTags = value;
src/store/modules/user.ts
@@ -48,8 +48,7 @@
    enterpriseInfo:
      storageLocal().getItem<DataInfo<number>>("enterpriseInfo") ?? {},
    nowRole: storageLocal().getItem<DataInfo<number>>("nowRole") ?? {},
    rolesList: storageLocal().getItem<DataInfo<number>>("rolesList") ?? [],
    isFlsh: storageLocal().getItem<DataInfo<number>>("isFlsh") ?? false
    rolesList: storageLocal().getItem<DataInfo<number>>("rolesList") ?? []
  }),
  actions: {
    /** 存储头像 */
@@ -75,10 +74,6 @@
    /** 存储角色列表 */
    SET_ROLES_LIST(rolesList: Array<string>) {
      this.rolesList = rolesList;
    },
    /** 当前角色是否审核 */
    SET_IS_FLSH(isFlsh: boolean | string) {
      this.isFlsh = isFlsh;
    },
    /** 存储按钮级别权限 */
    SET_PERMS(permissions: Array<string>) {
src/views/home/component/myFooter.vue
@@ -1,7 +1,7 @@
<template>
  <div class="myfooter">
    <div
      class="w-[58%] mx-auto flex justify-between items-center flex-wrap pt-8"
      class="w-[68%] mx-auto flex justify-between items-center flex-wrap pt-8"
    >
      <div class="flex-1/2">
        <span>关于我们:</span>
src/views/home/component/myHeader.vue
New file
@@ -0,0 +1,63 @@
<script setup lang="ts">
defineOptions({
  name: "MyHeader"
});
</script>
<template>
  <div class="header">
    <img width="227px" height="74px" src="@/assets/home/logo.png" alt="" />
    <img width="427px" height="74px" src="@/assets/home/Header.png" alt="" />
    <div class="other">
      <div class="item">
        <img width="21px" height="21px" src="@/assets/home/share.png" alt="" />
        <span>分享网站</span>
      </div>
      <div class="item">
        <img
          width="21px"
          height="21px"
          src="@/assets/home/BellFilled.png"
          alt=""
        />
        <span>我的消息</span>
      </div>
    </div>
  </div>
</template>
<style lang="scss" scoped>
.header {
  display: flex;
  align-items: center;
  justify-content: space-evenly;
  height: 80px;
  width: 100%;
  .middle {
    width: 50%;
    display: flex;
    justify-content: space-around;
    color: rgb(51, 51, 51);
    font-family: 思源黑体;
  }
  .other {
    display: flex;
    .item {
      display: flex;
      justify-content: center;
      width: 63px;
      height: 48px;
      color: rgb(51, 51, 51);
      font-family: 思源黑体;
      font-size: 12px;
      font-weight: 400;
      line-height: 20px;
      letter-spacing: 0%;
      text-align: left;
      text-transform: capitalize;
      flex-wrap: wrap;
      margin-right: 10px;
    }
  }
}
</style>
src/views/home/index.vue
@@ -1,24 +1,6 @@
el
<template>
  <div class="header">
    <img width="227px" height="74px" src="@/assets/home/logo.png" alt="" />
    <img width="427px" height="74px" src="@/assets/home/Header.png" alt="" />
    <div class="other">
      <div class="item">
        <img width="21px" height="21px" src="@/assets/home/share.png" alt="" />
        <span>分享网站</span>
      </div>
      <div class="item">
        <img
          width="21px"
          height="21px"
          src="@/assets/home/BellFilled.png"
          alt=""
        />
        <span>我的消息</span>
      </div>
    </div>
  </div>
  <my-header />
  <div class="banner">
    <!-- <img width="100%" height="306px" src="@/assets/home/banner.png" alt="" /> -->
  </div>
@@ -395,6 +377,7 @@
<script lang="ts" setup>
import { onMounted, ref, computed, reactive } from "vue";
import MyFooter from "./component/myFooter.vue";
import MyHeader from "./component/myHeader.vue";
import { useUserStoreHook } from "@/store/modules/user";
import { exRole } from "@/api/register/index";
import { storageLocal, isString, isIncludeAllChildren } from "@pureadmin/utils";
@@ -461,39 +444,6 @@
</script>
<style lang="scss" scoped>
.header {
  display: flex;
  align-items: center;
  justify-content: space-evenly;
  height: 80px;
  width: 100%;
  .middle {
    width: 50%;
    display: flex;
    justify-content: space-around;
    color: rgb(51, 51, 51);
    font-family: 思源黑体;
  }
  .other {
    display: flex;
    .item {
      display: flex;
      justify-content: center;
      width: 63px;
      height: 48px;
      color: rgb(51, 51, 51);
      font-family: 思源黑体;
      font-size: 12px;
      font-weight: 400;
      line-height: 20px;
      letter-spacing: 0%;
      text-align: left;
      text-transform: capitalize;
      flex-wrap: wrap;
      margin-right: 10px;
    }
  }
}
.banner {
  //   left: -3.76px;
  //   top: 80px;
src/views/system/dept/form.vue
@@ -24,7 +24,7 @@
    shifoufenbao: "false", // 是否分包(可选)
    shifoutuisongxuanchuan: "true", // 是否推送宣传(可选)
    caigourenmingcheng: null, // 采购人名称(可选)
    xingzhengquyu: null, // 行政区域(可选)
    xingzhengquyu: [], // 行政区域(可选)
    xingzhengquyuName: null, // 行政区域名称(可选)
    jigoudaima: null, // 机构代码(可选)
    daimaleixing: null, // 代码类型(可选)
@@ -52,7 +52,9 @@
function getRef() {
  return ruleFormRef.value;
}
const handleChange = value => {
  console.log(value);
};
defineExpose({ getRef });
onMounted(async () => {});
</script>
@@ -138,15 +140,19 @@
      </re-col>
      <re-col :value="6" :xs="24" :sm="24">
        <el-form-item label="定制规划" prop="dingbiaoguize">
          <el-checkbox-group
          <!-- <el-checkbox-group
            v-model="newFormInline.dingbiaoguize"
            placeholder="请选择状态"
            clearable
            class="w-[100%]!"
          >
            <el-checkbox label="最低价" :value="1" />
            <el-checkbox label="综合评分" :value="0" />
          </el-checkbox-group>
            <el-checkbox label="最低价" value="最低价" />
            <el-checkbox label="综合评分" value="综合评分" />
          </el-checkbox-group> -->
          <el-radio-group v-model="newFormInline.dingbiaoguize">
            <el-radio value="最低价">最低价</el-radio>
            <el-radio value="综合评分">综合评分</el-radio>
          </el-radio-group>
        </el-form-item>
      </re-col>
      <re-col :value="6" :xs="24" :sm="24">
@@ -226,14 +232,14 @@
            class="w-full"
            :options="state.regionList"
            :props="{
              value: 'id',
              value: 'code',
              label: 'name',
              emitPath: false,
              children: 'regions'
            }"
            clearable
            filterable
            placeholder="请选择区域"
            @change="handleChange"
          />
        </el-form-item>
      </re-col>
src/views/system/dept/index.vue
@@ -25,7 +25,11 @@
  resetForm,
  openDialog,
  handleDelete,
  handleSelectionChange
  handleSelectionChange,
  handleSizeChange,
  handleCurrentChange,
  pagination,
  checkboxAsRadio
} = useDept();
function onFullscreen() {
@@ -114,9 +118,10 @@
                v-model="form.zhiyi"
                clearable
                class="w-[100%]!"
                @change="checkboxAsRadio(form.zhiyi)"
              >
                <el-checkbox label="有" :value="1" />
                <el-checkbox label="无" :value="0" />
                <el-checkbox label="有" value="true" />
                <el-checkbox label="无" value="false" />
              </el-checkbox-group>
            </el-form-item>
          </el-col>
@@ -126,9 +131,10 @@
                v-model="form.tousu"
                clearable
                class="w-[100%]!"
                @change="checkboxAsRadio(form.tousu)"
              >
                <el-checkbox label="有" :value="1" />
                <el-checkbox label="无" :value="0" />
                <el-checkbox label="有" value="true" />
                <el-checkbox label="无" value="false" />
              </el-checkbox-group>
            </el-form-item>
          </el-col>
@@ -225,15 +231,17 @@
          row-key="id"
          showOverflowTooltip
          table-layout="auto"
          default-expand-all
          :loading="loading"
          :data="dataList"
          :columns="dynamicColumns"
          :pagination="{ ...pagination, size }"
          :header-cell-style="{
            background: 'var(--el-fill-color-light)',
            color: 'var(--el-text-color-primary)'
          }"
          @selection-change="handleSelectionChange"
          @page-size-change="handleSizeChange"
          @page-current-change="handleCurrentChange"
        >
          <template #operation="{ row }">
            <el-button
src/views/system/dept/utils/hook.tsx
@@ -11,6 +11,7 @@
  getRegionList,
  getDaimaleixingList,
  caigourenAdd,
  caigourenUpdate,
  caigourenDelete
} from "@/api/item/index";
import { usePublicHooks } from "../../hooks";
@@ -24,15 +25,15 @@
    // 新增日期范围,可为 null,类型为数组
    createDateRange: null,
    // 行政区域,可为 null,类型为字符串
    xingzhengquyu: "",
    xingzhengquyu: [],
    // 行业品目,可为 null,类型为字符串
    hangyepinmu: "",
    // 订单状态,可为 null,类型为 32 位整数
    orderStatus: "",
    // 质疑有无,可为 null,类型为布尔值
    zhiyi: null,
    zhiyi: [],
    // 投诉有无,可为 null,类型为布尔值
    tousu: null,
    tousu: [],
    // 项目名称,可为 null,类型为字符串
    projectName: null,
    // 代理机构名称,可为 null,类型为字符串
@@ -48,6 +49,12 @@
    orderStatusList: [],
    regionList: [],
    daimaleixingList: []
  });
  const pagination = reactive<PaginationProps>({
    total: 0,
    pageSize: 10,
    currentPage: 1,
    background: true
  });
  //获取采购方式
  const getCaigoufangshiListFun = async () => {
@@ -86,7 +93,7 @@
    const res = state.orderStatusList.find(item => {
      return row.orderStatus == item.status;
    });
    return res.label;
    return res?.label;
  };
  const columns: TableColumnList = [
    {
@@ -155,18 +162,36 @@
  function handleSelectionChange(val) {
    console.log("handleSelectionChange", val);
  }
  function handleSizeChange(val: number) {
    console.log(`${val} items per page`);
  }
  function handleCurrentChange(val: number) {
    console.log(`current page: ${val}`);
  }
  function resetForm(formEl) {
    if (!formEl) return;
    formEl.resetFields();
    onSearch();
  }
  const checkboxAsRadio = data => {
    if (data.length > 1) {
      data.shift();
    }
  };
  async function onSearch() {
    loading.value = true;
    const { result } = await zhaobiaoPageOrder(form); // 这里是返回一维数组结构,前端自行处理成树结构,返回格式要求:唯一id加父节点parentId,parentId取父节点id
    const obj = cloneDeep(form);
    obj.tousu = obj.tousu.join("");
    obj.zhiyi = obj.zhiyi.join("");
    obj.xingzhengquyu = obj.xingzhengquyu.join("");
    const { result } = await zhaobiaoPageOrder(obj); // 这里是返回一维数组结构,前端自行处理成树结构,返回格式要求:唯一id加父节点parentId,parentId取父节点id
    const newData = result.items;
    loading.value = false;
    pagination.total = result.total;
    pagination.pageSize = result.pageSize;
    pagination.currentPage = result.page;
    // if (!isAllEmpty(form.name)) {
    //   // 前端搜索部门名称
    //   newData = newData.filter(item => item.name.includes(form.name));
@@ -209,7 +234,7 @@
          shifoufenbao: row?.shifoufenbao ?? false, // 是否分包(可选)
          shifoutuisongxuanchuan: row?.shifoutuisongxuanchuan ?? true, // 是否推送宣传(可选)
          caigourenmingcheng: row?.caigourenmingcheng ?? null, // 采购人名称(可选)
          xingzhengquyu: row?.xingzhengquyu ?? null, // 行政区域(可选)
          xingzhengquyu: row?.xingzhengquyu.split(",") ?? [], // 行政区域(可选)
          xingzhengquyuName: row?.xingzhengquyuName ?? null, // 行政区域名称(可选)
          jigoudaima: row?.jigoudaima ?? null, // 机构代码(可选)
          daimaleixing: row?.daimaleixing ?? null, // 代码类型(可选)
@@ -237,12 +262,19 @@
      contentRenderer: () => h(editForm, { ref: formRef, formInline: null }),
      beforeSure: (done, { options }) => {
        const FormRef = formRef.value.getRef();
        const curData = options.props.formInline as FormItemProps;
        const curData = cloneDeep(options.props.formInline as FormItemProps);
        async function chores() {
          message(`您${title}了项目名称为${curData.projectName}的这条数据`, {
            type: "success"
          });
          const res = await caigourenAdd(curData);
          // curData.dingbiaoguize = curData.dingbiaoguize.join("");
          curData.xingzhengquyu = curData.xingzhengquyu.join(",");
          let res;
          if (title == "新增") {
            res = await caigourenAdd(curData);
          } else {
            res = await caigourenUpdate(curData);
          }
          if (res.code == "200") {
            done(); // 关闭弹框
            onSearch(); // 刷新表格数据
@@ -306,6 +338,10 @@
    openDialog,
    /** 删除部门 */
    handleDelete,
    handleSelectionChange
    handleSelectionChange,
    handleSizeChange,
    handleCurrentChange,
    pagination,
    checkboxAsRadio
  };
}