Parcourir la source

Merge remote-tracking branch 'origin/test' into wuguojie

# Conflicts:
#	.env.development
wuguojie il y a 1 an
Parent
commit
804728db9c
28 fichiers modifiés avec 1279 ajouts et 614 suppressions
  1. 1 1
      package.json
  2. 17 5
      src/api/modules/product.ts
  3. 128 0
      src/api/types/productTypes.ts
  4. 40 5
      src/assets/styles/globals.css
  5. 38 19
      src/components/Table/index.vue
  6. 1 1
      src/layouts/components/Logo/index.vue
  7. 0 1
      src/layouts/components/Topbar/Toolbar/rightSide.vue
  8. 2 0
      src/router/modules/insuranceCompany.ts
  9. 27 4
      src/router/modules/product.ts
  10. 77 12
      src/views/index.vue
  11. 8 9
      src/views/insuranceCompanyConfiguration/accountOwnershipConfig.vue
  12. 154 34
      src/views/insuranceCompanyConfiguration/insuranceCompanyConfig.vue
  13. 16 9
      src/views/insuranceCompanyConfiguration/paymentCodeConfig.vue
  14. 30 26
      src/views/organizationManagement/functionConfiguration.vue
  15. 35 30
      src/views/organizationManagement/modules/companySelect.vue
  16. 25 41
      src/views/organizationManagement/organization/organizationAdd.vue
  17. 16 19
      src/views/organizationManagement/organization/organizationDetail.vue
  18. 16 12
      src/views/organizationManagement/organization/organizationlist.vue
  19. 2 2
      src/views/organizationManagement/organization/subOrganizatioAdd.vue
  20. 1 1
      src/views/organizationManagement/tenantPermissions.vue
  21. 63 46
      src/views/personnel/memberManagement.vue
  22. 47 6
      src/views/personnel/roleManagement.vue
  23. 16 9
      src/views/productConfiguration/drivingInsurance/drivingInsuranceindex.vue
  24. 0 318
      src/views/productConfiguration/specialClause/index.vue
  25. 217 0
      src/views/productConfiguration/specialClause/specialClauseAdd.vue
  26. 298 0
      src/views/productConfiguration/specialClause/specialClauseindex.vue
  27. 2 2
      tsconfig.app.json
  28. 2 2
      tsconfig.node.json

+ 1 - 1
package.json

@@ -7,7 +7,7 @@
   "scripts": {
   "scripts": {
     "dev": "vite",
     "dev": "vite",
     "build": "vue-tsc -b && vite build",
     "build": "vue-tsc -b && vite build",
-    "build:test": "vue-tsc -b && vite build --mode test",
+    "build:test": " vite build --mode test",
     "serve": "http-server ./dist -o",
     "serve": "http-server ./dist -o",
     "serve:test": "http-server ./dist-test -o",
     "serve:test": "http-server ./dist-test -o",
     "svgo": "svgo -f src/assets/icons",
     "svgo": "svgo -f src/assets/icons",

+ 17 - 5
src/api/modules/product.ts

@@ -2,17 +2,29 @@ import { ApiInstance } from '../type'
 import * as Types from '../types/productTypes';
 import * as Types from '../types/productTypes';
 const product = (axiosInstance: ApiInstance) => ({
 const product = (axiosInstance: ApiInstance) => ({
   //保存驾意险配置
   //保存驾意险配置
-  jyxConfigAdd: (data: Types.jyxConfigRequest) => axiosInstance.post('/jyxConfig/saveAll', data),
+  jyxConfigAdd: (data: Types.jyxConfigRequest) => axiosInstance.post('jyxConfig/saveAll', data),
   //查询主险
   //查询主险
-  selectMainInsurance: (company:string ) => axiosInstance.get(`/jyxConfig/selectMainInsurance?company=${company}`),
+  selectMainInsurance: (company:string ) => axiosInstance.get(`jyxConfig/selectMainInsurance?company=${company}`),
   //查询驾意险列表
   //查询驾意险列表
-  jyxList: (data: Types.jyxListRequest) => axiosInstance.post('/jyxConfig/jyxList', data),
+  jyxList: (data: Types.jyxListRequest) => axiosInstance.post('jyxConfig/jyxList', data),
   //详情
   //详情
-  jygetById: (id:string ) => axiosInstance.get(`/jyxConfig/getById?id=${id}`),
+  jygetById: (id:string ) => axiosInstance.get(`jyxConfig/getById?id=${id}`),
   //驾意险修改
   //驾意险修改
   jyxupdateById: (data: Types.jyxConfigRequest) => axiosInstance.post('/jyxConfig/updateById', data),
   jyxupdateById: (data: Types.jyxConfigRequest) => axiosInstance.post('/jyxConfig/updateById', data),
   //删除
   //删除
-  deleteById: (id:string ) => axiosInstance.get(`/jyxConfig/deleteById?id=${id}`),
+  deleteById: (id:string ) => axiosInstance.get(`jyxConfig/deleteById?id=${id}`),
+  //添加特别约定
+  addClause: (data: Types.addClauseRequest) => axiosInstance.post('manager/clause/addClause', data),
+  //修改特别约定
+  updateClause: (data: Types.addClauseRequest) => axiosInstance.post('manager/clause/updateClause', data),
+  //特别约定列表查询
+  getClausePage: (data: Types.pageRequest) => axiosInstance.post('manager/clause/getClausePage', data),
+  //特别约定查询
+  getClause: (data: Types.pageRequest) => axiosInstance.post('manager/clause/getClause', data),
+
+  //特约删除
+  deleteClause: (data:string[]) => axiosInstance.post('manager/clause/deleteClause', data),
+
 })
 })
 
 
 export default product
 export default product

+ 128 - 0
src/api/types/productTypes.ts

@@ -168,3 +168,131 @@ export type jyxListRequest = {
   size?: number;
   size?: number;
   [property: string]: any;
   [property: string]: any;
 }
 }
+
+/**
+ * InsCompanyClause,特约条款
+ */
+export type addClauseRequest = {
+  /**
+   * 条款code
+   */
+  clauseCode?: string;
+  /**
+   * 条款内容
+   */
+  clauseContent?: string;
+  /**
+   * 条款名称
+   */
+  clauseName?: string;
+  /**
+   * 客户端状态
+   */
+  clientStatus?: string;
+  /**
+   * 保险公司id
+   */
+  companyId?: string;
+  /**
+   * 创建人
+   */
+  createBy?: string;
+  /**
+   * 创建时间
+   */
+  createTime?: Date;
+  /**
+   * 主键
+   */
+  id?: string;
+  /**
+   * 是否删除
+   */
+  isDelete?: number;
+  /**
+   * 是否编辑
+   */
+  isEdit?: string;
+  /**
+   * 险种code
+   */
+  riskCode?: string;
+  /**
+   * 修改人
+   */
+  updateBy?: string;
+  /**
+   * 修改时间
+   */
+  updateTime?: Date;
+  [property: string]: any;
+}
+
+/**
+ * CompanyClauseVo
+ */
+export type pageRequest = {
+  /**
+   * 条款内容
+   */
+  clauseContent?: string;
+  /**
+   * 条款名称
+   */
+  clauseName?: string;
+  /**
+   * 保险公司id
+   */
+  companyId?: string;
+  page?: Page;
+  pages?: number;
+  /**
+   * 险种信息
+   */
+  riskCode?: string;
+  size?: number;
+  [property: string]: any;
+}
+/**
+ * Page
+ */
+export type Page = {
+  countId?: string;
+  current?: number;
+  maxLimit?: number;
+  optimizeCountSql?: PageObject;
+  optimizeJoinOfCountSql?: boolean;
+  orders?: OrderItem[];
+  pages?: number;
+  records?: { [key: string]: any }[];
+  searchCount?: PageObject;
+  size?: number;
+  total?: number;
+  [property: string]: any;
+}
+/**
+ * PageObject
+ */
+export type PageObject = {
+  countId?: string;
+  current?: number;
+  maxLimit?: number;
+  optimizeCountSql?: PageObject;
+  optimizeJoinOfCountSql?: boolean;
+  orders?: OrderItem[];
+  pages?: number;
+  records?: { [key: string]: any }[];
+  searchCount?: PageObject;
+  size?: number;
+  total?: number;
+  [property: string]: any;
+}
+
+/**
+* OrderItem
+*/
+export type OrderItem = {
+  asc?: boolean;
+  column?: string;
+  [property: string]: any;
+}

+ 40 - 5
src/assets/styles/globals.css

@@ -154,15 +154,21 @@ textarea {
 
 
 /* 全局样式覆盖 */
 /* 全局样式覆盖 */
 .bg-\[var\(--g-sub-sidebar-menu-active-bg\)\]\! {
 .bg-\[var\(--g-sub-sidebar-menu-active-bg\)\]\! {
-  background: var(--g-sub-sidebar-menu-active-bg) /* var(--g-sub-sidebar-menu-active-bg) */ !important;
+  background:
+    var(--g-sub-sidebar-menu-active-bg)
+    /* var(--g-sub-sidebar-menu-active-bg) */ !important;
 }
 }
 
 
 .bg-\[var\(--g-header-menu-active-bg\)\]\! {
 .bg-\[var\(--g-header-menu-active-bg\)\]\! {
-  background-color: #ffffff1a /* var(--g-header-menu-active-bg) */ !important;
+  background-color:
+    #ffffff1a
+    /* var(--g-header-menu-active-bg) */ !important;
 }
 }
 
 
 .text-\[var\(--g-header-menu-active-color\)\]\! {
 .text-\[var\(--g-header-menu-active-color\)\]\! {
-  color: #fff /* var(--g-header-menu-active-color) */ !important;
+  color:
+    #fff
+    /* var(--g-header-menu-active-color) */ !important;
 }
 }
 
 
 .sub-menu {
 .sub-menu {
@@ -204,6 +210,33 @@ textarea {
 
 
 /* 消息提示弹窗 */
 /* 消息提示弹窗 */
 
 
+/* dialog对话框样式 */
+.el-dialog {
+  padding: 0;
+}
+
+.el-dialog__header {
+  padding: 13px;
+  text-align: center;
+  border-bottom: 1px solid #eee;
+}
+
+.el-dialog__header .el-dialog__title {
+  font-weight: bold;
+  color: #333;
+}
+
+.el-dialog__body {
+  padding: 24px;
+}
+
+.el-dialog__footer {
+  padding: 13px 24px;
+  border-top: 1px solid #eee;
+}
+
+/* dialog对话框样式 */
+
 /* 全局样式覆盖 */
 /* 全局样式覆盖 */
 
 
 /* 自定义全局样式 */
 /* 自定义全局样式 */
@@ -284,7 +317,7 @@ textarea {
 }
 }
 
 
 .vh100 {
 .vh100 {
-  height: calc(100vh - 200px);
+  height: calc(100vh - 150px);
   overflow-y: auto;
   overflow-y: auto;
 }
 }
 
 
@@ -294,7 +327,9 @@ textarea {
 }
 }
 
 
 .elementSpacing > * {
 .elementSpacing > * {
-  margin-bottom: 5px; /* 下边距 */
+  margin-bottom: 5px;
+
+  /* 下边距 */
 }
 }
 
 
 .size14 {
 .size14 {

+ 38 - 19
src/components/Table/index.vue

@@ -67,9 +67,20 @@
             </el-tag>
             </el-tag>
             <ImagePreview v-else-if="column.component === 'Image'" :src="getImgTo(scope.row, column)" width="50px"
             <ImagePreview v-else-if="column.component === 'Image'" :src="getImgTo(scope.row, column)" width="50px"
               height="50px"></ImagePreview>
               height="50px"></ImagePreview>
-            <span v-else>
-              {{ getDisplayText(scope.row, column) }}
-            </span>
+            <div v-else-if="column.component === 'customEvent'">
+              <span v-if="customEvent(scope.row, column).style" :style="customEvent(scope.row, column).style"
+                @click="customEventClick(scope.row)">{{ customEvent(scope.row, column).content }}</span>
+              <span v-else>{{ customEvent(scope.row, column) }}</span>
+            </div>
+            <div v-else>
+              <div v-if="getDisplayText(scope.row, 0).includes('\n')" class="flex f-c ">
+                <span v-for="(line, index) in getDisplayText(scope.row, column).split('\n')" :key="index">{{ line
+                  }}</span>
+              </div>
+              <span v-else>
+                {{ getDisplayText(scope.row, column) }}
+              </span>
+            </div>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
         <el-table-column label="操作" fixed="right" :width="props.columnwidth" align="center">
         <el-table-column label="操作" fixed="right" :width="props.columnwidth" align="center">
@@ -81,7 +92,7 @@
         </el-table-column>
         </el-table-column>
       </el-table>
       </el-table>
     </div>
     </div>
-    <div class="page_box" v-if="props.pageInfo">
+    <div class="page_box m-top-10" v-if="props.pageInfo">
       <el-pagination v-model:current-page="props.pageInfo.pageNum" v-model:page-size="props.pageInfo.pageSize"
       <el-pagination v-model:current-page="props.pageInfo.pageNum" v-model:page-size="props.pageInfo.pageSize"
         :page-sizes="props.pageInfo.sizes" layout="total, sizes, prev, pager, next, jumper"
         :page-sizes="props.pageInfo.sizes" layout="total, sizes, prev, pager, next, jumper"
         :total="props.pageInfo.total" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
         :total="props.pageInfo.total" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
@@ -96,7 +107,7 @@ import type { TableInstance } from "element-plus";
 interface TableRow {
 interface TableRow {
   [key: string]: any;
   [key: string]: any;
 }
 }
-const emit = defineEmits(['getList', 'selectAllChange', 'selectionChange']);
+const emit = defineEmits(['getList', 'selectAllChange', 'selectionChange', 'customEventClick']);
 const props = defineProps<{
 const props = defineProps<{
   tableData: Array<TableRow>;
   tableData: Array<TableRow>;
   columnwidth: number,//操作栏宽度
   columnwidth: number,//操作栏宽度
@@ -148,19 +159,21 @@ onMounted(() => {
     ...row,
     ...row,
     _edit: false, // 设置默认非编辑状态
     _edit: false, // 设置默认非编辑状态
     counter: counter++
     counter: counter++
-
   }));
   }));
-  setTimeout(() => {
-    const tableElement = multipleTableRef.value?.$el as HTMLElement;
-    if (tableElement) {
-      const offsetTop = tableElement.offsetTop; // 获取 offsetTop
-      let height = window.innerHeight;
-      tableHeight.value = height - offsetTop - 270 + "px";
-    }
-  }, 10);
-
-
+  handleResize();
 });
 });
+function handleResize() {
+  // 获取当前窗口的高度
+  const height = window.innerHeight;
+  // 在这里可以执行其他操作,比如更新某个元素的高度等
+  const tableElement = multipleTableRef.value?.$el as HTMLElement;
+  if (tableElement) {
+    const offsetTop = tableElement.offsetTop; // 获取 offsetTop
+    tableHeight.value = height - offsetTop - 230 + "px";
+  }
+}
+// 监听窗口的 resize 事件
+window.addEventListener('resize', handleResize);
 const selectable = () => true;
 const selectable = () => true;
 const handleSizeChange = (val: number) => {
 const handleSizeChange = (val: number) => {
   if (props.pageInfo) {
   if (props.pageInfo) {
@@ -169,8 +182,8 @@ const handleSizeChange = (val: number) => {
   }
   }
 }
 }
 //多选
 //多选
-
 const selectAllChange = (value: any[]) => {
 const selectAllChange = (value: any[]) => {
+  newSelectionList.value = [];
   if (value.length > 0) {
   if (value.length > 0) {
     value.map(val => {
     value.map(val => {
       newSelectionList.value.push(val.id)
       newSelectionList.value.push(val.id)
@@ -179,9 +192,9 @@ const selectAllChange = (value: any[]) => {
     newSelectionList.value = [];
     newSelectionList.value = [];
   }
   }
   emit('selectAllChange', newSelectionList.value)
   emit('selectAllChange', newSelectionList.value)
-
 }
 }
 const selectionChange = (value: any[]) => {
 const selectionChange = (value: any[]) => {
+  newSelectionList.value = [];
   if (value.length > 0) {
   if (value.length > 0) {
     value.map(val => {
     value.map(val => {
       newSelectionList.value.push(val.id)
       newSelectionList.value.push(val.id)
@@ -196,7 +209,10 @@ const handleCurrentChange = (val: number) => {
     props.pageInfo.pageNum = val
     props.pageInfo.pageNum = val
     emit('getList', props.pageInfo);
     emit('getList', props.pageInfo);
   }
   }
-
+}
+// 高亮自定义事件
+const customEventClick = (row: Row) => {
+  emit('customEventClick', row)
 }
 }
 //空值处理
 //空值处理
 const displayValue = (value: any) => {
 const displayValue = (value: any) => {
@@ -216,6 +232,9 @@ function getTagTypeAndText(row: Row, column: any) {
 function getDisplayText(row: Row, column: any): string {
 function getDisplayText(row: Row, column: any): string {
   return column.formatter ? column.formatter(row, column, row[column.prop]) : displayValue(row[column.prop]);
   return column.formatter ? column.formatter(row, column, row[column.prop]) : displayValue(row[column.prop]);
 }
 }
+function customEvent(row: Row, column: any) {
+  return column.formatter ? column.formatter(row, column, row[column.prop]) : row[column.prop]
+}
 </script>
 </script>
 <style lang="scss" scoped>
 <style lang="scss" scoped>
 .el-table .el-table__cell .routerlick > a {
 .el-table .el-table__cell .routerlick > a {

+ 1 - 1
src/layouts/components/Logo/index.vue

@@ -31,7 +31,7 @@ const to = computed(() => settingsStore.settings.home.enable ? settingsStore.set
     <!-- <img v-if="showLogo" :src="logo" class="logo h-[30px] w-[30px] object-contain">
     <!-- <img v-if="showLogo" :src="logo" class="logo h-[30px] w-[30px] object-contain">
     <span v-if="showTitle" class="block truncate font-bold">{{ title }}</span> -->
     <span v-if="showTitle" class="block truncate font-bold">{{ title }}</span> -->
     <!-- 自定义内容 -->
     <!-- 自定义内容 -->
-    <img v-if="showLogo" src="../../../assets/images/titleImg.png" class="logo h-[30px] w-[30px] object-contain">
+    <img v-if="showLogo" src="../../../assets/images/titleImg.png"
 
 
   </RouterLink>
   </RouterLink>
 </template>
 </template>

+ 0 - 1
src/layouts/components/Topbar/Toolbar/rightSide.vue

@@ -19,7 +19,6 @@ const settingsStore = useSettingsStore()
 const userStore = useUserStore()
 const userStore = useUserStore()
 const inputText = ref(userStore.realName); // 用户输入的中文文本
 const inputText = ref(userStore.realName); // 用户输入的中文文本
 const firstLetterPinyin = ref(''); // 转换为拼音首字母
 const firstLetterPinyin = ref(''); // 转换为拼音首字母
-console.log(userStore.avatar)
 //获取
 //获取
 const convert = () => {
 const convert = () => {
   firstLetterPinyin.value = getFirstLetterPinyin(inputText.value);
   firstLetterPinyin.value = getFirstLetterPinyin(inputText.value);

+ 2 - 0
src/router/modules/insuranceCompany.ts

@@ -26,6 +26,7 @@ const routes: RouteRecordRaw = {
       component: () => import('@/views/insuranceCompanyConfiguration/paymentCodeConfig.vue'),
       component: () => import('@/views/insuranceCompanyConfiguration/paymentCodeConfig.vue'),
       meta: {
       meta: {
         title: '支付码配置',
         title: '支付码配置',
+        auth: ['paymentCodeConfig.add', 'paymentCodeConfig.view', 'paymentCodeConfig.delete', 'paymentCodeConfig.edit']
       },
       },
     },
     },
     {
     {
@@ -34,6 +35,7 @@ const routes: RouteRecordRaw = {
       component: () => import('@/views/insuranceCompanyConfiguration/accountOwnershipConfig.vue'),
       component: () => import('@/views/insuranceCompanyConfiguration/accountOwnershipConfig.vue'),
       meta: {
       meta: {
         title: '账号归属配置',
         title: '账号归属配置',
+        auth: ['accountOwnershipConfig.add', 'accountOwnershipConfig.view', 'accountOwnershipConfig.delete', 'accountOwnershipConfig.edit']
       },
       },
     },
     },
     {
     {

+ 27 - 4
src/router/modules/product.ts

@@ -12,7 +12,7 @@ const routes: RouteRecordRaw = {
   },
   },
   children: [
   children: [
     {
     {
-      path: 'index',
+      path: 'drivingInsuranceindex',
       name: 'DrivingInsuranceIndex',
       name: 'DrivingInsuranceIndex',
       redirect: '/productConfiguration/drivingInsurance/index',
       redirect: '/productConfiguration/drivingInsurance/index',
       meta: {
       meta: {
@@ -22,7 +22,7 @@ const routes: RouteRecordRaw = {
       children: [
       children: [
         {
         {
           path: '',
           path: '',
-          component: () => import('@/views/productConfiguration/drivingInsurance/index.vue'),
+          component: () => import('@/views/productConfiguration/drivingInsurance/drivingInsuranceindex.vue'),
           meta: {
           meta: {
             title: '驾意险配置',
             title: '驾意险配置',
             menu: false,
             menu: false,
@@ -42,13 +42,36 @@ const routes: RouteRecordRaw = {
       ],
       ],
     },
     },
 
 
+
     {
     {
-      path: '/productConfiguration/specialClause/index',
+      path: 'specialClauseindex',
       name: 'SpecialClauseIndex',
       name: 'SpecialClauseIndex',
-      component: () => import('@/views/productConfiguration/specialClause/index.vue'),
+      redirect: '/productConfiguration/specialClause/specialClauseindex',
       meta: {
       meta: {
         title: '特约管理',
         title: '特约管理',
+        auth: ['specialClause.add', 'specialClause.view', 'specialClause.delete', 'specialClause.edit']
       },
       },
+      children: [
+        {
+          path: '',
+          component: () => import('@/views/productConfiguration/specialClause/specialClauseindex.vue'),
+          meta: {
+            title: '特约管理',
+            menu: false,
+            breadcrumb: false,
+          },
+        },
+        {
+          path: 'specialClauseAdd',
+          name: 'SpecialClauseAdd',
+          component: () => import('@/views/productConfiguration/specialClause/specialClauseAdd.vue'),
+          meta: {
+            title: '特约添加',
+            menu: false,
+            activeMenu: '/productConfiguration/specialClause/specialClauseindex',
+          },
+        },
+      ]
     },
     },
   ],
   ],
 }
 }

+ 77 - 12
src/views/index.vue

@@ -50,6 +50,11 @@ const oneStepAdminInfo = ref({
 function open(url: string) {
 function open(url: string) {
   window.open(url, '_blank')
   window.open(url, '_blank')
 }
 }
+const activeIndex = ref(1);
+
+const onTabClick = (index: number) => {
+  activeIndex.value = index;
+};
 </script>
 </script>
 
 
 <template>
 <template>
@@ -74,14 +79,12 @@ function open(url: string) {
         <SvgIcon name="i-ri:file-text-line" />
         <SvgIcon name="i-ri:file-text-line" />
         开发文档
         开发文档
       </HButton>
       </HButton>
-      <HDropdownMenu
-        :items="[
-          [
-            { label: 'Gitee', handle: () => open('https://gitee.com/fantastic-admin/basic') },
-            { label: 'Github', handle: () => open('https://github.com/fantastic-admin/basic') },
-          ],
-        ]"
-      >
+      <HDropdownMenu :items="[
+        [
+          { label: 'Gitee', handle: () => open('https://gitee.com/fantastic-admin/basic') },
+          { label: 'Github', handle: () => open('https://github.com/fantastic-admin/basic') },
+        ],
+      ]">
         <HButton class="ml-2">
         <HButton class="ml-2">
           <SvgIcon name="i-ri:code-s-slash-line" />
           <SvgIcon name="i-ri:code-s-slash-line" />
           代码仓库
           代码仓库
@@ -132,10 +135,12 @@ function open(url: string) {
         </template>
         </template>
         <ElCarousel trigger="click" indicator-position="none" :interval="5000" height="250px">
         <ElCarousel trigger="click" indicator-position="none" :interval="5000" height="250px">
           <ElCarouselItem v-for="(item, index) in fantasticAdminInfo.data" :key="item">
           <ElCarouselItem v-for="(item, index) in fantasticAdminInfo.data" :key="item">
-            <ElImage :src="item" fit="cover" style="width: 100%; height: 250px; margin: auto; cursor: pointer;" @click="fantasticAdminInfo.imageVisible = true; fantasticAdminInfo.index = index" />
+            <ElImage :src="item" fit="cover" style="width: 100%; height: 250px; margin: auto; cursor: pointer;"
+              @click="fantasticAdminInfo.imageVisible = true; fantasticAdminInfo.index = index" />
           </ElCarouselItem>
           </ElCarouselItem>
         </ElCarousel>
         </ElCarousel>
-        <ElImageViewer v-if="fantasticAdminInfo.imageVisible" :url-list="fantasticAdminInfo.data" :initial-index="fantasticAdminInfo.index" @close="fantasticAdminInfo.imageVisible = false" />
+        <ElImageViewer v-if="fantasticAdminInfo.imageVisible" :url-list="fantasticAdminInfo.data"
+          :initial-index="fantasticAdminInfo.index" @close="fantasticAdminInfo.imageVisible = false" />
       </PageMain>
       </PageMain>
       <PageMain class="ecology">
       <PageMain class="ecology">
         <template #title>
         <template #title>
@@ -156,16 +161,76 @@ function open(url: string) {
         </template>
         </template>
         <ElCarousel trigger="click" indicator-position="none" :interval="5000" height="250px">
         <ElCarousel trigger="click" indicator-position="none" :interval="5000" height="250px">
           <ElCarouselItem v-for="(item, index) in oneStepAdminInfo.data" :key="item">
           <ElCarouselItem v-for="(item, index) in oneStepAdminInfo.data" :key="item">
-            <ElImage :src="item" fit="cover" style="width: 100%; height: 250px; margin: auto; cursor: pointer;" @click="oneStepAdminInfo.imageVisible = true; oneStepAdminInfo.index = index" />
+            <ElImage :src="item" fit="cover" style="width: 100%; height: 250px; margin: auto; cursor: pointer;"
+              @click="oneStepAdminInfo.imageVisible = true; oneStepAdminInfo.index = index" />
           </ElCarouselItem>
           </ElCarouselItem>
         </ElCarousel>
         </ElCarousel>
-        <ElImageViewer v-if="oneStepAdminInfo.imageVisible" :url-list="oneStepAdminInfo.data" :initial-index="oneStepAdminInfo.index" @close="oneStepAdminInfo.imageVisible = false" />
+        <ElImageViewer v-if="oneStepAdminInfo.imageVisible" :url-list="oneStepAdminInfo.data"
+          :initial-index="oneStepAdminInfo.index" @close="oneStepAdminInfo.imageVisible = false" />
       </PageMain>
       </PageMain>
     </div>
     </div>
   </div>
   </div>
 </template>
 </template>
 
 
 <style scoped>
 <style scoped>
+.wrap {
+  padding: 10px;
+  margin: 0 auto;
+  background-color: #eee;
+}
+
+.tabs {
+  display: flex;
+  width: 100%;
+  overflow: hidden;
+  background: linear-gradient(#cdd9fe, #e2e9fd);
+  border-radius: 8px 8px 0 0;
+}
+
+.tab {
+  position: relative;
+  width: 50%;
+  line-height: 50px;
+  text-align: center;
+  cursor: pointer;
+}
+
+.tab.active {
+  color: #4185ef;
+  background-color: #fff;
+}
+
+.tab.active::before {
+  position: absolute;
+  top: 0;
+  left: -49px;
+  z-index: 2;
+  width: 50px;
+  height: 100%;
+  clip-path: path("M 0,50 C 25,50 25,0 50,0 L 50, 50 Z");
+  content: "";
+  background-color: #fff;
+}
+
+.tab.active::after {
+  position: absolute;
+  top: 0;
+  right: -49px;
+  z-index: 2;
+  width: 50px;
+  height: 100%;
+  clip-path: path("M 0,0 C 25,0 25,50 50,50 L 0, 50 Z");
+  content: "";
+  background-color: #fff;
+}
+
+.content-wrap {
+  min-height: 200px;
+  background-color: #fff;
+}
+
+/* ============================================= */
+
 .text-emphasis {
 .text-emphasis {
   text-emphasis-style: "❤";
   text-emphasis-style: "❤";
 }
 }

+ 8 - 9
src/views/insuranceCompanyConfiguration/accountOwnershipConfig.vue

@@ -4,11 +4,11 @@
       <ElRow :gutter="20" style="height: 100%;">
       <ElRow :gutter="20" style="height: 100%;">
         <ElCol :md="4">
         <ElCol :md="4">
           <div class="flex f-c " style="height: 100%;">
           <div class="flex f-c " style="height: 100%;">
-            <ElFormItem>
+            <ElFormItem >
               <ElInput v-model="companyName" placeholder="输入保险公司名称查找" type="text" tabindex="1" clearable
               <ElInput v-model="companyName" placeholder="输入保险公司名称查找" type="text" tabindex="1" clearable
                 style="width: 100%;" @clear="companyQuery">
                 style="width: 100%;" @clear="companyQuery">
-                <template #append>
-                  <el-button :icon="Search" @click="companyQuery" v-auth="'drivingInsurance.add'" />
+                <template #append >
+                  <el-button :icon="Search" @click="companyQuery" v-auth="'accountOwnershipConfig.view'"  />
                 </template>
                 </template>
               </ElInput>
               </ElInput>
             </ElFormItem>
             </ElFormItem>
@@ -25,7 +25,7 @@
         </ElCol>
         </ElCol>
         <ElCol :md="19">
         <ElCol :md="19">
           <ElCol :md="24" :lg="24" :offset="23" v-if="companyactiveID">
           <ElCol :md="24" :lg="24" :offset="23" v-if="companyactiveID">
-            <el-button type="primary" @click="parametervalidate(productFormRef)">保存</el-button>
+            <el-button type="primary" v-auth="'accountOwnershipConfig.add'" @click="parametervalidate(productFormRef)">保存</el-button>
           </ElCol>
           </ElCol>
           <ElCol :md="24" :lg="24">
           <ElCol :md="24" :lg="24">
             <el-tabs v-model="editableTabsValue" type="card" editable class="demo-tabs" @edit="handleTabsEdit"
             <el-tabs v-model="editableTabsValue" type="card" editable class="demo-tabs" @edit="handleTabsEdit"
@@ -94,7 +94,7 @@
                 <ElDivider style="margin: 0;"></ElDivider>
                 <ElDivider style="margin: 0;"></ElDivider>
                 <ElCol :md="24" :lg="24" style="margin: 10px 0;font-size: 14px;">
                 <ElCol :md="24" :lg="24" style="margin: 10px 0;font-size: 14px;">
                   <span class="strong" style="margin-right: 10px;">基本信息</span>
                   <span class="strong" style="margin-right: 10px;">基本信息</span>
-                  <el-button type="primary" @click="addParameter(index)">
+                  <el-button type="primary" @click="addParameter(index)" v-auth="'accountOwnershipConfig.add'">
                     <template #icon>
                     <template #icon>
                       <ElIcon>
                       <ElIcon>
                         <plus />
                         <plus />
@@ -121,18 +121,17 @@
                   <el-table-column prop="value" label="默认数据" width="180" align="center"></el-table-column>
                   <el-table-column prop="value" label="默认数据" width="180" align="center"></el-table-column>
                   <el-table-column label="操作" width="280" align="center">
                   <el-table-column label="操作" width="280" align="center">
                     <template #default="scope">
                     <template #default="scope">
-                      <el-button type="primary" link @click="fieldsDel(scope.$index, index)">删除</el-button>
+                      <Auth :value="'accountOwnershipConfig.delete'">
+                        <el-button type="primary" link @click="fieldsDel(scope.$index, index)">删除</el-button>
+                      </Auth>
                     </template>
                     </template>
                   </el-table-column>
                   </el-table-column>
                 </el-table>
                 </el-table>
               </el-tab-pane>
               </el-tab-pane>
             </el-tabs>
             </el-tabs>
           </ElCol>
           </ElCol>
-
-
         </ElCol>
         </ElCol>
       </ElRow>
       </ElRow>
-
     </PageMain>
     </PageMain>
     <el-drawer v-model="fieldsAddDrawer" :direction="direction" @open="DrawerOpen">
     <el-drawer v-model="fieldsAddDrawer" :direction="direction" @open="DrawerOpen">
       <template #header>
       <template #header>

+ 154 - 34
src/views/insuranceCompanyConfiguration/insuranceCompanyConfig.vue

@@ -7,7 +7,11 @@
           <el-input v-model="formInline.name" placeholder="输入保险公司查找" clearable />
           <el-input v-model="formInline.name" placeholder="输入保险公司查找" clearable />
         </el-form-item>
         </el-form-item>
         <el-form-item>
         <el-form-item>
-          <el-button type="primary" @click="companyQuery" v-auth="'insuranceCompanyConfig.view'">查询</el-button>
+          <el-button type="primary" @click="companyQuery" v-auth="'insuranceCompanyConfig.view'">
+            <template #icon>
+              <SvgIcon name="i-ep:search" />
+            </template>
+            查询</el-button>
         </el-form-item>
         </el-form-item>
       </el-form>
       </el-form>
       <div>
       <div>
@@ -25,7 +29,8 @@
                 ref="multipleTableRef" :expand-column-key="expandColumnKey" header-class="header-class">
                 ref="multipleTableRef" :expand-column-key="expandColumnKey" header-class="header-class">
                 <template #cell="scope">
                 <template #cell="scope">
                   <div v-if="scope.column.key == 'option'" class="flex j-s a-c">
                   <div v-if="scope.column.key == 'option'" class="flex j-s a-c">
-                    <el-button type="primary" link @click="addSubsidiary(scope.rowData)" v-auth="'insuranceCompanyConfig.add'"> 添加子公司
+                    <el-button type="primary" link @click="addSubsidiary(scope.rowData)"
+                      v-auth="'insuranceCompanyConfig.add'"> 添加子公司
                     </el-button>
                     </el-button>
                     <el-dropdown placement="bottom-start">
                     <el-dropdown placement="bottom-start">
                       <span class="el-dropdown-link">
                       <span class="el-dropdown-link">
@@ -50,7 +55,7 @@
         </div>
         </div>
       </div>
       </div>
     </PageMain>
     </PageMain>
-    <el-dialog v-model="dialogVisible" :title="dialogTitle" width="50%" @close="close">
+    <el-dialog v-model="dialogVisible" :title="dialogTitle" width="50%" @close="close(FormRef)">
       <ElRow :gutter="20">
       <ElRow :gutter="20">
         <el-form :model="cpmpanyform" :inline="true" label-width="120px" :rules="cpmpanyformRules" label-position="top"
         <el-form :model="cpmpanyform" :inline="true" label-width="120px" :rules="cpmpanyformRules" label-position="top"
           ref="FormRef" style="width: 100%;" :size="fromSize">
           ref="FormRef" style="width: 100%;" :size="fromSize">
@@ -97,13 +102,38 @@
           </ElCol>
           </ElCol>
           <ElCol :md="24" :lg="12" v-if="dialogType == 'add' || dialogType == 'edit'">
           <ElCol :md="24" :lg="12" v-if="dialogType == 'add' || dialogType == 'edit'">
             <el-form-item label="logo">
             <el-form-item label="logo">
-              <el-upload action="#" list-type="picture-card" :auto-upload="false" :on-change="sysIconupload"
-                ref="upload1" :limit="1" :class="{ disabled: uploadDisabled }" :on-remove="handleRemove">
-                <img v-if="sysIconList.url" :src="sysIconList.url" class="avatar" style="width: 100%;height: 100%;" />
-                <el-icon v-else class="avatar-uploader-icon">
-                  <Plus />
-                </el-icon>
-              </el-upload>
+              <div class="flex f-c a-start">
+                <el-upload action="" v-if="!companyImgUrl" :auto-upload="false" :show-file-list="false"
+                  accept=".png, .jpg, .jpeg" @change="uploadImage($event)">
+                  <el-button type="primary" size="default">
+                    <template #icon>
+                      <el-icon>
+                        <Upload />
+                      </el-icon>
+                    </template>
+                    上传</el-button>
+                </el-upload>
+                <div class="fileInfo" v-else>
+                  <div class="fileName">{{ companyImgName }}</div>
+                  <div class="fileBtn">
+                    <el-upload :show-file-list="false" :auto-upload="false" accept=".png, .jpg, .jpeg"
+                      @change="uploadImage($event)" style="display: flex; align-items: center;">
+                      <el-icon class="btn-icon">
+                        <Upload />
+                      </el-icon>
+                    </el-upload>
+                    <el-icon class="btn-icon" @click="imageView">
+                      <View />
+                    </el-icon>
+                    <el-icon class="btn-icon" @click="download(companyImgUrl, companyImgName)">
+                      <Download />
+                    </el-icon>
+                    <el-icon class="btn-icon" @click="deleteImage">
+                      <Delete />
+                    </el-icon>
+                  </div>
+                </div>
+              </div>
             </el-form-item>
             </el-form-item>
           </ElCol>
           </ElCol>
         </el-form>
         </el-form>
@@ -117,6 +147,9 @@
         </div>
         </div>
       </template>
       </template>
     </el-dialog>
     </el-dialog>
+    <div class="image-view" v-if="imageShow" @click="imageShow = false">
+      <img :src="companyImgUrl" />
+    </div>
   </div>
   </div>
 </template>
 </template>
 
 
@@ -190,9 +223,7 @@ const cpmpanyformRules = ref<FormRules>({
     { required: true, trigger: 'change', message: '请上传图片' },
     { required: true, trigger: 'change', message: '请上传图片' },
   ],
   ],
 });
 });
-const sysIconList = reactive({
-  url: "",
-})
+
 const props = {
 const props = {
   expandTrigger: 'hover' as const,
   expandTrigger: 'hover' as const,
   value: 'areaCode',
   value: 'areaCode',
@@ -201,6 +232,9 @@ const props = {
   checkStrictly: true,
   checkStrictly: true,
 
 
 }
 }
+const imageShow = ref(false);//图片预览开关
+const companyImgName = ref();
+const companyImgUrl = ref();
 const FormRef = ref<FormInstance>()
 const FormRef = ref<FormInstance>()
 const provinceoptions = ref()//省市区回显数据
 const provinceoptions = ref()//省市区回显数据
 const areaOptions = ref()//省市区数据
 const areaOptions = ref()//省市区数据
@@ -208,7 +242,6 @@ const dialogTitle = ref('添加保险公司')//弹窗title
 const dialogType = ref('add')//弹窗title  add | edit | subsidiaryadd | subsidiaryedit
 const dialogType = ref('add')//弹窗title  add | edit | subsidiaryadd | subsidiaryedit
 const fromSize = ref<ComponentSize>('large')//表单大小
 const fromSize = ref<ComponentSize>('large')//表单大小
 const loading = ref(false)
 const loading = ref(false)
-const uploadDisabled = ref(false)//图片回显去掉上传按键
 const tableHeight = ref(''); // 初始化表格高度
 const tableHeight = ref(''); // 初始化表格高度
 const multipleTableRef = ref();
 const multipleTableRef = ref();
 const tabledata = ref([]);//树形数据
 const tabledata = ref([]);//树形数据
@@ -230,15 +263,17 @@ const columns: Column[] = [
   { key: 'companyCode', dataKey: "companyCode", title: "保险公司代码", width: 200, align: "center" },
   { key: 'companyCode', dataKey: "companyCode", title: "保险公司代码", width: 200, align: "center" },
   { key: 'nameSimple', dataKey: "nameSimple", title: "简称", width: 200, align: "center" },
   { key: 'nameSimple', dataKey: "nameSimple", title: "简称", width: 200, align: "center" },
   {
   {
-    key: 'type', dataKey: "type", title: "类型", width: 200, align: "center", cellRenderer: ({ cellData: type }: any) => {
-      if (type == 1) {
-        return <ElTag>财险</ElTag>;
-      } else if (type == 0) {
-        return <ElTag>渠道</ElTag>;
-      } else {
-        return <ElTag>{type}</ElTag>;
-
+    key: 'type', dataKey: "type", title: "类型", width: 200, align: "center", cellRenderer: (rowData: any) => {
+      if (rowData.rowData.parentId == '0') {
+        if (rowData.rowData.type == 1) {
+          return <ElTag>财险</ElTag>;
+        } else if (rowData.rowData.type == 0) {
+          return <ElTag>渠道</ElTag>;
+        } else {
+          return <ElTag>寿险</ElTag>;
+        }
       }
       }
+
     }
     }
   },
   },
   {
   {
@@ -341,8 +376,9 @@ const companyEdit = (column: any) => {
     cpmpanyform.nameSimple = column.nameSimple;
     cpmpanyform.nameSimple = column.nameSimple;
     cpmpanyform.remark = column.remark;
     cpmpanyform.remark = column.remark;
     cpmpanyform.type = column.type;
     cpmpanyform.type = column.type;
-    cpmpanyform.logo = column.logo;
-    sysIconList.url = column.downloadUrl;
+    cpmpanyform.logo = column.logoFile.id;
+    companyImgUrl.value = column.downloadUrl
+    companyImgName.value = column.logoFile.fileName;
   } else {
   } else {
     dialogType.value = 'subsidiaryedit';
     dialogType.value = 'subsidiaryedit';
     dialogTitle.value = '编辑';
     dialogTitle.value = '编辑';
@@ -355,7 +391,6 @@ const companyEdit = (column: any) => {
     cpmpanyform.parentId = column.parentId;
     cpmpanyform.parentId = column.parentId;
     cpmpanyform.parentName = column.parentName;
     cpmpanyform.parentName = column.parentName;
     cpmpanyform.remark = column.remark;
     cpmpanyform.remark = column.remark;
-    sysIconList.url = column.downloadUrl;
   }
   }
 
 
   // (Object.keys(cpmpanyform) as (keyof typeof cpmpanyform)[]).forEach((key) => {
   // (Object.keys(cpmpanyform) as (keyof typeof cpmpanyform)[]).forEach((key) => {
@@ -434,33 +469,64 @@ const saveInfo = async (formEl: FormInstance | undefined) => {
     }
     }
   })
   })
 }
 }
-const sysIconupload = (file: any) => {
-  let files = file.raw;
+
+const uploadImage = async (file: any) => {
+  let files = file.raw
   const params = new FormData(); // 声明formData数据类型
   const params = new FormData(); // 声明formData数据类型
   params.append("file", files);
   params.append("file", files);
   api.toolApi.fileupload(params).then((res: any) => {
   api.toolApi.fileupload(params).then((res: any) => {
     if (res.code == 200) {
     if (res.code == 200) {
       cpmpanyform.logo = res.data.id;
       cpmpanyform.logo = res.data.id;
-      uploadDisabled.value = true;
+      companyImgName.value = res.data.fileName;
+      companyImgUrl.value = res.data.downloadUrl;
     }
     }
   })
   })
 }
 }
-const handleRemove = () => {
-  sysIconList.url = '';
-  uploadDisabled.value = false;
-
+// 图片预览
+const imageView = () => {
+  imageShow.value = true;
+}
+// 图片下载
+const download = (url: string, name: string) => {
+  let image = new Image();
+  // 解决跨域 Canvas 污染问题
+  image.setAttribute("crossOrigin", "anonymous");
+  image.onload = function () {
+    let canvas = document.createElement("canvas");
+    canvas.width = image.width;
+    canvas.height = image.height;
+    let context: any = canvas.getContext("2d");
+    context.drawImage(image, 0, 0, image.width, image.height);
+    let url = canvas.toDataURL("image/png"); //得到图片的base64编码数据
+    let a = document.createElement("a"); // 生成一个a元素
+    let event = new MouseEvent("click"); // 创建一个单击事件
+    a.download = name; // 设置图片名称
+    a.href = url; // 将生成的URL设置为a.href属性
+    a.dispatchEvent(event); // 触发a的单击事件
+  }
+  image.src = url
+}
+// 图片删除
+const deleteImage = () => {
+  companyImgName.value = ''
+  companyImgUrl.value = ''
 }
 }
-const close = () => {
+const close = (formEl: FormInstance | undefined) => {
+  if (!formEl) return
+  formEl.resetFields()
   cpmpanyform.code = '';
   cpmpanyform.code = '';
   cpmpanyform.name = '';
   cpmpanyform.name = '';
+  cpmpanyform.companyCode="";
+  cpmpanyform.id="";
   cpmpanyform.parentId = '0';
   cpmpanyform.parentId = '0';
   cpmpanyform.parentName = '';
   cpmpanyform.parentName = '';
   cpmpanyform.nameSimple = '';
   cpmpanyform.nameSimple = '';
   cpmpanyform.remark = '';
   cpmpanyform.remark = '';
   cpmpanyform.type = '';
   cpmpanyform.type = '';
   cpmpanyform.logo = '';
   cpmpanyform.logo = '';
+  companyImgUrl.value="";
   provinceoptions.value = [];
   provinceoptions.value = [];
-  sysIconList.url = '';
+
 }
 }
 </script>
 </script>
 <style scoped lang="scss">
 <style scoped lang="scss">
@@ -500,5 +566,59 @@ const close = () => {
 .disabled :deep(.el-upload--picture-card) {
 .disabled :deep(.el-upload--picture-card) {
   opacity: 0;
   opacity: 0;
 }
 }
+
+.fileInfo {
+  display: flex;
+  align-items: center;
+  justify-content: flex-start;
+  padding: 2px 20px;
+  margin: 0 10px;
+  border-radius: 5px;
+
+  &:hover {
+    background: #ccc;
+  }
+
+  .fileName {
+    width: 200px;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+  }
+
+  .fileBtn {
+    display: flex;
+    align-items: center;
+
+    .btn-icon {
+      margin: 0 10px;
+      font-size: 16px;
+      cursor: pointer;
+
+      &:hover {
+        color: #00a0f4;
+      }
+    }
+  }
+}
+
+.image-view {
+  position: absolute;
+  top: 0;
+  left: 0;
+  z-index: 9999;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  width: 100%;
+  height: 100%;
+  background: rgb(0 0 0 / 60%);
+
+  img {
+    width: 800px;
+    height: 800px;
+    border-radius: 5px;
+  }
+}
 </style>
 </style>
 <!-- 样式区域 -->
 <!-- 样式区域 -->

+ 16 - 9
src/views/insuranceCompanyConfiguration/paymentCodeConfig.vue

@@ -9,7 +9,11 @@
             </ElFormItem>
             </ElFormItem>
           </ElCol>
           </ElCol>
           <ElCol :md="4">
           <ElCol :md="4">
-            <el-button type="primary" @click="findpage">查询</el-button>
+            <el-button type="primary" v-auth="'paymentCodeConfig.view'" @click="findpage">
+              <template #icon>
+                <SvgIcon name="i-ep:search" />
+              </template>
+              查询</el-button>
           </ElCol>
           </ElCol>
         </ElRow>
         </ElRow>
       </ElForm>
       </ElForm>
@@ -17,7 +21,7 @@
       <Table :tableData="tableData" :columns="columns" :showIndex="false" :columnwidth="200" :showSelect="false"
       <Table :tableData="tableData" :columns="columns" :showIndex="false" :columnwidth="200" :showSelect="false"
         :pageInfo="pageInfo" @getList="getList">
         :pageInfo="pageInfo" @getList="getList">
         <template v-slot:table-title-btn>
         <template v-slot:table-title-btn>
-          <el-button type="primary" @click="companyAdd">
+          <el-button type="primary" @click="companyAdd" v-auth="'paymentCodeConfig.add'">
             添加保险公司
             添加保险公司
             <template #icon>
             <template #icon>
               <el-icon>
               <el-icon>
@@ -27,17 +31,20 @@
           </el-button>
           </el-button>
         </template>
         </template>
         <template v-slot:operation="scope">
         <template v-slot:operation="scope">
-          <el-button type="primary" link @click="paymentEdit(scope.operationData.id)"> 编辑
-          </el-button>
-          <el-button type="primary" link @click="paymentDel(scope.operationData.id)"> 删除
-          </el-button>
+          <Auth :value="'paymentCodeConfig.edit'">
+            <el-button type="primary" link @click="paymentEdit(scope.operationData.id)"> 编辑
+            </el-button>
+          </Auth>
+          <Auth :value="'paymentCodeConfig.delete'">
+            <el-button type="primary" link @click="paymentDel(scope.operationData.id)"> 删除
+            </el-button>
+          </Auth>
         </template>
         </template>
         <template v-slot:search="scope">
         <template v-slot:search="scope">
           {{ scope.slotData.label }}
           {{ scope.slotData.label }}
         </template>
         </template>
       </Table>
       </Table>
     </PageMain>
     </PageMain>
-
     <el-dialog v-model="paynemtAdddialogVisible" :title="dialogTitle" width="40%" @close="close">
     <el-dialog v-model="paynemtAdddialogVisible" :title="dialogTitle" width="40%" @close="close">
       <ElRow :gutter="20">
       <ElRow :gutter="20">
         <el-form :model="paymentform" :inline="true" label-width="120px" :rules="memberformRules" label-position="top"
         <el-form :model="paymentform" :inline="true" label-width="120px" :rules="memberformRules" label-position="top"
@@ -52,7 +59,7 @@
           </ElCol>
           </ElCol>
           <ElCol :md="24" :lg="12">
           <ElCol :md="24" :lg="12">
             <el-form-item label="简称" prop="companyName">
             <el-form-item label="简称" prop="companyName">
-              <el-input v-model="paymentform.companyName" placeholder="请输入姓名" disabled />
+              <el-input v-model="paymentform.companyName" placeholder="" disabled />
             </el-form-item>
             </el-form-item>
           </ElCol>
           </ElCol>
           <ElCol :md="24" :lg="12">
           <ElCol :md="24" :lg="12">
@@ -191,7 +198,7 @@ function getList(item: PageInfo) {
 //保险公司选择
 //保险公司选择
 const companyIdChange = (value: string) => {
 const companyIdChange = (value: string) => {
   let Info = companyList.value.find((val: any) => val.id == value);
   let Info = companyList.value.find((val: any) => val.id == value);
-  paymentform.companyName = Info.name;
+  paymentform.companyName = Info.nameSimple;
   paymentform.companyCode = Info.companyCode;
   paymentform.companyCode = Info.companyCode;
 }
 }
 //获取保险公司列表
 //获取保险公司列表

+ 30 - 26
src/views/organizationManagement/functionConfiguration.vue

@@ -22,25 +22,25 @@
               <el-button type="primary" @click="handleEdit">编辑</el-button>
               <el-button type="primary" @click="handleEdit">编辑</el-button>
             </el-col>
             </el-col>
           </el-row>
           </el-row>
-          <el-divider style="width: 100%"></el-divider>
+          <el-divider style="width: 100%;"></el-divider>
           <el-descriptions title="系统信息配置">
           <el-descriptions title="系统信息配置">
             <el-descriptions-item>
             <el-descriptions-item>
               <el-form :model="functionForm" :rules="functionRules" ref="functionRef" label-width="200" label-position="left">
               <el-form :model="functionForm" :rules="functionRules" ref="functionRef" label-width="200" label-position="left">
                 <el-form-item label="支持报价的保司" prop="quoteCompany">
                 <el-form-item label="支持报价的保司" prop="quoteCompany">
-                  <el-radio-group style="width: 100%" v-model="functionForm.quoteCompany">
+                  <el-radio-group style="width: 100%;" v-model="functionForm.quoteCompany">
                     <el-row :gutter="20">
                     <el-row :gutter="20">
                       <el-col :span="24">
                       <el-col :span="24">
                         <el-radio :value="1">全部保险公司</el-radio>
                         <el-radio :value="1">全部保险公司</el-radio>
                       </el-col>
                       </el-col>
-                      <el-col :span="24" style="display: flex; align-items: center">
+                      <el-col :span="24" style="display: flex; align-items: center;">
                         <el-radio :value="2">部分保险公司</el-radio>
                         <el-radio :value="2">部分保险公司</el-radio>
                         <el-button v-if="functionForm.quoteCompany == 2" link type="primary" @click="select" icon="CirclePlus">选择保险公司</el-button>
                         <el-button v-if="functionForm.quoteCompany == 2" link type="primary" @click="select" icon="CirclePlus">选择保险公司</el-button>
                       </el-col>
                       </el-col>
                     </el-row>
                     </el-row>
                   </el-radio-group>
                   </el-radio-group>
-                  <div v-if="functionForm.quoteCompany == 2" style="display: flex; justify-content: flex-start">
-                    <div style="display: flex; align-items: center; background: #E9F4FF; padding: 3px 16px; border-radius: 3px; margin-right: 10px; color: #0083FF;" v-for="(item, index) in companySelected">{{ item.nameSimple }}
-                    <el-icon style="cursor: pointer; margin-left: 20px;" @click="handleDelete(item, index)"><Close /></el-icon></div>
+                  <div v-if="functionForm.quoteCompany == 2" style="display: flex; justify-content: flex-start;">
+                    <div style="display: flex; align-items: center; padding: 3px 16px; margin-right: 10px; color: #0083ff; background: #e9f4ff; border-radius: 3px;" v-for="(item, index) in companySelected">{{ item.nameSimple }}
+                    <el-icon style=" margin-left: 20px;cursor: pointer;" @click="handleDelete(item, index)"><Close /></el-icon></div>
                   </div>
                   </div>
                 </el-form-item>
                 </el-form-item>
                 <el-form-item label="报价/出单方式" prop="orderMode">
                 <el-form-item label="报价/出单方式" prop="orderMode">
@@ -56,7 +56,7 @@
                   </el-radio-group>
                   </el-radio-group>
                 </el-form-item>
                 </el-form-item>
                 <el-form-item label="订单审核机构" prop="orderAuditDept">
                 <el-form-item label="订单审核机构" prop="orderAuditDept">
-                  <el-radio-group style="width: 100%" v-model="functionForm.orderAuditDept">
+                  <el-radio-group style="width: 100%;" v-model="functionForm.orderAuditDept">
                     <el-row :gutter="20">
                     <el-row :gutter="20">
                       <el-col :span="24">
                       <el-col :span="24">
                         <el-radio :value="1">业务员归属机构</el-radio>
                         <el-radio :value="1">业务员归属机构</el-radio>
@@ -71,13 +71,13 @@
                   </el-radio-group>
                   </el-radio-group>
 <!--                  <el-cascader v-if="functionForm.orderAuditDept == 3" v-model="functionForm.orderAuditDeptList" :props="optionProps"></el-cascader>-->
 <!--                  <el-cascader v-if="functionForm.orderAuditDept == 3" v-model="functionForm.orderAuditDeptList" :props="optionProps"></el-cascader>-->
                   <div>
                   <div>
-                    <el-select style="width: 200px" v-if="functionForm.orderAuditDept == 3" v-model="functionForm.orderAuditDeptList">
+                    <el-select style="width: 200px;" v-if="functionForm.orderAuditDept == 3" v-model="functionForm.orderAuditDeptList">
                       <el-option v-for="item in institutionList" :value="item.id" :label="item.name"></el-option>
                       <el-option v-for="item in institutionList" :value="item.id" :label="item.name"></el-option>
                     </el-select>
                     </el-select>
                   </div>
                   </div>
                 </el-form-item>
                 </el-form-item>
                 <el-form-item label="业务员审核机构" prop="salesmanAuditDept">
                 <el-form-item label="业务员审核机构" prop="salesmanAuditDept">
-                  <el-radio-group style="width: 100%" v-model="functionForm.salesmanAuditDept">
+                  <el-radio-group style="width: 100%;" v-model="functionForm.salesmanAuditDept">
                     <el-row :gutter="20">
                     <el-row :gutter="20">
                       <el-col :span="24">
                       <el-col :span="24">
                         <el-radio :value="1">业务员归属机构</el-radio>
                         <el-radio :value="1">业务员归属机构</el-radio>
@@ -88,12 +88,12 @@
                     </el-row>
                     </el-row>
                   </el-radio-group>
                   </el-radio-group>
 <!--                  <el-cascader v-if="functionForm.salesmanAuditDept == 2" v-model="functionForm.salesmanAuditDeptList" :props="optionProps"></el-cascader>-->
 <!--                  <el-cascader v-if="functionForm.salesmanAuditDept == 2" v-model="functionForm.salesmanAuditDeptList" :props="optionProps"></el-cascader>-->
-                  <el-select style="width: 200px" v-if="functionForm.salesmanAuditDept == 2" v-model="functionForm.salesmanAuditDeptList">
+                  <el-select style="width: 200px;" v-if="functionForm.salesmanAuditDept == 2" v-model="functionForm.salesmanAuditDeptList">
                     <el-option v-for="item in institutionList" :value="item.id" :label="item.name"></el-option>
                     <el-option v-for="item in institutionList" :value="item.id" :label="item.name"></el-option>
                   </el-select>
                   </el-select>
                 </el-form-item>
                 </el-form-item>
                 <el-form-item label="业务员提现账号审核机构" prop="salesmanWithdrawAccountAuditDept">
                 <el-form-item label="业务员提现账号审核机构" prop="salesmanWithdrawAccountAuditDept">
-                  <el-radio-group style="width: 100%" v-model="functionForm.salesmanWithdrawAccountAuditDept">
+                  <el-radio-group style="width: 100%;" v-model="functionForm.salesmanWithdrawAccountAuditDept">
                     <el-row :gutter="20">
                     <el-row :gutter="20">
                       <el-col :span="24">
                       <el-col :span="24">
                         <el-radio :value="1">业务员归属机构</el-radio>
                         <el-radio :value="1">业务员归属机构</el-radio>
@@ -104,12 +104,12 @@
                     </el-row>
                     </el-row>
                   </el-radio-group>
                   </el-radio-group>
 <!--                  <el-cascader v-if="functionForm.salesmanWithdrawAccountAuditDept == 2" v-model="functionForm.salesmanWithdrawAccountAuditDeptList" :props="optionProps"></el-cascader>-->
 <!--                  <el-cascader v-if="functionForm.salesmanWithdrawAccountAuditDept == 2" v-model="functionForm.salesmanWithdrawAccountAuditDeptList" :props="optionProps"></el-cascader>-->
-                  <el-select style="width: 200px" v-if="functionForm.salesmanWithdrawAccountAuditDept == 2" v-model="functionForm.salesmanWithdrawAccountAuditDeptList">
+                  <el-select style="width: 200px;" v-if="functionForm.salesmanWithdrawAccountAuditDept == 2" v-model="functionForm.salesmanWithdrawAccountAuditDeptList">
                     <el-option v-for="item in institutionList" :value="item.id" :label="item.name"></el-option>
                     <el-option v-for="item in institutionList" :value="item.id" :label="item.name"></el-option>
                   </el-select>
                   </el-select>
                 </el-form-item>
                 </el-form-item>
                 <el-form-item label="业务员提现申请付款审核机构" prop="salesmanWithdrawPaymentAuditDept">
                 <el-form-item label="业务员提现申请付款审核机构" prop="salesmanWithdrawPaymentAuditDept">
-                  <el-radio-group style="width: 100%" v-model="functionForm.salesmanWithdrawPaymentAuditDept">
+                  <el-radio-group style="width: 100%;" v-model="functionForm.salesmanWithdrawPaymentAuditDept">
                     <el-row :gutter="20">
                     <el-row :gutter="20">
                       <el-col :span="24">
                       <el-col :span="24">
                         <el-radio :value="1">业务员归属机构</el-radio>
                         <el-radio :value="1">业务员归属机构</el-radio>
@@ -120,7 +120,7 @@
                     </el-row>
                     </el-row>
                   </el-radio-group>
                   </el-radio-group>
 <!--                  <el-cascader v-if="functionForm.salesmanWithdrawPaymentAuditDept == 2" v-model="functionForm.salesmanWithdrawPaymentAuditDeptList" :props="optionProps"></el-cascader>-->
 <!--                  <el-cascader v-if="functionForm.salesmanWithdrawPaymentAuditDept == 2" v-model="functionForm.salesmanWithdrawPaymentAuditDeptList" :props="optionProps"></el-cascader>-->
-                  <el-select style="width: 200px" v-if="functionForm.salesmanWithdrawPaymentAuditDept == 2" v-model="functionForm.salesmanWithdrawPaymentAuditDeptList">
+                  <el-select style="width: 200px;" v-if="functionForm.salesmanWithdrawPaymentAuditDept == 2" v-model="functionForm.salesmanWithdrawPaymentAuditDeptList">
                     <el-option v-for="item in institutionList" :value="item.id" :label="item.name"></el-option>
                     <el-option v-for="item in institutionList" :value="item.id" :label="item.name"></el-option>
                   </el-select>
                   </el-select>
                 </el-form-item>
                 </el-form-item>
@@ -161,9 +161,9 @@ let company = ref([])
 let filterIndex = ref(0)
 let filterIndex = ref(0)
 let companyId = ref('')
 let companyId = ref('')
 const filterChange = computed(() => {
 const filterChange = computed(() => {
-  return company.value.filter(a => a.nameSimple.includes(filterText.value))
+  return company.value.filter((a:any) => a.nameSimple.includes(filterText.value))
 })
 })
-const handleClick = (item, index) => {
+const handleClick = (item:any, index:any) => {
   filterIndex.value = index
   filterIndex.value = index
   companyId.value = item.id
   companyId.value = item.id
   console.log(11111, index)
   console.log(11111, index)
@@ -171,7 +171,7 @@ const handleClick = (item, index) => {
 }
 }
 // 保司
 // 保司
 const initCompany = () => {
 const initCompany = () => {
-  api.configurate.liveCompanyList().then(res => {
+  api.configurate.liveCompanyList().then((res:any) => {
     if(res.code == 200) {
     if(res.code == 200) {
       company.value = res.data
       company.value = res.data
     } else {
     } else {
@@ -314,28 +314,32 @@ onMounted(() => {
 </script>
 </script>
 <!-- 样式区域 -->
 <!-- 样式区域 -->
 <style scoped lang="scss">
 <style scoped lang="scss">
-  .company{
+  .company {
     height: calc(100% - 60px);
     height: calc(100% - 60px);
-    .companyItem{
+
+    .companyItem {
       width: 100%;
       width: 100%;
       padding: 10px 15px;
       padding: 10px 15px;
       margin: 10px 0;
       margin: 10px 0;
       overflow: hidden;
       overflow: hidden;
-      white-space: nowrap;
       text-overflow: ellipsis;
       text-overflow: ellipsis;
+      white-space: nowrap;
       cursor: pointer;
       cursor: pointer;
-      &:hover{
-        background: #F4FAFF;
+
+      &:hover {
+        background: #f4faff;
         border-radius: 3px 0 0 3px;
         border-radius: 3px 0 0 3px;
       }
       }
     }
     }
-    .active{
-      background: #F4FAFF;
+
+    .active {
+      background: #f4faff;
+      border-right: 1px solid #0083ff;
       border-radius: 3px 0 0 3px;
       border-radius: 3px 0 0 3px;
-      border-right: 1px solid #0083FF;
     }
     }
   }
   }
-  .footer{
+
+  .footer {
     display: flex;
     display: flex;
     align-items: center;
     align-items: center;
     justify-content: center;
     justify-content: center;

+ 35 - 30
src/views/organizationManagement/modules/companySelect.vue

@@ -2,7 +2,7 @@
   <div class="companySelect">
   <div class="companySelect">
     <el-row class="content" :gutter="20">
     <el-row class="content" :gutter="20">
       <el-col :span="11">
       <el-col :span="11">
-        <el-input v-model="searchName" placeholder="输入驾意险名称查找" style="margin-bottom: 10px">
+        <el-input v-model="searchName" placeholder="输入驾意险名称查找" style="margin-bottom: 10px;">
           <template #append>
           <template #append>
             <el-button type="primary" @click="handleSearchName">查找</el-button>
             <el-button type="primary" @click="handleSearchName">查找</el-button>
           </template>
           </template>
@@ -14,21 +14,24 @@
           </el-checkbox-group>
           </el-checkbox-group>
         </div>
         </div>
       </el-col>
       </el-col>
-      <el-divider direction="vertical" style="height: 100%"></el-divider>
+      <el-divider direction="vertical" style="height: 100%;"></el-divider>
       <el-col :span="12">
       <el-col :span="12">
-        <div style="display: flex; align-items: center; justify-content: space-between; margin: 8px 0">
+        <div style="display: flex; align-items: center; justify-content: space-between; margin: 8px 0;">
           <span>已选: {{ selectedList.length }}家保险公司</span>
           <span>已选: {{ selectedList.length }}家保险公司</span>
           <el-button link type="primary">清空</el-button>
           <el-button link type="primary">清空</el-button>
         </div>
         </div>
         <div class="selectedList">
         <div class="selectedList">
-          <div style="display: flex; align-items: center; justify-content: space-between; margin: 10px" v-for="(item, index) in selectedList" :key="item.id">
+          <div style="display: flex; align-items: center; justify-content: space-between; margin: 10px;"
+            v-for="(item, index) in selectedList" :key="item.id">
             <span>{{ item.nameSimple }}</span>
             <span>{{ item.nameSimple }}</span>
-            <el-icon style="cursor: pointer;" @click="handleDel(item, index)"><Close /></el-icon>
+            <el-icon style="cursor: pointer;" @click="handleDel(item, index)">
+              <Close />
+            </el-icon>
           </div>
           </div>
         </div>
         </div>
       </el-col>
       </el-col>
     </el-row>
     </el-row>
-    <el-divider style="width: 100%"></el-divider>
+    <el-divider style="width: 100%;"></el-divider>
     <div class="footer">
     <div class="footer">
       <el-button plain @click="handleCancel">取消</el-button>
       <el-button plain @click="handleCancel">取消</el-button>
       <el-button type="primary" @click="handleConfirm">保存</el-button>
       <el-button type="primary" @click="handleConfirm">保存</el-button>
@@ -37,7 +40,7 @@
 </template>
 </template>
 
 
 <script setup lang="ts">
 <script setup lang="ts">
-import {ElMessage} from "element-plus";
+import { ElMessage } from "element-plus";
 
 
 const emits = defineEmits(['close'])
 const emits = defineEmits(['close'])
 import api from '@/api'
 import api from '@/api'
@@ -46,15 +49,15 @@ let company = ref([]) // 保险公司
 
 
 // 勾选保险公司
 // 勾选保险公司
 let selectAll = ref(false)
 let selectAll = ref(false)
-let selected = ref([])
-let selectList = ref([])
+let selected = ref()
+let selectList = ref()
 let searchName = ref('')
 let searchName = ref('')
-let selectedList = ref([])
+let selectedList = ref()
 
 
-const handleSelectAll = (e) => {
-  if(e) {
+const handleSelectAll = (e: any) => {
+  if (e) {
     selectedList.value = JSON.parse(JSON.stringify(selectList.value))
     selectedList.value = JSON.parse(JSON.stringify(selectList.value))
-    selected.value = selectList.value.map(a => {
+    selected.value = selectList.value.map((a:any) => {
       return a.id
       return a.id
     })
     })
   } else {
   } else {
@@ -64,24 +67,24 @@ const handleSelectAll = (e) => {
 }
 }
 
 
 const handleSearchName = () => {
 const handleSearchName = () => {
-  let list = company.value.filter(a => a.nameSimple.includes(searchName.value))
+  let list = company.value.filter((a :any)=> a.nameSimple.includes(searchName.value))
   selectList.value = [...list]
   selectList.value = [...list]
 }
 }
 
 
-const handleSelect = (e) => {
-  if(e.length > 0) {
-    selectedList.value = e.map(a => {
-      let obj = selectList.value.find(b => b.id === a)
+const handleSelect = (e:any) => {
+  if (e.length > 0) {
+    selectedList.value = e.map((a:any) => {
+      let obj = selectList.value.find((b:any) => b.id === a)
       return obj || null
       return obj || null
     })
     })
   }
   }
 }
 }
 
 
-const handleDel = (item, index) => {
+const handleDel = (_item:any, index:any) => {
   selectedList.value.splice(index, 1)
   selectedList.value.splice(index, 1)
-  if(selectedList.value.length > 0) {
-    selected.value = company.value.map(a => {
-      let obj = selectedList.value.find(b => b.id === a.id)
+  if (selectedList.value.length > 0) {
+    selected.value = company.value.map((a:any) => {
+      let obj = selectedList.value.find((b:any) => b.id === a.id)
       return obj?.id
       return obj?.id
     })
     })
   } else {
   } else {
@@ -90,14 +93,14 @@ const handleDel = (item, index) => {
   }
   }
 }
 }
 
 
-const initEditData = (list) => {
-  api.configurate.liveCompanyList().then(res => {
-    if(res.code == 200) {
+const initEditData = (list:any) => {
+  api.configurate.liveCompanyList().then((res:any) => {
+    if (res.code == 200) {
       company.value = JSON.parse(JSON.stringify(res.data))
       company.value = JSON.parse(JSON.stringify(res.data))
       selectList.value = JSON.parse(JSON.stringify(res.data))
       selectList.value = JSON.parse(JSON.stringify(res.data))
-      if(list && list.length > 0) {
+      if (list && list.length > 0) {
         selectedList.value = JSON.parse(JSON.stringify(list))
         selectedList.value = JSON.parse(JSON.stringify(list))
-        selected.value = selectedList.value.map(a => {
+        selected.value = selectedList.value.map((a:any) => {
           return a.id
           return a.id
         })
         })
       }
       }
@@ -121,12 +124,14 @@ defineExpose({
 </script>
 </script>
 
 
 <style scoped lang="scss">
 <style scoped lang="scss">
-.companySelect{
+.companySelect {
   height: 400px;
   height: 400px;
-  .content{
+
+  .content {
     height: calc(100% - 80px);
     height: calc(100% - 80px);
   }
   }
-  .footer{
+
+  .footer {
     display: flex;
     display: flex;
     align-items: center;
     align-items: center;
     justify-content: center;
     justify-content: center;

+ 25 - 41
src/views/organizationManagement/organization/organizationAdd.vue

@@ -9,7 +9,7 @@
           style="max-width: 1000px;" class="flex a-c f-wrap" :size="fromSize">
           style="max-width: 1000px;" class="flex a-c f-wrap" :size="fromSize">
           <ElCol :md="24" :lg="12">
           <ElCol :md="24" :lg="12">
             <el-form-item label="编码" prop="sysCode">
             <el-form-item label="编码" prop="sysCode">
-              <el-input v-model="sysform.sysCode" placeholder="请输入编码(唯一标识)" />
+              <el-input v-model="sysform.sysCode" placeholder="请输入编码(唯一标识)" :disabled="id ? true : false"></el-input>
               <span style="font-size: 0.7rem;color: #999;">可填写有字母数字组成的编码,用于用户登录</span>
               <span style="font-size: 0.7rem;color: #999;">可填写有字母数字组成的编码,用于用户登录</span>
             </el-form-item>
             </el-form-item>
           </ElCol>
           </ElCol>
@@ -28,8 +28,8 @@
           <ElCol :md="24" :lg="12">
           <ElCol :md="24" :lg="12">
             <el-form-item label="管理员账号" prop="userAccount">
             <el-form-item label="管理员账号" prop="userAccount">
               <el-input style="display: none;" type="password" />
               <el-input style="display: none;" type="password" />
-              <el-input v-model="sysform.userAccount" placeholder="请输入登录账号" maxlength="11" show-word-limit type="text" name="formerEmployer"
-                autocomplete="new-password" @blur="userAccountblur" />
+              <el-input v-model="sysform.userAccount" placeholder="请输入登录账号" maxlength="11" show-word-limit type="text"
+                name="formerEmployer" autocomplete="new-password" @blur="userAccountblur" />
               <span style="font-size: 0.7rem;color: #999;">管理员手机号将作为登录账号使用</span>
               <span style="font-size: 0.7rem;color: #999;">管理员手机号将作为登录账号使用</span>
             </el-form-item>
             </el-form-item>
           </ElCol>
           </ElCol>
@@ -42,7 +42,7 @@
           </ElCol>
           </ElCol>
 
 
           <ElCol :md="24" :lg="12">
           <ElCol :md="24" :lg="12">
-            <el-form-item label="简称">
+            <el-form-item label="简称" prop="shortName">
               <el-input v-model="sysform.shortName" placeholder="请输入租户简称" />
               <el-input v-model="sysform.shortName" placeholder="请输入租户简称" />
             </el-form-item>
             </el-form-item>
           </ElCol>
           </ElCol>
@@ -54,7 +54,8 @@
           </ElCol>
           </ElCol>
           <ElCol :md="24" :lg="12">
           <ElCol :md="24" :lg="12">
             <el-form-item label="详细地址" prop="address">
             <el-form-item label="详细地址" prop="address">
-              <el-input v-model="sysform.address" placeholder="请输入详细地址" />
+              <el-input v-model="sysform.address" type="textarea" placeholder="请输入详细地址" maxlength="50"
+                show-word-limit />
             </el-form-item>
             </el-form-item>
           </ElCol>
           </ElCol>
           <ElCol :md="24" :lg="12">
           <ElCol :md="24" :lg="12">
@@ -64,14 +65,6 @@
               </el-select>
               </el-select>
             </el-form-item>
             </el-form-item>
           </ElCol>
           </ElCol>
-          <ElCol :md="24" :lg="12">
-            <el-form-item label="租户状态" prop="available">
-              <el-select v-model="sysform.available" placeholder="请选择状态" clearable>
-                <el-option label="启用" :value="1" />
-                <el-option label="禁用" :value="0" />
-              </el-select>
-            </el-form-item>
-          </ElCol>
           <ElCol :md="24" :lg="12">
           <ElCol :md="24" :lg="12">
             <el-form-item label="品牌logo" prop="sysIcon">
             <el-form-item label="品牌logo" prop="sysIcon">
               <el-upload action="#" list-type="picture-card" :auto-upload="false" :on-change="sysIconupload"
               <el-upload action="#" list-type="picture-card" :auto-upload="false" :on-change="sysIconupload"
@@ -129,10 +122,10 @@
 
 
     </PageMain>
     </PageMain>
     <FixedActionBar>
     <FixedActionBar>
-      <ElButton type="primary" size="large" @click="submitForm(ruleFormRef)">
+      <ElButton type="primary" @click="submitForm(ruleFormRef)">
         保存
         保存
       </ElButton>
       </ElButton>
-      <ElButton size="large" @click="router.back()">
+      <ElButton @click="router.back()">
         取消
         取消
       </ElButton>
       </ElButton>
     </FixedActionBar>
     </FixedActionBar>
@@ -150,7 +143,7 @@ import { useRoute } from 'vue-router';
 import api from '@/api';
 import api from '@/api';
 import router from '@/router';
 import router from '@/router';
 const route = useRoute();
 const route = useRoute();
-const id = ref(route.query.id);//id参数
+const id = ref(route.query.id as string);//id参数
 const provinceoptions = ref()//省市区回显数据
 const provinceoptions = ref()//省市区回显数据
 const areaOptions = ref()//省市区数据
 const areaOptions = ref()//省市区数据
 const uploadDisabled = ref(false)
 const uploadDisabled = ref(false)
@@ -182,7 +175,6 @@ const sysform = ref({
   districtId: "",
   districtId: "",
   address: "",
   address: "",
   sysType: 0,
   sysType: 0,
-  available: 1,
   sysIcon: "",
   sysIcon: "",
   contact: "",
   contact: "",
   telephone: "",
   telephone: "",
@@ -265,9 +257,6 @@ const sysformRules = ref<FormRules>({
   provinceId: [
   provinceId: [
     { required: true, trigger: 'change', message: '请选择省市区' },
     { required: true, trigger: 'change', message: '请选择省市区' },
   ],
   ],
-  available: [
-    { required: true, trigger: 'change', message: '请选择状态' },
-  ],
 
 
 
 
 });
 });
@@ -283,6 +272,7 @@ const userAccountblur = (event: any) => {
       sysform.value.userName = res.data[0].username;
       sysform.value.userName = res.data[0].username;
       userNameShow.value = true;
       userNameShow.value = true;
     } else {
     } else {
+      userNameShow.value = false;
     }
     }
   });
   });
 
 
@@ -319,25 +309,6 @@ const detailQuery = () => {
     }
     }
   });
   });
 }
 }
-//详情编辑
-const detailUpdate = () => {
-  console.log()
-  api.tenantApi.sysEdit(sysform.value).then((res: any) => {
-    if (res.code == '200') {
-      ElMessage({
-        type: 'success',
-        message: res.msg,
-        plain: true,
-      })
-    } else {
-      ElMessage({
-        type: 'error',
-        message: res.msg,
-        plain: true,
-      })
-    }
-  });
-}
 const provinceChange = (value: any) => {
 const provinceChange = (value: any) => {
   if (value && value[0] != null && value[1] != null && value[2] != null) {
   if (value && value[0] != null && value[1] != null && value[2] != null) {
     sysform.value.provinceId = value[0];
     sysform.value.provinceId = value[0];
@@ -378,8 +349,22 @@ const submitForm = async (formEl: FormInstance | undefined) => {
   await formEl.validate((valid) => {
   await formEl.validate((valid) => {
     if (valid) {
     if (valid) {
       if (id.value) {
       if (id.value) {
-        detailUpdate();
+        api.tenantApi.sysEdit(sysform.value).then((res: any) => {
+          if (res.code == '200') {
+            ElMessage({
+              type: 'success',
+              message: res.msg,
+              plain: true,
+            })
         router.back();
         router.back();
+          } else {
+            ElMessage({
+              type: 'error',
+              message: res.msg,
+              plain: true,
+            })
+          }
+        });
 
 
       } else {
       } else {
         api.tenantApi.sysAdd(sysform.value).then((res: any) => {
         api.tenantApi.sysAdd(sysform.value).then((res: any) => {
@@ -390,7 +375,6 @@ const submitForm = async (formEl: FormInstance | undefined) => {
               plain: true,
               plain: true,
             })
             })
             router.back();
             router.back();
-
           } else {
           } else {
             ElMessage({
             ElMessage({
               type: 'error',
               type: 'error',

+ 16 - 19
src/views/organizationManagement/organization/organizationDetail.vue

@@ -75,7 +75,7 @@
                 {{ tenantInfo.contactJob }}
                 {{ tenantInfo.contactJob }}
               </el-descriptions-item>
               </el-descriptions-item>
               <el-descriptions-item label="企业规模:">{{ tenantInfo.businessSize }}人</el-descriptions-item>
               <el-descriptions-item label="企业规模:">{{ tenantInfo.businessSize }}人</el-descriptions-item>
-              <el-descriptions-item label="法人代表">{{ tenantInfo.legalName }}</el-descriptions-item>
+              <el-descriptions-item label="法人代表">{{ tenantInfo.legalName }}</el-descriptions-item>
 
 
             </el-descriptions>
             </el-descriptions>
           </el-tab-pane>
           </el-tab-pane>
@@ -136,6 +136,8 @@ import { ref, nextTick } from 'vue'
 import { useRoute, useRouter } from 'vue-router';
 import { useRoute, useRouter } from 'vue-router';
 import { ElMessage, ElMessageBox } from 'element-plus'
 import { ElMessage, ElMessageBox } from 'element-plus'
 import ImagePreview from '@/components/ImagePreview/index.vue';
 import ImagePreview from '@/components/ImagePreview/index.vue';
+import { loadDicts, getDict } from '@/utils/composables/dictService';
+
 
 
 import api from '@/api';
 import api from '@/api';
 const route = useRoute();
 const route = useRoute();
@@ -149,6 +151,8 @@ const mainElement = ref<HTMLElement | null>(null);
 const containerLeftHeight = ref('0px');
 const containerLeftHeight = ref('0px');
 const dialogVisible = ref(false)
 const dialogVisible = ref(false)
 onMounted(() => {
 onMounted(() => {
+  loadDicts(['exhibition_scope']);//获取多个字典
+
   activeName.value = typeName.value;
   activeName.value = typeName.value;
   nextTick(() => {
   nextTick(() => {
     if (mainElement.value) {
     if (mainElement.value) {
@@ -164,6 +168,10 @@ const columns = [
     prop: "exhibitionScope", label: "营业范围", width: '200', formatter: (row: any) => {
     prop: "exhibitionScope", label: "营业范围", width: '200', formatter: (row: any) => {
       let exhibitionScope = row.exhibitionScope;
       let exhibitionScope = row.exhibitionScope;
       if (exhibitionScope) {
       if (exhibitionScope) {
+        exhibitionScope=exhibitionScope.map((ele: any) => {
+          ele = getDict('exhibition_scope').find(val => val.value == ele).label;
+          return ele;
+        })
         let sysType = exhibitionScope.join(',');
         let sysType = exhibitionScope.join(',');
         return sysType;
         return sysType;
       }
       }
@@ -236,24 +244,13 @@ const deptUpdate = (id: string) => {
 }
 }
 // 添加子机构
 // 添加子机构
 const addSubOrganization = (id: string) => {
 const addSubOrganization = (id: string) => {
-  api.dept.deptGet(id).then((res: any) => {
-    if (res.code == '200') {
-      router.push({
-        name: 'OrganizationDeptAdd',
-        query: {
-          parentId: res.data.parentId,
-          code: code.value,
-        }
-      })
-    } else {
-      ElMessage({
-        type: 'success',
-        message: res.msg,
-        plain: true,
-      })
+  router.push({
+    name: 'OrganizationDeptAdd',
+    query: {
+      parentId: id,
+      code: code.value,
     }
     }
-  });
-
+  })
 }
 }
 //删除租户
 //删除租户
 const del = () => {
 const del = () => {
@@ -350,7 +347,7 @@ const detailQuery = () => {
 const getDeptTree = () => {
 const getDeptTree = () => {
   api.dept.getDeptTree({ sysCode: code.value }).then((res: any) => {
   api.dept.getDeptTree({ sysCode: code.value }).then((res: any) => {
     if (res.code == '200') {
     if (res.code == '200') {
-      tableData.value = res.data[0].children;
+      tableData.value = res.data;
     } else {
     } else {
       ElMessage({
       ElMessage({
         type: 'success',
         type: 'success',

+ 16 - 12
src/views/organizationManagement/organization/organizationlist.vue

@@ -30,16 +30,19 @@
           <ElCol :md="6" :offset="10">
           <ElCol :md="6" :offset="10">
             <ElFormItem>
             <ElFormItem>
               <div class="flex j-end" style="width: 100%;">
               <div class="flex j-end" style="width: 100%;">
-                <el-button type="primary" v-auth="'organizationlist.view'" @click="roleQuery">查询</el-button>
-                <el-button type="primary" v-auth="'organizationlist.view'" @click="resetForm">重置</el-button>
+                <el-button type="primary" v-auth="'organizationlist.view'" @click="roleQuery">
+                  <template #icon>
+                    <SvgIcon name="i-ep:search" />
+                  </template>
+                  查询</el-button>
+                <el-button type="default" v-auth="'organizationlist.view'" @click="resetForm">重置</el-button>
               </div>
               </div>
             </ElFormItem>
             </ElFormItem>
           </ElCol>
           </ElCol>
         </ElRow>
         </ElRow>
       </ElForm>
       </ElForm>
       <Table :tableData="tableData" :columns="columns" :showIndex="false" :columnwidth="200" :showSelect="true"
       <Table :tableData="tableData" :columns="columns" :showIndex="false" :columnwidth="200" :showSelect="true"
-        :pageInfo="pageInfo" @getList="getList" @selectAllChange="handleSelectionChange"
-        @selectionChange="selectionChange">
+        :pageInfo="pageInfo" @getList="getList" @selectionChange="selectionChange">
         <template v-slot:table-title-btn>
         <template v-slot:table-title-btn>
           <RouterLink :to="{ name: 'OrganizationAdd' }">
           <RouterLink :to="{ name: 'OrganizationAdd' }">
             <el-button type="primary" v-auth="'organizationlist.add'">
             <el-button type="primary" v-auth="'organizationlist.add'">
@@ -190,7 +193,7 @@ function findpage() {
   api.tenantApi.sysList({ pages: pageInfo.value.pageNum, size: pageInfo.value.pageSize, ...formInline }).then((res: any) => {
   api.tenantApi.sysList({ pages: pageInfo.value.pageNum, size: pageInfo.value.pageSize, ...formInline }).then((res: any) => {
     if (res.code == 200) {
     if (res.code == 200) {
       tableData.value = res.data.records;
       tableData.value = res.data.records;
-      pageInfo.value.pageNum = res.data.pages;
+      pageInfo.value.pageNum = res.data.current;
       pageInfo.value.pageSize = res.data.size;
       pageInfo.value.pageSize = res.data.size;
       pageInfo.value.total = res.data.total;
       pageInfo.value.total = res.data.total;
     }
     }
@@ -214,9 +217,9 @@ const columns = [
       return sysType
       return sysType
     }
     }
   },
   },
-  { prop: "division", label: "所在地区", },
+  { prop: "division", label: "所在地区", width: '200', },
   {
   {
-    prop: "deptCount", label: "下级机构",
+    prop: "deptCount", label: "下级机构", width: '100',
     component: "RouterLink",
     component: "RouterLink",
     formatter: (row: any) => ({ name: 'OrganizationDetail', query: { id: row.id, code: row.sysCode, typeName: 'organization' } })
     formatter: (row: any) => ({ name: 'OrganizationDetail', query: { id: row.id, code: row.sysCode, typeName: 'organization' } })
   },
   },
@@ -230,8 +233,11 @@ const columns = [
       }
       }
     }
     }
   },
   },
-  { prop: "createTime", label: "创建时间", width: '180', },
+  { prop: "createTime", label: "创建时间", width: '180',
+  },
   { prop: "createBy", label: "创建人", width: '120', },
   { prop: "createBy", label: "创建人", width: '120', },
+  { prop: "contact", label: "联系人", width: '120', },
+  { prop: "telephone", label: "联系电话", width: '200' },
 ];
 ];
 
 
 function getList(item: PageInfo) {
 function getList(item: PageInfo) {
@@ -248,9 +254,7 @@ function tenantUpdate(item: any) {
     }
     }
   })
   })
 }
 }
-const handleSelectionChange = (val: any) => {
-  sysUpAndDownList.value = val;
-}
+
 const selectionChange = (val: any) => {
 const selectionChange = (val: any) => {
   sysUpAndDownList.value = val;
   sysUpAndDownList.value = val;
 }
 }
@@ -392,7 +396,7 @@ const resetForm = () => {
   formInline.cityId = '';
   formInline.cityId = '';
   formInline.districtId = '';
   formInline.districtId = '';
   formInline.sysType = '';
   formInline.sysType = '';
-  provinceoptions.value=[];
+  provinceoptions.value = [];
   findpage();
   findpage();
 }
 }
 
 

+ 2 - 2
src/views/organizationManagement/organization/subOrganizatioAdd.vue

@@ -36,7 +36,7 @@
             <el-form-item label="展业范围" prop="exhibitionScope">
             <el-form-item label="展业范围" prop="exhibitionScope">
               <el-select v-model="deptform.exhibitionScope" multiple placeholder="请选择展业范围" clearable>
               <el-select v-model="deptform.exhibitionScope" multiple placeholder="请选择展业范围" clearable>
                 <el-option :label="item.label" v-for="(item, index) in dictLists.exhibition_scopeList" :key="index"
                 <el-option :label="item.label" v-for="(item, index) in dictLists.exhibition_scopeList" :key="index"
-                  :value="item.label" />
+                  :value="item.value" />
               </el-select>
               </el-select>
             </el-form-item>
             </el-form-item>
           </ElCol>
           </ElCol>
@@ -160,8 +160,8 @@ onBeforeMount(() => {
 
 
   if (parentId.value) {
   if (parentId.value) {
     parentIdareaOptionsValue.value = parentId.value;
     parentIdareaOptionsValue.value = parentId.value;
+    deptform.value.parentId=parentIdareaOptionsValue.value;
     //子机构向下添加,上级机构无法修改
     //子机构向下添加,上级机构无法修改
-
     parentIdShow.value = true;
     parentIdShow.value = true;
   }
   }
 });
 });

+ 1 - 1
src/views/organizationManagement/tenantPermissions.vue

@@ -29,7 +29,7 @@
           <div class="flex j-s a-c">
           <div class="flex j-s a-c">
             <span class="strong">操作权限</span>
             <span class="strong">操作权限</span>
             <div>
             <div>
-              <ElButton type="default" @click="roleSubmit" v-auth="'tenantPermissions.edit'">保存</ElButton>
+              <ElButton  v-if=" roleInfo.systemCode" type="default" @click="roleSubmit" v-auth="'tenantPermissions.edit'">保存</ElButton>
             </div>
             </div>
           </div>
           </div>
           <ElDivider style="margin-top: 10px;"></ElDivider>
           <ElDivider style="margin-top: 10px;"></ElDivider>

+ 63 - 46
src/views/personnel/memberManagement.vue

@@ -20,8 +20,11 @@
           <ElCol :md="8">
           <ElCol :md="8">
             <ElFormItem>
             <ElFormItem>
               <div class="flex j-end" style="width: 100%;">
               <div class="flex j-end" style="width: 100%;">
-                <el-button type="primary" @click="memberQuery" v-auth="'member.view'"
-                  @keydown.enter="handleEnter">查询</el-button>
+                <el-button type="primary" @click="memberQuery" v-auth="'member.view'" @keydown.enter="handleEnter">
+                  <template #icon>
+                    <SvgIcon name="i-ep:search" />
+                  </template>
+                  查询</el-button>
                 <el-button type="default" @click="resetForm" v-auth="'member.view'">重置</el-button>
                 <el-button type="default" @click="resetForm" v-auth="'member.view'">重置</el-button>
               </div>
               </div>
             </ElFormItem>
             </ElFormItem>
@@ -105,7 +108,7 @@
       <template #footer>
       <template #footer>
         <div class="dialog-footer">
         <div class="dialog-footer">
           <el-button @click="UpdatedialogVisible = false">取消</el-button>
           <el-button @click="UpdatedialogVisible = false">取消</el-button>
-          <el-button type="primary" @click="memberAdd">
+          <el-button type="primary" @click="memberAdd(memberFormRef)">
             保存
             保存
           </el-button>
           </el-button>
         </div>
         </div>
@@ -163,7 +166,7 @@ const pageInfo = ref({
   pageNum: 1,
   pageNum: 1,
   pageSize: 20,
   pageSize: 20,
   sizes: [10, 20, 30, 40, 50],
   sizes: [10, 20, 30, 40, 50],
-  total: 0,
+  total: 100,
 });
 });
 //检索条件
 //检索条件
 const formInline = reactive({
 const formInline = reactive({
@@ -203,48 +206,58 @@ const roleListfun = () => {
   });
   });
 }
 }
 //添加
 //添加
-const memberAdd = () => {
-  if (dialogType.value == 'add') {
-    api.member.userAdd(memberform).then((res: any) => {
-      if (res.code == '200') {
-        ElMessage({
-          type: 'success',
-          message: res.msg,
-          plain: true,
-        })
-        findpage();
-        UpdatedialogVisible.value = false;
+const memberAdd = async (formEl: FormInstance | undefined) => {
+  if (!formEl) return
+  await formEl.validate((valid) => {
+    if (valid) {
+      if (dialogType.value == 'add') {
+        api.member.userAdd(memberform).then((res: any) => {
+          if (res.code == '200') {
+            ElMessage({
+              type: 'success',
+              message: res.msg,
+              plain: true,
+            })
+            findpage();
+            UpdatedialogVisible.value = false;
+          } else {
+            ElMessage({
+              type: 'error',
+              message: res.msg,
+              plain: true,
+            })
+          }
+        });
       } else {
       } else {
-        ElMessage({
-          type: 'error',
-          message: res.msg,
-          plain: true,
-        })
+        console.log(memberform)
+        api.member.userEdit(memberform).then((res: any) => {
+          if (res.code == '200') {
+            ElMessage({
+              type: 'success',
+              message: res.msg,
+              plain: true,
+            })
+            findpage();
+            UpdatedialogVisible.value = false;
+          } else {
+            ElMessage({
+              type: 'success',
+              message: res.msg,
+              plain: true,
+            })
+          }
+        });
       }
       }
-    });
-  } else {
-    console.log(memberform)
-    api.member.userEdit(memberform).then((res: any) => {
-      if (res.code == '200') {
-        ElMessage({
-          type: 'success',
-          message: res.msg,
-          plain: true,
-        })
-        findpage();
-        UpdatedialogVisible.value = false;
-      } else {
-        ElMessage({
-          type: 'success',
-          message: res.msg,
-          plain: true,
-        })
-      }
-    });
-  }
-
-
+    } else {
+      ElMessage({
+        type: 'error',
+        message: '信息不完整',
+        plain: true,
+      })
+    }
+  })
 }
 }
+
 //交互事件===========================
 //交互事件===========================
 function handleEnter(e: any) {
 function handleEnter(e: any) {
   if (e.keyCode == 13 || e.keyCode == 108) {
   if (e.keyCode == 13 || e.keyCode == 108) {
@@ -253,9 +266,9 @@ function handleEnter(e: any) {
   }
   }
 }
 }
 const columns = [
 const columns = [
-  { prop: "username", label: "姓名", width: '120', },
-  { prop: "mobile", label: "手机号", width: '120' },
-  { prop: "id", label: "工号", width: '180', },
+  { prop: "username", label: "姓名", width: '200', },
+  { prop: "mobile", label: "手机号", width: '180' },
+  { prop: "id", label: "工号", },
   {
   {
     prop: "roleNameList", label: "角色", formatter: (row: any) => {
     prop: "roleNameList", label: "角色", formatter: (row: any) => {
       let roleNameList = row.roleNameList;
       let roleNameList = row.roleNameList;
@@ -280,6 +293,9 @@ const columns = [
 function getList(item: PageInfo) {
 function getList(item: PageInfo) {
   pageInfo.value.pageNum = item.pageNum;
   pageInfo.value.pageNum = item.pageNum;
   pageInfo.value.pageSize = item.pageSize;
   pageInfo.value.pageSize = item.pageSize;
+  console.log(pageInfo.value.pageNum)
+  console.log(pageInfo.value.pageSize)
+
   findpage();
   findpage();
 };
 };
 function tenantUpdate(id: string) {
 function tenantUpdate(id: string) {
@@ -509,4 +525,5 @@ const close = () => {
 .el-inputs {
 .el-inputs {
   width: 100% !important;
   width: 100% !important;
 }
 }
+
 </style>
 </style>

+ 47 - 6
src/views/personnel/roleManagement.vue

@@ -48,20 +48,25 @@
             <ElForm :model="roleInfo" :rules="roleRules" label-width="auto" size="" class="m-top-20"
             <ElForm :model="roleInfo" :rules="roleRules" label-width="auto" size="" class="m-top-20"
               style="max-width: 500px;">
               style="max-width: 500px;">
               <ElFormItem prop="name" label="角色名称">
               <ElFormItem prop="name" label="角色名称">
-                <ElInput v-model="roleInfo.name" placeholder="输入20个字以内的角色名称" type="text" tabindex="1">
+                <ElInput v-model="roleInfo.name" placeholder="输入20个字以内的角色名称" type="text" tabindex="1" maxlength="20" show-word-limit >
+
                 </ElInput>
                 </ElInput>
               </ElFormItem>
               </ElFormItem>
               <ElFormItem label="角色描述">
               <ElFormItem label="角色描述">
-                <ElInput v-model="roleInfo.remark" placeholder="请输入" type="textarea" tabindex="2">
+                <ElInput v-model="roleInfo.remark" placeholder="请输入" type="textarea" tabindex="2" maxlength="500" show-word-limit >
                 </ElInput>
                 </ElInput>
               </ElFormItem>
               </ElFormItem>
             </ElForm>
             </ElForm>
             <ElDivider></ElDivider>
             <ElDivider></ElDivider>
             <div>
             <div>
-              <h5>角色权限</h5>
+              <div class="flex a-c ">
+                <h5>角色权限</h5>
+                <el-checkbox v-model="TreeAllChecked" label="全选" size="large" @change="TreeselectAll"
+                  style="margin-left: 20px;" />
+              </div>
               <ElTree style="max-height: 350px;overflow-y: auto;" ref="treeRef" :data="treeData" :props="defaultProps"
               <ElTree style="max-height: 350px;overflow-y: auto;" ref="treeRef" :data="treeData" :props="defaultProps"
                 show-checkbox node-key="id" :default-expand-all="true" :default-checked-keys="checkedKeys"
                 show-checkbox node-key="id" :default-expand-all="true" :default-checked-keys="checkedKeys"
-                @check="handleCheckChange" />
+                @check="handleCheck" />
             </div>
             </div>
           </div>
           </div>
           <div class="flex f-c a-c " v-else>
           <div class="flex f-c a-c " v-else>
@@ -100,7 +105,6 @@ onBeforeMount(() => {
   // 对 asyncRoutes 进行预处理并转换为树形结构
   // 对 asyncRoutes 进行预处理并转换为树形结构
   const processedRoutes = preprocessRoutes(asyncRoutes);
   const processedRoutes = preprocessRoutes(asyncRoutes);
   treeData.value = convertToTreeData(0, processedRoutes);
   treeData.value = convertToTreeData(0, processedRoutes);
-
 });
 });
 interface roleList {
 interface roleList {
   id: string,
   id: string,
@@ -111,6 +115,7 @@ interface roleList {
 interface Perm {
 interface Perm {
   id: string; // 根据实际情况,id 可能是数字或字符串
   id: string; // 根据实际情况,id 可能是数字或字符串
 }
 }
+const TreeAllChecked = ref(false);
 const treeRef = ref<InstanceType<typeof ElTree>>();
 const treeRef = ref<InstanceType<typeof ElTree>>();
 const roleName = ref<string>("");
 const roleName = ref<string>("");
 const roleId = ref<string>("");
 const roleId = ref<string>("");
@@ -143,7 +148,7 @@ const defaultProps = {
   children: 'children',
   children: 'children',
   label: 'title',
   label: 'title',
 };
 };
-const handleCheckChange = (
+const handleCheck = (
   _checkedNodes: TreeNode[],
   _checkedNodes: TreeNode[],
   checkedInfo: {
   checkedInfo: {
     checkedKeys: number[];
     checkedKeys: number[];
@@ -159,6 +164,14 @@ const handleCheckChange = (
 };
 };
 
 
 async function roleSubmit() {
 async function roleSubmit() {
+  if (!roleInfo.permsId.length) {
+    ElMessage({
+      type: 'error',
+      message: '角色权限不能为空',
+      plain: true,
+    })
+    return;
+  }
   if (roleInfo.id) {
   if (roleInfo.id) {
     await api.roleApi.roleUpdate(roleInfo).then((res: any) => {
     await api.roleApi.roleUpdate(roleInfo).then((res: any) => {
       if (res.code == 200) {
       if (res.code == 200) {
@@ -186,6 +199,33 @@ async function roleSubmit() {
   }
   }
 
 
 }
 }
+//全选
+const TreeselectAll = (value: string | number | boolean) => {
+  roleInfo.perms = [];//全选操作是清空历史数据
+  const allKeys = getAllKeys(treeData.value, 'id');//递归id集合
+  const allperms = getAllKeys(treeData.value, 'perms');//递归权限集合
+  if (value) {
+    checkedKeys.value = allKeys;
+    roleInfo.permsId = allKeys;
+    roleInfo.perms = allperms;
+  } else {
+    treeRef.value?.setCheckedKeys([]);
+    roleInfo.permsId = [];
+
+  }
+}
+//递归
+const getAllKeys = (data: TreeNode[], type: string) => {
+  let keys: any = [];
+  data.forEach(item => {
+    keys.push(type == 'id' ? item.id : item); // 假设每个节点有 id 属性
+    if (item.children) {
+      keys = keys.concat(getAllKeys(item.children, type == 'id' ? 'id' : 'perms'));
+    }
+  });
+  return keys;
+}
+
 function roleDelClick() {
 function roleDelClick() {
   api.roleApi.roleDeleteValid({ systemCode: roleInfo.system, id: roleId.value }).then((res: any) => {
   api.roleApi.roleDeleteValid({ systemCode: roleInfo.system, id: roleId.value }).then((res: any) => {
     if (res.code == 200) {
     if (res.code == 200) {
@@ -242,6 +282,7 @@ async function rolequery() {
   })
   })
 }
 }
 function resetForm() {
 function resetForm() {
+  TreeAllChecked.value = false;
   identifier.value = true;
   identifier.value = true;
   roleInfo.name = "";
   roleInfo.name = "";
   roleInfo.remark = "";
   roleInfo.remark = "";

+ 16 - 9
src/views/productConfiguration/drivingInsurance/index.vue → src/views/productConfiguration/drivingInsurance/drivingInsuranceindex.vue

@@ -5,7 +5,8 @@
         <ElCol :md="4">
         <ElCol :md="4">
           <div class="flex f-c " style="height: 100%;">
           <div class="flex f-c " style="height: 100%;">
             <ElFormItem>
             <ElFormItem>
-              <ElInput v-model="companyName" placeholder="输入保险公司名称查找" type="text" tabindex="1" clearable style="width: 100%;"  @clear="companyQuery">
+              <ElInput v-model="companyName" placeholder="输入保险公司名称查找" type="text" tabindex="1" clearable
+                style="width: 100%;" @clear="companyQuery">
                 <template #append>
                 <template #append>
                   <el-button :icon="Search" @click="companyQuery" v-auth="'drivingInsurance.add'" />
                   <el-button :icon="Search" @click="companyQuery" v-auth="'drivingInsurance.add'" />
                 </template>
                 </template>
@@ -27,7 +28,7 @@
             <span class="strong">驾意险配置</span>
             <span class="strong">驾意险配置</span>
             <RouterLink
             <RouterLink
               :to="{ name: 'DrivingInsuranceAdd', query: { companyID: companyactiveID, companyName: companyactiveName } }">
               :to="{ name: 'DrivingInsuranceAdd', query: { companyID: companyactiveID, companyName: companyactiveName } }">
-              <ElButton type="default" v-if="companyactiveID">
+              <ElButton type="default" v-if="companyactiveID" v-auth="'drivingInsurance.add'">
                 <template #icon>
                 <template #icon>
                   <el-icon>
                   <el-icon>
                     <Plus />
                     <Plus />
@@ -52,7 +53,11 @@
                 </el-input>
                 </el-input>
               </el-form-item>
               </el-form-item>
               <el-form-item>
               <el-form-item>
-                <el-button type="primary" @click="findpage" v-auth="'drivingInsurance.view'">查询</el-button>
+                <el-button type="primary" @click="findpage" v-auth="'drivingInsurance.view'">
+                  <template #icon>
+                    <SvgIcon name="i-ep:search" />
+                  </template>
+                  查询</el-button>
                 <el-button type="default" @click="reset" v-auth="'drivingInsurance.view'">重置</el-button>
                 <el-button type="default" @click="reset" v-auth="'drivingInsurance.view'">重置</el-button>
               </el-form-item>
               </el-form-item>
             </el-form>
             </el-form>
@@ -64,9 +69,11 @@
               <el-button type="primary" link style="margin-right: 15px;" v-if="scope.operationData.parentId == '0'"
               <el-button type="primary" link style="margin-right: 15px;" v-if="scope.operationData.parentId == '0'"
                 @click="add(scope.operationData)" v-auth="'drivingInsurance.add'"> 添加
                 @click="add(scope.operationData)" v-auth="'drivingInsurance.add'"> 添加
               </el-button>
               </el-button>
-              <el-button type="primary" link style="margin-right: 15px;" @click="edit(scope.operationData.id)" v-auth="'drivingInsurance.edit'"> 编辑
+              <el-button type="primary" link style="margin-right: 15px;" @click="edit(scope.operationData.id)"
+                v-auth="'drivingInsurance.edit'"> 编辑
               </el-button>
               </el-button>
-              <el-button type="primary" link style="margin-right: 15px;" @click="del(scope.operationData)" v-auth="'drivingInsurance.delete'"> 删除
+              <el-button type="primary" link style="margin-right: 15px;" @click="del(scope.operationData)"
+                v-auth="'drivingInsurance.delete'"> 删除
               </el-button>
               </el-button>
             </template>
             </template>
           </TableTree>
           </TableTree>
@@ -111,13 +118,13 @@ const columns = [
   { prop: "alias", label: "产品别名", width: '180' },
   { prop: "alias", label: "产品别名", width: '180' },
 
 
 ];
 ];
-const reset=()=>{
-  formInline.params="";
-  formInline.seats="";
+const reset = () => {
+  formInline.params = "";
+  formInline.seats = "";
 }
 }
 //获取驾意险
 //获取驾意险
 const findpage = () => {
 const findpage = () => {
-  api.product.jyxList({ company: companyactiveID.value,...formInline }).then((res: any) => {
+  api.product.jyxList({ company: companyactiveID.value, ...formInline }).then((res: any) => {
     if (res.code == '200') {
     if (res.code == '200') {
       tableData.value = res.data;
       tableData.value = res.data;
     } else {
     } else {

+ 0 - 318
src/views/productConfiguration/specialClause/index.vue

@@ -1,318 +0,0 @@
-<template>
-  <div>
-    <PageMain class="vh100">
-      <ElForm :inline="false" :model="formInline" class="demo-form-inline" label-width="100px">
-        <ElRow :gutter="20">
-          <ElCol :md="6">
-            <ElFormItem label="特约名称">
-              <el-input v-model="formInline.companyName" placeholder="输入保险公司查找" clearable class="el-inputs" />
-            </ElFormItem>
-          </ElCol>
-          <ElCol :md="6">
-            <ElFormItem label="特约内容">
-              <el-input v-model="formInline.companyName" placeholder="输入保险公司查找" clearable class="el-inputs" />
-            </ElFormItem>
-          </ElCol>
-          <ElCol :md="1">
-            <el-button type="primary" @click="findpage">查询</el-button>
-          </ElCol>
-        </ElRow>
-      </ElForm>
-      <ElDivider border-style="dashed"></ElDivider>
-      <Table :tableData="tableData" :columns="columns" :showIndex="false" :columnwidth="200" :showSelect="false"
-        :pageInfo="pageInfo" @getList="getList">
-        <template v-slot:table-title-btn>
-          <el-button type="primary" @click="companyAdd">
-            添加特约
-            <template #icon>
-              <el-icon>
-                <Plus />
-              </el-icon>
-            </template>
-          </el-button>
-        </template>
-        <template v-slot:operation="scope">
-          <el-button type="primary" link @click="paymentEdit(scope.operationData.id)"> 编辑
-          </el-button>
-          <el-button type="primary" link @click="paymentDel(scope.operationData.id)"> 删除
-          </el-button>
-        </template>
-        <template v-slot:search="scope">
-          {{ scope.slotData.label }}
-        </template>
-      </Table>
-    </PageMain>
-
-    <el-dialog v-model="paynemtAdddialogVisible" :title="dialogTitle" width="40%" @close="close">
-      <ElRow :gutter="20">
-        <el-form :model="paymentform" :inline="true" label-width="120px" :rules="memberformRules" label-position="top"
-          ref="paymentFormRef" style="width: 100%;" :size="fromSize">
-          <ElCol :md="24" :lg="12">
-            <el-form-item label="保险公司" prop="companyId">
-              <el-select v-model="paymentform.companyId" @change="companyIdChange" placeholder="请选择"
-                style="width: 100%;">
-                <el-option :label="item.name" :value="item.id" v-for="(item, index) in companyList" :key="index" />
-              </el-select>
-            </el-form-item>
-          </ElCol>
-          <ElCol :md="24" :lg="12">
-            <el-form-item label="简称" prop="companyName">
-              <el-input v-model="paymentform.companyName" placeholder="请输入姓名" disabled />
-            </el-form-item>
-          </ElCol>
-          <ElCol :md="24" :lg="12">
-            <el-form-item label="二维码类型" prop="type">
-              <el-select v-model="paymentform.type" placeholder="请选择" style="width: 100%;">
-                <el-option v-for="(item, index) in getDict('qr_barcode')" :label="item.label" :value="item.value"
-                  :key="index" />
-              </el-select>
-            </el-form-item>
-          </ElCol>
-          <ElCol :md="24" :lg="12">
-            <el-form-item label="请求类型" prop="apiType">
-              <el-select v-model="paymentform.apiType" placeholder="请选择" style="width: 100%;">
-                <el-option v-for="(item, index) in getDict('api_type')" :label="item.label" :value="item.value"
-                  :key="index" />
-              </el-select>
-            </el-form-item>
-          </ElCol>
-        </el-form>
-      </ElRow>
-      <template #footer>
-        <div class="dialog-footer">
-          <el-button @click="paynemtAdddialogVisible = false">取消</el-button>
-          <el-button type="primary" @click="MemberAdd(paymentFormRef)">
-            保存
-          </el-button>
-        </div>
-      </template>
-    </el-dialog>
-  </div>
-
-</template>
-
-<script lang="ts" setup>
-import { ref, reactive } from 'vue'
-import api from '@/api';
-import { ElMessage, ElMessageBox } from 'element-plus'
-import { FormRules, FormInstance, ComponentSize } from 'element-plus';
-import { loadDicts, getDict } from '@/utils/composables/dictService';
-interface PageInfo {
-  pageNum: number;
-  pageSize: number;
-  sizes: number[];
-  total: number;
-}
-interface paymentform {
-  id?: string,
-  companyId: string,
-  companyName: string,
-  type: string,
-  apiType: string,
-  companyCode: string,
-}
-
-const tableData = ref([]);//列表数据
-const paymentFormRef = ref<FormInstance>()
-const fromSize = ref<ComponentSize>('large')//表单大小
-const paynemtAdddialogVisible = ref(false)//弹窗
-const dictLists = ref<{ [key: string]: any[] }>({});//字典集合
-const dialogTitle = ref('支付码配置')//弹窗title
-const dialogType = ref('add')//弹窗title
-const companyList = ref();
-const paymentform = reactive<paymentform>({
-  id: "",
-  companyId: "",
-  companyName: "",
-  type: "",
-  apiType: "",
-  companyCode: "",
-})
-const memberformRules = ref<FormRules>({
-  companyId: [
-    { required: true, trigger: 'change', message: '请选择保险公司' },
-  ],
-  type: [
-    { required: true, trigger: 'change', message: '请选择二维码类型' },
-  ],
-  apiType: [
-    { required: true, trigger: 'change', message: '请选择请求类型' },
-  ],
-
-});
-//分页
-const pageInfo = ref({
-  pageNum: 1,
-  pageSize: 20,
-  sizes: [10, 20, 30, 40, 50],
-  total: 0,
-});
-//检索条件
-const formInline = reactive({
-  companyName: '',//保险公司name
-})
-onMounted(() => {
-  findpage();
-  companyQuery();//获取保险公司
-  loadDicts(['qr_barcode', 'api_type']);//获取多个字典
-});
-function findpage() {
-  api.company.QRcodePage({ pages: pageInfo.value.pageNum, size: pageInfo.value.pageSize, ...formInline }).then((res: any) => {
-    if (res.code == 200) {
-      tableData.value = res.data.records;
-      pageInfo.value.pageNum = res.data.current;
-      pageInfo.value.pageSize = res.data.size;
-      pageInfo.value.total = res.data.total;
-    }
-
-  })
-}
-const columns = [
-  { prop: "companyName", label: "特约名称", align: 'left' },
-  { prop: "companyCode", label: "编码", width: '220' },
-  {
-    prop: "type", label: "特别约定内容", width: '280', formatter: (row: any) => {
-      let type = row.type;
-      let name = getDict('qr_barcode').find(val => val.value == type).label;
-      return name;
-    }
-  },
-];
-function getList(item: PageInfo) {
-  pageInfo.value.pageNum = item.pageNum;
-  pageInfo.value.pageSize = item.pageSize;
-  findpage();
-};
-const companyIdChange = (value: string) => {
-  let Info = companyList.value.find((val: any) => val.id == value);
-  paymentform.companyName = Info.name;
-  paymentform.companyCode = Info.companyCode;
-}
-//获取保险公司列表
-const companyQuery = () => {
-  api.company.selectLevelList({ name: "" }).then((res: any) => {
-    if (res.code == '200') {
-      companyList.value = res.data;
-    }
-  });
-}
-const companyAdd = () => {
-  dialogTitle.value = '支付码配置';
-  dialogType.value = 'add';
-  paynemtAdddialogVisible.value = true
-}
-const MemberAdd = async (formEl: FormInstance | undefined) => {
-  if (!formEl) return
-  await formEl.validate((valid) => {
-    if (valid) {
-      if (dialogType.value == 'add') {
-        api.company.QRBarcodeAdd({ ...paymentform }).then((res: any) => {
-          if (res.code == '200') {
-            ElMessage({
-              type: 'success',
-              message: res.msg,
-              plain: true,
-            })
-            paynemtAdddialogVisible.value = false;
-            findpage();
-          } else {
-          }
-        });
-      } else {
-        api.company.QRBarcodeUpdate({ ...paymentform }).then((res: any) => {
-          if (res.code == '200') {
-            ElMessage({
-              type: 'success',
-              message: res.msg,
-              plain: true,
-            })
-            paynemtAdddialogVisible.value = false;
-            findpage();
-          } else {
-          }
-        });
-      }
-    } else {
-      ElMessage({
-        type: 'error',
-        message: '信息不完整',
-        plain: true,
-      })
-    }
-  })
-}
-// 编辑
-const paymentEdit = (id: string) => {
-  dialogTitle.value = '支付码编辑';
-  dialogType.value = 'edit';
-  api.company.QRcodeById(id).then((res: any) => {
-    if (res.code == '200') {
-      Object.keys(paymentform).forEach((key) => {
-        if (res.data.hasOwnProperty(key)) {
-          paymentform[key as keyof typeof paymentform] = res.data[key as keyof typeof paymentform];
-        }
-      });
-      paynemtAdddialogVisible.value = true;
-    } else {
-    }
-  });
-}
-// 删除
-const paymentDel = (id: string) => {
-  ElMessageBox.confirm(
-    '确定删除吗?',
-    '删除二维码配置',
-    {
-      confirmButtonText: '确定删除',
-      type: 'error',
-      center: true,
-      confirmButtonClass: 'el-button--danger',
-    }
-  )
-    .then(() => {
-      api.company.QRcodeDel(id).then((res: any) => {
-        if (res.code == '200') {
-          ElMessage({
-            type: 'success',
-            message: res.msg,
-            plain: true,
-          })
-          findpage();
-        } else {
-        }
-      });
-    })
-    .catch(() => {
-    })
-
-}
-//字典信息处理
-const dictType = (type: string) => {
-  api.toolApi.dictType({ dictCode: type }).then((res: any) => {
-    if (res.code == '200') {
-      dictLists.value[type + 'List'] = res.data.map((item: any) => {
-        return {
-          value: item.value,
-          label: item.label
-        };
-      });
-    }
-  });
-}
-const close = () => {
-  paymentform.companyId = "";
-  paymentform.companyName = "";
-  paymentform.type = "";
-  paymentform.apiType = "";
-}
-</script>
-<style lang="scss" scoped>
-:deep(.el-divider--horizontal) {
-  margin: 8px 0 24px;
-  color: #f2f2f2;
-}
-
-.el-inputs {
-  width: 100% !important;
-}
-</style>

+ 217 - 0
src/views/productConfiguration/specialClause/specialClauseAdd.vue

@@ -0,0 +1,217 @@
+<template>
+  <div>
+    <PageMain style="padding: 20px;margin-bottom: 100px;">
+      <ElRow :gutter="60">
+        <ElCol :md="24" :lg="24" style="padding-bottom: 10px;font-size: 14px;">
+          <span class="strong">基本信息</span>
+        </ElCol>
+        <el-form :model="specialform" label-width="120px" :rules="specialformRules" label-position="top"
+          ref="specialformRef" style="max-width: 1000px;" class="flex a-c f-wrap" :size="fromSize">
+          <ElCol :md="24" :lg="12">
+            <el-form-item label="保险公司" prop="companyId">
+              <el-select v-model="specialform.companyId" placeholder="请选择" clearable filterable>
+                <el-option v-for="(item, index) in companyList" :key="index" :label="item.name" :value="item.id" />
+              </el-select>
+            </el-form-item>
+          </ElCol>
+          <ElCol :md="24" :lg="12">
+            <el-form-item label="特约类型" prop="riskCode">
+              <el-select v-model="specialform.riskCode" placeholder="请选择" clearable>
+                <el-option :label="item.label" v-for="(item, index) in getDict('risk_code')" :key="index"
+                  :value="item.value" />
+              </el-select>
+            </el-form-item>
+          </ElCol>
+          <ElCol :md="24" :lg="12">
+            <el-form-item label="特约名称" prop="clauseName">
+              <el-input v-model="specialform.clauseName" placeholder="请输入特约名称" maxlength="50" show-word-limit />
+            </el-form-item>
+          </ElCol>
+          <ElCol :md="24" :lg="12">
+            <el-form-item label="特约编码" prop="clauseCode">
+              <el-input v-model="specialform.clauseCode" placeholder="请输入特约编码" maxlength="50" show-word-limit />
+            </el-form-item>
+          </ElCol>
+          <ElCol :md="24" :lg="12">
+            <el-form-item label="是否可编辑" prop="isEdit">
+              <el-radio-group v-model="specialform.isEdit">
+                <el-radio :value="item.value" size="large" v-for="(item, index) in getDict('is_edit')" :key="index">{{
+                  item.label }}</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </ElCol>
+          <ElCol :md="24" :lg="12">
+            <el-form-item label="客户端状态" prop="clientStatus">
+              <el-select v-model="specialform.clientStatus" placeholder="请选择" clearable>
+                <el-option :label="item.label" v-for="(item, index) in getDict('special_client_type')" :key="index"
+                  :value="item.value" />
+              </el-select>
+            </el-form-item>
+          </ElCol>
+          <ElCol :md="24" :lg="12">
+            <el-form-item label="特约内容" prop="clauseContent">
+              <el-input v-model="specialform.clauseContent" :disabled="clauseContentShow" placeholder="请输入机构地址"
+                :autosize="{ minRows: 4, maxRows: 10 }" type="textarea" maxlength="500" show-word-limit />
+            </el-form-item>
+          </ElCol>
+        </el-form>
+      </ElRow>
+    </PageMain>
+    <FixedActionBar>
+      <ElButton @click='router.back()'>
+        取消
+      </ElButton>
+      <ElButton type="primary" @click="submitForm(specialformRef)">
+        保存
+      </ElButton>
+      <ElButton type="primary" v-if="!id" @click='submitForm1(specialformRef)'>
+        保存并继续添加
+      </ElButton>
+    </FixedActionBar>
+  </div>
+
+</template>
+
+<script lang="ts" setup>
+import { ref } from 'vue'
+import { FormRules, FormInstance, ComponentSize, ElMessage } from 'element-plus';
+import { loadDicts, getDict } from '@/utils/composables/dictService';//字典组件
+import { useRoute, useRouter } from 'vue-router';
+import api from '@/api';
+const route = useRoute();
+const router = useRouter();
+const id = ref(route.query.id);//id参数
+const specialformRef = ref<FormInstance>()
+const fromSize = ref<ComponentSize>('large')
+const companyList = ref()
+const specialform = reactive({
+  id: "",
+  companyId: "",//保险公司code
+  clauseName: "",//特约名称
+  riskCode: "",//特约类型
+  clauseCode: "",//特约编码
+  clauseContent: "",//特约内容
+  isEdit: "",//是否编辑
+  clientStatus: "",//客户端状态
+})
+
+const specialformRules = ref<FormRules>({
+  companyId: [
+    { required: true, trigger: 'change', message: '请选择保险公司' },
+  ],
+  riskCode: [
+    { required: true, trigger: 'change', message: '请选择特约类型' },
+  ],
+  clauseName: [
+    { required: true, trigger: 'blur', message: '请输入特约名称' },
+  ],
+  clauseCode: [
+    { required: true, trigger: 'blur', message: '请输入特约编码' },
+  ],
+  isEdit: [
+    { required: true, trigger: 'change', message: '请选择是否可编辑' },
+  ],
+  clientStatus: [
+    { required: true, trigger: 'change', message: '请选择客户端状态' },
+  ],
+  clauseContent: [
+    { required: true, trigger: 'blur', message: '请输入特约内容' },
+  ],
+
+});
+const clauseContentShow = ref(false);
+onBeforeMount(() => {
+  companyQuery();
+  loadDicts(['special_client_type', 'risk_code', 'is_edit']);//获取多个字典
+  if (id.value) {
+    details();
+
+  }
+});
+
+const details = () => {
+  api.product.getClause({ id: id.value }).then((res: any) => {
+    if (res.code == '200') {
+      Object.keys(specialform).forEach((key) => {
+        if (res.data.hasOwnProperty(key)) {
+          specialform[key as keyof typeof specialform] = res.data[key as keyof typeof specialform];
+        }
+      });
+      if (specialform.isEdit == '0') {
+        clauseContentShow.value = true;
+      }
+    } else {
+    }
+  });
+}
+//获取保险公司列表
+const companyQuery = () => {
+  api.company.selectLevelList({ name: "" }).then((res: any) => {
+    if (res.code == '200') {
+      companyList.value = res.data;
+    }
+  });
+}
+const submitForm = async (formEl: FormInstance | undefined) => {
+  if (!formEl) return
+  await formEl.validate((valid) => {
+    if (valid) {
+      if (id.value) {
+        api.product.updateClause({ ...specialform }).then((res: any) => {
+          if (res.code == '200') {
+            ElMessage({
+              type: 'success',
+              message: res.msg,
+              plain: true,
+            })
+            router.back()
+          }
+        });
+      } else {
+        api.product.addClause({ ...specialform }).then((res: any) => {
+          if (res.code == '200') {
+            ElMessage({
+              type: 'success',
+              message: res.msg,
+              plain: true,
+            })
+            router.back()
+          }
+        });
+      }
+    } else {
+      ElMessage({
+        type: 'error',
+        message: '信息不完整',
+        plain: true,
+      })
+    }
+  })
+}
+const submitForm1 = async (formEl: FormInstance | undefined) => {
+
+  if (!formEl) return
+  await formEl.validate((valid) => {
+    if (valid) {
+      api.product.addClause({ ...specialform }).then((res: any) => {
+        if (res.code == '200') {
+          ElMessage({
+            type: 'success',
+            message: res.msg,
+            plain: true,
+          })
+          router.push({
+            name: 'reload',
+          })
+        }
+      });
+    } else {
+      ElMessage({
+        type: 'error',
+        message: '信息不完整',
+        plain: true,
+      })
+    }
+  })
+}
+</script>

+ 298 - 0
src/views/productConfiguration/specialClause/specialClauseindex.vue

@@ -0,0 +1,298 @@
+<template>
+  <div>
+    <PageMain class="vh100">
+      <ElForm :inline="false" :model="formInline" class="demo-form-inline" label-width="100px">
+        <ElRow :gutter="20">
+          <ElCol :md="8">
+            <ElFormItem label="保险公司">
+              <el-select v-model="formInline.companyId" placeholder="请选择保险公司" clearable filterable style="width: 100%;">
+                <el-option :label="item.name" :value="item.id" v-for="(item, index) in companyList" :key="index" />
+              </el-select>
+            </ElFormItem>
+          </ElCol>
+          <ElCol :md="8">
+            <ElFormItem label="特约名称">
+              <el-input v-model="formInline.clauseName" placeholder="输入特约名称查找" clearable class="el-inputs" />
+            </ElFormItem>
+          </ElCol>
+          <ElCol :md="8">
+            <ElFormItem label="特约内容">
+              <el-input v-model="formInline.clauseContent" placeholder="输入特约内容查找" clearable class="el-inputs" />
+            </ElFormItem>
+          </ElCol>
+          <ElCol :md="8">
+            <ElFormItem label="编码">
+              <el-input v-model="formInline.clauseCode" placeholder="输入特约编码查找" clearable class="el-inputs" />
+            </ElFormItem>
+          </ElCol>
+          <ElCol :md="8">
+            <ElFormItem label="特约类型">
+              <el-select v-model="formInline.riskCode" placeholder="请选择特约类型" style="width: 100%;">
+                <el-option :label="item.label" :value="item.value" v-for="(item, index) in getDict('risk_code')"
+                  :key="index" />
+                <el-option label="商业险" value="商业险" />
+              </el-select>
+            </ElFormItem>
+          </ElCol>
+          <ElCol :md="8">
+            <div class="flex a-c j-end" style="width: 100%;">
+              <el-button type="primary" @click="findpage" v-auth="'specialClause.view'">
+                <template #icon>
+                  <SvgIcon name="i-ep:search" />
+                </template>
+                查询</el-button>
+              <el-button type="default" @click="reset">重置</el-button>
+            </div>
+          </ElCol>
+        </ElRow>
+      </ElForm>
+      <ElDivider border-style="dashed"></ElDivider>
+      <Table :tableData="tableData" :columns="columns" :showIndex="false" :columnwidth="200" :showSelect="true"
+        :pageInfo="pageInfo" @getList="getList" @selectionChange="selectionChange" @customEventClick="customEventClick">
+        <template v-slot:table-title-btn>
+          <RouterLink :to="{ name: 'SpecialClauseAdd' }">
+            <el-button type="primary" v-auth="'specialClause.add'">
+              添加特约
+              <template #icon>
+                <el-icon>
+                  <Plus />
+                </el-icon>
+              </template>
+            </el-button>
+          </RouterLink>
+
+          <el-button type="default" @click="batchDel" v-auth="'specialClause.delete'"
+            :disabled="!sysUpAndDownList.length">
+            批量删除
+          </el-button>
+        </template>
+        <template v-slot:operation="scope">
+          <Auth :value="'specialClause.edit'">
+            <el-button type="primary" link @click="Edit(scope.operationData.id)"> 编辑
+            </el-button>
+          </Auth>
+          <Auth :value="'specialClause.delete'">
+            <el-button type="primary" link @click="Del(scope.operationData.id)"> 删除
+            </el-button>
+          </Auth>
+        </template>
+        <template v-slot:search="scope">
+          {{ scope.slotData.label }}
+        </template>
+      </Table>
+    </PageMain>
+    <el-dialog v-model="dialogVisible" title="修改特约" width="500">
+      <el-input v-model="specialform.clauseContent" :autosize="{ minRows: 4, maxRows: 10 }" type="textarea"
+        maxlength="500" show-word-limit />
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button @click="dialogVisible = false">取消</el-button>
+          <el-button type="primary" @click="clauseContentEdit">
+            确定
+          </el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+<script lang="ts" setup>
+import { ref, reactive } from 'vue'
+import api from '@/api';
+import { RouterLink, useRouter } from "vue-router";
+import { ElMessage, ElMessageBox } from 'element-plus'
+import { loadDicts, getDict } from '@/utils/composables/dictService';
+interface PageInfo {
+  pageNum: number;
+  pageSize: number;
+  sizes: number[];
+  total: number;
+}
+const router = useRouter();
+const tableData = ref([]);//列表数据
+const sysUpAndDownList = ref<string[]>([])//选中id
+const companyList = ref();
+//分页
+const pageInfo = ref({
+  pageNum: 1,
+  pageSize: 20,
+  sizes: [10, 20, 30, 40, 50],
+  total: 0,
+});
+//检索条件
+const formInline = reactive({
+  companyId: "",//保险公司code
+  clauseName: "",//特约名称
+  riskCode: "",//特约类型
+  clauseCode: "",//特约编码
+  clauseContent: "",//特约内容
+})
+onMounted(() => {
+  findpage();
+  companyQuery();//获取保险公司
+  loadDicts(['qr_barcode', 'api_type', 'risk_code']);//获取多个字典
+});
+function findpage() {
+  api.product.getClausePage({ pages: pageInfo.value.pageNum, size: pageInfo.value.pageSize, ...formInline }).then((res: any) => {
+    if (res.code == 200) {
+      tableData.value = res.data.records;
+      pageInfo.value.pageNum = res.data.current;
+      pageInfo.value.pageSize = res.data.size;
+      pageInfo.value.total = res.data.total;
+    }
+  })
+}
+const columns = [
+  { prop: "companyName", label: "保险公司", align: 'left', width: '280' },
+  {
+    prop: "riskCode", label: "特约类型", width: '150', formatter: (row: any) => {
+      let riskCode = row.riskCode;
+      if (riskCode) {
+        let riskCodeName = getDict('risk_code').find(val => val.value == riskCode).label;
+        return riskCodeName
+      }
+    }
+  },
+  { prop: "clauseName", label: "特约名称", align: 'left' },
+  { prop: "clauseCode", label: "编码", width: '220' },
+  {
+    prop: "clauseContent", label: "特别约定内容", width: '480', component: "customEvent", formatter: (row: any) => {
+      if (row.isEdit == '1') {
+        return { style: { color: '#0083FF', cursor: 'pointer' }, content: row.clauseContent };
+      } else {
+        return row.clauseContent;
+      }
+    }
+  },
+];
+function getList(item: PageInfo) {
+  pageInfo.value.pageNum = item.pageNum;
+  pageInfo.value.pageSize = item.pageSize;
+  findpage();
+};
+//获取保险公司列表
+const companyQuery = () => {
+  api.company.selectLevelList({ name: "" }).then((res: any) => {
+    if (res.code == '200') {
+      companyList.value = res.data;
+    }
+  });
+}
+const selectionChange = (val: any) => {
+  sysUpAndDownList.value = val;
+}
+//特约修改
+const dialogVisible = ref(false);//弹窗
+const specialform = reactive({
+  id: "",
+  companyId: "",//保险公司code
+  clauseName: "",//特约名称
+  riskCode: "",//特约类型
+  clauseCode: "",//特约编码
+  clauseContent: "",//特约内容
+  isEdit: "",//是否编辑
+  clientStatus: "",//客户端状态
+})
+const customEventClick = (row: any,) => {
+  Object.keys(specialform).forEach((key) => {
+    if (row.hasOwnProperty(key)) {
+      specialform[key as keyof typeof specialform] = row[key as keyof typeof specialform];
+    }
+  });
+  dialogVisible.value = true;
+}
+const clauseContentEdit = () => {
+  api.product.updateClause({ ...specialform }).then((res: any) => {
+    if (res.code == '200') {
+      ElMessage({
+        type: 'success',
+        message: res.msg,
+        plain: true,
+      })
+      dialogVisible.value = false;
+      findpage();
+    }
+  });
+}
+const Edit = (id: string) => {
+  router.push({
+    name: 'SpecialClauseAdd',
+    query: {
+      id: id
+    }
+  })
+}
+const batchDel = () => {
+  ElMessageBox.confirm(
+    '是否删除特约?',
+    '特约删除',
+    {
+      confirmButtonText: '确定删除',
+      type: 'error',
+      center: true,
+      confirmButtonClass: 'el-button--danger',
+    }
+  )
+    .then(() => {
+      api.product.deleteClause([...sysUpAndDownList.value]).then((res: any) => {
+        if (res.code == '200') {
+          ElMessage({
+            type: 'success',
+            message: res.msg,
+            plain: true,
+          })
+          findpage();
+        } else {
+        }
+      });
+    })
+    .catch(() => {
+    })
+}
+// 删除
+const Del = (id: string) => {
+  ElMessageBox.confirm(
+    '是否删除特约?',
+    '特约删除',
+    {
+      confirmButtonText: '确定删除',
+      type: 'error',
+      center: true,
+      confirmButtonClass: 'el-button--danger',
+    }
+  )
+    .then(() => {
+      api.product.deleteClause([id]).then((res: any) => {
+        if (res.code == '200') {
+          ElMessage({
+            type: 'success',
+            message: res.msg,
+            plain: true,
+          })
+          findpage();
+        } else {
+        }
+      });
+    })
+    .catch(() => {
+    })
+
+}
+const reset = () => {
+  formInline.clauseCode = '';
+  formInline.clauseContent = '';
+  formInline.clauseName = '';
+  formInline.companyId = '';
+  formInline.riskCode = '';
+  findpage();
+}
+</script>
+<style lang="scss" scoped>
+:deep(.el-divider--horizontal) {
+  margin: 8px 0 24px;
+  color: #f2f2f2;
+}
+
+.el-inputs {
+  width: 100% !important;
+}
+</style>

+ 2 - 2
tsconfig.app.json

@@ -30,8 +30,8 @@
     "allowJs": false,
     "allowJs": false,
     "strict": true,
     "strict": true,
     "noFallthroughCasesInSwitch": true,
     "noFallthroughCasesInSwitch": true,
-    "noUnusedLocals": true,
-    "noUnusedParameters": true,
+    "noUnusedLocals": false,
+    "noUnusedParameters": false,
     "noEmit": true,
     "noEmit": true,
     "sourceMap": true,
     "sourceMap": true,
     "esModuleInterop": true,
     "esModuleInterop": true,

+ 2 - 2
tsconfig.node.json

@@ -8,8 +8,8 @@
     "allowImportingTsExtensions": true,
     "allowImportingTsExtensions": true,
     "strict": true,
     "strict": true,
     "noFallthroughCasesInSwitch": true,
     "noFallthroughCasesInSwitch": true,
-    "noUnusedLocals": true,
-    "noUnusedParameters": true,
+    "noUnusedLocals": false,
+    "noUnusedParameters": false,
     "noEmit": true,
     "noEmit": true,
     "isolatedModules": true,
     "isolatedModules": true,
     "skipLibCheck": true
     "skipLibCheck": true