xiaodai2017 2 years ago
parent
commit
f6cf52f080

+ 74 - 0
src/views/parameter/clients/columns.tsx

@@ -0,0 +1,74 @@
+import { ref } from "vue";
+import dayjs from "dayjs";
+import { statusList, levelList } from "/@/utils/status";
+export function useColumns() {
+  const columns = ref([
+    {
+      type: "selection",
+      width: 55,
+      hide: ({ checkList }) => !checkList.includes("勾选列")
+    },
+    {
+      label: "序号",
+      type: "index",
+      width: 70,
+      hide: ({ checkList }) => !checkList.includes("序号列")
+    },
+
+    {
+      label: "角色名称",
+      prop: "role_name"
+    },
+    {
+      label: "等级",
+      prop: "level",
+      cellRenderer: ({ row, props }) => (
+        <el-tag
+          size={props.size}
+          type={
+            (levelList.find(item => item.value == row.level + "") || {}).type ||
+            "info"
+          }
+          effect="plain"
+        >
+          {(levelList.find(item => item.value == row.level + "") || {}).label ||
+            "--"}
+        </el-tag>
+      )
+    },
+    {
+      label: "状态",
+      prop: "status",
+      cellRenderer: ({ row, props }) => (
+        <el-tag
+          size={props.size}
+          type={
+            (statusList.find(item => item.value == row.status + "") || {})
+              .type || "info"
+          }
+          effect="plain"
+        >
+          {(statusList.find(item => item.value == row.status + "") || {})
+            .label || "--"}
+        </el-tag>
+      )
+    },
+
+    {
+      label: "创建时间",
+      prop: "createTime",
+      formatter: ({ createTime }) =>
+        dayjs(createTime).format("YYYY-MM-DD HH:mm:ss")
+    },
+    {
+      label: "操作",
+      fixed: "right",
+      width: 145,
+      slot: "operation"
+    }
+  ]);
+
+  return {
+    columns
+  };
+}

+ 228 - 0
src/views/parameter/clients/index.vue

@@ -0,0 +1,228 @@
+<script setup lang="ts">
+import { useColumns } from "./columns";
+import { httpList, httpStatus } from "/@/api/system/updates";
+import { reactive, ref, onMounted } from "vue";
+import { type FormInstance } from "element-plus";
+import { ElMessage } from "element-plus";
+import { TableProBar } from "/@/components/ReTable";
+import { type PaginationProps } from "@pureadmin/table";
+import { useRenderIcon } from "/@/components/ReIcon/src/hooks";
+import { useNav } from "/@/layout/hooks/nav";
+import { statusList } from "/@/utils/status";
+const { logout } = useNav();
+defineOptions({
+  name: "role"
+});
+
+const form = reactive({
+  name: "",
+  page: 1,
+  size: 15
+});
+
+const dataList = ref([]);
+const loading = ref(true);
+const { columns } = useColumns();
+const showModel = ref(false);
+const itemId = ref("");
+const isDetails = ref("add");
+const formRef = ref<FormInstance>();
+
+const pagination = reactive<PaginationProps>({
+  total: 0,
+  pageSize: 15,
+  currentPage: 1,
+  background: true
+});
+
+//修改状态
+const handleStatus = async row => {
+  const { id, status } = row;
+  const { code, message } = await httpStatus({
+    id,
+    status: status + "" === "1" ? "0" : "1"
+  });
+  if (code === 0) {
+    onSearch();
+  } else if (code > 100 && code < 140) {
+    logout();
+  } else {
+    ElMessage.error(message);
+  }
+};
+
+async function handleCurrentChange(val: number) {
+  form.page = val;
+  await onSearch();
+}
+
+async function handleSizeChange(val: number) {
+  form.size = val;
+  form.page = 1;
+  await onSearch();
+}
+
+function handleSelectionChange(val) {
+  console.log("handleSelectionChange", val);
+}
+
+async function onSearch() {
+  loading.value = true;
+  const { code, data, message } = await httpList(form);
+  if (code === 0) {
+    const { list, count } = data;
+    dataList.value = list ?? [];
+    pagination.total = count ?? 0;
+    pagination.pageSize = form.size;
+    pagination.currentPage = form.page;
+  } else if (code > 100 && code < 140) {
+    logout();
+  } else {
+    ElMessage.error(message);
+  }
+  loading.value = false;
+}
+async function resetSearch() {
+  form.page = 1;
+  await onSearch();
+}
+//新建/编辑/详情弹窗
+function editItem(id, type) {
+  itemId.value = id;
+  isDetails.value = type;
+  showModel.value = true;
+}
+
+const resetForm = (formEl: FormInstance | undefined) => {
+  if (!formEl) return;
+  formEl.resetFields();
+  form.page = 1;
+  onSearch();
+};
+
+onMounted(() => {
+  onSearch();
+});
+</script>
+
+<template>
+  <div class="main role">
+    <el-form
+      ref="formRef"
+      :inline="true"
+      :model="form"
+      :label-width="0"
+      class="bg-white w-99/100 pl-8 pt-4"
+    >
+      <el-form-item prop="status">
+        <el-select
+          v-model="form.status"
+          style="width: 100%"
+          placeholder="角色状态"
+          clearable
+        >
+          <el-option
+            v-for="(si, sii) in statusList"
+            :key="'status' + si.value + sii"
+            :label="si.label"
+            :value="si.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item prop="role_name">
+        <el-input v-model="form.role_name" placeholder="角色名称" clearable />
+      </el-form-item>
+      <el-form-item>
+        <el-button
+          type="primary"
+          :icon="useRenderIcon('search')"
+          :loading="loading"
+          @click="resetSearch"
+        >
+          搜索
+        </el-button>
+        <el-button :icon="useRenderIcon('refresh')" @click="resetForm(formRef)">
+          重置
+        </el-button>
+      </el-form-item>
+    </el-form>
+
+    <TableProBar
+      title="角色管理"
+      :loading="loading"
+      :dataList="dataList"
+      @refresh="onSearch"
+    >
+      <template #buttons>
+        <el-button
+          type="primary"
+          :icon="useRenderIcon('add')"
+          @click="editItem('', 'add')"
+        >
+          新增角色
+        </el-button>
+      </template>
+      <template v-slot="{ size, checkList }">
+        <PureTable
+          border
+          align="left"
+          showOverflowTooltip
+          table-layout="auto"
+          :size="size"
+          :data="dataList"
+          :columns="columns"
+          :checkList="checkList"
+          :pagination="pagination"
+          :paginationSmall="size === 'small' ? true : false"
+          :header-cell-style="{ background: '#fafafa', color: '#606266' }"
+          @selection-change="handleSelectionChange"
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+        >
+          <template #operation="{ row }">
+            <el-button
+              class="reset-margin"
+              link
+              type="primary"
+              :size="size"
+              @click="editItem(row.id, 'view')"
+              :icon="useRenderIcon('eye-view')"
+            />
+            <el-button
+              class="reset-margin"
+              link
+              type="primary"
+              :size="size"
+              @click="editItem(row.id, 'edit')"
+              :icon="useRenderIcon('edits')"
+            />
+            <el-popconfirm
+              :title="row.status === '1' ? '改为禁用?' : '改为启用?'"
+              @confirm="handleStatus(row)"
+            >
+              <template #reference>
+                <el-button
+                  class="reset-margin"
+                  link
+                  type="primary"
+                  :size="size"
+                  :icon="
+                    useRenderIcon(
+                      row.status === '1'
+                        ? 'close-circle-line'
+                        : 'checkbox-circle-line'
+                    )
+                  " /></template
+            ></el-popconfirm>
+          </template>
+        </PureTable>
+      </template>
+    </TableProBar>
+  </div>
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+</style>

+ 0 - 0
src/views/parameter/clients/客户管理


+ 74 - 0
src/views/parameter/finance/columns.tsx

@@ -0,0 +1,74 @@
+import { ref } from "vue";
+import dayjs from "dayjs";
+import { statusList, levelList } from "/@/utils/status";
+export function useColumns() {
+  const columns = ref([
+    {
+      type: "selection",
+      width: 55,
+      hide: ({ checkList }) => !checkList.includes("勾选列")
+    },
+    {
+      label: "序号",
+      type: "index",
+      width: 70,
+      hide: ({ checkList }) => !checkList.includes("序号列")
+    },
+
+    {
+      label: "角色名称",
+      prop: "role_name"
+    },
+    {
+      label: "等级",
+      prop: "level",
+      cellRenderer: ({ row, props }) => (
+        <el-tag
+          size={props.size}
+          type={
+            (levelList.find(item => item.value == row.level + "") || {}).type ||
+            "info"
+          }
+          effect="plain"
+        >
+          {(levelList.find(item => item.value == row.level + "") || {}).label ||
+            "--"}
+        </el-tag>
+      )
+    },
+    {
+      label: "状态",
+      prop: "status",
+      cellRenderer: ({ row, props }) => (
+        <el-tag
+          size={props.size}
+          type={
+            (statusList.find(item => item.value == row.status + "") || {})
+              .type || "info"
+          }
+          effect="plain"
+        >
+          {(statusList.find(item => item.value == row.status + "") || {})
+            .label || "--"}
+        </el-tag>
+      )
+    },
+
+    {
+      label: "创建时间",
+      prop: "createTime",
+      formatter: ({ createTime }) =>
+        dayjs(createTime).format("YYYY-MM-DD HH:mm:ss")
+    },
+    {
+      label: "操作",
+      fixed: "right",
+      width: 145,
+      slot: "operation"
+    }
+  ]);
+
+  return {
+    columns
+  };
+}

+ 232 - 0
src/views/parameter/finance/index.vue

@@ -0,0 +1,232 @@
+<script setup lang="ts">
+import { useColumns } from "./columns";
+import { httpList, httpStatus } from "/@/api/system/updates";
+import { reactive, ref, onMounted } from "vue";
+import { type FormInstance } from "element-plus";
+import { ElMessage } from "element-plus";
+import { TableProBar } from "/@/components/ReTable";
+import { type PaginationProps } from "@pureadmin/table";
+import { useRenderIcon } from "/@/components/ReIcon/src/hooks";
+import { useNav } from "/@/layout/hooks/nav";
+import { statusList } from "/@/utils/status";
+const { logout } = useNav();
+defineOptions({
+  name: "role"
+});
+
+const form = reactive({
+  name: "",
+  page: 1,
+  size: 15
+});
+
+const dataList = ref([]);
+const loading = ref(true);
+const { columns } = useColumns();
+const showModel = ref(false);
+const itemId = ref("");
+const isDetails = ref("add");
+const formRef = ref<FormInstance>();
+
+const pagination = reactive<PaginationProps>({
+  total: 0,
+  pageSize: 15,
+  currentPage: 1,
+  background: true
+});
+
+//修改状态
+const handleStatus = async row => {
+  const { id, status } = row;
+  const { code, message } = await httpStatus({
+    id,
+    status: status + "" === "1" ? "0" : "1"
+  });
+  if (code === 0) {
+    onSearch();
+  } else if (code > 100 && code < 140) {
+    logout();
+  } else {
+    ElMessage.error(message);
+  }
+};
+
+async function handleCurrentChange(val: number) {
+  form.page = val;
+  await onSearch();
+}
+
+async function handleSizeChange(val: number) {
+  form.size = val;
+  form.page = 1;
+  await onSearch();
+}
+
+function handleSelectionChange(val) {
+  console.log("handleSelectionChange", val);
+}
+
+async function onSearch() {
+  loading.value = true;
+  const { code, data, message } = await httpList(form);
+  if (code === 0) {
+    const { list, count } = data;
+    dataList.value = list ?? [];
+    pagination.total = count ?? 0;
+    pagination.pageSize = form.size;
+    pagination.currentPage = form.page;
+  } else if (code > 100 && code < 140) {
+    logout();
+  } else {
+    ElMessage.error(message);
+  }
+  loading.value = false;
+}
+async function resetSearch() {
+  form.page = 1;
+  await onSearch();
+}
+//新建/编辑/详情弹窗
+function editItem(id, type) {
+  itemId.value = id;
+  isDetails.value = type;
+  showModel.value = true;
+}
+
+const resetForm = (formEl: FormInstance | undefined) => {
+  if (!formEl) return;
+  formEl.resetFields();
+  form.page = 1;
+  onSearch();
+};
+
+onMounted(() => {
+  onSearch();
+});
+</script>
+
+<template>
+  <div class="main role">
+    <el-form
+      ref="formRef"
+      :inline="true"
+      :model="form"
+      :label-width="0"
+      class="bg-white w-99/100 pl-8 pt-4"
+    >
+      <el-form-item prop="status">
+        <el-select
+          v-model="form.status"
+          style="width: 100%"
+          placeholder="财务信息状态"
+          clearable
+        >
+          <el-option
+            v-for="(si, sii) in statusList"
+            :key="'status' + si.value + sii"
+            :label="si.label"
+            :value="si.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item prop="role_name">
+        <el-input
+          v-model="form.role_name"
+          placeholder="财务信息名称"
+          clearable
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button
+          type="primary"
+          :icon="useRenderIcon('search')"
+          :loading="loading"
+          @click="resetSearch"
+        >
+          搜索
+        </el-button>
+        <el-button :icon="useRenderIcon('refresh')" @click="resetForm(formRef)">
+          重置
+        </el-button>
+      </el-form-item>
+    </el-form>
+
+    <TableProBar
+      title="财务信息管理"
+      :loading="loading"
+      :dataList="dataList"
+      @refresh="onSearch"
+    >
+      <template #buttons>
+        <el-button
+          type="primary"
+          :icon="useRenderIcon('add')"
+          @click="editItem('', 'add')"
+        >
+          新增财务信息
+        </el-button>
+      </template>
+      <template v-slot="{ size, checkList }">
+        <PureTable
+          border
+          align="left"
+          showOverflowTooltip
+          table-layout="auto"
+          :size="size"
+          :data="dataList"
+          :columns="columns"
+          :checkList="checkList"
+          :pagination="pagination"
+          :paginationSmall="size === 'small' ? true : false"
+          :header-cell-style="{ background: '#fafafa', color: '#606266' }"
+          @selection-change="handleSelectionChange"
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+        >
+          <template #operation="{ row }">
+            <el-button
+              class="reset-margin"
+              link
+              type="primary"
+              :size="size"
+              @click="editItem(row.id, 'view')"
+              :icon="useRenderIcon('eye-view')"
+            />
+            <el-button
+              class="reset-margin"
+              link
+              type="primary"
+              :size="size"
+              @click="editItem(row.id, 'edit')"
+              :icon="useRenderIcon('edits')"
+            />
+            <el-popconfirm
+              :title="row.status === '1' ? '改为禁用?' : '改为启用?'"
+              @confirm="handleStatus(row)"
+            >
+              <template #reference>
+                <el-button
+                  class="reset-margin"
+                  link
+                  type="primary"
+                  :size="size"
+                  :icon="
+                    useRenderIcon(
+                      row.status === '1'
+                        ? 'close-circle-line'
+                        : 'checkbox-circle-line'
+                    )
+                  " /></template
+            ></el-popconfirm>
+          </template>
+        </PureTable>
+      </template>
+    </TableProBar>
+  </div>
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+</style>

+ 0 - 0
src/views/parameter/finance/业务公司发票设置


+ 74 - 0
src/views/parameter/invoiceheader/columns.tsx

@@ -0,0 +1,74 @@
+import { ref } from "vue";
+import dayjs from "dayjs";
+import { statusList, levelList } from "/@/utils/status";
+export function useColumns() {
+  const columns = ref([
+    {
+      type: "selection",
+      width: 55,
+      hide: ({ checkList }) => !checkList.includes("勾选列")
+    },
+    {
+      label: "序号",
+      type: "index",
+      width: 70,
+      hide: ({ checkList }) => !checkList.includes("序号列")
+    },
+
+    {
+      label: "角色名称",
+      prop: "role_name"
+    },
+    {
+      label: "等级",
+      prop: "level",
+      cellRenderer: ({ row, props }) => (
+        <el-tag
+          size={props.size}
+          type={
+            (levelList.find(item => item.value == row.level + "") || {}).type ||
+            "info"
+          }
+          effect="plain"
+        >
+          {(levelList.find(item => item.value == row.level + "") || {}).label ||
+            "--"}
+        </el-tag>
+      )
+    },
+    {
+      label: "状态",
+      prop: "status",
+      cellRenderer: ({ row, props }) => (
+        <el-tag
+          size={props.size}
+          type={
+            (statusList.find(item => item.value == row.status + "") || {})
+              .type || "info"
+          }
+          effect="plain"
+        >
+          {(statusList.find(item => item.value == row.status + "") || {})
+            .label || "--"}
+        </el-tag>
+      )
+    },
+
+    {
+      label: "创建时间",
+      prop: "createTime",
+      formatter: ({ createTime }) =>
+        dayjs(createTime).format("YYYY-MM-DD HH:mm:ss")
+    },
+    {
+      label: "操作",
+      fixed: "right",
+      width: 145,
+      slot: "operation"
+    }
+  ]);
+
+  return {
+    columns
+  };
+}

+ 228 - 0
src/views/parameter/invoiceheader/index.vue

@@ -0,0 +1,228 @@
+<script setup lang="ts">
+import { useColumns } from "./columns";
+import { httpList, httpStatus } from "/@/api/system/updates";
+import { reactive, ref, onMounted } from "vue";
+import { type FormInstance } from "element-plus";
+import { ElMessage } from "element-plus";
+import { TableProBar } from "/@/components/ReTable";
+import { type PaginationProps } from "@pureadmin/table";
+import { useRenderIcon } from "/@/components/ReIcon/src/hooks";
+import { useNav } from "/@/layout/hooks/nav";
+import { statusList } from "/@/utils/status";
+const { logout } = useNav();
+defineOptions({
+  name: "role"
+});
+
+const form = reactive({
+  name: "",
+  page: 1,
+  size: 15
+});
+
+const dataList = ref([]);
+const loading = ref(true);
+const { columns } = useColumns();
+const showModel = ref(false);
+const itemId = ref("");
+const isDetails = ref("add");
+const formRef = ref<FormInstance>();
+
+const pagination = reactive<PaginationProps>({
+  total: 0,
+  pageSize: 15,
+  currentPage: 1,
+  background: true
+});
+
+//修改状态
+const handleStatus = async row => {
+  const { id, status } = row;
+  const { code, message } = await httpStatus({
+    id,
+    status: status + "" === "1" ? "0" : "1"
+  });
+  if (code === 0) {
+    onSearch();
+  } else if (code > 100 && code < 140) {
+    logout();
+  } else {
+    ElMessage.error(message);
+  }
+};
+
+async function handleCurrentChange(val: number) {
+  form.page = val;
+  await onSearch();
+}
+
+async function handleSizeChange(val: number) {
+  form.size = val;
+  form.page = 1;
+  await onSearch();
+}
+
+function handleSelectionChange(val) {
+  console.log("handleSelectionChange", val);
+}
+
+async function onSearch() {
+  loading.value = true;
+  const { code, data, message } = await httpList(form);
+  if (code === 0) {
+    const { list, count } = data;
+    dataList.value = list ?? [];
+    pagination.total = count ?? 0;
+    pagination.pageSize = form.size;
+    pagination.currentPage = form.page;
+  } else if (code > 100 && code < 140) {
+    logout();
+  } else {
+    ElMessage.error(message);
+  }
+  loading.value = false;
+}
+async function resetSearch() {
+  form.page = 1;
+  await onSearch();
+}
+//新建/编辑/详情弹窗
+function editItem(id, type) {
+  itemId.value = id;
+  isDetails.value = type;
+  showModel.value = true;
+}
+
+const resetForm = (formEl: FormInstance | undefined) => {
+  if (!formEl) return;
+  formEl.resetFields();
+  form.page = 1;
+  onSearch();
+};
+
+onMounted(() => {
+  onSearch();
+});
+</script>
+
+<template>
+  <div class="main role">
+    <el-form
+      ref="formRef"
+      :inline="true"
+      :model="form"
+      :label-width="0"
+      class="bg-white w-99/100 pl-8 pt-4"
+    >
+      <el-form-item prop="status">
+        <el-select
+          v-model="form.status"
+          style="width: 100%"
+          placeholder="角色状态"
+          clearable
+        >
+          <el-option
+            v-for="(si, sii) in statusList"
+            :key="'status' + si.value + sii"
+            :label="si.label"
+            :value="si.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item prop="role_name">
+        <el-input v-model="form.role_name" placeholder="角色名称" clearable />
+      </el-form-item>
+      <el-form-item>
+        <el-button
+          type="primary"
+          :icon="useRenderIcon('search')"
+          :loading="loading"
+          @click="resetSearch"
+        >
+          搜索
+        </el-button>
+        <el-button :icon="useRenderIcon('refresh')" @click="resetForm(formRef)">
+          重置
+        </el-button>
+      </el-form-item>
+    </el-form>
+
+    <TableProBar
+      title="角色管理"
+      :loading="loading"
+      :dataList="dataList"
+      @refresh="onSearch"
+    >
+      <template #buttons>
+        <el-button
+          type="primary"
+          :icon="useRenderIcon('add')"
+          @click="editItem('', 'add')"
+        >
+          新增角色
+        </el-button>
+      </template>
+      <template v-slot="{ size, checkList }">
+        <PureTable
+          border
+          align="left"
+          showOverflowTooltip
+          table-layout="auto"
+          :size="size"
+          :data="dataList"
+          :columns="columns"
+          :checkList="checkList"
+          :pagination="pagination"
+          :paginationSmall="size === 'small' ? true : false"
+          :header-cell-style="{ background: '#fafafa', color: '#606266' }"
+          @selection-change="handleSelectionChange"
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+        >
+          <template #operation="{ row }">
+            <el-button
+              class="reset-margin"
+              link
+              type="primary"
+              :size="size"
+              @click="editItem(row.id, 'view')"
+              :icon="useRenderIcon('eye-view')"
+            />
+            <el-button
+              class="reset-margin"
+              link
+              type="primary"
+              :size="size"
+              @click="editItem(row.id, 'edit')"
+              :icon="useRenderIcon('edits')"
+            />
+            <el-popconfirm
+              :title="row.status === '1' ? '改为禁用?' : '改为启用?'"
+              @confirm="handleStatus(row)"
+            >
+              <template #reference>
+                <el-button
+                  class="reset-margin"
+                  link
+                  type="primary"
+                  :size="size"
+                  :icon="
+                    useRenderIcon(
+                      row.status === '1'
+                        ? 'close-circle-line'
+                        : 'checkbox-circle-line'
+                    )
+                  " /></template
+            ></el-popconfirm>
+          </template>
+        </PureTable>
+      </template>
+    </TableProBar>
+  </div>
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+</style>

+ 0 - 0
src/views/parameter/invoiceheader/发票抬头设置


+ 74 - 0
src/views/parameter/supplierPay/columns.tsx

@@ -0,0 +1,74 @@
+import { ref } from "vue";
+import dayjs from "dayjs";
+import { statusList, levelList } from "/@/utils/status";
+export function useColumns() {
+  const columns = ref([
+    {
+      type: "selection",
+      width: 55,
+      hide: ({ checkList }) => !checkList.includes("勾选列")
+    },
+    {
+      label: "序号",
+      type: "index",
+      width: 70,
+      hide: ({ checkList }) => !checkList.includes("序号列")
+    },
+
+    {
+      label: "角色名称",
+      prop: "role_name"
+    },
+    {
+      label: "等级",
+      prop: "level",
+      cellRenderer: ({ row, props }) => (
+        <el-tag
+          size={props.size}
+          type={
+            (levelList.find(item => item.value == row.level + "") || {}).type ||
+            "info"
+          }
+          effect="plain"
+        >
+          {(levelList.find(item => item.value == row.level + "") || {}).label ||
+            "--"}
+        </el-tag>
+      )
+    },
+    {
+      label: "状态",
+      prop: "status",
+      cellRenderer: ({ row, props }) => (
+        <el-tag
+          size={props.size}
+          type={
+            (statusList.find(item => item.value == row.status + "") || {})
+              .type || "info"
+          }
+          effect="plain"
+        >
+          {(statusList.find(item => item.value == row.status + "") || {})
+            .label || "--"}
+        </el-tag>
+      )
+    },
+
+    {
+      label: "创建时间",
+      prop: "createTime",
+      formatter: ({ createTime }) =>
+        dayjs(createTime).format("YYYY-MM-DD HH:mm:ss")
+    },
+    {
+      label: "操作",
+      fixed: "right",
+      width: 145,
+      slot: "operation"
+    }
+  ]);
+
+  return {
+    columns
+  };
+}

+ 228 - 0
src/views/parameter/supplierPay/index.vue

@@ -0,0 +1,228 @@
+<script setup lang="ts">
+import { useColumns } from "./columns";
+import { httpList, httpStatus } from "/@/api/system/updates";
+import { reactive, ref, onMounted } from "vue";
+import { type FormInstance } from "element-plus";
+import { ElMessage } from "element-plus";
+import { TableProBar } from "/@/components/ReTable";
+import { type PaginationProps } from "@pureadmin/table";
+import { useRenderIcon } from "/@/components/ReIcon/src/hooks";
+import { useNav } from "/@/layout/hooks/nav";
+import { statusList } from "/@/utils/status";
+const { logout } = useNav();
+defineOptions({
+  name: "role"
+});
+
+const form = reactive({
+  name: "",
+  page: 1,
+  size: 15
+});
+
+const dataList = ref([]);
+const loading = ref(true);
+const { columns } = useColumns();
+const showModel = ref(false);
+const itemId = ref("");
+const isDetails = ref("add");
+const formRef = ref<FormInstance>();
+
+const pagination = reactive<PaginationProps>({
+  total: 0,
+  pageSize: 15,
+  currentPage: 1,
+  background: true
+});
+
+//修改状态
+const handleStatus = async row => {
+  const { id, status } = row;
+  const { code, message } = await httpStatus({
+    id,
+    status: status + "" === "1" ? "0" : "1"
+  });
+  if (code === 0) {
+    onSearch();
+  } else if (code > 100 && code < 140) {
+    logout();
+  } else {
+    ElMessage.error(message);
+  }
+};
+
+async function handleCurrentChange(val: number) {
+  form.page = val;
+  await onSearch();
+}
+
+async function handleSizeChange(val: number) {
+  form.size = val;
+  form.page = 1;
+  await onSearch();
+}
+
+function handleSelectionChange(val) {
+  console.log("handleSelectionChange", val);
+}
+
+async function onSearch() {
+  loading.value = true;
+  const { code, data, message } = await httpList(form);
+  if (code === 0) {
+    const { list, count } = data;
+    dataList.value = list ?? [];
+    pagination.total = count ?? 0;
+    pagination.pageSize = form.size;
+    pagination.currentPage = form.page;
+  } else if (code > 100 && code < 140) {
+    logout();
+  } else {
+    ElMessage.error(message);
+  }
+  loading.value = false;
+}
+async function resetSearch() {
+  form.page = 1;
+  await onSearch();
+}
+//新建/编辑/详情弹窗
+function editItem(id, type) {
+  itemId.value = id;
+  isDetails.value = type;
+  showModel.value = true;
+}
+
+const resetForm = (formEl: FormInstance | undefined) => {
+  if (!formEl) return;
+  formEl.resetFields();
+  form.page = 1;
+  onSearch();
+};
+
+onMounted(() => {
+  onSearch();
+});
+</script>
+
+<template>
+  <div class="main role">
+    <el-form
+      ref="formRef"
+      :inline="true"
+      :model="form"
+      :label-width="0"
+      class="bg-white w-99/100 pl-8 pt-4"
+    >
+      <el-form-item prop="status">
+        <el-select
+          v-model="form.status"
+          style="width: 100%"
+          placeholder="角色状态"
+          clearable
+        >
+          <el-option
+            v-for="(si, sii) in statusList"
+            :key="'status' + si.value + sii"
+            :label="si.label"
+            :value="si.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item prop="role_name">
+        <el-input v-model="form.role_name" placeholder="角色名称" clearable />
+      </el-form-item>
+      <el-form-item>
+        <el-button
+          type="primary"
+          :icon="useRenderIcon('search')"
+          :loading="loading"
+          @click="resetSearch"
+        >
+          搜索
+        </el-button>
+        <el-button :icon="useRenderIcon('refresh')" @click="resetForm(formRef)">
+          重置
+        </el-button>
+      </el-form-item>
+    </el-form>
+
+    <TableProBar
+      title="角色管理"
+      :loading="loading"
+      :dataList="dataList"
+      @refresh="onSearch"
+    >
+      <template #buttons>
+        <el-button
+          type="primary"
+          :icon="useRenderIcon('add')"
+          @click="editItem('', 'add')"
+        >
+          新增角色
+        </el-button>
+      </template>
+      <template v-slot="{ size, checkList }">
+        <PureTable
+          border
+          align="left"
+          showOverflowTooltip
+          table-layout="auto"
+          :size="size"
+          :data="dataList"
+          :columns="columns"
+          :checkList="checkList"
+          :pagination="pagination"
+          :paginationSmall="size === 'small' ? true : false"
+          :header-cell-style="{ background: '#fafafa', color: '#606266' }"
+          @selection-change="handleSelectionChange"
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+        >
+          <template #operation="{ row }">
+            <el-button
+              class="reset-margin"
+              link
+              type="primary"
+              :size="size"
+              @click="editItem(row.id, 'view')"
+              :icon="useRenderIcon('eye-view')"
+            />
+            <el-button
+              class="reset-margin"
+              link
+              type="primary"
+              :size="size"
+              @click="editItem(row.id, 'edit')"
+              :icon="useRenderIcon('edits')"
+            />
+            <el-popconfirm
+              :title="row.status === '1' ? '改为禁用?' : '改为启用?'"
+              @confirm="handleStatus(row)"
+            >
+              <template #reference>
+                <el-button
+                  class="reset-margin"
+                  link
+                  type="primary"
+                  :size="size"
+                  :icon="
+                    useRenderIcon(
+                      row.status === '1'
+                        ? 'close-circle-line'
+                        : 'checkbox-circle-line'
+                    )
+                  " /></template
+            ></el-popconfirm>
+          </template>
+        </PureTable>
+      </template>
+    </TableProBar>
+  </div>
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+</style>

+ 0 - 0
src/views/parameter/supplierPay/供应商管理


+ 74 - 0
src/views/purchase/orderRecord/columns.tsx

@@ -0,0 +1,74 @@
+import { ref } from "vue";
+import dayjs from "dayjs";
+import { statusList, levelList } from "/@/utils/status";
+export function useColumns() {
+  const columns = ref([
+    {
+      type: "selection",
+      width: 55,
+      hide: ({ checkList }) => !checkList.includes("勾选列")
+    },
+    {
+      label: "序号",
+      type: "index",
+      width: 70,
+      hide: ({ checkList }) => !checkList.includes("序号列")
+    },
+
+    {
+      label: "角色名称",
+      prop: "role_name"
+    },
+    {
+      label: "等级",
+      prop: "level",
+      cellRenderer: ({ row, props }) => (
+        <el-tag
+          size={props.size}
+          type={
+            (levelList.find(item => item.value == row.level + "") || {}).type ||
+            "info"
+          }
+          effect="plain"
+        >
+          {(levelList.find(item => item.value == row.level + "") || {}).label ||
+            "--"}
+        </el-tag>
+      )
+    },
+    {
+      label: "状态",
+      prop: "status",
+      cellRenderer: ({ row, props }) => (
+        <el-tag
+          size={props.size}
+          type={
+            (statusList.find(item => item.value == row.status + "") || {})
+              .type || "info"
+          }
+          effect="plain"
+        >
+          {(statusList.find(item => item.value == row.status + "") || {})
+            .label || "--"}
+        </el-tag>
+      )
+    },
+
+    {
+      label: "创建时间",
+      prop: "createTime",
+      formatter: ({ createTime }) =>
+        dayjs(createTime).format("YYYY-MM-DD HH:mm:ss")
+    },
+    {
+      label: "操作",
+      fixed: "right",
+      width: 145,
+      slot: "operation"
+    }
+  ]);
+
+  return {
+    columns
+  };
+}

+ 228 - 0
src/views/purchase/orderRecord/index.vue

@@ -0,0 +1,228 @@
+<script setup lang="ts">
+import { useColumns } from "./columns";
+import { httpList, httpStatus } from "/@/api/system/updates";
+import { reactive, ref, onMounted } from "vue";
+import { type FormInstance } from "element-plus";
+import { ElMessage } from "element-plus";
+import { TableProBar } from "/@/components/ReTable";
+import { type PaginationProps } from "@pureadmin/table";
+import { useRenderIcon } from "/@/components/ReIcon/src/hooks";
+import { useNav } from "/@/layout/hooks/nav";
+import { statusList } from "/@/utils/status";
+const { logout } = useNav();
+defineOptions({
+  name: "role"
+});
+
+const form = reactive({
+  name: "",
+  page: 1,
+  size: 15
+});
+
+const dataList = ref([]);
+const loading = ref(true);
+const { columns } = useColumns();
+const showModel = ref(false);
+const itemId = ref("");
+const isDetails = ref("add");
+const formRef = ref<FormInstance>();
+
+const pagination = reactive<PaginationProps>({
+  total: 0,
+  pageSize: 15,
+  currentPage: 1,
+  background: true
+});
+
+//修改状态
+const handleStatus = async row => {
+  const { id, status } = row;
+  const { code, message } = await httpStatus({
+    id,
+    status: status + "" === "1" ? "0" : "1"
+  });
+  if (code === 0) {
+    onSearch();
+  } else if (code > 100 && code < 140) {
+    logout();
+  } else {
+    ElMessage.error(message);
+  }
+};
+
+async function handleCurrentChange(val: number) {
+  form.page = val;
+  await onSearch();
+}
+
+async function handleSizeChange(val: number) {
+  form.size = val;
+  form.page = 1;
+  await onSearch();
+}
+
+function handleSelectionChange(val) {
+  console.log("handleSelectionChange", val);
+}
+
+async function onSearch() {
+  loading.value = true;
+  const { code, data, message } = await httpList(form);
+  if (code === 0) {
+    const { list, count } = data;
+    dataList.value = list ?? [];
+    pagination.total = count ?? 0;
+    pagination.pageSize = form.size;
+    pagination.currentPage = form.page;
+  } else if (code > 100 && code < 140) {
+    logout();
+  } else {
+    ElMessage.error(message);
+  }
+  loading.value = false;
+}
+async function resetSearch() {
+  form.page = 1;
+  await onSearch();
+}
+//新建/编辑/详情弹窗
+function editItem(id, type) {
+  itemId.value = id;
+  isDetails.value = type;
+  showModel.value = true;
+}
+
+const resetForm = (formEl: FormInstance | undefined) => {
+  if (!formEl) return;
+  formEl.resetFields();
+  form.page = 1;
+  onSearch();
+};
+
+onMounted(() => {
+  onSearch();
+});
+</script>
+
+<template>
+  <div class="main role">
+    <el-form
+      ref="formRef"
+      :inline="true"
+      :model="form"
+      :label-width="0"
+      class="bg-white w-99/100 pl-8 pt-4"
+    >
+      <el-form-item prop="status">
+        <el-select
+          v-model="form.status"
+          style="width: 100%"
+          placeholder="角色状态"
+          clearable
+        >
+          <el-option
+            v-for="(si, sii) in statusList"
+            :key="'status' + si.value + sii"
+            :label="si.label"
+            :value="si.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item prop="role_name">
+        <el-input v-model="form.role_name" placeholder="角色名称" clearable />
+      </el-form-item>
+      <el-form-item>
+        <el-button
+          type="primary"
+          :icon="useRenderIcon('search')"
+          :loading="loading"
+          @click="resetSearch"
+        >
+          搜索
+        </el-button>
+        <el-button :icon="useRenderIcon('refresh')" @click="resetForm(formRef)">
+          重置
+        </el-button>
+      </el-form-item>
+    </el-form>
+
+    <TableProBar
+      title="角色管理"
+      :loading="loading"
+      :dataList="dataList"
+      @refresh="onSearch"
+    >
+      <template #buttons>
+        <el-button
+          type="primary"
+          :icon="useRenderIcon('add')"
+          @click="editItem('', 'add')"
+        >
+          新增角色
+        </el-button>
+      </template>
+      <template v-slot="{ size, checkList }">
+        <PureTable
+          border
+          align="left"
+          showOverflowTooltip
+          table-layout="auto"
+          :size="size"
+          :data="dataList"
+          :columns="columns"
+          :checkList="checkList"
+          :pagination="pagination"
+          :paginationSmall="size === 'small' ? true : false"
+          :header-cell-style="{ background: '#fafafa', color: '#606266' }"
+          @selection-change="handleSelectionChange"
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+        >
+          <template #operation="{ row }">
+            <el-button
+              class="reset-margin"
+              link
+              type="primary"
+              :size="size"
+              @click="editItem(row.id, 'view')"
+              :icon="useRenderIcon('eye-view')"
+            />
+            <el-button
+              class="reset-margin"
+              link
+              type="primary"
+              :size="size"
+              @click="editItem(row.id, 'edit')"
+              :icon="useRenderIcon('edits')"
+            />
+            <el-popconfirm
+              :title="row.status === '1' ? '改为禁用?' : '改为启用?'"
+              @confirm="handleStatus(row)"
+            >
+              <template #reference>
+                <el-button
+                  class="reset-margin"
+                  link
+                  type="primary"
+                  :size="size"
+                  :icon="
+                    useRenderIcon(
+                      row.status === '1'
+                        ? 'close-circle-line'
+                        : 'checkbox-circle-line'
+                    )
+                  " /></template
+            ></el-popconfirm>
+          </template>
+        </PureTable>
+      </template>
+    </TableProBar>
+  </div>
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+</style>

+ 0 - 0
src/views/purchase/orderRecord/订单对账


+ 74 - 0
src/views/purchase/porder/columns.tsx

@@ -0,0 +1,74 @@
+import { ref } from "vue";
+import dayjs from "dayjs";
+import { statusList, levelList } from "/@/utils/status";
+export function useColumns() {
+  const columns = ref([
+    {
+      type: "selection",
+      width: 55,
+      hide: ({ checkList }) => !checkList.includes("勾选列")
+    },
+    {
+      label: "序号",
+      type: "index",
+      width: 70,
+      hide: ({ checkList }) => !checkList.includes("序号列")
+    },
+
+    {
+      label: "角色名称",
+      prop: "role_name"
+    },
+    {
+      label: "等级",
+      prop: "level",
+      cellRenderer: ({ row, props }) => (
+        <el-tag
+          size={props.size}
+          type={
+            (levelList.find(item => item.value == row.level + "") || {}).type ||
+            "info"
+          }
+          effect="plain"
+        >
+          {(levelList.find(item => item.value == row.level + "") || {}).label ||
+            "--"}
+        </el-tag>
+      )
+    },
+    {
+      label: "状态",
+      prop: "status",
+      cellRenderer: ({ row, props }) => (
+        <el-tag
+          size={props.size}
+          type={
+            (statusList.find(item => item.value == row.status + "") || {})
+              .type || "info"
+          }
+          effect="plain"
+        >
+          {(statusList.find(item => item.value == row.status + "") || {})
+            .label || "--"}
+        </el-tag>
+      )
+    },
+
+    {
+      label: "创建时间",
+      prop: "createTime",
+      formatter: ({ createTime }) =>
+        dayjs(createTime).format("YYYY-MM-DD HH:mm:ss")
+    },
+    {
+      label: "操作",
+      fixed: "right",
+      width: 145,
+      slot: "operation"
+    }
+  ]);
+
+  return {
+    columns
+  };
+}

+ 228 - 0
src/views/purchase/porder/index.vue

@@ -0,0 +1,228 @@
+<script setup lang="ts">
+import { useColumns } from "./columns";
+import { httpList, httpStatus } from "/@/api/system/updates";
+import { reactive, ref, onMounted } from "vue";
+import { type FormInstance } from "element-plus";
+import { ElMessage } from "element-plus";
+import { TableProBar } from "/@/components/ReTable";
+import { type PaginationProps } from "@pureadmin/table";
+import { useRenderIcon } from "/@/components/ReIcon/src/hooks";
+import { useNav } from "/@/layout/hooks/nav";
+import { statusList } from "/@/utils/status";
+const { logout } = useNav();
+defineOptions({
+  name: "role"
+});
+
+const form = reactive({
+  name: "",
+  page: 1,
+  size: 15
+});
+
+const dataList = ref([]);
+const loading = ref(true);
+const { columns } = useColumns();
+const showModel = ref(false);
+const itemId = ref("");
+const isDetails = ref("add");
+const formRef = ref<FormInstance>();
+
+const pagination = reactive<PaginationProps>({
+  total: 0,
+  pageSize: 15,
+  currentPage: 1,
+  background: true
+});
+
+//修改状态
+const handleStatus = async row => {
+  const { id, status } = row;
+  const { code, message } = await httpStatus({
+    id,
+    status: status + "" === "1" ? "0" : "1"
+  });
+  if (code === 0) {
+    onSearch();
+  } else if (code > 100 && code < 140) {
+    logout();
+  } else {
+    ElMessage.error(message);
+  }
+};
+
+async function handleCurrentChange(val: number) {
+  form.page = val;
+  await onSearch();
+}
+
+async function handleSizeChange(val: number) {
+  form.size = val;
+  form.page = 1;
+  await onSearch();
+}
+
+function handleSelectionChange(val) {
+  console.log("handleSelectionChange", val);
+}
+
+async function onSearch() {
+  loading.value = true;
+  const { code, data, message } = await httpList(form);
+  if (code === 0) {
+    const { list, count } = data;
+    dataList.value = list ?? [];
+    pagination.total = count ?? 0;
+    pagination.pageSize = form.size;
+    pagination.currentPage = form.page;
+  } else if (code > 100 && code < 140) {
+    logout();
+  } else {
+    ElMessage.error(message);
+  }
+  loading.value = false;
+}
+async function resetSearch() {
+  form.page = 1;
+  await onSearch();
+}
+//新建/编辑/详情弹窗
+function editItem(id, type) {
+  itemId.value = id;
+  isDetails.value = type;
+  showModel.value = true;
+}
+
+const resetForm = (formEl: FormInstance | undefined) => {
+  if (!formEl) return;
+  formEl.resetFields();
+  form.page = 1;
+  onSearch();
+};
+
+onMounted(() => {
+  onSearch();
+});
+</script>
+
+<template>
+  <div class="main role">
+    <el-form
+      ref="formRef"
+      :inline="true"
+      :model="form"
+      :label-width="0"
+      class="bg-white w-99/100 pl-8 pt-4"
+    >
+      <el-form-item prop="status">
+        <el-select
+          v-model="form.status"
+          style="width: 100%"
+          placeholder="角色状态"
+          clearable
+        >
+          <el-option
+            v-for="(si, sii) in statusList"
+            :key="'status' + si.value + sii"
+            :label="si.label"
+            :value="si.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item prop="role_name">
+        <el-input v-model="form.role_name" placeholder="角色名称" clearable />
+      </el-form-item>
+      <el-form-item>
+        <el-button
+          type="primary"
+          :icon="useRenderIcon('search')"
+          :loading="loading"
+          @click="resetSearch"
+        >
+          搜索
+        </el-button>
+        <el-button :icon="useRenderIcon('refresh')" @click="resetForm(formRef)">
+          重置
+        </el-button>
+      </el-form-item>
+    </el-form>
+
+    <TableProBar
+      title="角色管理"
+      :loading="loading"
+      :dataList="dataList"
+      @refresh="onSearch"
+    >
+      <template #buttons>
+        <el-button
+          type="primary"
+          :icon="useRenderIcon('add')"
+          @click="editItem('', 'add')"
+        >
+          新增角色
+        </el-button>
+      </template>
+      <template v-slot="{ size, checkList }">
+        <PureTable
+          border
+          align="left"
+          showOverflowTooltip
+          table-layout="auto"
+          :size="size"
+          :data="dataList"
+          :columns="columns"
+          :checkList="checkList"
+          :pagination="pagination"
+          :paginationSmall="size === 'small' ? true : false"
+          :header-cell-style="{ background: '#fafafa', color: '#606266' }"
+          @selection-change="handleSelectionChange"
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+        >
+          <template #operation="{ row }">
+            <el-button
+              class="reset-margin"
+              link
+              type="primary"
+              :size="size"
+              @click="editItem(row.id, 'view')"
+              :icon="useRenderIcon('eye-view')"
+            />
+            <el-button
+              class="reset-margin"
+              link
+              type="primary"
+              :size="size"
+              @click="editItem(row.id, 'edit')"
+              :icon="useRenderIcon('edits')"
+            />
+            <el-popconfirm
+              :title="row.status === '1' ? '改为禁用?' : '改为启用?'"
+              @confirm="handleStatus(row)"
+            >
+              <template #reference>
+                <el-button
+                  class="reset-margin"
+                  link
+                  type="primary"
+                  :size="size"
+                  :icon="
+                    useRenderIcon(
+                      row.status === '1'
+                        ? 'close-circle-line'
+                        : 'checkbox-circle-line'
+                    )
+                  " /></template
+            ></el-popconfirm>
+          </template>
+        </PureTable>
+      </template>
+    </TableProBar>
+  </div>
+</template>
+
+<style scoped lang="scss">
+:deep(.el-dropdown-menu__item i) {
+  margin: 0;
+}
+</style>

+ 0 - 0
src/views/purchase/porder/采购单管理


+ 6 - 3
src/views/system/menuOperator/addEdit.vue

@@ -103,7 +103,8 @@ const submitForm = async (formEl: FormInstance | undefined) => {
     if (valid) {
       if (loading.value === true) return;
       loading.value = true;
-      const model = Object.assign({}, ruleForm);
+      let model = Object.assign({}, ruleForm);
+      model.menu_img = "eidt";
       const { code, data, message } =
         editType.value === "add"
           ? await httpAdd(model)
@@ -140,7 +141,8 @@ const resetForm = async (formEl: FormInstance | undefined, item) => {
         ruleForm[key] = item[key];
       }
     }
-
+    ruleForm.menu_img = "eidt";
+    console.log(item);
     menu_type_change();
   });
 };
@@ -186,6 +188,8 @@ watch(
   },
   () => {
     const { showModel, itemId, isDetails, sitem } = props;
+    showModelThis.value = showModel;
+    console.log(props);
     if (showModelThis.value) {
       id.value = itemId;
       editType.value = isDetails;
@@ -195,7 +199,6 @@ watch(
         initForm(formModel);
       }
     }
-    showModelThis.value = showModel;
   }
 );
 </script>