Browse Source

Merge branch 'dev'

DESKTOP-USV654P\pc 1 month ago
parent
commit
c675d2b9c2

+ 2 - 2
Makefile

@@ -2,7 +2,7 @@
 
 # 记录开始时间
 START_TIME := $(shell powershell -NoProfile -Command "Get-Date -UFormat %%s")
-V_TAG := v2.5.0
+V_TAG := v2.5.2
 
 checkDev:
 	git checkout dev
@@ -12,7 +12,7 @@ build:
 
 commit:
 	git add . && \
-	git commit --no-verify -m "fix: change studentScore enter"
+	git commit --no-verify -m "fix: change educational socialSecurity"
 
 checkPre:
 	git checkout pre

+ 1 - 1
src/components/Designer/src/components/ComponentGroup.vue

@@ -12,7 +12,7 @@
     <template #item="{ element }">
       <li
         v-if="fields.includes(element.type)"
-        class="form-edit-widget-label cg-list"
+        class="cg-list"
         :class="{ 'no-put': element.type === 'divider' }"
         @click="handleClick(element)"
       >

+ 9 - 8
src/views/educational/labourManager/index.vue

@@ -15,12 +15,13 @@
     postBasepersonnellabourcapitalImport,
     getBasepersonnellabourcapitalExport,
   } from '/@/services/apis/BasePersonnelLabourCapitalController';
-  import { h, ref } from 'vue';
+  import { h, reactive, ref } from 'vue';
   import { useModal } from '/@/components/Modal';
   import { formatToDateTime } from '/@/utils/dateUtil';
   import { t } from '/@/hooks/web/useI18n';
   const visible = ref(false);
   const file = ref();
+  const searchInfo = reactive<Recordable>({ category: 1 });
   const [registerTable, { reload }] = useTable({
     api: getBasepersonnellabourcapitalPage,
     title: '工资条列表',
@@ -46,11 +47,11 @@
   });
   const [viewModalreg, { openModal }] = useModal();
   const { createMessage, createConfirm } = useMessage();
-  const handleExport = async () => {
-    const data = await getBasepersonnellabourcapitalExport({});
-    downloadByData(data.data, `工资条${formatToDateTime(new Date(), 'YYYYMMDDHHmmss')}.xlsx`);
-    createMessage.success('导出成功');
-  };
+  // const handleExport = async () => {
+  //   const data = await getBasepersonnellabourcapitalExport({});
+  //   downloadByData(data.data, `工资条${formatToDateTime(new Date(), 'YYYYMMDDHHmmss')}.xlsx`);
+  //   createMessage.success('导出成功');
+  // };
   const beforeUpload = async (e) => {
     file.value = e;
     return false;
@@ -92,7 +93,7 @@
     }
     const data = await validateFields();
     data.dateOfIssue = data.dateOfIssue + '-01';
-    await postBasepersonnellabourcapitalImport({ file: file.value, ...data });
+    await postBasepersonnellabourcapitalImport({ file: file.value, ...data, category: 1 });
     createMessage.success('导入成功');
     resetFields();
     visible.value = false;
@@ -106,7 +107,7 @@
 
 <template>
   <PageWrapper dense contentFullHeight fixedHeight contentClass="flex">
-    <BasicTable @register="registerTable">
+    <BasicTable @register="registerTable" :searchInfo="searchInfo">
       <template #toolbar>
         <a-button type="primary" @click="visible = true">导入</a-button>
         <!-- <a-button type="primary" @click="handleExport()">导出</a-button> -->

+ 44 - 0
src/views/educational/socialSecurity/components/data.config.ts

@@ -0,0 +1,44 @@
+import { BasicColumn, FormSchema } from '/@/components/Table';
+import { formatToDate } from '/@/utils/dateUtil';
+
+export const type = {
+  0: '菜单',
+  1: '目录',
+};
+export const tableColumns: BasicColumn[] = [
+  {
+    title: '社保基数名称',
+    dataIndex: 'name',
+    align: 'left',
+  },
+  {
+    title: '年份',
+    dataIndex: 'dateOfIssue',
+    width: 150,
+    customRender: ({ text }) => {
+      return formatToDate(text, 'YYYY年');
+    },
+  },
+];
+
+export const formSchema: FormSchema[] = [
+  {
+    field: 'name',
+    label: '社保基数名称',
+    component: 'Input',
+    required: true,
+    colProps: { span: 24 },
+  },
+  {
+    field: 'dateOfIssue',
+    label: '年份',
+    component: 'DatePicker',
+    componentProps: {
+      picker: 'year',
+      format: 'YYYY',
+      valueFormat: 'YYYY',
+    },
+    required: true,
+    colProps: { span: 24 },
+  },
+];

+ 73 - 0
src/views/educational/socialSecurity/components/viewModal.vue

@@ -0,0 +1,73 @@
+<script setup lang="ts">
+  import BasicModal from '/@/components/Modal/src/BasicModal.vue';
+  import { useModalInner } from '/@/components/Modal';
+  import { useTable, BasicTable } from '/@/components/Table';
+  import { getBasepersonnellabourcapitalInfo } from '/@/services/apis/BasePersonnelLabourCapitalController';
+  import { Tooltip } from 'ant-design-vue';
+
+  defineEmits(['register']);
+  const [modalReg, {}] = useModalInner(async (data) => {
+    const configData = await getBasepersonnellabourcapitalInfo({ id: data.id });
+    const columns = [] as any;
+    const tableData = [] as any;
+    configData &&
+      configData.basePersonnelLabourCapitalTitleList?.forEach((item, index) => {
+        if (item.rowsNumber === 3) {
+          columns.push({
+            title: item.name,
+            dataIndex: item.columnNumber,
+            id: item.id,
+            ellipsis: true,
+            children: [],
+          });
+          if (item.mergeColumns) {
+            columns[index].indexCol = item.columnNumber;
+            columns[index].sonList = [];
+            for (let i = 0; i < item.mergeColumns + 1; i++) {
+              columns[index].sonList.push(item.columnNumber + i);
+            }
+          }
+        }
+
+        if (item.rowsNumber === 4) {
+          columns.forEach((items) => {
+            if (items.sonList && items.sonList.includes(item.columnNumber)) {
+              items.children.push({
+                title: item.name,
+                dataIndex: item.columnNumber,
+                // width: 120,
+                ellipsis: true,
+                id: item.id,
+              });
+            }
+          });
+        }
+      });
+    configData &&
+      configData.basePersonnelLabourCapitalDataList.forEach((item) => {
+        tableData.push(JSON.parse(item.extendJson));
+      });
+    setColumns(columns);
+    setTableData(tableData);
+  });
+  const [tableReg, { setColumns, setTableData }] = useTable({
+    bordered: true,
+    pagination: false,
+    maxHeight: 700,
+  });
+</script>
+
+<template>
+  <BasicModal default-fullscreen @register="modalReg" title="查看详情" :footer="null">
+    <BasicTable @register="tableReg">
+      <template #headerCell="{ column }">
+        <Tooltip>
+          <template #title>{{ column.title }}{{ column.customTitle }}</template>
+          {{ column.title }} {{ column.customTitle }}
+        </Tooltip>
+      </template>
+    </BasicTable>
+  </BasicModal>
+</template>
+
+<style lang="less" scoped></style>

+ 145 - 0
src/views/educational/socialSecurity/index.vue

@@ -0,0 +1,145 @@
+<script setup lang="ts">
+  import { PageWrapper } from '/@/components/Page';
+  import { BasicTable, useTable, TableAction } from '/@/components/Table';
+  import { useMessage } from '/@/hooks/web/useMessage';
+  import { Upload } from 'ant-design-vue';
+  import BasicForm from '/@/components/TableForm/src/BasicForm.vue';
+  import { downloadByData } from '/@/utils/file/download';
+  import { Modal } from 'ant-design-vue';
+  import { useForm } from '/@/components/Form';
+  import viewModal from './components/viewModal.vue';
+  import { tableColumns, formSchema } from './components/data.config';
+  import {
+    deletePersonnelBasepersonnellabourcapital,
+    getBasepersonnellabourcapitalPage,
+    postBasepersonnellabourcapitalImport,
+    getBasepersonnellabourcapitalExport,
+  } from '/@/services/apis/BasePersonnelLabourCapitalController';
+  import { h, ref, reactive } from 'vue';
+  import { useModal } from '/@/components/Modal';
+  import { formatToDateTime } from '/@/utils/dateUtil';
+  import { t } from '/@/hooks/web/useI18n';
+  const visible = ref(false);
+  const file = ref();
+  const searchInfo = reactive<Recordable>({ category: 2 });
+  const [registerTable, { reload }] = useTable({
+    api: getBasepersonnellabourcapitalPage,
+    title: '社保基数',
+    rowKey: 'id',
+    columns: tableColumns,
+    useSearchForm: false,
+    showTableSetting: true,
+    bordered: true,
+    immediate: true,
+    canResize: true,
+    actionColumn: {
+      width: 150,
+      title: '操作',
+      dataIndex: 'action',
+      slots: { customRender: 'action' },
+      fixed: 'right',
+    },
+  });
+  const [formReg, { validateFields, resetFields }] = useForm({
+    showActionButtonGroup: false,
+    schemas: formSchema,
+    labelWidth: 100,
+  });
+  const [viewModalreg, { openModal }] = useModal();
+  const { createMessage, createConfirm } = useMessage();
+  const handleExport = async () => {
+    const data = await getBasepersonnellabourcapitalExport({});
+    downloadByData(data.data, `社保基数${formatToDateTime(new Date(), 'YYYYMMDDHHmmss')}.xlsx`);
+    createMessage.success('导出成功');
+  };
+  const beforeUpload = async (e) => {
+    file.value = e;
+    return false;
+  };
+  const handleDownload = () => {
+    const a = document.createElement('a');
+    a.href =
+      'https://zhxy.cqtlzjzx.com/minio/static/resources/%E7%A4%BE%E4%BF%9D%E6%A8%A1%E6%9D%BF.xlsx';
+    a.download = '社保模板.xlsx';
+    a.click();
+    a.remove();
+    createMessage.success('下载成功');
+  };
+  const handleEdit = async (record: any, isUpdate: boolean) => {
+    openModal(true, { ...record, isUpdate: isUpdate });
+  };
+  const handleDelete = (record: any) => {
+    createConfirm({
+      iconType: 'warning',
+      title: () => h('span', t('温馨提醒')),
+      content: () => h('span', t('是否删除该工资条?')),
+      onOk: async () => {
+        try {
+          await deletePersonnelBasepersonnellabourcapital([record.id]);
+          createMessage.success('删除成功');
+          await reload();
+        } catch (e) {
+          createMessage.error('删除失败');
+        }
+      },
+      okText: () => t('确认'),
+      cancelText: () => t('取消'),
+    });
+  };
+  const handleSubmit = async () => {
+    if (!file.value) {
+      createMessage.error('请上传文件');
+      return;
+    }
+    const data = await validateFields();
+    data.dateOfIssue = data.dateOfIssue + '-01-01';
+    await postBasepersonnellabourcapitalImport({ file: file.value, ...data, category: 2 });
+    createMessage.success('导入成功');
+    resetFields();
+    visible.value = false;
+    reload();
+  };
+  const handleCancel = () => {
+    resetFields();
+    visible.value = false;
+  };
+</script>
+
+<template>
+  <PageWrapper dense contentFullHeight fixedHeight contentClass="flex">
+    <BasicTable @register="registerTable" :searchInfo="searchInfo">
+      <template #toolbar>
+        <a-button type="primary" @click="visible = true">导入</a-button>
+        <!-- <a-button type="primary" @click="handleExport()">导出</a-button> -->
+        <a-button type="primary" @click="handleDownload">下载模板</a-button>
+      </template>
+      <template #action="{ record }">
+        <div style="display: flex; justify-content: center">
+          <TableAction
+            :actions="[
+              {
+                label: '查看',
+                onClick: handleEdit.bind(null, record, false),
+              },
+              {
+                label: '删除',
+                onClick: handleDelete.bind(null, record),
+              },
+            ]"
+          />
+        </div>
+      </template>
+    </BasicTable>
+    <viewModal @register="viewModalreg" />
+    <Modal @cancel="handleCancel" @ok="handleSubmit" v-model:visible="visible" title="导入">
+      <div style="padding: 12px">
+        <Upload :max-count="1" :before-upload="beforeUpload">
+          <a-button type="primary"> 模板文件 </a-button>
+        </Upload>
+        <BasicForm @register="formReg" />
+      </div>
+    </Modal>
+  </PageWrapper>
+</template>
+
+<style scoped lang="less"></style>

+ 1 - 1
src/views/educational/studentScore/enter/editForm.vue

@@ -56,7 +56,7 @@
               v-model:value="record.gradeRanking"
               :min="0"
               default-value="0"
-              @blur="handleChange(record, 'classRanking', $event)"
+              @blur="handleChange(record, 'gradeRanking', $event)"
             />
           </template>
 

+ 2 - 2
src/views/system/message/view.vue

@@ -18,8 +18,8 @@
         {{ modelRef?.title }}
       </div>
       <div class="message-info-header flex justify-center">
-        <div>【发布人】{{ modelRef?.releaseDate }}</div>
-        <div class="ml-4">【发布时间】 {{ modelRef?.releaseDate }}</div>
+        <div>【发布人】{{ modelRef?.createUserName }}</div>
+        <div class="ml-4">【发布时间】 {{ modelRef?.createDate }}</div>
       </div>
       <div class="message-info-body mt-4">
         {{ modelRef?.content }}