LPJ il y a 2 semaines
Parent
commit
fbe7524b20

+ 188 - 0
gw-ui/src/views/slaj/woas/BisWoasExpert.vue

@@ -0,0 +1,188 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px">
+      <el-form-item label="专家名称" prop="expertName">
+        <el-input v-model="queryParams.expertName" placeholder="请输入专家名称" clearable style="width: 200px" @keyup.enter="handleQuery" />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['woas:expert:add']">新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate" v-hasPermi="['woas:expert:edit']">修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete" v-hasPermi="['woas:expert:remove']">删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['woas:expert:export']">导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns" storageKey="woas-woas-expert-index"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="专家名称" align="center" prop="expertName" v-if="columns.expertName.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="操作" align="center" class-name="BisWoasExpert" width="200">
+        <template #default="scope">
+          <el-tooltip content="修改" placement="top">
+            <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['woas:expert:edit']"></el-button>
+          </el-tooltip>
+          <el-tooltip content="删除" placement="top">
+            <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['woas:expert:remove']"></el-button>
+          </el-tooltip>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+
+    <el-dialog :title="title" v-model="open" width="600px" append-to-body>
+      <el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
+        <el-form-item label="工作考核GUID" prop="woasGuid">
+          <el-input v-model="form.woasGuid" placeholder="请输入工作考核GUID" />
+        </el-form-item>
+        <el-form-item label="考核组GUID" prop="bisWoasGropGuid">
+          <el-input v-model="form.bisWoasGropGuid" placeholder="请输入考核组GUID" />
+        </el-form-item>
+        <el-form-item label="专家GUID" prop="expertGuid">
+          <el-input v-model="form.expertGuid" placeholder="请输入专家GUID" />
+        </el-form-item>
+        <el-form-item label="专家名称" prop="expertName">
+          <el-input v-model="form.expertName" placeholder="请输入专家名称" />
+        </el-form-item>
+        <el-form-item label="备注" prop="note">
+          <el-input v-model="form.note" placeholder="请输入备注" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="WoasExpert">
+import { listWoasExpert, getWoasExpert, addWoasExpert, updateWoasExpert, delWoasExpert } from "@/api/slaj/woas";
+import { getCurrentInstance, reactive, ref, toRefs } from "vue";
+
+const { proxy } = getCurrentInstance();
+
+const dataList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+
+const columns = ref({
+    expertName: { visible: true }
+});
+
+const data = reactive({
+  form: {},
+  queryParams: { pageNum: 1, pageSize: 10, expertName: null },
+  rules: {}
+});
+
+const { form, queryParams, rules } = toRefs(data);
+
+function getList() {
+  loading.value = true;
+  listWoasExpert(queryParams.value).then(response => {
+    dataList.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.guid);
+  single.value = selection.length !== 1;
+  multiple.value = !selection.length;
+}
+
+function handleAdd() {
+  reset();
+  open.value = true;
+  title.value = "添加考核专家";
+}
+
+function handleUpdate(row) {
+  reset();
+  const guid = row.guid || ids.value[0];
+  getWoasExpert(guid).then(response => {
+    form.value = response.data;
+    open.value = true;
+    title.value = "修改考核专家";
+  });
+}
+
+function submitForm() {
+  proxy.$refs["formRef"].validate(valid => {
+    if (valid) {
+      if (form.value.guid != null) {
+        updateWoasExpert(form.value).then(() => {
+          proxy.$modal.msgSuccess("修改成功");
+          open.value = false;
+          getList();
+        });
+      } else {
+        addWoasExpert(form.value).then(() => {
+          proxy.$modal.msgSuccess("新增成功");
+          open.value = false;
+          getList();
+        });
+      }
+    }
+  });
+}
+
+function handleDelete(row) {
+  const guids = row.guid || ids.value.join(",");
+  proxy.$modal.confirm('是否确认删除所选数据?').then(function() {
+    return delWoasExpert(guids);
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功");
+  });
+}
+
+function handleExport() {
+  proxy.download('/woas/expert/export', { ...queryParams.value }, `考核专家_${new Date().getTime()}.xlsx`);
+}
+
+function cancel() {
+  open.value = false;
+  reset();
+}
+
+function reset() {
+  form.value = { guid: null, woasGuid: null, bisWoasGropGuid: null, expertGuid: null, expertName: null, note: null };
+  proxy.resetForm("formRef");
+}
+
+getList();
+</script>

+ 209 - 0
gw-ui/src/views/slaj/woas/BisWoasGrop.vue

@@ -0,0 +1,209 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px">
+      <el-form-item label="考核组名称" prop="woasGropName">
+        <el-input v-model="queryParams.woasGropName" placeholder="请输入考核组名称" clearable style="width: 200px" @keyup.enter="handleQuery" />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['woas:grop:add']">新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate" v-hasPermi="['woas:grop:edit']">修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete" v-hasPermi="['woas:grop:remove']">删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['woas:grop:export']">导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns" storageKey="woas-woas-grop-index"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="考核组名称" align="center" prop="woasGropName" v-if="columns.woasGropName.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="考核组长单位名称" align="center" prop="leadWiun" v-if="columns.leadWiun.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="考核模式" align="center" prop="asseMode" v-if="columns.asseMode.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="出发时间" align="center" prop="depaTime" v-if="columns.depaTime.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="操作" align="center" class-name="BisWoasGrop" width="200">
+        <template #default="scope">
+          <el-tooltip content="修改" placement="top">
+            <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['woas:grop:edit']"></el-button>
+          </el-tooltip>
+          <el-tooltip content="删除" placement="top">
+            <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['woas:grop:remove']"></el-button>
+          </el-tooltip>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+
+    <el-dialog :title="title" v-model="open" width="600px" append-to-body>
+      <el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
+        <el-form-item label="考核组名称" prop="woasGropName">
+          <el-input v-model="form.woasGropName" placeholder="请输入考核组名称" />
+        </el-form-item>
+        <el-form-item label="工作考核GUID" prop="woasGuid">
+          <el-input v-model="form.woasGuid" placeholder="请输入工作考核GUID" />
+        </el-form-item>
+        <el-form-item label="考核方案GUID" prop="assePlanGuid">
+          <el-input v-model="form.assePlanGuid" placeholder="请输入考核方案GUID" />
+        </el-form-item>
+        <el-form-item label="考核组长单位GUID" prop="leadOrgGuid">
+          <el-input v-model="form.leadOrgGuid" placeholder="请输入考核组长单位GUID" />
+        </el-form-item>
+        <el-form-item label="考核组长单位名称" prop="leadWiun">
+          <el-input v-model="form.leadWiun" placeholder="请输入考核组长单位名称" />
+        </el-form-item>
+        <el-form-item label="考核模式" prop="asseMode">
+          <el-input v-model="form.asseMode" placeholder="请输入考核模式" />
+        </el-form-item>
+        <el-form-item label="考核路线" prop="asseRout">
+          <el-input v-model="form.asseRout" placeholder="请输入考核路线" />
+        </el-form-item>
+        <el-form-item label="出发时间" prop="depaTime">
+          <el-input v-model="form.depaTime" placeholder="请输入出发时间" />
+        </el-form-item>
+        <el-form-item label="行程规划" prop="schePathDetl">
+          <el-input v-model="form.schePathDetl" placeholder="请输入行程规划" />
+        </el-form-item>
+        <el-form-item label="备注" prop="note">
+          <el-input v-model="form.note" placeholder="请输入备注" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="WoasGrop">
+import { listWoasGrop, getWoasGrop, addWoasGrop, updateWoasGrop, delWoasGrop } from "@/api/slaj/woas";
+import { getCurrentInstance, reactive, ref, toRefs } from "vue";
+
+const { proxy } = getCurrentInstance();
+
+const dataList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+
+const columns = ref({
+    woasGropName: { visible: true },
+    leadWiun: { visible: true },
+    asseMode: { visible: true },
+    depaTime: { visible: true }
+});
+
+const data = reactive({
+  form: {},
+  queryParams: { pageNum: 1, pageSize: 10, woasGropName: null },
+  rules: {}
+});
+
+const { form, queryParams, rules } = toRefs(data);
+
+function getList() {
+  loading.value = true;
+  listWoasGrop(queryParams.value).then(response => {
+    dataList.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.guid);
+  single.value = selection.length !== 1;
+  multiple.value = !selection.length;
+}
+
+function handleAdd() {
+  reset();
+  open.value = true;
+  title.value = "添加考核组";
+}
+
+function handleUpdate(row) {
+  reset();
+  const guid = row.guid || ids.value[0];
+  getWoasGrop(guid).then(response => {
+    form.value = response.data;
+    open.value = true;
+    title.value = "修改考核组";
+  });
+}
+
+function submitForm() {
+  proxy.$refs["formRef"].validate(valid => {
+    if (valid) {
+      if (form.value.guid != null) {
+        updateWoasGrop(form.value).then(() => {
+          proxy.$modal.msgSuccess("修改成功");
+          open.value = false;
+          getList();
+        });
+      } else {
+        addWoasGrop(form.value).then(() => {
+          proxy.$modal.msgSuccess("新增成功");
+          open.value = false;
+          getList();
+        });
+      }
+    }
+  });
+}
+
+function handleDelete(row) {
+  const guids = row.guid || ids.value.join(",");
+  proxy.$modal.confirm('是否确认删除所选数据?').then(function() {
+    return delWoasGrop(guids);
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功");
+  });
+}
+
+function handleExport() {
+  proxy.download('/woas/grop/export', { ...queryParams.value }, `考核组_${new Date().getTime()}.xlsx`);
+}
+
+function cancel() {
+  open.value = false;
+  reset();
+}
+
+function reset() {
+  form.value = { guid: null, woasGropName: null, woasGuid: null, assePlanGuid: null, leadOrgGuid: null, leadWiun: null, asseMode: null, asseRout: null, depaTime: null, schePathDetl: null, note: null };
+  proxy.resetForm("formRef");
+}
+
+getList();
+</script>

+ 200 - 0
gw-ui/src/views/slaj/woas/BisWoasNoti.vue

@@ -0,0 +1,200 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px">
+      <el-form-item label="收文单位名称" prop="orgName">
+        <el-input v-model="queryParams.orgName" placeholder="请输入收文单位名称" clearable style="width: 200px" @keyup.enter="handleQuery" />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['woas:noti:add']">新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate" v-hasPermi="['woas:noti:edit']">修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete" v-hasPermi="['woas:noti:remove']">删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['woas:noti:export']">导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns" storageKey="woas-woas-noti-index"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="收文单位名称" align="center" prop="orgName" v-if="columns.orgName.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="自评分数" align="center" prop="seasScore" v-if="columns.seasScore.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="自评时间" align="center" prop="seasTime" v-if="columns.seasTime.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="上报状态" align="center" prop="repStat" v-if="columns.repStat.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="操作" align="center" class-name="BisWoasNoti" width="200">
+        <template #default="scope">
+          <el-tooltip content="修改" placement="top">
+            <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['woas:noti:edit']"></el-button>
+          </el-tooltip>
+          <el-tooltip content="删除" placement="top">
+            <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['woas:noti:remove']"></el-button>
+          </el-tooltip>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+
+    <el-dialog :title="title" v-model="open" width="600px" append-to-body>
+      <el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
+        <el-form-item label="收文单位GUID" prop="orgGuid">
+          <el-input v-model="form.orgGuid" placeholder="请输入收文单位GUID" />
+        </el-form-item>
+        <el-form-item label="工作考核GUID" prop="woasGuid">
+          <el-input v-model="form.woasGuid" placeholder="请输入工作考核GUID" />
+        </el-form-item>
+        <el-form-item label="收文单位名称" prop="orgName">
+          <el-input v-model="form.orgName" placeholder="请输入收文单位名称" />
+        </el-form-item>
+        <el-form-item label="自评分数" prop="seasScore">
+          <el-input v-model="form.seasScore" placeholder="请输入自评分数" />
+        </el-form-item>
+        <el-form-item label="自评时间" prop="seasTime">
+          <el-input v-model="form.seasTime" placeholder="请输入自评时间" />
+        </el-form-item>
+        <el-form-item label="上报状态" prop="repStat">
+          <el-input v-model="form.repStat" placeholder="请输入上报状态" />
+        </el-form-item>
+        <el-form-item label="备注" prop="note">
+          <el-input v-model="form.note" placeholder="请输入备注" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="WoasNoti">
+import { listWoasNoti, getWoasNoti, addWoasNoti, updateWoasNoti, delWoasNoti } from "@/api/slaj/woas";
+import { getCurrentInstance, reactive, ref, toRefs } from "vue";
+
+const { proxy } = getCurrentInstance();
+
+const dataList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+
+const columns = ref({
+    orgName: { visible: true },
+    seasScore: { visible: true },
+    seasTime: { visible: true },
+    repStat: { visible: true }
+});
+
+const data = reactive({
+  form: {},
+  queryParams: { pageNum: 1, pageSize: 10, orgName: null },
+  rules: {}
+});
+
+const { form, queryParams, rules } = toRefs(data);
+
+function getList() {
+  loading.value = true;
+  listWoasNoti(queryParams.value).then(response => {
+    dataList.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.guid);
+  single.value = selection.length !== 1;
+  multiple.value = !selection.length;
+}
+
+function handleAdd() {
+  reset();
+  open.value = true;
+  title.value = "添加考核通知收文单位";
+}
+
+function handleUpdate(row) {
+  reset();
+  const guid = row.guid || ids.value[0];
+  getWoasNoti(guid).then(response => {
+    form.value = response.data;
+    open.value = true;
+    title.value = "修改考核通知收文单位";
+  });
+}
+
+function submitForm() {
+  proxy.$refs["formRef"].validate(valid => {
+    if (valid) {
+      if (form.value.guid != null) {
+        updateWoasNoti(form.value).then(() => {
+          proxy.$modal.msgSuccess("修改成功");
+          open.value = false;
+          getList();
+        });
+      } else {
+        addWoasNoti(form.value).then(() => {
+          proxy.$modal.msgSuccess("新增成功");
+          open.value = false;
+          getList();
+        });
+      }
+    }
+  });
+}
+
+function handleDelete(row) {
+  const guids = row.guid || ids.value.join(",");
+  proxy.$modal.confirm('是否确认删除所选数据?').then(function() {
+    return delWoasNoti(guids);
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功");
+  });
+}
+
+function handleExport() {
+  proxy.download('/woas/noti/export', { ...queryParams.value }, `考核通知收文单位_${new Date().getTime()}.xlsx`);
+}
+
+function cancel() {
+  open.value = false;
+  reset();
+}
+
+function reset() {
+  form.value = { guid: null, orgGuid: null, woasGuid: null, orgName: null, seasScore: null, seasTime: null, repStat: null, note: null };
+  proxy.resetForm("formRef");
+}
+
+getList();
+</script>

+ 393 - 0
gw-ui/src/views/slaj/woas/BisWoasObj.vue

@@ -0,0 +1,393 @@
+<template>
+  <div class="system-page config-page">
+    <el-card class="page-card">
+      <template #header>
+        <div class="card-header">
+          <div class="header-left">
+            <el-icon :size="20" color="#409EFF"><OfficeBuilding /></el-icon>
+            <span class="page-title">工作考核对象</span>
+          </div>
+          <div class="search-right">
+            <el-button type="primary" v-hasPermi="['woas:obj:add']" @click="handleAdd">
+              <el-icon><Plus /></el-icon> 新增
+            </el-button>
+            <el-button type="success" v-hasPermi="['woas:obj:edit']" :disabled="single" @click="handleUpdate()">
+              <el-icon><Edit /></el-icon> 修改
+            </el-button>
+            <el-button type="danger" v-hasPermi="['woas:obj:remove']" :disabled="multiple" @click="handleDelete()">
+              <el-icon><Delete /></el-icon> 删除
+            </el-button>
+            <el-button type="warning" v-hasPermi="['woas:obj:export']" @click="handleExport">
+              <el-icon><Download /></el-icon> 导出
+            </el-button>
+          </div>
+        </div>
+      </template>
+
+      <!-- 搜索栏 -->
+      <div class="search-bar" v-show="showSearch">
+        <el-form ref="queryFormRef" :model="queryParams" :inline="true">
+          <el-form-item label="被考核单位名称" prop="woasWiunName">
+            <el-input v-model="queryParams.woasWiunName" placeholder="请输入被考核单位名称" clearable @keyup.enter="handleQuery" />
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" @click="handleQuery">
+              <el-icon><Search /></el-icon> 搜索
+            </el-button>
+            <el-button @click="resetQuery">
+              <el-icon><RefreshRight /></el-icon> 重置
+            </el-button>
+          </el-form-item>
+        </el-form>
+      </div>
+
+      <!-- 数据列表 -->
+      <el-table v-loading="loading" :data="dataList" style="width: 100%" border @selection-change="handleSelectionChange">
+        <el-table-column type="selection" width="45" />
+        <el-table-column label="被考核单位名称" align="center" prop="woasWiunName" :show-overflow-tooltip="true" />
+        <el-table-column label="被考核单位类型" align="center" prop="asseOrgType" :show-overflow-tooltip="true" />
+        <el-table-column label="现场考核状态" align="center" prop="asseStat" :show-overflow-tooltip="true" />
+        <el-table-column label="现场考核开始时间" align="center" prop="woasStartime" width="180">
+          <template #default="{ row }">
+            {{ proxy.parseTime(row.woasStartime) }}
+          </template>
+        </el-table-column>
+        <el-table-column label="现场考核结束时间" align="center" prop="woasDeadline" width="180">
+          <template #default="{ row }">
+            {{ proxy.parseTime(row.woasDeadline) }}
+          </template>
+        </el-table-column>
+        <el-table-column label="综合评价状态" align="center" prop="evalStat" :show-overflow-tooltip="true" />
+        <el-table-column label="等级状态" align="center" prop="gradStat" :show-overflow-tooltip="true" />
+        <el-table-column label="现场考核总得分" align="center" prop="asseScor" />
+        <el-table-column label="综合评价得分" align="center" prop="compEvalScor" />
+        <el-table-column label="其他加分项" align="center" prop="otheAddterm" :show-overflow-tooltip="true" />
+        <el-table-column label="最终得分" align="center" prop="finalScor" />
+        <el-table-column label="操作" align="center" width="150" fixed="right">
+          <template #default="{ row }">
+            <el-button link type="primary" v-hasPermi="['woas:obj:edit']" @click="handleUpdate(row)"> 编辑 </el-button>
+            <el-button link type="danger" v-hasPermi="['woas:obj:remove']" @click="handleDelete(row)"> 删除 </el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <!-- 分页 -->
+      <div class="pagination">
+        <el-pagination
+          v-show="total > 0"
+          v-model:current-page="queryParams.pageNum"
+          v-model:page-size="queryParams.pageSize"
+          :total="total"
+          :page-sizes="[10, 20, 50, 100]"
+          layout="total, sizes, prev, pager, next, jumper"
+          @size-change="getList"
+          @current-change="getList"
+        />
+      </div>
+    </el-card>
+
+    <!-- 新增/编辑对话框 -->
+    <el-dialog v-model="dialog.visible" :title="dialog.title" width="600px" top="5vh" append-to-body @close="cancel">
+      <el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
+        <el-form-item label="被考核单位GUID" prop="woasWiunGuid">
+          <el-input v-model="form.woasWiunGuid" placeholder="请输入被考核单位GUID" />
+        </el-form-item>
+        <el-form-item label="被考核单位名称" prop="woasWiunName">
+          <el-input v-model="form.woasWiunName" placeholder="请输入被考核单位名称" />
+        </el-form-item>
+        <el-form-item label="被考核单位类型" prop="asseOrgType">
+          <el-input v-model="form.asseOrgType" placeholder="请输入被考核单位类型" />
+        </el-form-item>
+        <el-form-item label="工作考核GUID" prop="woasGuid">
+          <el-input v-model="form.woasGuid" placeholder="请输入工作考核GUID" />
+        </el-form-item>
+        <el-form-item label="考核组GUID" prop="woasGroupGuid">
+          <el-input v-model="form.woasGroupGuid" placeholder="请输入考核组GUID" />
+        </el-form-item>
+        <el-form-item label="现场考核状态" prop="asseStat">
+          <el-input v-model="form.asseStat" placeholder="请输入现场考核状态" />
+        </el-form-item>
+        <el-form-item label="现场考核开始时间" prop="woasStartime">
+          <el-input v-model="form.woasStartime" placeholder="请输入现场考核开始时间" />
+        </el-form-item>
+        <el-form-item label="现场考核结束时间" prop="woasDeadline">
+          <el-input v-model="form.woasDeadline" placeholder="请输入现场考核结束时间" />
+        </el-form-item>
+        <el-form-item label="综合评价状态" prop="evalStat">
+          <el-input v-model="form.evalStat" placeholder="请输入综合评价状态" />
+        </el-form-item>
+        <el-form-item label="等级状态" prop="gradStat">
+          <el-input v-model="form.gradStat" placeholder="请输入等级状态" />
+        </el-form-item>
+        <el-form-item label="现场考核总得分" prop="asseScor">
+          <el-input v-model="form.asseScor" placeholder="请输入现场考核总得分" />
+        </el-form-item>
+        <el-form-item label="综合评价得分" prop="compEvalScor">
+          <el-input v-model="form.compEvalScor" placeholder="请输入综合评价得分" />
+        </el-form-item>
+        <el-form-item label="其他加分项" prop="otheAddterm">
+          <el-input v-model="form.otheAddterm" placeholder="请输入其他加分项" />
+        </el-form-item>
+        <el-form-item label="最终得分" prop="finalScor">
+          <el-input v-model="form.finalScor" placeholder="请输入最终得分" />
+        </el-form-item>
+        <el-form-item label="备注" prop="note">
+          <el-input v-model="form.note" placeholder="请输入备注" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <el-button @click="dialog.visible = false">取消</el-button>
+        <el-button type="primary" @click="submitForm">确定</el-button>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="BisWoasObj" lang="ts">
+import { listWoasObj, getWoasObj, addWoasObj, updateWoasObj, delWoasObj } from '@/api/slaj/woas'
+import { Plus, Edit, Delete, Download, Search, RefreshRight, OfficeBuilding } from '@element-plus/icons-vue'
+
+const { proxy } = getCurrentInstance() as ComponentInternalInstance
+
+const dataList = ref<any[]>([])
+const loading = ref(true)
+const showSearch = ref(true)
+const ids = ref<Array<string | number>>([])
+const single = ref(true)
+const multiple = ref(true)
+const total = ref(0)
+
+const queryFormRef = ref<ElFormInstance>()
+const formRef = ref<ElFormInstance>()
+const dialog = reactive<DialogOption>({
+  visible: false,
+  title: ''
+})
+
+const initFormData: any = {
+  guid: null,
+  woasWiunGuid: null,
+  woasWiunName: null,
+  asseOrgType: null,
+  woasGuid: null,
+  woasGroupGuid: null,
+  asseStat: null,
+  woasStartime: null,
+  woasDeadline: null,
+  evalStat: null,
+  gradStat: null,
+  asseScor: null,
+  compEvalScor: null,
+  otheAddterm: null,
+  finalScor: null,
+  note: null
+}
+
+const data = reactive<PageData<any, any>>({
+  form: { ...initFormData },
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    woasWiunName: null
+  },
+  rules: {}
+})
+
+const { queryParams, form, rules } = toRefs(data)
+
+/** 查询列表 */
+const getList = async () => {
+  loading.value = true
+  const res = await listWoasObj(queryParams.value)
+  dataList.value = res.rows
+  total.value = res.total
+  loading.value = false
+}
+
+/** 取消按钮 */
+const cancel = () => {
+  reset()
+  dialog.visible = false
+}
+
+/** 表单重置 */
+const reset = () => {
+  form.value = { ...initFormData }
+  formRef.value?.resetFields()
+}
+
+/** 搜索按钮操作 */
+const handleQuery = () => {
+  queryParams.value.pageNum = 1
+  getList()
+}
+
+/** 重置按钮操作 */
+const resetQuery = () => {
+  queryFormRef.value?.resetFields()
+  handleQuery()
+}
+
+/** 多选框选中数据 */
+const handleSelectionChange = (selection: any[]) => {
+  ids.value = selection.map((item) => item.guid)
+  single.value = selection.length !== 1
+  multiple.value = !selection.length
+}
+
+/** 新增按钮操作 */
+const handleAdd = () => {
+  reset()
+  dialog.visible = true
+  dialog.title = '添加工作考核对象'
+}
+
+/** 修改按钮操作 */
+const handleUpdate = async (row?: any) => {
+  reset()
+  const guid = row?.guid || ids.value[0]
+  const res = await getWoasObj(guid)
+  Object.assign(form.value, res.data)
+  dialog.visible = true
+  dialog.title = '修改工作考核对象'
+}
+
+/** 提交按钮 */
+const submitForm = () => {
+  formRef.value?.validate(async (valid: boolean) => {
+    if (valid) {
+      form.value.guid ? await updateWoasObj(form.value) : await addWoasObj(form.value)
+      proxy?.$modal.msgSuccess('操作成功')
+      dialog.visible = false
+      await getList()
+    }
+  })
+}
+
+/** 删除按钮操作 */
+const handleDelete = async (row?: any) => {
+  const guids = row?.guid || ids.value
+  await proxy?.$modal.confirm('是否确认删除所选数据?')
+  await delWoasObj(guids)
+  await getList()
+  proxy?.$modal.msgSuccess('删除成功')
+}
+
+/** 导出按钮操作 */
+const handleExport = () => {
+  proxy?.download('/woas/obj/export', { ...queryParams.value }, `工作考核对象_${new Date().getTime()}.xlsx`)
+}
+
+onMounted(() => {
+  getList()
+})
+</script>
+
+<style scoped lang="scss">
+.system-page {
+  padding: 0px;
+  background-color: #f5f7fa;
+  min-height: calc(100vh - 10px);
+
+  :deep(.el-input__wrapper) {
+    border-radius: 4px;
+  }
+
+  :deep(.el-textarea__inner) {
+    border-radius: 4px;
+  }
+
+  .page-card {
+    border-radius: 1px;
+    box-shadow: 0 2px 12px rgba(0, 0, 0, 0.05);
+
+    :deep(.el-card__header) {
+      padding: 8px 20px !important;
+      border-bottom: 1px solid #ebeef5;
+      background-color: #fff;
+      border-radius: 8px 8px 0 0;
+    }
+
+    :deep(.el-card__body) {
+      padding: 0px !important;
+      background-color: #fff;
+    }
+  }
+ 
+  .card-header {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+
+    .header-left {
+      display: flex;
+      align-items: center;
+      gap: 10px;
+
+      .page-title {
+        font-size: 18px;
+        font-weight: 600;
+        color: #303133;
+      }
+    }
+
+    .search-right {
+      display: flex;
+      gap: 10px;
+    }
+  }
+
+  .search-bar {
+    margin-bottom: 1px;
+    background-color: #f8faff;
+    padding: 6px 10px;
+    border-radius: 6px;
+    border: 0px solid #e6ebf5;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+
+    :deep(.el-form) {
+      display: flex;
+      flex-wrap: wrap;
+      gap: 10px;
+
+      .el-form-item {
+        margin-bottom: 0;
+        margin-right: 15px;
+
+        .el-form-item__label {
+          font-weight: 500;
+        }
+      }
+    }
+  }
+
+  .pagination {
+    margin-top: 8px;
+    margin-bottom: 8px;
+    display: flex;
+    justify-content: flex-end;
+  }
+
+  :deep(.el-table) {
+    border-radius: 4px;
+    overflow: auto;
+    height: calc(100vh - 195px);
+
+    th.el-table__cell {
+      background-color: #f5f7fa !important;
+      color: #606266;
+      font-weight: 600;
+    }
+
+    .el-button--primary.is-link {
+      color: #409eff;
+    }
+
+    .el-button--danger.is-link {
+      color: #f56c6c;
+    }
+  }
+}
+</style>

+ 197 - 0
gw-ui/src/views/slaj/woas/BisWoasProg.vue

@@ -0,0 +1,197 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px">
+      <el-form-item label="考核方案名称" prop="progName">
+        <el-input v-model="queryParams.progName" placeholder="请输入考核方案名称" clearable style="width: 200px" @keyup.enter="handleQuery" />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['woas:prog:add']">新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate" v-hasPermi="['woas:prog:edit']">修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete" v-hasPermi="['woas:prog:remove']">删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['woas:prog:export']">导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns" storageKey="woas-woas-prog-index"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="考核方案名称" align="center" prop="progName" v-if="columns.progName.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="开始时间" align="center" prop="startTime" v-if="columns.startTime.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="结束时间" align="center" prop="endTime" v-if="columns.endTime.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="完成状态" align="center" prop="compStat" v-if="columns.compStat.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="操作" align="center" class-name="BisWoasProg" width="200">
+        <template #default="scope">
+          <el-tooltip content="修改" placement="top">
+            <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['woas:prog:edit']"></el-button>
+          </el-tooltip>
+          <el-tooltip content="删除" placement="top">
+            <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['woas:prog:remove']"></el-button>
+          </el-tooltip>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+
+    <el-dialog :title="title" v-model="open" width="600px" append-to-body>
+      <el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
+        <el-form-item label="工作考核GUID" prop="woasGuid">
+          <el-input v-model="form.woasGuid" placeholder="请输入工作考核GUID" />
+        </el-form-item>
+        <el-form-item label="考核方案名称" prop="progName">
+          <el-input v-model="form.progName" placeholder="请输入考核方案名称" />
+        </el-form-item>
+        <el-form-item label="开始时间" prop="startTime">
+          <el-input v-model="form.startTime" placeholder="请输入开始时间" />
+        </el-form-item>
+        <el-form-item label="结束时间" prop="endTime">
+          <el-input v-model="form.endTime" placeholder="请输入结束时间" />
+        </el-form-item>
+        <el-form-item label="完成状态" prop="compStat">
+          <el-input v-model="form.compStat" placeholder="请输入完成状态" />
+        </el-form-item>
+        <el-form-item label="备注" prop="note">
+          <el-input v-model="form.note" placeholder="请输入备注" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="WoasProg">
+import { listWoasProg, getWoasProg, addWoasProg, updateWoasProg, delWoasProg } from "@/api/slaj/woas";
+import { getCurrentInstance, reactive, ref, toRefs } from "vue";
+
+const { proxy } = getCurrentInstance();
+
+const dataList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+
+const columns = ref({
+    progName: { visible: true },
+    startTime: { visible: true },
+    endTime: { visible: true },
+    compStat: { visible: true }
+});
+
+const data = reactive({
+  form: {},
+  queryParams: { pageNum: 1, pageSize: 10, progName: null },
+  rules: {}
+});
+
+const { form, queryParams, rules } = toRefs(data);
+
+function getList() {
+  loading.value = true;
+  listWoasProg(queryParams.value).then(response => {
+    dataList.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.guid);
+  single.value = selection.length !== 1;
+  multiple.value = !selection.length;
+}
+
+function handleAdd() {
+  reset();
+  open.value = true;
+  title.value = "添加考核方案";
+}
+
+function handleUpdate(row) {
+  reset();
+  const guid = row.guid || ids.value[0];
+  getWoasProg(guid).then(response => {
+    form.value = response.data;
+    open.value = true;
+    title.value = "修改考核方案";
+  });
+}
+
+function submitForm() {
+  proxy.$refs["formRef"].validate(valid => {
+    if (valid) {
+      if (form.value.guid != null) {
+        updateWoasProg(form.value).then(() => {
+          proxy.$modal.msgSuccess("修改成功");
+          open.value = false;
+          getList();
+        });
+      } else {
+        addWoasProg(form.value).then(() => {
+          proxy.$modal.msgSuccess("新增成功");
+          open.value = false;
+          getList();
+        });
+      }
+    }
+  });
+}
+
+function handleDelete(row) {
+  const guids = row.guid || ids.value.join(",");
+  proxy.$modal.confirm('是否确认删除所选数据?').then(function() {
+    return delWoasProg(guids);
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功");
+  });
+}
+
+function handleExport() {
+  proxy.download('/woas/prog/export', { ...queryParams.value }, `考核方案_${new Date().getTime()}.xlsx`);
+}
+
+function cancel() {
+  open.value = false;
+  reset();
+}
+
+function reset() {
+  form.value = { guid: null, woasGuid: null, progName: null, startTime: null, endTime: null, compStat: null, note: null };
+  proxy.resetForm("formRef");
+}
+
+getList();
+</script>

+ 196 - 0
gw-ui/src/views/slaj/woas/BisWoasProj.vue

@@ -0,0 +1,196 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px">
+      <el-form-item label="项目工程名称" prop="projEngName">
+        <el-input v-model="queryParams.projEngName" placeholder="请输入项目工程名称" clearable style="width: 200px" @keyup.enter="handleQuery" />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['woas:proj:add']">新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate" v-hasPermi="['woas:proj:edit']">修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete" v-hasPermi="['woas:proj:remove']">删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['woas:proj:export']">导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns" storageKey="woas-woas-proj-index"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="项目工程名称" align="center" prop="projEngName" v-if="columns.projEngName.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="项目工程性质" align="center" prop="projEngType" v-if="columns.projEngType.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="操作" align="center" class-name="BisWoasProj" width="200">
+        <template #default="scope">
+          <el-tooltip content="修改" placement="top">
+            <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['woas:proj:edit']"></el-button>
+          </el-tooltip>
+          <el-tooltip content="删除" placement="top">
+            <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['woas:proj:remove']"></el-button>
+          </el-tooltip>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+
+    <el-dialog :title="title" v-model="open" width="600px" append-to-body>
+      <el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
+        <el-form-item label="项目GUID" prop="projGuid">
+          <el-input v-model="form.projGuid" placeholder="请输入项目GUID" />
+        </el-form-item>
+        <el-form-item label="工作考核组GUID" prop="woasGroupGuid">
+          <el-input v-model="form.woasGroupGuid" placeholder="请输入工作考核组GUID" />
+        </el-form-item>
+        <el-form-item label="工作考核GUID" prop="woasGuid">
+          <el-input v-model="form.woasGuid" placeholder="请输入工作考核GUID" />
+        </el-form-item>
+        <el-form-item label="工作考核对象GUID" prop="woasObjGuid">
+          <el-input v-model="form.woasObjGuid" placeholder="请输入工作考核对象GUID" />
+        </el-form-item>
+        <el-form-item label="项目工程名称" prop="projEngName">
+          <el-input v-model="form.projEngName" placeholder="请输入项目工程名称" />
+        </el-form-item>
+        <el-form-item label="项目工程性质" prop="projEngType">
+          <el-input v-model="form.projEngType" placeholder="请输入项目工程性质" />
+        </el-form-item>
+        <el-form-item label="备注" prop="note">
+          <el-input v-model="form.note" placeholder="请输入备注" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="WoasProj">
+import { listWoasProj, getWoasProj, addWoasProj, updateWoasProj, delWoasProj } from "@/api/slaj/woas";
+import { getCurrentInstance, reactive, ref, toRefs } from "vue";
+
+const { proxy } = getCurrentInstance();
+
+const dataList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+
+const columns = ref({
+    projEngName: { visible: true },
+    projEngType: { visible: true }
+});
+
+const data = reactive({
+  form: {},
+  queryParams: { pageNum: 1, pageSize: 10, projEngName: null },
+  rules: {}
+});
+
+const { form, queryParams, rules } = toRefs(data);
+
+function getList() {
+  loading.value = true;
+  listWoasProj(queryParams.value).then(response => {
+    dataList.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.guid);
+  single.value = selection.length !== 1;
+  multiple.value = !selection.length;
+}
+
+function handleAdd() {
+  reset();
+  open.value = true;
+  title.value = "添加考核项目";
+}
+
+function handleUpdate(row) {
+  reset();
+  const guid = row.guid || ids.value[0];
+  getWoasProj(guid).then(response => {
+    form.value = response.data;
+    open.value = true;
+    title.value = "修改考核项目";
+  });
+}
+
+function submitForm() {
+  proxy.$refs["formRef"].validate(valid => {
+    if (valid) {
+      if (form.value.guid != null) {
+        updateWoasProj(form.value).then(() => {
+          proxy.$modal.msgSuccess("修改成功");
+          open.value = false;
+          getList();
+        });
+      } else {
+        addWoasProj(form.value).then(() => {
+          proxy.$modal.msgSuccess("新增成功");
+          open.value = false;
+          getList();
+        });
+      }
+    }
+  });
+}
+
+function handleDelete(row) {
+  const guids = row.guid || ids.value.join(",");
+  proxy.$modal.confirm('是否确认删除所选数据?').then(function() {
+    return delWoasProj(guids);
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功");
+  });
+}
+
+function handleExport() {
+  proxy.download('/woas/proj/export', { ...queryParams.value }, `考核项目_${new Date().getTime()}.xlsx`);
+}
+
+function cancel() {
+  open.value = false;
+  reset();
+}
+
+function reset() {
+  form.value = { guid: null, projGuid: null, woasGroupGuid: null, woasGuid: null, woasObjGuid: null, projEngName: null, projEngType: null, note: null };
+  proxy.resetForm("formRef");
+}
+
+getList();
+</script>

+ 200 - 0
gw-ui/src/views/slaj/woas/BisWoasScor.vue

@@ -0,0 +1,200 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px">
+      <el-form-item label="被考核对象名称" prop="woasOrgName">
+        <el-input v-model="queryParams.woasOrgName" placeholder="请输入被考核对象名称" clearable style="width: 200px" @keyup.enter="handleQuery" />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['woas:scor:add']">新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate" v-hasPermi="['woas:scor:edit']">修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete" v-hasPermi="['woas:scor:remove']">删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['woas:scor:export']">导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns" storageKey="woas-woas-scor-index"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="被考核对象名称" align="center" prop="woasOrgName" v-if="columns.woasOrgName.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="评分得分" align="center" prop="woasCont" v-if="columns.woasCont.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="额外得分" align="center" prop="addiScor" v-if="columns.addiScor.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="计算得分" align="center" prop="calcScor" v-if="columns.calcScor.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="操作" align="center" class-name="BisWoasScor" width="200">
+        <template #default="scope">
+          <el-tooltip content="修改" placement="top">
+            <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['woas:scor:edit']"></el-button>
+          </el-tooltip>
+          <el-tooltip content="删除" placement="top">
+            <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['woas:scor:remove']"></el-button>
+          </el-tooltip>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+
+    <el-dialog :title="title" v-model="open" width="600px" append-to-body>
+      <el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
+        <el-form-item label="工作考核GUID" prop="woasGuid">
+          <el-input v-model="form.woasGuid" placeholder="请输入工作考核GUID" />
+        </el-form-item>
+        <el-form-item label="工作考核对象GUID" prop="bisWoasObjGuid">
+          <el-input v-model="form.bisWoasObjGuid" placeholder="请输入工作考核对象GUID" />
+        </el-form-item>
+        <el-form-item label="评分得分" prop="woasCont">
+          <el-input v-model="form.woasCont" placeholder="请输入评分得分" />
+        </el-form-item>
+        <el-form-item label="被考核对象名称" prop="woasOrgName">
+          <el-input v-model="form.woasOrgName" placeholder="请输入被考核对象名称" />
+        </el-form-item>
+        <el-form-item label="额外得分" prop="addiScor">
+          <el-input v-model="form.addiScor" placeholder="请输入额外得分" />
+        </el-form-item>
+        <el-form-item label="计算得分" prop="calcScor">
+          <el-input v-model="form.calcScor" placeholder="请输入计算得分" />
+        </el-form-item>
+        <el-form-item label="备注" prop="note">
+          <el-input v-model="form.note" placeholder="请输入备注" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="WoasScor">
+import { listWoasScor, getWoasScor, addWoasScor, updateWoasScor, delWoasScor } from "@/api/slaj/woas";
+import { getCurrentInstance, reactive, ref, toRefs } from "vue";
+
+const { proxy } = getCurrentInstance();
+
+const dataList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+
+const columns = ref({
+    woasOrgName: { visible: true },
+    woasCont: { visible: true },
+    addiScor: { visible: true },
+    calcScor: { visible: true }
+});
+
+const data = reactive({
+  form: {},
+  queryParams: { pageNum: 1, pageSize: 10, woasOrgName: null },
+  rules: {}
+});
+
+const { form, queryParams, rules } = toRefs(data);
+
+function getList() {
+  loading.value = true;
+  listWoasScor(queryParams.value).then(response => {
+    dataList.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.guid);
+  single.value = selection.length !== 1;
+  multiple.value = !selection.length;
+}
+
+function handleAdd() {
+  reset();
+  open.value = true;
+  title.value = "添加考核得分";
+}
+
+function handleUpdate(row) {
+  reset();
+  const guid = row.guid || ids.value[0];
+  getWoasScor(guid).then(response => {
+    form.value = response.data;
+    open.value = true;
+    title.value = "修改考核得分";
+  });
+}
+
+function submitForm() {
+  proxy.$refs["formRef"].validate(valid => {
+    if (valid) {
+      if (form.value.guid != null) {
+        updateWoasScor(form.value).then(() => {
+          proxy.$modal.msgSuccess("修改成功");
+          open.value = false;
+          getList();
+        });
+      } else {
+        addWoasScor(form.value).then(() => {
+          proxy.$modal.msgSuccess("新增成功");
+          open.value = false;
+          getList();
+        });
+      }
+    }
+  });
+}
+
+function handleDelete(row) {
+  const guids = row.guid || ids.value.join(",");
+  proxy.$modal.confirm('是否确认删除所选数据?').then(function() {
+    return delWoasScor(guids);
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功");
+  });
+}
+
+function handleExport() {
+  proxy.download('/woas/scor/export', { ...queryParams.value }, `考核得分_${new Date().getTime()}.xlsx`);
+}
+
+function cancel() {
+  open.value = false;
+  reset();
+}
+
+function reset() {
+  form.value = { guid: null, woasGuid: null, bisWoasObjGuid: null, woasCont: null, woasOrgName: null, addiScor: null, calcScor: null, note: null };
+  proxy.resetForm("formRef");
+}
+
+getList();
+</script>

+ 185 - 0
gw-ui/src/views/slaj/woas/BisWoasStaff.vue

@@ -0,0 +1,185 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px">
+      <el-form-item label="成员单位名称" prop="orgName">
+        <el-input v-model="queryParams.orgName" placeholder="请输入成员单位名称" clearable style="width: 200px" @keyup.enter="handleQuery" />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['woas:staff:add']">新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate" v-hasPermi="['woas:staff:edit']">修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete" v-hasPermi="['woas:staff:remove']">删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['woas:staff:export']">导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns" storageKey="woas-woas-staff-index"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="成员单位名称" align="center" prop="orgName" v-if="columns.orgName.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="操作" align="center" class-name="BisWoasStaff" width="200">
+        <template #default="scope">
+          <el-tooltip content="修改" placement="top">
+            <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['woas:staff:edit']"></el-button>
+          </el-tooltip>
+          <el-tooltip content="删除" placement="top">
+            <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['woas:staff:remove']"></el-button>
+          </el-tooltip>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+
+    <el-dialog :title="title" v-model="open" width="600px" append-to-body>
+      <el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
+        <el-form-item label="成员单位GUID" prop="orgGuid">
+          <el-input v-model="form.orgGuid" placeholder="请输入成员单位GUID" />
+        </el-form-item>
+        <el-form-item label="考核组GUID" prop="woasGropGuid">
+          <el-input v-model="form.woasGropGuid" placeholder="请输入考核组GUID" />
+        </el-form-item>
+        <el-form-item label="成员单位名称" prop="orgName">
+          <el-input v-model="form.orgName" placeholder="请输入成员单位名称" />
+        </el-form-item>
+        <el-form-item label="备注" prop="note">
+          <el-input v-model="form.note" placeholder="请输入备注" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="WoasStaff">
+import { listWoasStaff, getWoasStaff, addWoasStaff, updateWoasStaff, delWoasStaff } from "@/api/slaj/woas";
+import { getCurrentInstance, reactive, ref, toRefs } from "vue";
+
+const { proxy } = getCurrentInstance();
+
+const dataList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+
+const columns = ref({
+    orgName: { visible: true }
+});
+
+const data = reactive({
+  form: {},
+  queryParams: { pageNum: 1, pageSize: 10, orgName: null },
+  rules: {}
+});
+
+const { form, queryParams, rules } = toRefs(data);
+
+function getList() {
+  loading.value = true;
+  listWoasStaff(queryParams.value).then(response => {
+    dataList.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.guid);
+  single.value = selection.length !== 1;
+  multiple.value = !selection.length;
+}
+
+function handleAdd() {
+  reset();
+  open.value = true;
+  title.value = "添加考核成员单位";
+}
+
+function handleUpdate(row) {
+  reset();
+  const guid = row.guid || ids.value[0];
+  getWoasStaff(guid).then(response => {
+    form.value = response.data;
+    open.value = true;
+    title.value = "修改考核成员单位";
+  });
+}
+
+function submitForm() {
+  proxy.$refs["formRef"].validate(valid => {
+    if (valid) {
+      if (form.value.guid != null) {
+        updateWoasStaff(form.value).then(() => {
+          proxy.$modal.msgSuccess("修改成功");
+          open.value = false;
+          getList();
+        });
+      } else {
+        addWoasStaff(form.value).then(() => {
+          proxy.$modal.msgSuccess("新增成功");
+          open.value = false;
+          getList();
+        });
+      }
+    }
+  });
+}
+
+function handleDelete(row) {
+  const guids = row.guid || ids.value.join(",");
+  proxy.$modal.confirm('是否确认删除所选数据?').then(function() {
+    return delWoasStaff(guids);
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功");
+  });
+}
+
+function handleExport() {
+  proxy.download('/woas/staff/export', { ...queryParams.value }, `考核成员单位_${new Date().getTime()}.xlsx`);
+}
+
+function cancel() {
+  open.value = false;
+  reset();
+}
+
+function reset() {
+  form.value = { guid: null, orgGuid: null, woasGropGuid: null, orgName: null, note: null };
+  proxy.resetForm("formRef");
+}
+
+getList();
+</script>

+ 208 - 0
gw-ui/src/views/slaj/woas/BisWoasStan.vue

@@ -0,0 +1,208 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px">
+      <el-form-item label="考核报表名称" prop="asseRepoName">
+        <el-input v-model="queryParams.asseRepoName" placeholder="请输入考核报表名称" clearable style="width: 200px" @keyup.enter="handleQuery" />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['woas:stan:add']">新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate" v-hasPermi="['woas:stan:edit']">修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete" v-hasPermi="['woas:stan:remove']">删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['woas:stan:export']">导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns" storageKey="woas-woas-stan-index"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="考核报表名称" align="center" prop="asseRepoName" v-if="columns.asseRepoName.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="填报单位类型" align="center" prop="fillOrgType" v-if="columns.fillOrgType.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="权重系数" align="center" prop="weigCoef" v-if="columns.weigCoef.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="分数上限" align="center" prop="socrLimi" v-if="columns.socrLimi.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="额外加分上限" align="center" prop="bonuLimi" v-if="columns.bonuLimi.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="操作" align="center" class-name="BisWoasStan" width="200">
+        <template #default="scope">
+          <el-tooltip content="修改" placement="top">
+            <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['woas:stan:edit']"></el-button>
+          </el-tooltip>
+          <el-tooltip content="删除" placement="top">
+            <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['woas:stan:remove']"></el-button>
+          </el-tooltip>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+
+    <el-dialog :title="title" v-model="open" width="600px" append-to-body>
+      <el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
+        <el-form-item label="工作考核GUID" prop="woasGuid">
+          <el-input v-model="form.woasGuid" placeholder="请输入工作考核GUID" />
+        </el-form-item>
+        <el-form-item label="考核报表名称" prop="asseRepoName">
+          <el-input v-model="form.asseRepoName" placeholder="请输入考核报表名称" />
+        </el-form-item>
+        <el-form-item label="填报单位类型" prop="fillOrgType">
+          <el-input v-model="form.fillOrgType" placeholder="请输入填报单位类型" />
+        </el-form-item>
+        <el-form-item label="权重系数" prop="weigCoef">
+          <el-input v-model="form.weigCoef" placeholder="请输入权重系数" />
+        </el-form-item>
+        <el-form-item label="分数上限" prop="socrLimi">
+          <el-input v-model="form.socrLimi" placeholder="请输入分数上限" />
+        </el-form-item>
+        <el-form-item label="额外加分上限" prop="bonuLimi">
+          <el-input v-model="form.bonuLimi" placeholder="请输入额外加分上限" />
+        </el-form-item>
+        <el-form-item label="报表模板标识" prop="repoTempId">
+          <el-input v-model="form.repoTempId" placeholder="请输入报表模板标识" />
+        </el-form-item>
+        <el-form-item label="报表填报路径" prop="repoThisPath">
+          <el-input v-model="form.repoThisPath" placeholder="请输入报表填报路径" />
+        </el-form-item>
+        <el-form-item label="备注" prop="note">
+          <el-input v-model="form.note" placeholder="请输入备注" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="WoasStan">
+import { listWoasStan, getWoasStan, addWoasStan, updateWoasStan, delWoasStan } from "@/api/slaj/woas";
+import { getCurrentInstance, reactive, ref, toRefs } from "vue";
+
+const { proxy } = getCurrentInstance();
+
+const dataList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+
+const columns = ref({
+    asseRepoName: { visible: true },
+    fillOrgType: { visible: true },
+    weigCoef: { visible: true },
+    socrLimi: { visible: true },
+    bonuLimi: { visible: true }
+});
+
+const data = reactive({
+  form: {},
+  queryParams: { pageNum: 1, pageSize: 10, asseRepoName: null },
+  rules: {}
+});
+
+const { form, queryParams, rules } = toRefs(data);
+
+function getList() {
+  loading.value = true;
+  listWoasStan(queryParams.value).then(response => {
+    dataList.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.guid);
+  single.value = selection.length !== 1;
+  multiple.value = !selection.length;
+}
+
+function handleAdd() {
+  reset();
+  open.value = true;
+  title.value = "添加考核标准";
+}
+
+function handleUpdate(row) {
+  reset();
+  const guid = row.guid || ids.value[0];
+  getWoasStan(guid).then(response => {
+    form.value = response.data;
+    open.value = true;
+    title.value = "修改考核标准";
+  });
+}
+
+function submitForm() {
+  proxy.$refs["formRef"].validate(valid => {
+    if (valid) {
+      if (form.value.guid != null) {
+        updateWoasStan(form.value).then(() => {
+          proxy.$modal.msgSuccess("修改成功");
+          open.value = false;
+          getList();
+        });
+      } else {
+        addWoasStan(form.value).then(() => {
+          proxy.$modal.msgSuccess("新增成功");
+          open.value = false;
+          getList();
+        });
+      }
+    }
+  });
+}
+
+function handleDelete(row) {
+  const guids = row.guid || ids.value.join(",");
+  proxy.$modal.confirm('是否确认删除所选数据?').then(function() {
+    return delWoasStan(guids);
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功");
+  });
+}
+
+function handleExport() {
+  proxy.download('/woas/stan/export', { ...queryParams.value }, `考核标准_${new Date().getTime()}.xlsx`);
+}
+
+function cancel() {
+  open.value = false;
+  reset();
+}
+
+function reset() {
+  form.value = { guid: null, woasGuid: null, asseRepoName: null, fillOrgType: null, weigCoef: null, socrLimi: null, bonuLimi: null, repoTempId: null, repoThisPath: null, note: null };
+  proxy.resetForm("formRef");
+}
+
+getList();
+</script>

+ 388 - 0
gw-ui/src/views/slaj/woas/ObjWoas.vue

@@ -0,0 +1,388 @@
+<template>
+  <div class="system-page config-page">
+    <el-card class="page-card">
+      <template #header>
+        <div class="card-header">
+          <div class="header-left">
+            <el-icon :size="20" color="#409EFF"><Document /></el-icon>
+            <span class="page-title">工作考核通知对象</span>
+          </div>
+          <div class="search-right">
+            <el-button type="primary" v-hasPermi="['woas:objwoas:add']" @click="handleAdd">
+              <el-icon><Plus /></el-icon> 新增
+            </el-button>
+            <el-button type="success" v-hasPermi="['woas:objwoas:edit']" :disabled="single" @click="handleUpdate()">
+              <el-icon><Edit /></el-icon> 修改
+            </el-button>
+            <el-button type="danger" v-hasPermi="['woas:objwoas:remove']" :disabled="multiple" @click="handleDelete()">
+              <el-icon><Delete /></el-icon> 删除
+            </el-button>
+            <el-button type="warning" v-hasPermi="['woas:objwoas:export']" @click="handleExport">
+              <el-icon><Download /></el-icon> 导出
+            </el-button>
+          </div>
+        </div>
+      </template>
+
+      <!-- 搜索栏 -->
+      <div class="search-bar" v-show="showSearch">
+        <el-form ref="queryFormRef" :model="queryParams" :inline="true">
+          <el-form-item label="考核通知主题" prop="woasThem">
+            <el-input v-model="queryParams.woasThem" placeholder="请输入考核通知主题" clearable @keyup.enter="handleQuery" />
+          </el-form-item>
+          <el-form-item label="考核通知文号" prop="lareId">
+            <el-input v-model="queryParams.lareId" placeholder="请输入考核通知文号" clearable @keyup.enter="handleQuery" />
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" @click="handleQuery">
+              <el-icon><Search /></el-icon> 搜索
+            </el-button>
+            <el-button @click="resetQuery">
+              <el-icon><RefreshRight /></el-icon> 重置
+            </el-button>
+          </el-form-item>
+        </el-form>
+      </div>
+
+      <!-- 数据列表 -->
+      <el-table v-loading="loading" :data="dataList" style="width: 100%" border @selection-change="handleSelectionChange">
+        <el-table-column type="selection" width="45" />
+        <el-table-column label="考核通知主题" align="center" prop="woasThem" :show-overflow-tooltip="true" />
+        <el-table-column label="考核通知文号" align="center" prop="lareId" :show-overflow-tooltip="true" />
+        <el-table-column label="考核类型" align="center" prop="woasType" />
+        <el-table-column label="考核开始时间" align="center" prop="woasStartime" width="180">
+          <template #default="{ row }">
+            {{ proxy.parseTime(row.woasStartime) }}
+          </template>
+        </el-table-column>
+        <el-table-column label="考核截止时间" align="center" prop="woasDeadline" width="180">
+          <template #default="{ row }">
+            {{ proxy.parseTime(row.woasDeadline) }}
+          </template>
+        </el-table-column>
+        <el-table-column label="下发状态" align="center" prop="sendStat" />
+        <el-table-column label="是否为转发" align="center" prop="isForw" />
+        <el-table-column label="操作" align="center" width="150" fixed="right">
+          <template #default="{ row }">
+            <el-button link type="primary" v-hasPermi="['woas:objwoas:edit']" @click="handleUpdate(row)"> 编辑 </el-button>
+            <el-button link type="danger" v-hasPermi="['woas:objwoas:remove']" @click="handleDelete(row)"> 删除 </el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <!-- 分页 -->
+      <div class="pagination">
+        <el-pagination
+          v-show="total > 0"
+          v-model:current-page="queryParams.pageNum"
+          v-model:page-size="queryParams.pageSize"
+          :total="total"
+          :page-sizes="[10, 20, 50, 100]"
+          layout="total, sizes, prev, pager, next, jumper"
+          @size-change="getList"
+          @current-change="getList"
+        />
+      </div>
+    </el-card>
+
+    <!-- 新增/编辑对话框 -->
+    <el-dialog v-model="dialog.visible" :title="dialog.title" width="600px" top="5vh" append-to-body @close="cancel">
+      <el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
+        <el-form-item label="考核通知主题" prop="woasThem">
+          <el-input v-model="form.woasThem" placeholder="请输入考核通知主题" />
+        </el-form-item>
+        <el-form-item label="考核通知文号" prop="lareId">
+          <el-input v-model="form.lareId" placeholder="请输入考核通知文号" />
+        </el-form-item>
+        <el-form-item label="考核类型" prop="woasType">
+          <el-input v-model="form.woasType" placeholder="请输入考核类型" />
+        </el-form-item>
+        <el-form-item label="考核开始时间" prop="woasStartime">
+          <el-date-picker v-model="form.woasStartime" type="datetime" placeholder="请选择考核开始时间" value-format="YYYY-MM-DD HH:mm:ss" style="width: 100%" />
+        </el-form-item>
+        <el-form-item label="考核截止时间" prop="woasDeadline">
+          <el-date-picker v-model="form.woasDeadline" type="datetime" placeholder="请选择考核截止时间" value-format="YYYY-MM-DD HH:mm:ss" style="width: 100%" />
+        </el-form-item>
+        <el-form-item label="下发状态" prop="sendStat">
+          <el-input v-model="form.sendStat" placeholder="请输入下发状态" />
+        </el-form-item>
+        <el-form-item label="发文单位GUID" prop="orgGuid">
+          <el-input v-model="form.orgGuid" placeholder="请输入发文单位GUID" />
+        </el-form-item>
+        <el-form-item label="是否为转发" prop="isForw">
+          <el-input v-model="form.isForw" placeholder="请输入是否为转发" />
+        </el-form-item>
+        <el-form-item label="父通知GUID" prop="woasGuid">
+          <el-input v-model="form.woasGuid" placeholder="请输入父通知GUID" />
+        </el-form-item>
+        <el-form-item label="通知文件附件" prop="woasFileFiel">
+          <el-input v-model="form.woasFileFiel" placeholder="请输入通知文件附件字段" />
+        </el-form-item>
+        <el-form-item label="其他附件" prop="otheFileFiel">
+          <el-input v-model="form.otheFileFiel" type="textarea" placeholder="请输入其他附件字段" />
+        </el-form-item>
+        <el-form-item label="备注" prop="note">
+          <el-input v-model="form.note" type="textarea" placeholder="请输入备注" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <el-button @click="dialog.visible = false">取消</el-button>
+        <el-button type="primary" @click="submitForm">确定</el-button>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="ObjWoas" lang="ts">
+import { listObjWoas, getObjWoas, addObjWoas, updateObjWoas, delObjWoas } from '@/api/slaj/woas'
+import { Plus, Edit, Delete, Download, Search, RefreshRight, Document } from '@element-plus/icons-vue'
+
+const { proxy } = getCurrentInstance() as ComponentInternalInstance
+
+const dataList = ref<any[]>([])
+const loading = ref(true)
+const showSearch = ref(true)
+const ids = ref<Array<string | number>>([])
+const single = ref(true)
+const multiple = ref(true)
+const total = ref(0)
+
+const queryFormRef = ref<ElFormInstance>()
+const formRef = ref<ElFormInstance>()
+const dialog = reactive<DialogOption>({
+  visible: false,
+  title: ''
+})
+
+const initFormData: any = {
+  guid: null,
+  woasThem: null,
+  lareId: null,
+  woasType: null,
+  woasStartime: null,
+  woasDeadline: null,
+  sendStat: null,
+  orgGuid: null,
+  isForw: null,
+  woasGuid: null,
+  woasFileFiel: null,
+  otheFileFiel: null,
+  note: null,
+  collTime: null,
+  updTime: null,
+  recPers: null
+}
+
+const data = reactive<PageData<any, any>>({
+  form: { ...initFormData },
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    woasThem: null,
+    lareId: null
+  },
+  rules: {
+    woasThem: [{ required: true, message: '考核通知主题不能为空', trigger: 'blur' }],
+    lareId: [{ required: true, message: '考核通知文号不能为空', trigger: 'blur' }],
+    woasDeadline: [{ required: true, message: '考核截止时间不能为空', trigger: 'blur' }]
+  }
+})
+
+const { queryParams, form, rules } = toRefs(data)
+
+/** 查询列表 */
+const getList = async () => {
+  loading.value = true
+  const res = await listObjWoas(queryParams.value)
+  dataList.value = res.rows
+  total.value = res.total
+  loading.value = false
+}
+
+/** 取消按钮 */
+const cancel = () => {
+  reset()
+  dialog.visible = false
+}
+
+/** 表单重置 */
+const reset = () => {
+  form.value = { ...initFormData }
+  formRef.value?.resetFields()
+}
+
+/** 搜索按钮操作 */
+const handleQuery = () => {
+  queryParams.value.pageNum = 1
+  getList()
+}
+
+/** 重置按钮操作 */
+const resetQuery = () => {
+  queryFormRef.value?.resetFields()
+  handleQuery()
+}
+
+/** 多选框选中数据 */
+const handleSelectionChange = (selection: any[]) => {
+  ids.value = selection.map((item) => item.guid)
+  single.value = selection.length !== 1
+  multiple.value = !selection.length
+}
+
+/** 新增按钮操作 */
+const handleAdd = () => {
+  reset()
+  dialog.visible = true
+  dialog.title = '添加工作考核通知对象'
+}
+
+/** 修改按钮操作 */
+const handleUpdate = async (row?: any) => {
+  reset()
+  const guid = row?.guid || ids.value[0]
+  const res = await getObjWoas(guid)
+  Object.assign(form.value, res.data)
+  dialog.visible = true
+  dialog.title = '修改工作考核通知对象'
+}
+
+/** 提交按钮 */
+const submitForm = () => {
+  formRef.value?.validate(async (valid: boolean) => {
+    if (valid) {
+      form.value.guid ? await updateObjWoas(form.value) : await addObjWoas(form.value)
+      proxy?.$modal.msgSuccess('操作成功')
+      dialog.visible = false
+      await getList()
+    }
+  })
+}
+
+/** 删除按钮操作 */
+const handleDelete = async (row?: any) => {
+  const guids = row?.guid || ids.value
+  await proxy?.$modal.confirm('是否确认删除所选数据?')
+  await delObjWoas(guids)
+  await getList()
+  proxy?.$modal.msgSuccess('删除成功')
+}
+
+/** 导出按钮操作 */
+const handleExport = () => {
+  proxy?.download('/woas/objwoas/export', { ...queryParams.value }, `工作考核通知对象_${new Date().getTime()}.xlsx`)
+}
+
+onMounted(() => {
+  getList()
+})
+</script>
+
+<style scoped lang="scss">
+.system-page {
+  padding: 0px;
+  background-color: #f5f7fa;
+  min-height: calc(100vh - 10px);
+
+  :deep(.el-input__wrapper) {
+    border-radius: 4px;
+  }
+
+  :deep(.el-textarea__inner) {
+    border-radius: 4px;
+  }
+
+  .page-card {
+    border-radius: 1px;
+    box-shadow: 0 2px 12px rgba(0, 0, 0, 0.05);
+
+    :deep(.el-card__header) {
+      padding: 8px 20px !important;
+      border-bottom: 1px solid #ebeef5;
+      background-color: #fff;
+      border-radius: 8px 8px 0 0;
+    }
+
+    :deep(.el-card__body) {
+      padding: 0px !important;
+      background-color: #fff;
+    }
+  }
+
+  .card-header {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+
+    .header-left {
+      display: flex;
+      align-items: center;
+      gap: 10px;
+
+      .page-title {
+        font-size: 18px;
+        font-weight: 600;
+        color: #303133;
+      }
+    }
+
+    .search-right {
+      display: flex;
+      gap: 10px;
+    }
+  }
+
+  .search-bar {
+    margin-bottom: 0px;
+    background-color: #f8faff;
+    padding: 6px 10px;
+    border-radius: 6px;
+    border: 0px solid #e6ebf5;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+
+    :deep(.el-form) {
+      display: flex;
+      flex-wrap: wrap;
+      gap: 10px;
+
+      .el-form-item {
+        margin-bottom: 0;
+        margin-right: 15px;
+
+        .el-form-item__label {
+          font-weight: 500;
+        }
+      }
+    }
+  }
+
+  .pagination {
+    margin-top: 8px;
+    margin-bottom: 8px;
+    display: flex;
+    justify-content: flex-end;
+  }
+
+  :deep(.el-table) {
+    border-radius: 4px;
+    overflow: auto;
+    height: calc(100vh - 195px);
+
+    th.el-table__cell {
+      background-color: #f5f7fa !important;
+      color: #606266;
+      font-weight: 600;
+    }
+
+    .el-button--primary.is-link {
+      color: #409eff;
+    }
+
+    .el-button--danger.is-link {
+      color: #f56c6c;
+    }
+  }
+}
+</style>

+ 382 - 0
gw-ui/src/views/slaj/woas/config.vue

@@ -0,0 +1,382 @@
+<template>
+  <div class="system-page config-page">
+    <el-card class="page-card">
+      <template #header>
+        <div class="card-header">
+          <div class="header-left">
+            <el-icon :size="20" color="#409EFF"><Setting /></el-icon>
+            <span class="page-title">参数设置</span>
+          </div>
+          <div class="search-right">
+            <el-button type="primary" v-hasPermi="['system:config:add']" @click="handleAdd">
+              <el-icon><Plus /></el-icon> 新增
+            </el-button>
+            <el-button type="success" v-hasPermi="['system:config:edit']" :disabled="single" @click="handleUpdate()">
+              <el-icon><Edit /></el-icon> 修改
+            </el-button>
+            <el-button type="danger" v-hasPermi="['system:config:remove']" :disabled="multiple" @click="handleDelete()">
+              <el-icon><Delete /></el-icon> 删除
+            </el-button>
+            <el-button type="warning" v-hasPermi="['system:config:export']" @click="handleExport">
+              <el-icon><Download /></el-icon> 导出
+            </el-button>
+            <el-button type="danger" v-hasPermi="['system:config:remove']" @click="handleRefreshCache">
+              <el-icon><Refresh /></el-icon> 刷新缓存
+            </el-button>
+          </div>
+        </div>
+      </template>
+
+      <!-- 搜索栏 -->
+      <div class="search-bar" v-show="showSearch">
+        <el-form ref="queryFormRef" :model="queryParams" :inline="true">
+          <el-form-item label="参数名称" prop="configName">
+            <el-input v-model="queryParams.configName" placeholder="请输入参数名称" clearable @keyup.enter="handleQuery" />
+          </el-form-item>
+          <el-form-item label="参数键名" prop="configKey">
+            <el-input v-model="queryParams.configKey" placeholder="请输入参数键名" clearable @keyup.enter="handleQuery" />
+          </el-form-item>
+          <el-form-item label="系统内置" prop="configType">
+            <el-select v-model="queryParams.configType" placeholder="系统内置" clearable>
+              <el-option v-for="dict in sys_yes_no" :key="dict.value" :label="dict.label" :value="dict.value" />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="创建时间" style="width: 308px">
+            <el-date-picker
+              v-model="dateRange"
+              value-format="YYYY-MM-DD HH:mm:ss"
+              type="daterange"
+              range-separator="-"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              :default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]"
+            ></el-date-picker>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" @click="handleQuery">
+              <el-icon><Search /></el-icon> 搜索
+            </el-button>
+            <el-button @click="resetQuery">
+              <el-icon><RefreshRight /></el-icon> 重置
+            </el-button>
+          </el-form-item>
+        </el-form>
+      </div>
+
+      <!-- 参数列表 -->
+      <el-table v-loading="loading" :data="configList" style="width: 100%" border @selection-change="handleSelectionChange">
+        <el-table-column type="selection" width="45" />
+        <el-table-column v-if="false" label="参数主键" align="center" prop="configId" />
+        <el-table-column label="参数名称" align="center" prop="configName" :show-overflow-tooltip="true" />
+        <el-table-column label="参数键名" align="center" prop="configKey" :show-overflow-tooltip="true" />
+        <el-table-column label="参数键值" align="center" prop="configValue" :show-overflow-tooltip="true" />
+        <el-table-column label="系统内置" align="center" prop="configType">
+          <template #default="{ row }">
+            <dict-tag :options="sys_yes_no" :value="row.configType" />
+          </template>
+        </el-table-column>
+        <el-table-column label="备注" align="center" prop="remark" :show-overflow-tooltip="true" />
+        <el-table-column label="创建时间" align="center" prop="createTime" width="180">
+          <template #default="{ row }">
+            {{ proxy.parseTime(row.createTime) }}
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" align="center" width="150" fixed="right">
+          <template #default="{ row }">
+            <el-button link type="primary" v-hasPermi="['system:config:edit']" @click="handleUpdate(row)"> 编辑 </el-button>
+            <el-button link type="danger" v-hasPermi="['system:config:remove']" @click="handleDelete(row)"> 删除 </el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <!-- 分页 -->
+      <div class="pagination">
+        <el-pagination
+          v-show="total > 0"
+          v-model:current-page="queryParams.pageNum"
+          v-model:page-size="queryParams.pageSize"
+          :total="total"
+          :page-sizes="[10, 20, 50, 100]"
+          layout="total, sizes, prev, pager, next, jumper"
+          @size-change="getList"
+          @current-change="getList"
+        />
+      </div>
+    </el-card>
+
+    <!-- 新增/编辑对话框 -->
+    <el-dialog v-model="dialog.visible" :title="dialog.title" width="500px" top="5vh" append-to-body @close="cancel">
+      <el-form ref="configFormRef" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="参数名称" prop="configName">
+          <el-input v-model="form.configName" placeholder="请输入参数名称" />
+        </el-form-item>
+        <el-form-item label="参数键名" prop="configKey">
+          <el-input v-model="form.configKey" placeholder="请输入参数键名" />
+        </el-form-item>
+        <el-form-item label="参数键值" prop="configValue">
+          <el-input v-model="form.configValue" type="textarea" placeholder="请输入参数键值" />
+        </el-form-item>
+        <el-form-item label="系统内置" prop="configType">
+          <el-radio-group v-model="form.configType">
+            <el-radio v-for="dict in sys_yes_no" :key="dict.value" :value="dict.value">{{ dict.label }}</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <el-button @click="dialog.visible = false">取消</el-button>
+        <el-button type="primary" @click="submitForm">确定</el-button>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="Config" lang="ts">
+import { listConfig, getConfig, delConfig, addConfig, updateConfig, refreshCache } from '@/api/system/config'
+import { ConfigForm, ConfigQuery, ConfigVO } from '@/api/system/config/types'
+import { Plus, Edit, Delete, Download, Search, RefreshRight, Setting } from '@element-plus/icons-vue'
+
+const { proxy } = getCurrentInstance() as ComponentInternalInstance
+const { sys_yes_no } = toRefs<any>(proxy?.useDict('sys_yes_no'))
+
+const configList = ref<ConfigVO[]>([])
+const loading = ref(true)
+const showSearch = ref(true)
+const ids = ref<Array<number | string>>([])
+const single = ref(true)
+const multiple = ref(true)
+const total = ref(0)
+const dateRange = ref<[DateModelType, DateModelType]>(['', ''])
+
+const queryFormRef = ref<ElFormInstance>()
+const configFormRef = ref<ElFormInstance>()
+const dialog = reactive<DialogOption>({
+  visible: false,
+  title: ''
+})
+const initFormData: ConfigForm = {
+  configId: undefined,
+  configName: '',
+  configKey: '',
+  configValue: '',
+  configType: 'Y',
+  remark: ''
+}
+const data = reactive<PageData<ConfigForm, ConfigQuery>>({
+  form: { ...initFormData },
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    configName: '',
+    configKey: '',
+    configType: ''
+  },
+  rules: {
+    configName: [{ required: true, message: '参数名称不能为空', trigger: 'blur' }],
+    configKey: [{ required: true, message: '参数键名不能为空', trigger: 'blur' }],
+    configValue: [{ required: true, message: '参数键值不能为空', trigger: 'blur' }]
+  }
+})
+
+const { queryParams, form, rules } = toRefs(data)
+
+/** 查询参数列表 */
+const getList = async () => {
+  loading.value = true
+  const res = await listConfig(proxy?.addDateRange(queryParams.value, dateRange.value))
+  configList.value = res.rows
+  total.value = res.total
+  loading.value = false
+}
+/** 取消按钮 */
+const cancel = () => {
+  reset()
+  dialog.visible = false
+}
+/** 表单重置 */
+const reset = () => {
+  form.value = { ...initFormData }
+  configFormRef.value?.resetFields()
+}
+/** 搜索按钮操作 */
+const handleQuery = () => {
+  queryParams.value.pageNum = 1
+  getList()
+}
+/** 重置按钮操作 */
+const resetQuery = () => {
+  dateRange.value = ['', '']
+  queryFormRef.value?.resetFields()
+  handleQuery()
+}
+/** 多选框选中数据 */
+const handleSelectionChange = (selection: ConfigVO[]) => {
+  ids.value = selection.map((item) => item.configId)
+  single.value = selection.length != 1
+  multiple.value = !selection.length
+}
+/** 新增按钮操作 */
+const handleAdd = () => {
+  reset()
+  dialog.visible = true
+  dialog.title = '添加参数'
+}
+/** 修改按钮操作 */
+const handleUpdate = async (row?: ConfigVO) => {
+  reset()
+  const configId = row?.configId || ids.value[0]
+  const res = await getConfig(configId)
+  Object.assign(form.value, res.data)
+  dialog.visible = true
+  dialog.title = '修改参数'
+}
+/** 提交按钮 */
+const submitForm = () => {
+  configFormRef.value?.validate(async (valid: boolean) => {
+    if (valid) {
+      form.value.configId ? await updateConfig(form.value) : await addConfig(form.value)
+      proxy?.$modal.msgSuccess('操作成功')
+      dialog.visible = false
+      await getList()
+    }
+  })
+}
+/** 删除按钮操作 */
+const handleDelete = async (row?: ConfigVO) => {
+  const configIds = row?.configId || ids.value
+  await proxy?.$modal.confirm('是否确认删除参数编号为"' + configIds + '"的数据项?')
+  await delConfig(configIds)
+  await getList()
+  proxy?.$modal.msgSuccess('删除成功')
+}
+/** 导出按钮操作 */
+const handleExport = () => {
+  proxy?.download(
+    'system/config/export',
+    {
+      ...queryParams.value
+    },
+    `config_${new Date().getTime()}.xlsx`
+  )
+}
+/** 刷新缓存按钮操作 */
+const handleRefreshCache = async () => {
+  await refreshCache()
+  proxy?.$modal.msgSuccess('刷新缓存成功')
+}
+
+onMounted(() => {
+  getList()
+})
+</script>
+
+<style scoped lang="scss">
+.system-page {
+  padding: 0px;
+  background-color: #f5f7fa;
+  min-height: calc(100vh - 10px);
+
+  :deep(.el-input__wrapper) {
+    border-radius: 4px;
+  }
+
+  :deep(.el-textarea__inner) {
+    border-radius: 4px;
+  }
+
+  .page-card {
+    border-radius: 1px;
+    box-shadow: 0 2px 12px rgba(0, 0, 0, 0.05);
+
+    :deep(.el-card__header) {
+      padding: 15px 20px;
+      border-bottom: 1px solid #ebeef5;
+      background-color: #fff;
+      border-radius: 8px 8px 0 0;
+    }
+
+    :deep(.el-card__body) {
+      padding: 20px;
+      background-color: #fff;
+    }
+  }
+
+  .card-header {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+
+    .header-left {
+      display: flex;
+      align-items: center;
+      gap: 10px;
+
+      .page-title {
+        font-size: 18px;
+        font-weight: 600;
+        color: #303133;
+      }
+    }
+
+    .search-right {
+      display: flex;
+      gap: 10px;
+    }
+  }
+
+  .search-bar {
+    margin-bottom: 10px;
+    background-color: #f8faff;
+    padding: 6px 10px;
+    border-radius: 6px;
+    border: 0px solid #e6ebf5;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+
+    :deep(.el-form) {
+      display: flex;
+      flex-wrap: wrap;
+      gap: 10px;
+
+      .el-form-item {
+        margin-bottom: 0;
+        margin-right: 15px;
+
+        .el-form-item__label {
+          font-weight: 500;
+        }
+      }
+    }
+  }
+
+  .pagination {
+    margin-top: 8px;
+    margin-bottom: 8px;
+    display: flex;
+    justify-content: flex-end;
+  }
+
+  :deep(.el-table) {
+    border-radius: 4px;
+    overflow: auto;
+    height: calc(100vh - 195px);
+
+    th.el-table__cell {
+      background-color: #f5f7fa !important;
+      color: #606266;
+      font-weight: 600;
+    }
+
+    .el-button--primary.is-link {
+      color: #409eff;
+    }
+
+    .el-button--danger.is-link {
+      color: #f56c6c;
+    }
+  }
+}
+</style>