Browse Source

remove useless file

main
xuziqiang 6 months ago
parent
commit
142721b1c3
  1. 3
      lib/saas/router/guard/permission-guard.ts
  2. 11
      nervui-mobile-application/src/view/login.vue
  3. 10
      nervui-smart-community-op/.env
  4. 22
      nervui-smart-community-op/.env.development
  5. 35
      nervui-smart-community-op/.env.production
  6. 1
      nervui-smart-community-op/.version
  7. 74
      nervui-smart-community-op/build.sh
  8. 18
      nervui-smart-community-op/index.html
  9. BIN
      nervui-smart-community-op/public/asset/file/whiteListUser.xlsx
  10. BIN
      nervui-smart-community-op/public/asset/file/whitelistCarImport.xlsx
  11. BIN
      nervui-smart-community-op/public/asset/font/QuartzMS.TTF
  12. BIN
      nervui-smart-community-op/public/asset/image/bc.png
  13. BIN
      nervui-smart-community-op/public/asset/image/header.png
  14. BIN
      nervui-smart-community-op/public/asset/image/login/adminIcon.png
  15. BIN
      nervui-smart-community-op/public/asset/image/login/background.png
  16. BIN
      nervui-smart-community-op/public/asset/image/side.png
  17. BIN
      nervui-smart-community-op/public/asset/image/table-no-data.png
  18. BIN
      nervui-smart-community-op/public/favicon.ico
  19. 12
      nervui-smart-community-op/release.yaml
  20. 35
      nervui-smart-community-op/resources/scripts/nervui/smart-community-op/create.sh
  21. 1
      nervui-smart-community-op/resources/scripts/nervui/smart-community-op/delete.sh
  22. 1
      nervui-smart-community-op/resources/scripts/nervui/smart-community-op/setup.sh
  23. 1
      nervui-smart-community-op/resources/scripts/nervui/smart-community-op/start.sh
  24. 1
      nervui-smart-community-op/resources/scripts/nervui/smart-community-op/stop.sh
  25. 30
      nervui-smart-community-op/resources/scripts/nervui/smart-community-op/type.json
  26. 64
      nervui-smart-community-op/resources/templates/deploy.json
  27. 336
      nervui-smart-community-op/src/App.vue
  28. 49
      nervui-smart-community-op/src/api/index.ts
  29. 15
      nervui-smart-community-op/src/api/user.ts
  30. 10
      nervui-smart-community-op/src/api/workFlow.ts
  31. 179
      nervui-smart-community-op/src/components/addNode.vue
  32. 144
      nervui-smart-community-op/src/components/drawer/approverDrawer.vue
  33. 167
      nervui-smart-community-op/src/components/drawer/conditionDrawer.vue
  34. 338
      nervui-smart-community-op/src/components/drawer/drawerComponents/assignee/assigneeForm.vue
  35. 177
      nervui-smart-community-op/src/components/drawer/drawerComponents/formComponents/overDot.vue
  36. 301
      nervui-smart-community-op/src/components/drawer/drawerComponents/formComponents/selectPerson.vue
  37. 69
      nervui-smart-community-op/src/components/drawer/drawerComponents/groupList/departmentInUuid.vue
  38. 69
      nervui-smart-community-op/src/components/drawer/drawerComponents/groupList/departmentMainUuid.vue
  39. 186
      nervui-smart-community-op/src/components/drawer/drawerComponents/groupList/faqiren.vue
  40. 247
      nervui-smart-community-op/src/components/drawer/drawerComponents/groupList/groupList.vue
  41. 71
      nervui-smart-community-op/src/components/drawer/drawerComponents/groupList/personStatus.vue
  42. 62
      nervui-smart-community-op/src/components/drawer/drawerComponents/groupList/quitReason.vue
  43. 73
      nervui-smart-community-op/src/components/drawer/drawerComponents/groupList/quitType.vue
  44. 73
      nervui-smart-community-op/src/components/drawer/drawerComponents/groupList/sex.vue
  45. 71
      nervui-smart-community-op/src/components/drawer/drawerComponents/groupList/workHandover.vue
  46. BIN
      nervui-smart-community-op/src/components/icon/end-icon.png
  47. BIN
      nervui-smart-community-op/src/components/icon/node-icon.png
  48. BIN
      nervui-smart-community-op/src/components/icon/start-icon.png
  49. 322
      nervui-smart-community-op/src/components/nodeWrap.vue
  50. 87
      nervui-smart-community-op/src/components/selectBox.vue
  51. 93
      nervui-smart-community-op/src/components/selectResult.vue
  52. 90
      nervui-smart-community-op/src/config/app.config.ts
  53. 2
      nervui-smart-community-op/src/config/index.ts
  54. 22
      nervui-smart-community-op/src/enum/http-enum.ts
  55. 3
      nervui-smart-community-op/src/icon/TaskCenter.svg
  56. 3
      nervui-smart-community-op/src/icon/approve.svg
  57. 6
      nervui-smart-community-op/src/icon/baimingdanguanli.svg
  58. 3
      nervui-smart-community-op/src/icon/caidanguanli.svg
  59. 3
      nervui-smart-community-op/src/icon/changjianwenti.svg
  60. 3
      nervui-smart-community-op/src/icon/drag.svg
  61. 12
      nervui-smart-community-op/src/icon/headerLogin.svg
  62. 4
      nervui-smart-community-op/src/icon/jigouguanli.svg
  63. 3
      nervui-smart-community-op/src/icon/jueseguanli.svg
  64. 12
      nervui-smart-community-op/src/icon/login.svg
  65. 4
      nervui-smart-community-op/src/icon/menus.svg
  66. 10
      nervui-smart-community-op/src/icon/noData.svg
  67. 20
      nervui-smart-community-op/src/icon/passWord.svg
  68. 7
      nervui-smart-community-op/src/icon/resource.svg
  69. 4
      nervui-smart-community-op/src/icon/smsManage.svg
  70. 21
      nervui-smart-community-op/src/icon/userName.svg
  71. 3
      nervui-smart-community-op/src/icon/xiaoxiguanli.svg
  72. 3
      nervui-smart-community-op/src/icon/xieyiguanli.svg
  73. 3
      nervui-smart-community-op/src/icon/yonghuguanli.svg
  74. 34
      nervui-smart-community-op/src/main.ts
  75. 11
      nervui-smart-community-op/src/router/index.ts
  76. 1565
      nervui-smart-community-op/src/router/operationManagement/index.ts
  77. 943
      nervui-smart-community-op/src/router/systemSettingManage/index.ts
  78. 12
      nervui-smart-community-op/src/store/item.ts
  79. 97
      nervui-smart-community-op/src/stores/index.js
  80. 111
      nervui-smart-community-op/src/theme/color.less
  81. 156
      nervui-smart-community-op/src/theme/detail.less
  82. 72
      nervui-smart-community-op/src/theme/form.less
  83. 67
      nervui-smart-community-op/src/theme/global.less
  84. 28
      nervui-smart-community-op/src/theme/listTableTitle.less
  85. 2
      nervui-smart-community-op/src/theme/theme.scss
  86. 2
      nervui-smart-community-op/src/theme/variable.less
  87. 0
      nervui-smart-community-op/src/theme/variable.scss
  88. 41
      nervui-smart-community-op/src/utils/axios.js
  89. 104
      nervui-smart-community-op/src/utils/const.js
  90. 162
      nervui-smart-community-op/src/utils/index.js
  91. 14
      nervui-smart-community-op/src/utils/useGlobal.ts
  92. 48
      nervui-smart-community-op/src/view/components/FCKEditor.vue
  93. 100
      nervui-smart-community-op/src/view/components/customUpload.vue
  94. 372
      nervui-smart-community-op/src/view/components/detailForAudit.vue
  95. 628
      nervui-smart-community-op/src/view/components/edit-table.vue
  96. 252
      nervui-smart-community-op/src/view/login.vue
  97. 212
      nervui-smart-community-op/src/view/operationManagement/activityManage/functionTestRelease/addEdit.vue
  98. 140
      nervui-smart-community-op/src/view/operationManagement/activityManage/functionTestRelease/index.vue
  99. 164
      nervui-smart-community-op/src/view/operationManagement/activityManage/whiteListGroup/addEdit.vue
  100. 116
      nervui-smart-community-op/src/view/operationManagement/activityManage/whiteListGroup/index.vue

3
lib/saas/router/guard/permission-guard.ts

@ -1,5 +1,3 @@
import type { Router } from 'vue-router';
import { NsMessage } from '/nerv-lib/component/message';
import { authorizationService } from '/nerv-base/store/modules/authorization-service';
@ -10,6 +8,7 @@ export function createPermissionGuard(router: Router, whiteNameList: string[]) {
const authorizationStore = authorizationService();
const appConfig = appConfigStore();
router.beforeEach(async (to, from, next) => {
next();
if (!appConfig.userCustomRouterGuard) {
setRouteChange(to);
if (to?.query?.nervsid) {

11
nervui-mobile-application/src/view/login.vue

@ -8,7 +8,7 @@
</a-layout-header>
<a-layout-content class="center-content">
<div class="lg_card">
<h1 class="lg_card_title">账号登录</h1>
<h1 class="lg_card_title">账号登录current</h1>
<p v-show="!errorShow" style="height: 22px"></p>
<p v-show="errorShow" class="lg_card_error">{{ errorMsg }}</p>
<a-input
@ -74,7 +74,12 @@
if (userName.value !== '' && password.value !== '') {
errorShow.value = false;
let data = JSON.stringify({ userName: userName.value, password: password.value });
loading.value = true;
// loading.value = true;
console.log(data);
Cookies.set('nervsid', 'mockId');
router.push({
name: 'AnnouncementsIndex',
});
async function logins() {
try {
const res = await configStore.userLogin(JSON.parse(data));
@ -127,7 +132,7 @@
loading.value = false;
}
}
logins();
// logins();
}
};
const checkoutLogo = (): void => {

10
nervui-smart-community-op/.env

@ -1,10 +0,0 @@
# port
VITE_PORT = 3333
#mode
VITE_GLOB_APP_RUN_TYPE = saas
# spa-title
VITE_GLOB_APP_TITLE = Smart Community-op
# spa shortname
VITE_GLOB_APP_SHORT_NAME = smart-community-op

22
nervui-smart-community-op/.env.development

@ -1,22 +0,0 @@
# Whether to open mock
VITE_USE_MOCK = true
# public path
VITE_PUBLIC_PATH = /
# Cross-domain proxy, you can configure multiple
# Please note that no line breaks
VITE_PROXY = {"/api":{ "target":"http://100.73.70.51","changeOrigin": true}}
# VITE_PROXY=[["/api","https://vvbin.cn/test"]]
# Delete console
VITE_DROP_CONSOLE = false
# Basic interface address SPA
VITE_GLOB_API_URL=/basic-api
# File upload address, optional
VITE_GLOB_UPLOAD_URL=/upload
# Interface prefix
VITE_GLOB_API_URL_PREFIX=

35
nervui-smart-community-op/.env.production

@ -1,35 +0,0 @@
# Whether to open mock
VITE_USE_MOCK = true
# public path
VITE_PUBLIC_PATH = /
# Delete console
VITE_DROP_CONSOLE = true
# Whether to enable gzip or brotli compression
# Optional: gzip | brotli | none
# If you need multiple forms, you can use `,` to separate
VITE_BUILD_COMPRESS = 'none'
# Whether to delete origin files when using compress, default false
VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE = false
# Basic interface address SPA
VITE_GLOB_API_URL=/basic-api
# File upload address, optional
# It can be forwarded by nginx or write the actual address directly
VITE_GLOB_UPLOAD_URL=/upload
# Interface prefix
VITE_GLOB_API_URL_PREFIX=
# Whether to enable image compression
VITE_USE_IMAGEMIN= true
# use pwa
VITE_USE_PWA = false
# Is it compatible with older browsers
VITE_LEGACY = false

1
nervui-smart-community-op/.version

@ -1 +0,0 @@
1.0.14

74
nervui-smart-community-op/build.sh

@ -1,74 +0,0 @@
#!/bin/bash
SOURCE="$0"
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
SOURCE="$(readlink "$SOURCE")"
[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
done
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
if [ -z $WORKSPACE ];then
echo "WORKSPACE not exists"
else
set DIR=$WORKSPACE
fi
echo "current dir"
echo "$DIR"
cd "$DIR"
projectname=$(basename `pwd`)
npm run community-op-build
if [ -d "$DIR/dist" ];then
cd "$DIR/dist"
# copy module.json
cp ../module.json ./
# package
VERSION=$(cat ../.version)
lastdir=../release/
if [ -d ${lastdir} ];then
echo "删除旧release文件夹"
rm -rf ${lastdir}
else
echo "文件夹不存在!"
fi
mkdir -p ${lastdir}
dir=../release/nerv/$projectname/$VERSION
mkdir -p ${dir}
tar -zcvf "${dir}/$projectname-$VERSION.tgz" ./*
templatedir=../release/resources/templates/nerv/$projectname/$VERSION/$projectname
mkdir -p ${templatedir}
cp -r ../resources/templates/* ${templatedir}
cd ../
releasefile=nerv-$projectname-$VERSION.tgz
if [ -f ${releasefile} ];then
echo "删除旧包!"
rm -rf ${releasefile}
fi
tar -zcvf ${releasefile} ./release/* release.yaml
mkdir -p ./release/nervui
cp -r ./release/nerv/* ./release/nervui
if [ -f ${releasefile} ];then
echo "编译成功!"
mv ${releasefile} ./release
else
echo "编译失败!!!"
exit 1
fi
else
echo "编译失败!!!"
exit 1
fi

18
nervui-smart-community-op/index.html

@ -1,18 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>smart-community-op</title>
<script type="text/javascript">
window._AMapSecurityConfig = {
securityJsCode: '09e43004c09d39c0e61f8fd65d5e6a5a',
};
</script>
</head>
<body>
<div id="app"></div>
<script type="module" src="./src/main.ts"></script>
</body>
</html>

BIN
nervui-smart-community-op/public/asset/file/whiteListUser.xlsx

Binary file not shown.

BIN
nervui-smart-community-op/public/asset/file/whitelistCarImport.xlsx

Binary file not shown.

BIN
nervui-smart-community-op/public/asset/font/QuartzMS.TTF

Binary file not shown.

BIN
nervui-smart-community-op/public/asset/image/bc.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 602 B

BIN
nervui-smart-community-op/public/asset/image/header.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 109 KiB

BIN
nervui-smart-community-op/public/asset/image/login/adminIcon.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

BIN
nervui-smart-community-op/public/asset/image/login/background.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1008 KiB

BIN
nervui-smart-community-op/public/asset/image/side.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 217 KiB

BIN
nervui-smart-community-op/public/asset/image/table-no-data.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

BIN
nervui-smart-community-op/public/favicon.ico

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

12
nervui-smart-community-op/release.yaml

@ -1,12 +0,0 @@
# 上传release目录信息到nerv-file仓库
release:
- {src: release, dest: /upload/pkg, include: [".*(.tgz)$"]}
- {src: release/resources/templates, dest: /upload/templates}
register:
name: nervui-smart-community-op
version: 1.0.14
components:
- type: nervui-smart-community-op
resources:
- {type: template, relativePath: /nervui-smart-community-op/deploy.json}

35
nervui-smart-community-op/resources/scripts/nervui/smart-community-op/create.sh

@ -1,35 +0,0 @@
echo "=====================================================create====================================================="
#!/usr/bin/env bash
function create() {
if [ -d "$nervui_app_home" ];then
echo "$nervui_app_home exists!"
else
echo "start mkdir $nervui_app_home"
mkdir -p "$nervui_app_home"
fi
pkg_file_name=${pkg_url##*/}
pkg_file_path="$nervui_app_home$pkg_file_name"
echo "start download $pkg_url"
curl -L -o $pkg_file_path $pkg_url
echo "start install $pkg_file_path"
tar -xf $pkg_file_path -C $nervui_app_home
}
if [ "$pkg_url" == "" ]; then
echo {\"error\":\"pkg_url is empty\"}
exit 1
elif [ "$nervui_app_home" == "" ]; then
echo {\"error\":\"nervui_app_home is empty\"}
exit 1
else
create
fi

1
nervui-smart-community-op/resources/scripts/nervui/smart-community-op/delete.sh

@ -1 +0,0 @@
echo "=====================================================delete====================================================="

1
nervui-smart-community-op/resources/scripts/nervui/smart-community-op/setup.sh

@ -1 +0,0 @@
echo "=====================================================setup====================================================="

1
nervui-smart-community-op/resources/scripts/nervui/smart-community-op/start.sh

@ -1 +0,0 @@
echo "=====================================================start====================================================="

1
nervui-smart-community-op/resources/scripts/nervui/smart-community-op/stop.sh

@ -1 +0,0 @@
echo "=====================================================stop====================================================="

30
nervui-smart-community-op/resources/scripts/nervui/smart-community-op/type.json

@ -1,30 +0,0 @@
{
"name": "/nervui/nervui-smart-community-op",
"operations": [
{
"name": "Create",
"type": "shell",
"implementor": "create.sh"
},
{
"name": "Delete",
"type": "shell",
"implementor": "delete.sh"
},
{
"name": "Setup",
"type": "shell",
"implementor": "setup.sh"
},
{
"name": "Start",
"type": "shell",
"implementor": "start.sh"
},
{
"name": "Stop",
"type": "shell",
"implementor": "stop.sh"
}
]
}

64
nervui-smart-community-op/resources/templates/deploy.json

@ -1,64 +0,0 @@
{
"name": "/nervui/nervui-smart-community-op",
"version": 1,
"inputs": [
{
"name": "server_ip",
"type": "string",
"required": true,
"description": "应用安装IP地址",
"inputType": "ipSelectType"
},
{
"name": "version",
"type": "string",
"required": true,
"description": "软件版本",
"inputType": "versionSelectType"
},
{
"name": "install_dir",
"type": "string",
"required": true,
"defaultValue": "/data",
"inputType": "textInputType",
"description": "安装目录"
}
],
"nodes": [
{
"name": "nervui-smart-community-op",
"type": "/nerv/nerv-orchestrator/cluster/Nervui",
"parameters": [
{
"name": "file_repository",
"value": "${nerv_file_repository}"
},
{
"name": "install_dir",
"value": "${install_dir}"
},
{
"name": "pkg_url",
"value": "/api/pkg/nerv/nervui-smart-community-op/${version}/nervui-smart-community-op-${version}.tgz"
}
],
"dependencies": [
{
"type": "contained",
"target": "host"
}
]
},
{
"name": "host",
"type": "/nerv/nerv-orchestrator/compute/Host",
"parameters": [
{
"name": "address",
"value": "${server_ip}"
}
]
}
]
}

336
nervui-smart-community-op/src/App.vue

@ -1,336 +0,0 @@
<!-- @format -->
<template>
<a-config-provider :locale="locale">
<router-view />
</a-config-provider>
</template>
<script lang="ts">
import { defineComponent, watch, ref } from 'vue';
import zhCN from 'ant-design-vue/es/locale/zh_CN';
import { useRouter } from 'vue-router';
import Cookies from 'js-cookie';
import { message } from 'ant-design-vue';
export default defineComponent({
name: 'App',
setup() {
const router = useRouter();
router.beforeEach((to, from) => {
if (Cookies.get('nervsid') === undefined && to.fullPath !== '/login') {
if (from.name !== undefined) {
message.warn('登陆信息已过期,请重新登录!', 1);
}
router.push('/login');
}
});
const cachedViews = ['Status'];
// watch(
// () => router.currentRoute.value,
// (e) => {
// // if (Cookies.get('nervsid') === undefined && e.fullPath !== '/login') {
// // message.warn('!', 1);
// // router.push('/login');
// // }
// // } else {
// // if (Cookies.get('nervsid') !== undefined && e === '/login') {
// // let url = window.sessionStorage.getItem('url');
// // url === null ? window.sessionStorage.setItem('url', '/doorway/visitor/audit') : '';
// // router.push(url === null ? '/doorway' : url);
// // }
// // }
// }
// );
return {
cachedViews,
locale: zhCN,
};
},
});
</script>
<style lang="less" scoped>
#app {
width: 100%;
height: 100%;
}
:deep(.nsHeader_action) {
.action {
cursor: pointer;
&:hover {
background-color: @primary-color;
}
}
}
/***顶部菜单和侧边菜单样式修改 */
:deep(.ns-left-menu) {
position: fixed;
top: 0;
left: 0;
z-index: 99;
height: calc(100% - 40px);
background-image: url(/asset/image/side.png);
background-size: cover;
padding-top: 48px;
.ant-layout-sider-children {
background-color: transparent;
.ant-menu-root {
background-color: transparent;
}
.ant-menu {
color: rgba(255, 255, 255, 0.9);
}
.ant-menu-item a {
color: rgba(255, 255, 255, 0.9);
}
.ant-menu-submenu-expand-icon,
.ant-menu-submenu-arrow {
color: rgba(255, 255, 255, 0.9);
}
.ant-menu-sub.ant-menu-inline {
background-color: #001027;
}
}
}
:deep(.ns-header-menu) {
background-size: 100% 100%;
.ant-menu-root {
background-color: transparent;
}
.ant-menu.ant-menu-dark .ant-menu-item:hover {
background: @primary-color !important;
}
.ant-menu.ant-menu-dark .ant-menu-item-selected {
background: @primary-color !important;
}
}
:deep(.ns-left-menu-trigger) {
background: rgba(0, 0, 0, 0.1) !important;
}
:deep(.ant-menu-inline .ant-menu-item-selected) {
&::after {
position: absolute;
border: unset !important;
content: '';
}
&::before {
background: transparent;
}
}
/********* 菜单选中符号修改 */
:deep(.ant-menu-sub .ant-menu-item-selected::after) {
position: absolute;
width: 2px;
height: 14px;
background: #fff;
border: unset;
top: 14px;
left: 20px;
right: 0;
bottom: 0;
content: '';
}
:deep(.ant-menu-submenu .ant-menu-submenu .ant-menu-sub .ant-menu-item-selected::after) {
position: absolute;
width: 2px;
height: 14px;
background: #fff;
border: unset;
top: 14px;
left: 40px;
right: 0;
bottom: 0;
content: '';
}
/********* 一级菜单选中效果 */
:deep(.firstMenuItem-selected) {
background: @primary-color!important;
border-radius: 4px;
}
:deep(.ns-left-menu .ant-layout-sider-children .ant-menu-submenu-arrow) {
color: rgba(255, 255, 255, 0.5);
}
:deep(.ant-layout-sider-children) {
overflow-x: hidden;
}
:deep(.ns-left-menu .firstMenuItem-selected .ant-menu-title-content) {
background: unset !important;
}
:deep(.ns-left-menu .ant-menu-item-selected .ant-menu-title-content) {
color: #fff !important;
background: @primary-color;
border-radius: 2px;
height: 40px;
line-height: 40px;
a {
color: #ffffff !important;
}
}
:deep(.ant-menu-light.ant-menu-horizontal > .ant-menu-item:hover) {
background: @primary-color;
}
:deep(.ant-menu-inline .ant-menu-submenu-title) {
color: rgba(255, 255, 255, 0.9) !important;
}
:deep(.ns-left-menu .ant-layout-sider-children .ant-menu-sub.ant-menu-inline) {
position: relative;
&::before {
display: flex;
width: 2px;
height: calc(100% - 40px);
position: absolute;
top: 20px;
left: 20px;
content: '';
background-color: rgba(255, 255, 255, 0.2);
}
}
:deep(.link-btn) {
color: @primary-color !important;
}
:deep(.ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected) {
color: @primary-color !important;
}
:deep(.ant-table-footer .ns-icon) {
color: @primary-color !important;
}
//*************************tab list */
:deep(.tabListTable) {
.ns-table-title {
text-align: left;
height: 46px;
line-height: 46px;
font-size: 18px;
font-weight: bold;
user-select: text;
padding-left: 16px;
background: #fff;
width: calc(100% + 32px);
margin-left: -16px;
}
.tabs-list {
overflow: visible !important;
}
.ant-tabs-nav {
width: calc(100% + 32px);
margin-left: -16px !important;
background: #fff;
border-top: 1px solid #e5ebf0;
}
.ant-tabs-nav-list {
margin-left: 0px;
}
.ant-tabs-nav-wrap {
padding: 0 16px;
height: 46px;
}
.customContent {
border-top: 16px solid #e5ebf0;
}
}
//********************* */
:deep(.nsDetailView) {
min-height: 100%;
height: 100%;
.ns-detail-content {
padding: 0px 24px;
border-top: 16px solid #e5ebf0;
}
.ant-descriptions-item-label {
color: rgba(0, 0, 0, 0.5);
font-family: PingFang SC;
font-size: 14px;
}
.ant-descriptions-item-content {
color: rgba(0, 0, 0, 0.95);
font-family: PingFang SC;
font-size: 14px;
}
.ns-table .ns-table-main {
border: unset;
}
.ant-descriptions-title {
&::after {
content: '';
width: 75px;
height: 7px;
display: block;
background: linear-gradient(90deg, @primary-color 0%, #fff 82.67%);
margin-left: 2px;
margin-top: -2px;
}
}
.ant-descriptions-row > th,
.ant-descriptions-row > td {
padding-bottom: 8px;
}
.ns-page-header {
margin-bottom: 0 !important;
padding-top: 7px !important;
padding-bottom: 7px !important;
width: calc(100% + 32px);
margin-left: -16px;
.title {
cursor: pointer;
font-size: 18px !important;
display: flex;
align-items: center;
}
}
.ant-descriptions-header {
margin: 16px 0 16px 0 !important;
.ant-descriptions-title {
line-height: 16px;
font-size: 16px;
}
}
}
</style>
<style lang="less">
//
.listTableModal .ant-modal-title {
font-weight: 600;
}
.listTableModal .ant-modal-body {
padding: 16px !important;
.ant-tabs-nav-wrap {
padding: 0px;
}
.ns-list-table {
border-left: 16px solid #e5ebf0;
border-right: 16px solid #e5ebf0;
border-bottom: 16px solid #e5ebf0;
}
}
:deep(.ant-menu-submenu-title) {
color: #ffffff !important;
}
//************************
.ant-menu-submenu-placement-bottomLeft {
.ant-menu-submenu {
background: rgb(3 24 53) !important;
}
.ant-menu-sub {
background: rgb(3 24 53) !important;
}
.ant-menu-title-content {
color: #fff !important;
.ns-icon {
margin-right: 7px;
transform: translateY(2px);
}
}
.ant-menu-submenu-arrow {
color: #fff !important;
}
}
</style>

49
nervui-smart-community-op/src/api/index.ts

@ -1,49 +0,0 @@
/***
* module:Array<resource>
*/
export const apiModule = {
community: [
'User',
'CurrentUser',
'Organizational',
'Device',
'Region',
'Owner',
'AllList',
'VisitorRecord',
'Room',
'Device',
'CommunityVisitor',
'AccessControlGroup',
'AccessControlLeft',
'AccessControlRight',
'AccessControlRightIdentity',
'Visitor',
'DeviceListByDeviceCategory',
'Perimeter',
'AccessControlRightVisitorIdentity',
'BedChoose',
'Gateway',
'FileUpload',
'User',
'CurrentUser',
'Organizational',
'Device',
'Region',
'Owner',
'AllList',
'VisitorRecord',
'Room',
'Device',
'CommunityVisitor',
'AccessControlGroup',
'AccessControlLeft',
'AccessControlRight',
'AccessControlRightIdentity',
'Visitor',
'DeviceListByDeviceCategory',
'BedChoose',
'Perimeter',
'OrganizationConfig',
],
};

15
nervui-smart-community-op/src/api/user.ts

@ -1,15 +0,0 @@
import { http } from '/nerv-lib/util/http';
enum Api {
USER_LOGIN = '/api/community/objs/Login', //用户登录
USER_INFO = 'api/community/community/objs/CurrentUser', //获取用户信息
}
export const userLogin = (data: RoomListModel) => http.post(Api.USER_LOGIN, data);
export const userInfo = () => http.get(Api.USER_INFO);
/**
* @description
* @property `[fatherRegionUuid]`
*/
interface RoomListModel {
data: string;
}

10
nervui-smart-community-op/src/api/workFlow.ts

@ -1,10 +0,0 @@
import { http } from '/nerv-lib/util/http';
/**
*
* @param {*} data
* @returns
*/
export function getWorkFlowData(data) {
return http.get('/api/workflow/objs/admin/processTemplate/detail', data);
}

179
nervui-smart-community-op/src/components/addNode.vue

@ -1,179 +0,0 @@
<template>
<div class="add-node-btn-box">
<div class="add-node-btn">
<Popover placement="right">
<template #content>
<div class="add-node-popover-body">
<a class="add-node-popover-item approver" @click="addType(2)">
<p>新增审批</p>
</a>
<!-- <a class="add-node-popover-item condition" @click="addType(3)">
<p>新增条件分支</p>
</a> -->
</div>
</template>
<button class="btn" type="button">
<span class="iconfont"></span>
</button>
</Popover>
</div>
</div>
</template>
<script setup>
import { ref } from 'vue';
import { Popover } from 'ant-design-vue';
let props = defineProps({
childNodeP: {
type: Object,
default: () => ({}),
},
});
let emits = defineEmits(['update:childNodeP']);
let visible = ref(false);
const addType = (type) => {
console.log(props.childNodeP);
visible.value = false;
if (type != 3) {
var data;
if (type == 2) {
data = {
name: '审批',
nodeType: 2,
next: JSON.stringify(props.childNodeP) == '{}' ? null : props.childNodeP,
sendMessage: 1,
assignee: {},
exclusive: [],
};
}
emits('update:childNodeP', data);
} else {
emits('update:childNodeP', {
name: '路由',
nodeType: 3,
exclusive: [
{
name: '条件1',
jumpId: '',
conditionType: 2,
priorityLevel: 1,
conditionGroupList: [],
conditionExpression: '',
exclusiveBranchNode: JSON.stringify(props.childNodeP) == '{}' ? null : props.childNodeP,
},
{
name: '默认条件',
jumpId: '',
conditionType: 1,
priorityLevel: 1,
conditionGroupList: null,
conditionExpression: '',
exclusiveBranchNode: null,
},
],
});
}
};
</script>
<style scoped lang="less">
.add-node-btn-box {
width: 240px;
display: -webkit-inline-box;
display: -ms-inline-flexbox;
display: inline-flex;
-ms-flex-negative: 0;
flex-shrink: 0;
-webkit-box-flex: 1;
-ms-flex-positive: 1;
position: relative;
&:before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: -1;
margin: auto;
width: 2px;
height: 100%;
background-color: #cacaca;
}
.add-node-btn {
user-select: none;
width: 240px;
padding: 20px 0 32px;
display: flex;
-webkit-box-pack: center;
justify-content: center;
flex-shrink: 0;
-webkit-box-flex: 1;
flex-grow: 1;
.btn {
outline: none;
box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.1);
width: 30px;
height: 30px;
background: #3296fa;
border-radius: 50%;
position: relative;
border: none;
line-height: 30px;
-webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
.iconfont {
color: #fff;
font-size: 16px;
}
// &:hover {
// transform: scale(1.3);
// box-shadow: 0 13px 27px 0 rgba(0, 0, 0, 0.1);
// }
&:active {
transform: none;
background: #1e83e9;
box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.1);
}
}
}
}
</style>
<style lang="less">
.add-node-popover-body {
.add-node-popover-item {
display: block;
margin: 10px 0;
cursor: pointer;
text-align: center;
color: #191f25 !important;
padding: 5px 12px;
border: 1px solid #ccc;
border-radius: 4px;
&:hover {
p {
color: #1bb6b6;
}
.iconfont {
color: #fff;
}
}
&:active {
.item-wrapper {
box-shadow: none;
background: #eaeaea;
}
.iconfont {
color: inherit;
}
}
}
}
</style>

144
nervui-smart-community-op/src/components/drawer/approverDrawer.vue

@ -1,144 +0,0 @@
<template>
<Modal
title="审批人设置"
:destroyOnClose="true"
v-model:visible="visible"
class="set_promoter"
width="900px">
<ns-form :model="approverConfig" :schemas="formSchema" ref="approverForm" />
{{ approverForm?.validatorResult }}
<template #footer>
<a-button type="primary" @click="saveApprover" :disabled="buttonDisabled"> </a-button>
<a-button @click="closeDrawer"> </a-button>
</template>
</Modal>
</template>
<script setup>
import { ref, watch, computed, provide, nextTick } from 'vue';
import $func from '/@/utils/index';
import { setTypes, selectModes, selectRanges } from '/@/utils/const';
import { useStore } from '/@/stores/index';
import { Modal } from 'ant-design-vue';
import assigneeForm from './drawerComponents/assignee/assigneeForm.vue';
let props = defineProps({
directorMaxLevel: {
type: Number,
default: 0,
},
});
provide('components', () => {
return { assigneeForm };
});
let approverForm = ref();
let approverConfig = ref({});
let store = useStore();
let { setApproverConfig, setApprover } = store;
let approverConfig1 = computed(() => store.approverConfig1);
let approverDrawer = computed(() => store.approverDrawer);
let visible = computed({
get() {
return approverDrawer.value;
},
set() {
closeDrawer();
},
});
let validateResult = computed(() => {
return approverForm.value?.validateResult;
});
let disabled = ref(false);
let buttonDisabled = ref(true);
const formSchema = ref([
{
field: 'name',
label: '节点名称',
component: 'NsInput',
componentProps: {
placeholder: '请输入',
},
rules: [
{
required: true,
validator: async (rule, value) => {
if (!value) {
return Promise.reject('节点名称不能为空');
}
const unicRegexp = new RegExp('[\u4e00-\u9fa5]', 'g');
let unicValue = value;
unicValue = value.replace(unicRegexp, 'aa');
if (!/^[a-zA-Z\d\u4e00-\u9fa5]{2,20}$/.test(unicValue)) {
return Promise.reject('支持数字,大小写字母,中文,2-20字符,中文占两位');
}
},
},
],
},
{
field: '',
label: '',
component: 'NsInputText',
componentProps: {
placeholder: '',
},
},
{
field: '',
label: '',
component: 'NsInputText',
componentProps: {
placeholder: '',
},
},
{
field: 'assignee',
label: '',
component: 'assigneeForm',
class: 'ns-form-item-full',
componentProps: {
placeholder: '',
onValidator: (value) => {
disabled.value = value;
},
},
},
]);
// watch(approverConfig1, (val) => {
// approverConfig.value = val.value;
// });
// formform
watch([approverForm, approverConfig1], (val) => {
if (val[0]) approverConfig.value = val[1].value;
});
watch(
() => [validateResult.value, disabled.value],
(val) => {
if (!val[0]) {
buttonDisabled.value = true;
}
if (val[0]) {
if (!val[1]) buttonDisabled.value = true;
if (val[1]) buttonDisabled.value = false;
}
},
{ deep: true },
);
const saveApprover = () => {
console.log(approverConfig.value);
approverConfig.value.error = !$func.setApproverStr(approverConfig.value);
setApproverConfig({
value: approverConfig.value,
flag: true,
id: approverConfig1.value.id,
});
closeDrawer();
};
const closeDrawer = () => {
setApprover(false);
};
</script>
<style lang="less" scoped>
:deep(.ns-form.ns-vertical-form) {
width: 100% !important;
}
</style>

167
nervui-smart-community-op/src/components/drawer/conditionDrawer.vue

@ -1,167 +0,0 @@
<template>
<Modal
:destroyOnClose="true"
title="条件设置"
v-model:visible="visible"
width="900px"
class="condition_copyer">
<ns-form :model="conditionConfig" :schemas="formSchema" ref="nsFormRef" />
<template #footer>
<a-button type="primary" @click="saveCondition" :disabled="buttonDisabled"> </a-button>
<a-button @click="closeDrawer"> </a-button>
</template>
</Modal>
</template>
<script setup>
import { ref, watch, computed, provide, nextTick } from 'vue';
import $func from '/@/utils/index';
import { useStore } from '/@/stores/index';
import { SelectType } from '/@/utils/const';
import { Modal } from 'ant-design-vue';
import gruopList from './drawerComponents/groupList/groupList.vue';
provide('components', () => {
return { gruopList };
});
let conditionsConfig = ref({
exclusive: [],
});
let conditionConfig = ref({});
let PriorityLevel = ref('');
let nsFormRef = ref();
let store = useStore();
let { setCondition, setConditionsConfig } = store;
let conditionsConfig1 = computed(() => store.conditionsConfig1);
let conditionDrawer = computed(() => store.conditionDrawer);
let visible = computed({
get() {
return conditionDrawer.value;
},
set() {
closeDrawer();
},
});
let options = ref([]);
watch(conditionsConfig1, (val) => {
conditionsConfig.value = val.value;
PriorityLevel.value = val.priorityLevel;
options.value = [];
for (let i = 1; i < conditionsConfig.value.exclusive.length; i++) {
options.value.push({
label: `优先级${i}`,
value: i,
});
}
nextTick(() => {
conditionConfig.value = val.priorityLevel
? conditionsConfig.value.exclusive[val.priorityLevel - 1]
: { conditionGroupList: [] };
conditionConfig.value.priorityLevel = val.priorityLevel;
});
});
let disabled = ref(false);
let buttonDisabled = ref(true);
let validateResult = computed(() => {
return nsFormRef.value?.validateResult;
});
watch(
() => [validateResult.value, disabled.value],
(val) => {
if (!val[0]) {
buttonDisabled.value = true;
}
if (val[0]) {
if (!val[1]) buttonDisabled.value = true;
if (val[1]) buttonDisabled.value = false;
}
},
{ deep: true },
);
const formSchema = ref([
{
field: 'name',
label: '条件名称',
component: 'NsInput',
componentProps: {
placeholder: '请输入',
},
rules: [
{
required: true,
validator: async (rule, value) => {
if (!value) {
return Promise.reject('条件名称不能为空');
}
const unicRegexp = new RegExp('[\u4e00-\u9fa5]', 'g');
let unicValue = value;
unicValue = value.replace(unicRegexp, 'aa');
if (!/^[a-zA-Z\d\u4e00-\u9fa5]{2,20}$/.test(unicValue)) {
return Promise.reject('支持数字,大小写字母,中文,2-20字符,中文占两位');
}
},
trigger: 'change',
},
],
},
{
field: 'priorityLevel',
label: '优先级',
component: 'NsSelect',
componentProps: {
placeholder: '请选择',
options: options,
},
},
{
field: '',
label: '',
component: 'NsInputText',
},
{
field: 'conditionGroupList',
label: '',
component: 'gruopList',
class: 'ns-form-item-full',
componentProps: {
onValidator: (val) => {
disabled.value = val;
},
},
},
]);
const saveCondition = () => {
closeDrawer();
//
var a = conditionsConfig.value.exclusive.splice(PriorityLevel.value - 1, 1); //
conditionsConfig.value.exclusive.splice(conditionConfig.value.priorityLevel - 1, 0, a[0]); //
conditionsConfig.value.exclusive.map((item, index) => {
item.priorityLevel = index + 1;
});
for (var i = 0; i < conditionsConfig.value.exclusive.length; i++) {
conditionsConfig.value.exclusive[i].error =
$func.conditionStr(conditionsConfig.value, i) == '请设置条件' &&
i != conditionsConfig.value.exclusive.length - 1;
}
//
setConditionsConfig({
value: conditionsConfig.value,
flag: true,
id: conditionsConfig1.value.id,
});
};
const closeDrawer = (val) => {
setCondition(false);
};
</script>
<style lang="less" scoped>
:deep(.ns-form::after) {
display: none !important;
}
</style>

338
nervui-smart-community-op/src/components/drawer/drawerComponents/assignee/assigneeForm.vue

@ -1,338 +0,0 @@
<template>
<div class="group">
<ns-form :model="data" :schemas="formSchema" ref="nsFormRef" />
</div>
</template>
<script>
import { ref, defineComponent, watch, provide, computed, nextTick } from 'vue';
import selectPerson from '../formComponents/selectPerson.vue';
import overDot from '../formComponents/overDot.vue';
export default defineComponent({
components: {},
props: {
value: {
type: Object,
default: () => [],
},
},
emits: ['change', 'validator'],
setup(props, { emit }) {
provide('components', () => {
return { selectPerson, overDot };
});
let data = ref({
assigneeIsEmpty: '',
assigneeList: null,
assigneeListUser: [],
assigneeType: '',
completionConditionExpression: '',
lastLeaderLevel: '',
multiMode: '',
roleList: [],
dotDesc: '',
});
if (props.value) {
nextTick(() => {
data.value = props.value;
data.value.lastLeaderLevel = props.value.lastLeaderLevel;
});
}
let nsFormRef = ref();
const validateResult = computed(() => {
return nsFormRef.value?.validateResult;
});
const formSchema = ref([
{
field: 'userType',
label: '设置审批人',
component: 'NsRadioGroup',
class: 'ns-form-item-full',
componentProps: {
placeholder: '请输入',
styleType: { flex: true },
radioType: 'radio',
options: [
{
label: '指定员工',
value: 1,
disabled: true,
},
{
label: '所属部门负责人',
value: 2,
},
{
label: '主部门负责人',
value: 3,
},
{
label: '发起人自己',
value: 4,
},
{
label: '直属上级',
value: 5,
},
{
label: '连续多级主管',
value: 6,
},
{
label: '角色(角色中的部门负责人)',
value: 8,
disabled: true,
},
],
onChange: (val) => {
if (val !== 6) data.value.assigneeType = val.target.value;
},
},
rules: [
{
required: true,
message: '设置审批人',
},
],
},
{
field: 'assigneeListUser',
label: '指定员工',
component: 'selectPerson',
class: 'ns-form-item-full',
ifShow: (formModel) => {
return formModel.userType == '1';
},
componentProps: {
onChange: (value) => {
if (!value || !value.length) {
data.value.assigneeList = null;
} else {
data.value.assigneeList = value.map((item) => {
return item.personUuid;
});
}
data.value.assigneeListUser = value;
},
},
rules: [
{
required: true,
message: '指定员工',
},
],
},
{
field: 'createUserRole',
label: '选择角色',
component: 'NsSelectApi',
ifShow: (formModel) => {
return formModel.userType == 8;
},
componentProps: {
placeholder: '请选择角色',
api: '/api/community/objs/admin/Role',
params: {
pageSize: 10,
},
resultField: 'data.data',
labelField: 'roleName',
valueField: 'roleUuid',
filterFiled: 'roleName',
scrollLoad: true,
labelInValue: true,
mode: 'multiple',
showSearch: true,
onChange: (val, opt) => {
data.value.roleList = val.map((item) => {
return item.value;
});
},
immediate: true,
},
rules: [
{
required: true,
message: '选择角色',
},
],
},
{
field: 'multiMode',
label: '多人审批时采用的审批方式',
component: 'NsRadioGroup',
class: 'ns-form-item-full',
ifShow: (formModel) => {
if (formModel.userType == 1 && formModel.assigneeList?.length > 1) {
return true;
}
if ([2, 3, 6, 8].includes(formModel.userType)) {
return true;
}
},
componentProps: {
placeholder: '请输入',
radioType: 'radio',
options: [
{
label: '会签(需要所有审批人都同意才可通过)',
value: 2,
},
{
label: '或签(其中一名审批人同意或拒绝即可)',
value: 3,
},
{
label: '依次审批(按顺序同意或拒绝)',
value: 1,
},
],
},
rules: [
{
required: true,
message: '多人审批时采用的审批方式',
},
],
},
{
field: 'overDot',
label: '审批终点',
component: 'overDot',
class: 'ns-form-item-full',
ifShow: (formModel) => {
return formModel.userType == 6;
},
componentProps: {
onChange: (val) => {
if (val) {
data.value.assigneeType = val[0];
data.value.lastLeaderLevel = val[1];
}
},
},
rules: [
{
required: true,
message: '审批终点',
},
],
},
{
field: 'lastLeaderLevel',
label: '直属上级',
component: 'NsSelect',
ifShow: (formModel) => {
return formModel.userType == 5;
},
componentProps: {
placeholder: '请输入',
options: [
{
label: '直属上级',
value: 1,
},
{
label: '第2级直属上级',
value: 2,
},
{
label: '第3级直属上级',
value: 3,
},
{
label: '第4级直属上级',
value: 4,
},
{
label: '第5级直属上级',
value: 5,
},
{
label: '第6级直属上级',
value: 6,
},
{
label: '第7级直属上级',
value: 7,
},
{
label: '第8级直属上级',
value: 8,
},
{
label: '第9级直属上级',
value: 9,
},
{
label: '第10级直属上级',
value: 10,
},
],
},
rules: [
{
required: true,
message: '直属上级',
},
],
},
{
field: 'assigneeIsEmpty',
label: '审批人为空时',
component: 'NsRadioGroup',
class: 'ns-form-item-full',
ifShow: (formModel) => {
return formModel.userType && formModel.userType !== 4;
},
componentProps: {
placeholder: '请输入',
radioType: 'radio',
options: [
{
label: '自动通过',
value: 1,
},
{
label: '自动转交给管理员',
value: 2,
},
],
},
rules: [
{
required: true,
message: '审批人为空时',
},
],
},
]);
watch(
() => data.value.assigneeType,
(val) => {
emit('change', data.value);
},
{
deep: true,
},
);
watch(
() => validateResult.value,
(val) => {
emit('validator', val);
},
{
deep: true,
},
);
return {
data,
formSchema,
nsFormRef,
validateResult,
};
},
});
</script>
<style lang="less" scoped></style>

177
nervui-smart-community-op/src/components/drawer/drawerComponents/formComponents/overDot.vue

@ -1,177 +0,0 @@
<template>
<a-form-item-rest>
<div class="overDot">
<a-radio-group v-model:value="radioData" @change="handleChange">
<a-radio :style="radioStyle" :value="6"> 不超过发起人向上的 </a-radio>
<a-radio :style="radioStyle" :value="7"> 组织架构中的 </a-radio>
</a-radio-group>
<div class="options">
<ns-select
style="width: 200px; display: block; margin-bottom: 10px"
:disabled="radioData !== 6"
:options="opt1"
v-model:value="levelData[6]" />
<ns-select
style="width: 200px; display: block"
:disabled="radioData !== 7"
:options="opt2"
v-model:value="levelData[7]" />
</div>
</div>
</a-form-item-rest>
</template>
<script>
import { ref, defineComponent, watch, reactive, nextTick } from 'vue';
export default defineComponent({
components: {},
props: {
value: {
type: Array,
},
},
emits: ['change'],
setup(props, { emit }) {
let data = ref([]);
let radioData = ref();
let levelData = ref([]);
if (props.value) {
nextTick(() => {
data.value = props.value;
radioData.value = props.value[0];
levelData.value[props.value[0]] = props.value[1];
emit('change', data.value);
});
}
let options = [
{
label: '不超过发起人向上的',
value: 6,
},
{
label: '组织架构中的',
value: 7,
},
];
let opt1 = [
{
label: '1级主部门负责人',
value: 1,
},
{
label: '2级主部门负责人',
value: 2,
},
{
label: '3级主部门负责人',
value: 3,
},
{
label: '4级主部门负责人',
value: 4,
},
{
label: '5级主部门负责人',
value: 5,
},
{
label: '6级主部门负责人',
value: 6,
},
{
label: '7级主部门负责人',
value: 7,
},
{
label: '8级主部门负责人',
value: 8,
},
{
label: '9级主部门负责人',
value: 9,
},
{
label: '10级主部门负责人',
value: 10,
},
];
let opt2 = [
{
label: '最高级主部门负责人',
value: 1,
},
{
label: '第2级主部门负责人',
value: 2,
},
{
label: '第3级主部门负责人',
value: 3,
},
{
label: '第4级主部门负责人',
value: 4,
},
{
label: '第5级主部门负责人',
value: 5,
},
{
label: '第6级主部门负责人',
value: 6,
},
{
label: '第7级主部门负责人',
value: 7,
},
{
label: '第8级主部门负责人',
value: 8,
},
{
label: '第9级主部门负责人',
value: 9,
},
{
label: '10级主部门负责人',
value: 10,
},
];
const radioStyle = reactive({
display: 'flex',
lineHeight: '40px',
});
const handleChange = () => {
levelData.value = [];
};
watch(
() => levelData.value,
(value) => {
data.value = [radioData.value, value[radioData.value]];
emit('change', data.value);
},
{
deep: true,
},
);
return {
data,
options,
radioStyle,
opt1,
opt2,
radioData,
levelData,
handleChange,
};
},
});
</script>
<style lang="less" scoped>
.overDot {
display: flex;
align-items: center;
.options {
line-height: 40px;
}
}
</style>

301
nervui-smart-community-op/src/components/drawer/drawerComponents/formComponents/selectPerson.vue

@ -1,301 +0,0 @@
<!-- @format -->
<template>
<div>
<a @click="selectPerson(index)" class="option" v-if="!disabled">选择员工</a>
<div class="select-area" v-if="dataSource.length">
<div class="select-item" v-for="(item, index) in dataSource" :key="item.personUuid">
{{ item.personName }}
<a @click="remove(index)" v-if="!disabled"><delete-outlined /></a>
</div>
</div>
<ns-modal
v-model:visible="visible"
title="选择员工"
width="1000px"
@ok="handleOk"
@cancel="cancel"
:destroyOnClose="true">
<ns-view-list-table
v-bind="tableConfig"
style="width: 100%"
:row-selection="{
selectedRowKeys: selectedRowKeys,
onChange: onSelectChange,
preserveSelectedRowKeys: true,
getCheckboxProps: getCheckboxProps,
}" />
</ns-modal>
</div>
</template>
<script lang="ts">
import { defineComponent, ref, reactive, watch, toRefs } from 'vue';
import moment from 'moment';
import { DeleteOutlined } from '@ant-design/icons-vue';
import { cloneDeep } from 'lodash-es';
export default defineComponent({
name: 'NsEditTableOrder',
components: {
'delete-outlined': DeleteOutlined,
},
props: {
disabled: Boolean,
value: {
type: Array,
default: () => [],
},
},
emits: ['change'],
setup(props, context) {
const dataSource = ref();
dataSource.value = [];
let visible = ref(false);
let selectData = ref([]);
let arr = ref([]);
const state = reactive<{
selectedRowKeys: [];
selectedRows: [];
}>({
selectedRowKeys: [],
selectedRows: [],
});
const onSelectChange = (selectedRowKeys: [], selectedRows: []) => {
state.selectedRowKeys = selectedRowKeys;
state.selectedRows = selectedRows;
};
const handleOk = () => {
arr.value = [];
state.selectedRowKeys.forEach((item) => {
let info = state.selectedRows.filter((v) => v?.personUuid === item)[0];
if (!info) {
let dInfo = selectData.value.filter((v) => v?.personUuid === item)[0];
!dInfo ? '' : arr.value.push(dInfo);
} else {
arr.value.push(info);
}
});
dataSource.value = cloneDeep(arr.value);
selectData.value = cloneDeep(arr.value);
visible.value = false;
};
const selectPerson = (index) => {
visible.value = true;
};
const cancel = () => {
visible.value = false;
state.selectedRows = [];
state.selectedRows = cloneDeep(arr.value);
state.selectedRowKeys = cloneDeep(
arr.value.map((item) => {
return item.personUuid;
}),
);
};
const tableConfig = {
api: '/api/person/objs/admin/Person',
title: '',
params: {
page: 0,
pageSize: 10,
personStatus: 1,
},
rowSelection: null,
sticky: false,
// scroll: { x: 1150 },
columns: [
{
title: '姓名',
dataIndex: 'personName',
textNumber: 5,
textEllipsis: true,
},
{
title: '性别',
dataIndex: 'sex',
textNumber: 5,
customRender: (value) => {
switch (value.text) {
case 0:
return '女';
case 1:
return '男';
default:
return '-';
}
},
},
{
title: '员工编号',
dataIndex: 'personNum',
// textNumber: 5,
},
{
title: '手机号码',
dataIndex: 'telNum',
// textNumber: 5,
},
{
title: '所属部门',
dataIndex: 'departmentNameList',
customRender: ({ value }) => {
if (value) return value.join('/');
else return '-';
},
textNumber: 8,
textEllipsis: true,
},
{
title: '账号状态',
dataIndex: 'accountState',
customRender: (value) => {
switch (value.text) {
case 1:
return '启用';
case 2:
return '禁用';
default:
return '-';
}
},
},
{
title: '在职状态',
dataIndex: 'personStatus',
customRender: (value) => {
switch (value.text) {
case 1:
return '在职';
case 2:
return '离职';
default:
return '-';
}
},
},
],
formConfig: {
schemas: [
{
field: 'departmentUuid',
component: 'nsSelectApi',
label: '所属部门',
componentProps: {
placeholder: '请选择',
api: '/api/community/objs/admin/Department',
resultField: 'data.data',
labelField: 'departmentName',
valueField: 'departmentUuid',
autoSelectFirst: false,
immediate: true,
},
},
{
field: 'personName',
label: '员工姓名',
component: 'NsInput',
componentProps: {
placeholder: '请输入员工姓名',
},
},
{
field: 'personNum',
label: '员工编号',
component: 'NsInput',
componentProps: {
placeholder: '请输入员工编号',
},
},
],
},
rowKey: 'personUuid',
};
const remove = (index) => {
dataSource.value.splice(index, 1);
state.selectedRows.splice(index, 1);
state.selectedRowKeys.splice(index, 1);
// let arr = dataSource;
};
watch(
() => dataSource.value,
(val) => {
if (val !== null && val !== undefined) {
context.emit('change', val);
}
},
{ deep: true },
);
if (props.value) {
dataSource.value = cloneDeep(props.value);
selectData.value = cloneDeep(props.value);
state.selectedRows = cloneDeep(props.value);
state.selectedRowKeys = cloneDeep(
props.value.map((item) => {
return item.personUuid;
}),
);
}
const getCheckboxProps = (record) => {
if (state.selectedRowKeys.length > 10) {
state.selectedRowKeys.splice(10, state.selectedRowKeys.length - 1);
state.selectedRows.splice(10, state.selectedRowKeys.length - 1);
dataSource.value.splice(10, state.selectedRowKeys.length - 1);
selectData.value.splice(10, state.selectedRowKeys.length - 1);
}
if (state.selectedRowKeys.length >= 10) {
if (!state.selectedRowKeys.includes(record.personUuid)) {
return {
disabled: true,
};
}
} else {
return {
disabled: false,
};
}
};
return {
dataSource,
moment,
tableConfig,
visible,
getCheckboxProps,
onSelectChange,
handleOk,
cancel,
selectPerson,
remove,
...toRefs(state),
};
},
});
</script>
<style lang="less" scoped>
.select-area {
width: 100%;
border: 1px solid #ccc;
padding: 5px 10px;
max-height: 150px;
overflow-y: auto;
margin-top: 10px;
.select-item {
padding: 5px;
display: inline-block;
border: 1px solid #ccc;
margin: 5px;
}
}
</style>

69
nervui-smart-community-op/src/components/drawer/drawerComponents/groupList/departmentInUuid.vue

@ -1,69 +0,0 @@
<template>
<div class="faqiren">
<ns-form :model="data" :schemas="formSchema" />
</div>
</template>
<script lang="ts" setup>
import { nextTick, ref, watch } from 'vue';
const emits = defineEmits(['update:modelValue', 'change']);
const props = defineProps({
modelValue: {
type: Object,
},
});
let data = ref({
compareType: 'in',
numberAfterCompareType: false,
paramKey: 'departmentInUuid',
value: [],
valueType: 'number',
checkbox: 'departmentInUuid',
dotDesc: null,
});
emits('update:modelValue', data.value);
if (props.modelValue) {
if (props.modelValue.checkbox == 'departmentInUuid') {
data.value = props.modelValue;
data.value.departmentInUuid = props.modelValue.value;
emits('update:modelValue', data.value);
}
}
const formSchema = ref([
{
field: 'departmentInUuid',
label: '调入主部门',
component: 'NsSelectApi',
componentProps: {
placeholder: '请选择调入主部门',
api: '/api/community/objs/admin/Department',
resultField: 'data.data',
labelField: 'departmentName',
valueField: 'departmentUuid',
filterOption: (input, option) => {
return option.departmentName.indexOf(input) >= 0;
},
mode: 'multiple',
showSearch: true,
onChange: (v, o) => {
console.log(o);
if (o && o.length > 1) o.splice(0, 1);
if (v && v.length > 1) v.splice(0, 1);
let str = '';
str = '调入主部门为' + o[0]?.departmentName;
data.value.dotDesc = str;
data.value.value = v;
},
immediate: true,
},
},
]);
watch(
() => data.value,
(val) => {
emits('update:modelValue', val);
},
{ deep: true },
);
</script>
<style lang="less" scoped></style>

69
nervui-smart-community-op/src/components/drawer/drawerComponents/groupList/departmentMainUuid.vue

@ -1,69 +0,0 @@
<template>
<div class="faqiren">
<ns-form :model="data" :schemas="formSchema" />
</div>
</template>
<script lang="ts" setup>
import { nextTick, ref, watch } from 'vue';
const emits = defineEmits(['update:modelValue', 'change']);
const props = defineProps({
modelValue: {
type: Object,
},
});
let data = ref({
compareType: 'in',
numberAfterCompareType: false,
paramKey: 'departmentMainUuid',
value: [],
valueType: 'number',
checkbox: 'departmentMainUuid',
dotDesc: null,
});
emits('update:modelValue', data.value);
if (props.modelValue) {
if (props.modelValue.checkbox == 'departmentMainUuid') {
data.value = props.modelValue;
data.value.departmentMainUuid = props.modelValue.value;
emits('update:modelValue', data.value);
}
}
const formSchema = ref([
{
field: 'departmentMainUuid',
label: '主部门',
component: 'NsSelectApi',
componentProps: {
placeholder: '请选择主部门',
api: '/api/community/objs/admin/Department',
resultField: 'data.data',
labelField: 'departmentName',
valueField: 'departmentUuid',
filterOption: (input, option) => {
return option.departmentName.indexOf(input) >= 0;
},
mode: 'multiple',
showSearch: true,
onChange: (v, o) => {
console.log(o);
if (o && o.length > 1) o.splice(0, 1);
if (v && v.length > 1) v.splice(0, 1);
let str = '';
str = '主部门为' + o[0]?.departmentName;
data.value.dotDesc = str;
data.value.value = v;
},
immediate: true,
},
},
]);
watch(
() => data.value,
(val) => {
emits('update:modelValue', val);
},
{ deep: true },
);
</script>
<style lang="less" scoped></style>

186
nervui-smart-community-op/src/components/drawer/drawerComponents/groupList/faqiren.vue

@ -1,186 +0,0 @@
<template>
<div class="faqiren">
<ns-form :model="data" :schemas="formSchema" />
</div>
</template>
<script setup>
import { cloneDeep } from 'lodash-es';
import { ref, watch, provide, nextTick } from 'vue';
import selectPerson from '../formComponents/selectPerson.vue';
const emits = defineEmits(['update:modelValue']);
provide('components', () => {
return { selectPerson };
});
const props = defineProps({
modelValue: Object,
});
let data = ref({
compareType: 'in',
numberAfterCompareType: false,
paramKey: '',
value: [],
valueCp: [],
valueType: 'string',
checkbox: 'faqiren',
selectLabel: '',
dotDesc: '',
});
emits('update:modelValue', data.value);
if (props.modelValue) {
if (props.modelValue.checkbox == 'faqiren') {
data.value = props.modelValue;
data.value.createUser = props.modelValue.valueCp;
data.value.createUserRole = props.modelValue.createUserRole;
emits('update:modelValue', data.value);
}
}
const formSchema = ref([
{
field: 'paramKey',
label: '发起人',
component: 'NsSelect',
componentProps: {
placeholder: '请选择',
options: [
{
label: '指定员工',
value: 'createUser',
},
{
label: '指定部门',
value: 'createUserDepartment',
},
{
label: '指定角色',
value: 'createUserRole',
},
],
onChange: () => {
data.value.value = [];
data.value.valueCp = [];
},
},
},
{
field: 'createUser',
label: '选择员工',
component: 'selectPerson',
ifShow: (formModel) => {
return formModel.paramKey == 'createUser';
},
componentProps: {
onChange: (value) => {
let str = '';
data.value.value = value.map((item) => {
return item.personUuid;
});
data.value.valueCp = value;
if (value && value.length) {
str =
'指定员工为' +
value
.map((item) => {
return item.personName;
})
.join(',');
} else {
str = '';
}
data.value.dotDesc = str;
},
},
},
{
field: 'value',
label: '选择部门',
component: 'NsSelectApi',
ifShow: (formModel) => {
return formModel.paramKey == 'createUserDepartment';
},
componentProps: {
placeholder: '请选择部门',
api: '/api/community/objs/admin/Department',
resultField: 'data.data',
labelField: 'departmentName',
valueField: 'departmentUuid',
filterOption: (input, option) => {
return option.departmentName.indexOf(input) >= 0;
},
mode: 'multiple',
showSearch: true,
onChange: (val, opt) => {
let str = '';
if (opt && opt.length) {
str =
'指定部门为' +
opt
.map((item) => {
return item.departmentName;
})
.join(',');
} else {
str = '';
}
data.value.dotDesc = str;
},
immediate: true,
},
},
{
field: 'createUserRole',
label: '选择角色',
component: 'NsSelectApi',
ifShow: (formModel) => {
return formModel.paramKey == 'createUserRole';
},
componentProps: {
placeholder: '请选择角色',
api: '/api/community/objs/admin/Role',
params: {
pageSize: 10,
},
resultField: 'data.data',
labelField: 'roleName',
valueField: 'roleUuid',
filterFiled: 'roleName',
labelInValue: true,
scrollLoad: true,
mode: 'multiple',
showSearch: true,
onChange: (val, opt) => {
let str = '';
data.value.value = val.map((item) => {
return item.value;
});
if (val && val.length) {
str =
'指定角色为' +
val
.map((item) => {
return item.label;
})
.join(',');
} else {
str = '';
}
data.value.dotDesc = str;
},
immediate: true,
},
},
{
field: '',
label: '',
component: 'NsInputText',
},
]);
watch(
() => data.value,
(val) => {
emits('update:modelValue', val);
},
{ deep: true },
);
</script>
<style lang="less" scoped></style>

247
nervui-smart-community-op/src/components/drawer/drawerComponents/groupList/groupList.vue

@ -1,247 +0,0 @@
<template>
<div class="group">
<a-form-item-rest>
<div class="header">
<div class="title"><span style="color: red">*</span> 条件组</div>
<div class="title">
<ns-button type="primary" @click="addGroup">新增条件组</ns-button>
</div>
</div>
<div class="list">
<div class="list-item" v-for="(item, index) in groupList" :key="index">
<div class="header">
<div class="title">条件组{{ index + 1 }}</div>
<div class="group_check">
<ns-checkbox
@change="change($event, index, i)"
v-for="(checkbox, i) in SelectType[parseInt(processInfo.processSubType)]"
v-model:checked="selectValue[index][i]"
:value="checkbox"
:key="checkbox.value">
{{ checkbox.label }}
</ns-checkbox>
<!-- <ns-checkbox-group
:options="SelectType[parseInt(processInfo.processSubType)]"
v-model:value="selectComponent[index]"
@change="change" /> -->
</div>
<div class="delete">
<a @click="deleteGroup(index)"> <delete-outlined /> 删除</a>
</div>
</div>
<div class="group_info_list">
<template v-for="(c, j) in selectComponent[index]" :key="j">
<component :is="c?.value" v-model="groupList[index].conditionInfoList[j]" />
<span class="error" v-if="!groupList[index].conditionInfoList[j]?.paramKey">
条件内容不能为空
</span>
<span
class="error"
v-if="
groupList[index].conditionInfoList[j]?.paramKey &&
!groupList[index].conditionInfoList[j]?.value?.length
">
条件值不能为空
</span>
<div
class="and"
v-if="selectComponent[index].length > 0 && j < selectComponent[index].length - 1">
</div>
</template>
<span class="error" v-if="!selectComponent[index]?.length">请选择条件</span>
</div>
<div class="or" v-if="groupList.length > 0 && index < groupList.length - 1"></div>
</div>
</div>
</a-form-item-rest>
</div>
</template>
<script>
import { ref, defineComponent, watch, nextTick, inject } from 'vue';
import { DeleteOutlined } from '@ant-design/icons-vue';
import { SelectType } from '/@/utils/const';
import faqiren from './faqiren.vue';
import sex from './sex.vue';
import departmentMainUuid from './departmentMainUuid.vue';
import personStatus from './personStatus.vue';
import quitType from './quitType.vue';
import quitReason from './quitReason.vue';
import workHandover from './workHandover.vue';
import departmentInUuid from './departmentInUuid.vue';
import { cloneDeep } from 'lodash-es';
export default defineComponent({
components: {
DeleteOutlined,
faqiren,
sex,
departmentMainUuid,
personStatus,
quitType,
quitReason,
workHandover,
departmentInUuid,
},
props: {
value: {
type: Array,
default: () => [],
},
},
emits: ['change', 'validator'],
setup(props, { emit }) {
let groupList = ref([]);
let selectComponent = ref([]);
let selectValue = ref([]);
emit('validator', false);
const addGroup = () => {
groupList.value.push({
conditionInfoList: [],
});
selectValue.value.push([]);
};
const deleteGroup = (index) => {
groupList.value.splice(index, 1);
selectComponent.value.splice(index, 1);
};
const change = (value, groupIndex, checkboxIndex) => {
// value = JSON.parse(value);
if (value.target.checked) {
selectComponent.value[groupIndex].push(value.target.value);
// groupList.value[groupIndex].conditionInfoList.splice(index, 1);
// selectComponent.value[groupIndex] = selectComponent.value[groupIndex].sort((a, b) => {
// return a.sort - b.sort;
// });
} else {
let index = 0;
index = selectComponent.value[groupIndex].findIndex((item) => {
return item.label == value.target.value.label;
});
selectComponent.value[groupIndex].splice(index, 1);
groupList.value[groupIndex].conditionInfoList.splice(index, 1);
}
console.log(groupList);
};
let processInfo = inject('processInfo');
watch(
() => props.value,
(val) => {
groupList.value = props.value;
for (let i = 0; i < props.value.length; i++) {
const item = props.value[i];
selectComponent.value[i] = [];
selectValue.value[i] = [];
if (item.conditionInfoList && item.conditionInfoList.length) {
for (let j = 0; j < item.conditionInfoList.length; j++) {
const jtem = item.conditionInfoList[j];
let select;
select = SelectType[parseInt(processInfo.value.processSubType)].filter((se, t) => {
if (se.value == jtem.checkbox) {
selectValue.value[i][t] = true;
return se;
}
})[0];
selectComponent.value[i].push(select);
groupList.value[i].conditionInfoList[j] = jtem;
}
}
}
if (groupList.value.length) {
let flag = false;
if (groupList.value.length > 0) flag = true;
for (let i = 0; i < groupList.value.length; i++) {
const item = groupList.value[i];
if (!item.conditionInfoList?.length) flag = false;
for (let j = 0; j < item.conditionInfoList.length; j++) {
const jtem = item.conditionInfoList[j];
if (!jtem.paramKey) flag = false;
if (!jtem.value || !jtem.value.length) flag = false;
}
}
if (flag) emit('validator', true);
else emit('validator', false);
}
},
{ deep: true },
);
watch(
() => groupList.value,
(val) => {
emit('change', val);
let flag = false;
if (val.length > 0) flag = true;
for (let i = 0; i < val.length; i++) {
const item = val[i];
if (!item.conditionInfoList?.length) flag = false;
for (let j = 0; j < item.conditionInfoList.length; j++) {
const jtem = item.conditionInfoList[j];
if (!jtem.paramKey) flag = false;
if (!jtem.value || !jtem.value.length) flag = false;
}
}
if (flag) emit('validator', true);
else emit('validator', false);
},
{ deep: true },
);
return {
groupList,
selectComponent,
SelectType,
processInfo,
selectValue,
addGroup,
deleteGroup,
change,
};
},
});
</script>
<style lang="less" scoped>
.group {
.header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 19px;
}
.list {
width: 100%;
.header {
width: 100%;
height: 40px;
background: rgba(0, 0, 0, 0.02);
padding: 0 16px;
font-family: 'PingFang';
font-style: normal;
font-weight: 500;
font-size: 16px;
color: rgba(0, 0, 0, 0.85);
.title {
flex: 1;
}
.group_check {
flex: 5;
}
}
.and {
margin: 0 0 16px;
color: rgba(0, 0, 0, 0.85);
font-size: 16px;
font-weight: 500;
}
.or {
margin: 24px 0;
color: rgba(0, 0, 0, 0.85);
font-size: 16px;
font-weight: 500;
}
}
}
.error {
color: #ff4d4f;
}
</style>

71
nervui-smart-community-op/src/components/drawer/drawerComponents/groupList/personStatus.vue

@ -1,71 +0,0 @@
<template>
<div class="faqiren">
<ns-form :model="data" :schemas="formSchema" />
</div>
</template>
<script lang="ts" setup>
import { nextTick, ref, watch } from 'vue';
const emits = defineEmits(['update:modelValue', 'change']);
const props = defineProps({
modelValue: {
type: Object,
},
});
let data = ref({
compareType: 'in',
numberAfterCompareType: false,
paramKey: 'personStatus',
value: [],
valueType: 'number',
checkbox: 'personStatus',
dotDesc: null,
});
emits('update:modelValue', data.value);
if (props.modelValue) {
if (props.modelValue.checkbox == 'personStatus') {
data.value = props.modelValue;
data.value.personStatus = props.modelValue.value;
emits('update:modelValue', data.value);
}
}
const formSchema = ref([
{
field: 'personStatus',
component: 'NsSelect',
label: '岗位状态',
componentProps: {
placeholder: '请选择',
options: [
{
label: '试用',
value: 0,
},
{
label: '实习',
value: 1,
},
{
label: '正式',
value: 2,
},
],
mode: 'multiple',
onChange: (v, o) => {
if (o && o.length > 1) o.splice(0, 1);
if (v && v.length > 1) v.splice(0, 1);
data.value.dotDesc = o.length ? `岗位状态为${o[0].label}` : null;
data.value.value = v;
},
},
},
]);
watch(
() => data.value,
(val) => {
emits('update:modelValue', val);
},
{ deep: true },
);
</script>
<style lang="less" scoped></style>

62
nervui-smart-community-op/src/components/drawer/drawerComponents/groupList/quitReason.vue

@ -1,62 +0,0 @@
<template>
<div class="faqiren">
<ns-form :model="data" :schemas="formSchema" />
</div>
</template>
<script lang="ts" setup>
import { computed, ref, watch } from 'vue';
import { useStore } from '/@/stores/index';
const emits = defineEmits(['update:modelValue', 'change']);
let store = useStore();
let { setQuitReason } = store;
const props = defineProps({
modelValue: {
type: Object,
},
});
let data = ref({
compareType: 'in',
numberAfterCompareType: false,
paramKey: 'quitReason',
value: [],
valueType: 'number',
checkbox: 'quitReason',
dotDesc: null,
});
emits('update:modelValue', data.value);
if (props.modelValue) {
if (props.modelValue.checkbox == 'quitReason') {
data.value = props.modelValue;
data.value.quitReason = props.modelValue.value;
emits('update:modelValue', data.value);
}
}
let reason = computed(() => store.quitReason);
const formSchema = ref([
{
field: 'quitReason',
component: 'NsSelect',
label: '离职原因',
componentProps: {
placeholder: '请选择',
options: reason,
mode: 'multiple',
onChange: (v, o) => {
if (o && o.length > 1) o.splice(0, 1);
if (v && v.length > 1) v.splice(0, 1);
data.value.dotDesc = o.length ? `离职类型为${o[0].label}` : null;
data.value.value = v;
},
},
},
]);
watch(
() => data.value,
(val) => {
emits('update:modelValue', val);
},
{ deep: true },
);
</script>
<style lang="less" scoped></style>

73
nervui-smart-community-op/src/components/drawer/drawerComponents/groupList/quitType.vue

@ -1,73 +0,0 @@
<template>
<div class="faqiren">
<ns-form :model="data" :schemas="formSchema" />
</div>
</template>
<script lang="ts" setup>
import { nextTick, ref, watch } from 'vue';
import { useStore } from '/@/stores/index';
const emits = defineEmits(['update:modelValue', 'change']);
let store = useStore();
let { setQuitReason } = store;
const props = defineProps({
modelValue: {
type: Object,
},
});
let data = ref({
compareType: 'in',
numberAfterCompareType: false,
paramKey: 'quitType',
value: [],
valueType: 'number',
checkbox: 'quitType',
dotDesc: null,
});
emits('update:modelValue', data.value);
if (props.modelValue) {
if (props.modelValue.checkbox == 'quitType') {
data.value = props.modelValue;
data.value.quitType = props.modelValue.value;
setQuitReason(props.modelValue.value[0]);
emits('update:modelValue', data.value);
}
}
const formSchema = ref([
{
field: 'quitType',
component: 'NsSelect',
label: '离职类型',
componentProps: {
placeholder: '请选择',
options: [
{
label: '主动原因',
value: 0,
},
{
label: '被动原因',
value: 1,
},
],
mode: 'multiple',
onChange: (v, o) => {
if (o && o.length > 1) o.splice(0, 1);
if (v && v.length > 1) v.splice(0, 1);
data.value.dotDesc = o.length ? `离职类型为${o[0].label}` : null;
data.value.value = v;
console.log(v);
setQuitReason(v[0]);
},
},
},
]);
watch(
() => data.value,
(val) => {
emits('update:modelValue', val);
},
{ deep: true },
);
</script>
<style lang="less" scoped></style>

73
nervui-smart-community-op/src/components/drawer/drawerComponents/groupList/sex.vue

@ -1,73 +0,0 @@
<template>
<div class="faqiren">
<ns-form :model="data" :schemas="formSchema" />
</div>
</template>
<script lang="ts" setup>
import { emit } from 'process';
import { nextTick, ref, watch } from 'vue';
const emits = defineEmits(['update:modelValue', 'change']);
const props = defineProps({
modelValue: {
type: Object,
},
});
let data = ref({
compareType: 'in',
numberAfterCompareType: false,
paramKey: 'sex',
value: [],
valueType: 'number',
checkbox: 'sex',
dotDesc: null,
});
emits('update:modelValue', data.value);
if (props.modelValue) {
console.log(props.modelValue);
if (props.modelValue.checkbox == 'sex') {
data.value = props.modelValue;
data.value.sex = props.modelValue.value;
emits('update:modelValue', data.value);
}
}
const formSchema = ref([
{
field: 'sex',
label: '性别',
component: 'NsSelect',
componentProps: {
placeholder: '请选择',
onChange: (v, o) => {
if (o && o.length > 1) o.splice(0, 1);
if (v && v.length > 1) v.splice(0, 1);
data.value.dotDesc = o.length ? `性别为${o[0].label}` : null;
data.value.value = v;
},
mode: 'multiple',
options: [
{
label: '女',
value: 0,
},
{
label: '男',
value: 1,
},
{
label: '未知',
value: 2,
},
],
},
},
]);
watch(
() => data.value,
(val) => {
emits('update:modelValue', data.value);
},
{ deep: true },
);
</script>
<style lang="less" scoped></style>

71
nervui-smart-community-op/src/components/drawer/drawerComponents/groupList/workHandover.vue

@ -1,71 +0,0 @@
<template>
<div class="faqiren">
<ns-form :model="data" :schemas="formSchema" />
</div>
</template>
<script lang="ts" setup>
import { nextTick, ref, watch } from 'vue';
import { useStore } from '/@/stores/index';
const emits = defineEmits(['update:modelValue', 'change']);
let store = useStore();
let { setQuitReason } = store;
const props = defineProps({
modelValue: {
type: Object,
},
});
let data = ref({
compareType: 'in',
numberAfterCompareType: false,
paramKey: 'workHandover',
value: [],
valueType: 'number',
checkbox: 'workHandover',
dotDesc: null,
});
emits('update:modelValue', data.value);
if (props.modelValue) {
if (props.modelValue.checkbox == 'workHandover') {
data.value = props.modelValue;
data.value.workHandover = props.modelValue.value;
emits('update:modelValue', data.value);
}
}
const formSchema = ref([
{
field: 'workHandover',
component: 'NsSelect',
label: '是否需要工作交接人',
componentProps: {
placeholder: '请选择',
options: [
{
label: '否',
value: 0,
},
{
label: '是',
value: 1,
},
],
mode: 'multiple',
onChange: (v, o) => {
if (o && o.length > 1) o.splice(0, 1);
if (v && v.length > 1) v.splice(0, 1);
data.value.dotDesc = o.length ? `是否需要工作交接人为${o[0].label}` : null;
data.value.value = v;
setQuitReason(v[0]);
},
},
},
]);
watch(
() => data.value,
(val) => {
emits('update:modelValue', val);
},
{ deep: true },
);
</script>
<style lang="less" scoped></style>

BIN
nervui-smart-community-op/src/components/icon/end-icon.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 537 B

BIN
nervui-smart-community-op/src/components/icon/node-icon.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

BIN
nervui-smart-community-op/src/components/icon/start-icon.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

322
nervui-smart-community-op/src/components/nodeWrap.vue

@ -1,322 +0,0 @@
<template>
<div class="node-wrap" v-if="nodeConfig.nodeType < 3">
<div
v-if="nodeConfig.nodeType == 1"
:style="`background: ${bgColors[nodeConfig.nodeType]}`"
class="node-wrap-box-start">
<div class="title-icon" :style="`background: ${bgColors[nodeConfig.nodeType]}`">
<img src="./icon/start-icon.png" alt="" />
</div>
{{ nodeConfig.name }}
</div>
<div v-else class="node-wrap-box" :class="isTried && nodeConfig.error ? 'active error' : ''">
<div class="title" :style="`background: ${bgColors[nodeConfig.nodeType]}`">
<div class="title-icon" :style="`background: ${bgColors[nodeConfig.nodeType]}`">
<img src="./icon/node-icon.png" alt="" />
</div>
<div class="editable-title">{{ nodeConfig.name }}</div>
<a class="anticon anticon-close close" @click="delNode" title="删除">
<close-circle-filled style="font-size: 18px" />
</a>
</div>
<div class="content" @click="setPerson">
<div class="text">
<span class="placeholder" v-if="!showText">请选择{{ defaultText }}</span>
{{ showText }}
</div>
<i class="anticon anticon-right arrow"></i>
</div>
<div class="error_tip" v-if="isTried && nodeConfig.error">
<i class="anticon anticon-exclamation-circle"></i>
</div>
</div>
<addNode v-model:childNodeP="nodeConfig.next" />
</div>
<div class="branch-wrap" v-if="nodeConfig.nodeType == 3">
<div class="branch-box-wrap">
<div class="branch-box">
<button class="add-branch" @click="addTerm">添加条件</button>
<div class="col-box" v-for="(item, index) in nodeConfig.exclusive" :key="index">
<div class="condition-node">
<div class="condition-node-box">
<div class="auto-judge" :class="isTried && item.error ? 'error active' : ''">
<!-- <div class="sort-left" v-if="index != 0" @click="arrTransfer(index, -1)">&lt;</div> -->
<div class="title-wrapper" :style="`background: ${bgColors[nodeConfig.nodeType]}`">
<div class="title-icon" :style="`background: ${bgColors[nodeConfig.nodeType]}`">
<img src="./icon/node-icon.png" alt="" />
</div>
<div class="editable-title">{{ item.name }}</div>
<div class="priority-title">优先级{{ index + 1 }}</div>
<div class="priority-action" v-if="index < nodeConfig.exclusive.length - 1">
<a
title="复制"
class="anticon anticon-close close"
style="margin-right: 8px"
@click="copyTerm(index, nodeConfig)">
<diff-filled style="font-size: 18px" />
</a>
<a title="删除" class="anticon anticon-close close" @click="delTerm(index)">
<close-circle-filled style="font-size: 18px" />
</a>
</div>
</div>
<!-- <div
class="sort-right"
v-if="index != nodeConfig.exclusive.length - 1"
@click="arrTransfer(index)"
>&gt;</div
> -->
<div
class="content"
@click="setPerson(index)"
v-if="index < nodeConfig.exclusive.length - 1">
<div class="text">
{{ $func.conditionStr(nodeConfig, index) }}
</div>
</div>
<div class="content" v-else>
<div class="text">其他条件进入此流程 </div>
</div>
<div class="error_tip" v-if="isTried && item.error">
<i class="anticon anticon-exclamation-circle"></i>
</div>
</div>
<addNode v-model:childNodeP="item.exclusiveBranchNode" />
</div>
</div>
<nodeWrap v-if="item.exclusiveBranchNode" v-model:nodeConfig="item.exclusiveBranchNode" />
<template v-if="index == 0">
<div class="top-left-cover-line"></div>
<div class="bottom-left-cover-line"></div>
</template>
<template v-if="index == nodeConfig.exclusive.length - 1">
<div class="top-right-cover-line"></div>
<div class="bottom-right-cover-line"></div>
</template>
</div>
</div>
<addNode v-model:childNodeP="nodeConfig.next" />
</div>
</div>
<nodeWrap v-if="nodeConfig.next" v-model:nodeConfig="nodeConfig.next" />
</template>
<script setup>
import { onMounted, ref, watch, getCurrentInstance, computed } from 'vue';
import $func from '/@/utils/index';
import { useStore } from '/@/stores/index';
import { bgColors, placeholderList } from '/@/utils/const';
import { CloseCircleFilled, DiffFilled } from '@ant-design/icons-vue';
let _uid = getCurrentInstance().uid;
let props = defineProps({
nodeConfig: {
type: Object,
default: () => ({}),
},
flowPermission: {
type: Object,
default: () => [],
},
});
let defaultText = computed(() => {
return placeholderList[props.nodeConfig.nodeType];
});
let showText = computed(() => {
if (props.nodeConfig.nodeType == 1) return $func.arrToStr(props.flowPermission) || '所有人';
return $func.setApproverStr(props.nodeConfig);
});
let isInputList = ref([]);
let isInput = ref(false);
const resetConditionNodesErr = () => {
for (var i = 0; i < props.nodeConfig.exclusive.length; i++) {
props.nodeConfig.exclusive[i].error =
$func.conditionStr(props.nodeConfig, i) == '请设置条件' &&
i != props.nodeConfig.exclusive.length - 1;
}
};
onMounted(() => {
if (props.nodeConfig.nodeType == 2) {
props.nodeConfig.error = !$func.setApproverStr(props.nodeConfig);
} else if (props.nodeConfig.nodeType == 2) {
props.nodeConfig.error = !$func.copyerStr(props.nodeConfig);
} else if (props.nodeConfig.nodeType == 3) {
resetConditionNodesErr();
}
});
let emits = defineEmits(['update:flowPermission', 'update:nodeConfig']);
let store = useStore();
let { setPromoter, setApprover, setCondition, setApproverConfig, setConditionsConfig } = store;
let isTried = computed(() => store.isTried);
let approverConfig1 = computed(() => store.approverConfig1);
let conditionsConfig1 = computed(() => store.conditionsConfig1);
watch(approverConfig1, (approver) => {
if (approver.flag && approver.id === _uid) {
emits('update:nodeConfig', approver.value);
}
});
watch(conditionsConfig1, (condition) => {
if (condition.flag && condition.id === _uid) {
emits('update:nodeConfig', condition.value);
}
});
const delNode = () => {
emits('update:nodeConfig', props.nodeConfig.next);
};
const addTerm = () => {
let len = props.nodeConfig.exclusive.length;
console.log(len);
props.nodeConfig.exclusive.splice(len - 1, 0, {
name: '条件' + len,
jumpId: '',
conditionType: 2,
priorityLevel: len,
conditionGroupList: [],
conditionExpression: '',
exclusiveBranchNode: null,
});
resetConditionNodesErr();
emits('update:nodeConfig', props.nodeConfig);
};
const delTerm = (index) => {
props.nodeConfig.exclusive.splice(index, 1);
props.nodeConfig.exclusive.map((item, index) => {
item.priorityLevel = index + 1;
});
resetConditionNodesErr();
emits('update:nodeConfig', props.nodeConfig);
if (props.nodeConfig.exclusive.length == 1) {
if (props.nodeConfig.next) {
if (props.nodeConfig.exclusive[0].next) {
reData(props.nodeConfig.exclusive[0].next, props.nodeConfig.next);
} else {
props.nodeConfig.exclusive[0].next = props.nodeConfig.next;
}
}
emits('update:nodeConfig', props.nodeConfig.exclusive[0].next);
}
};
const copyTerm = (index, nodeConfig) => {
let config = nodeConfig.exclusive[index];
let len = props.nodeConfig.exclusive.length;
config.priorityLevel = len;
props.nodeConfig.exclusive.splice(len - 1, 0, config);
resetConditionNodesErr();
emits('update:nodeConfig', props.nodeConfig);
};
const reData = (data, addData) => {
if (!data.next) {
data.next = addData;
} else {
reData(data.next, addData);
}
};
const setPerson = (index) => {
var { nodeType } = props.nodeConfig;
if (nodeType == 1) {
setPromoter(true);
} else if (nodeType == 2) {
setApprover(true);
setApproverConfig({
value: {
...JSON.parse(JSON.stringify(props.nodeConfig)),
},
flag: false,
id: _uid,
});
} else {
setCondition(true);
setConditionsConfig({
value: JSON.parse(JSON.stringify(props.nodeConfig)),
priorityLevel: index + 1,
flag: false,
id: _uid,
});
}
};
const arrTransfer = (index, type = 1) => {
//-1,1
props.nodeConfig.exclusive[index] = props.nodeConfig.exclusive.splice(
index + type,
1,
props.nodeConfig.exclusive[index],
)[0];
props.nodeConfig.exclusive.map((item, index) => {
item.priorityLevel = index + 1;
});
resetConditionNodesErr();
emits('update:nodeConfig', props.nodeConfig);
};
</script>
<style lang="less" scoped>
.anticon:before {
display: block;
font-family: anticon !important;
}
.error_tip {
position: absolute;
top: 0px;
right: 0px;
transform: translate(150%, 0px);
font-size: 24px;
}
.promoter_person .el-dialog__body {
padding: 10px 20px 14px 20px;
}
.selected_list {
margin-bottom: 20px;
line-height: 30px;
}
.selected_list span {
margin-right: 10px;
padding: 3px 6px 3px 9px;
line-height: 12px;
white-space: nowrap;
border-radius: 2px;
border: 1px solid rgba(220, 220, 220, 1);
}
.selected_list img {
margin-left: 5px;
width: 7px;
height: 7px;
cursor: pointer;
}
.node-wrap-box-start {
width: 272px;
height: 48px;
text-align: center;
color: #fff;
border-radius: 4px;
line-height: 52px;
position: relative;
font-size: 14px;
.title-icon {
width: 48px;
height: 48px;
border: 1px solid #ffffff;
border-radius: 50%;
position: absolute;
left: 50%;
transform: translateX(-50%);
top: -35px;
img {
width: 70%;
margin-top: 5px;
}
}
}
.node-wrap-box {
.editable-title {
width: 100%;
text-align: center;
}
}
</style>

87
nervui-smart-community-op/src/components/selectBox.vue

@ -1,87 +0,0 @@
<template>
<ul class="select-box">
<template v-for="(elem, i) in list" :key="i">
<template v-if="elem.type === 'role'">
<li
v-for="item in elem.data"
:key="item.roleId"
class="check_box"
:class="{ active: elem.isActive && elem.isActive(item), not: elem.not }"
@click="elem.change(item)">
<a
:title="item.description"
:class="{ active: elem.isActiveItem && elem.isActiveItem(item) }">
<img src="/@/assets/images/icon_role.png" />{{ item.roleName }}
</a>
</li>
</template>
<template v-if="elem.type === 'department'">
<li
v-for="item in elem.data"
:key="item.id"
class="check_box"
:class="{ not: !elem.isDepartment }">
<a
v-if="elem.isDepartment"
:class="elem.isActive(item) && 'active'"
@click="elem.change(item)">
<img src="/@/assets/images/icon_file.png" />{{ item.departmentName }}</a
>
<a v-else><img src="/@/assets/images/icon_file.png" />{{ item.departmentName }}</a>
<i @click="elem.next(item)">下级</i>
</li>
</template>
<template v-if="elem.type === 'employee'">
<li v-for="item in elem.data" :key="item.id" class="check_box">
<a
:class="elem.isActive(item) && 'active'"
@click="elem.change(item)"
:title="item.departmentNames">
<img src="/@/assets/images/icon_people.png" />{{ item.employeeName }}
</a>
</li>
</template>
</template>
</ul>
</template>
<script setup>
defineProps({
list: {
type: Array,
default: () => [],
},
});
</script>
<style lang="less">
.select-box {
height: 420px;
overflow-y: auto;
li {
padding: 5px 0;
i {
float: right;
padding-left: 24px;
padding-right: 10px;
color: #3195f8;
font-size: 12px;
cursor: pointer;
background: url(~/@/assets/images/next_level_active.png) no-repeat 10px center;
border-left: 1px solid rgb(238, 238, 238);
}
a.active + i {
color: rgb(197, 197, 197);
background-image: url(~/@/assets/images/next_level.png);
pointer-events: none;
}
img {
width: 14px;
vertical-align: middle;
margin-right: 5px;
}
}
}
</style>

93
nervui-smart-community-op/src/components/selectResult.vue

@ -1,93 +0,0 @@
<template>
<div class="select-result l">
<p class="clear"
>已选{{ total }}
<a @click="emits('del')">清空</a>
</p>
<ul>
<template v-for="{ type, data, cancel } in list" :key="type">
<template v-if="type === 'role'">
<li v-for="item in data" :key="item.roleId">
<img src="/@/assets/images/icon_role.png" //>
<span>{{ item.roleName }}</span>
<img src="/@/assets/images/cancel.png" @click="cancel(item)" //>
</li>
</template>
<template v-if="type === 'department'">
<li v-for="item in data" :key="item.id">
<img src="/@/assets/images/icon_file.png" //>
<span>{{ item.departmentName }}</span>
<img src="/@/assets/images/cancel.png" @click="cancel(item)" //>
</li>
</template>
<template v-if="type === 'employee'">
<li v-for="item in data" :key="item.id">
<img src="/@/assets/images/icon_people.png" //>
<span>{{ item.employeeName }}</span>
<img src="/@/assets/images/cancel.png" @click="cancel(item)" //>
</li>
</template>
</template>
</ul>
</div>
</template>
<script setup>
defineProps({
total: {
type: Number,
default: 0,
},
list: {
type: Array,
default: () => [{ type: 'role', data, cancel }],
},
});
let emits = defineEmits(['del']);
</script>
<style lang="less">
.select-result {
width: 276px;
height: 100%;
font-size: 12px;
ul {
height: 460px;
overflow-y: auto;
li {
margin: 11px 26px 13px 19px;
line-height: 17px;
span {
vertical-align: middle;
}
img {
&:first-of-type {
width: 14px;
vertical-align: middle;
margin-right: 5px;
}
&:last-of-type {
float: right;
margin-top: 2px;
width: 14px;
}
}
}
}
p {
padding-left: 19px;
padding-right: 20px;
line-height: 37px;
border-bottom: 1px solid #f2f2f2;
a {
float: right;
}
}
}
</style>

90
nervui-smart-community-op/src/config/app.config.ts

@ -1,90 +0,0 @@
/** @format */
import { dateUtil } from '/nerv-lib/util/date-util';
export const appConfig = {
projectType: 'web',
baseApi: '/api',
enablePermissions: true,
baseHeader: '/home',
baseRouter: '/home/index',
timeout: 30 * 1000,
userLoginApi: '/api/op/objs/Login',
userInfoApi: '/api/op/objs/CurrentUser',
userResourceApi: '/api/op/objs/User/Resource',
useHistoryTag: false,
customLogin: () => import('/@/view/login.vue'),
updatePassWordInfo: {
title: '修改密码',
subtitle: '智慧园区平台',
api: '/api/op/objs/User/changePassword',
},
resourceInfo: {
application: {
version: '1.0.35',
label: '智慧园区',
dataScope: {
scopeMode: 2,
scopeType: 'dept',
dataTips: '',
dataConfig: {
dept: {
scopeType: 'dept',
scopeMap: {
'1': {
scopeKey: '1',
title: '全部',
score: 0,
keyType: 'int',
},
'2': {
scopeKey: '2',
title: '自己',
score: 4,
keyType: 'int',
},
'3': {
scopeKey: '3',
title: '本部门',
score: 2,
keyType: 'int',
},
'4': {
scopeKey: '4',
title: '本部门及其下属部门',
score: 1,
keyType: 'int',
},
'5': {
scopeKey: '5',
title: '自选部门',
score: 3,
type: 1,
tips: '选择部门:互斥,父亲本部门及其下属部门,那这里只能选择这几个部门,如果父亲是本部门,只能',
keyType: 'int',
},
},
},
},
},
},
api: '/qa/Operation/Resources/Op/init',
token: `${dateUtil().format('YYYYMMDD')}pensionwebui`,
dealReosurceList: (RouteMouleList: any) => {
if (Object.prototype.toString.call(RouteMouleList) === '[object Array]') {
RouteMouleList.forEach((item: any) => {
if (item.code === 'AssetManagementInfo') {
item.codeDataScope = {
status: 1,
scopeType: 'dept',
dataTips: '',
scopeList: [1, 3, 4, 5],
};
}
});
return RouteMouleList;
} else {
return [];
}
},
},
};

2
nervui-smart-community-op/src/config/index.ts

@ -1,2 +0,0 @@
import { appConfig } from '/@/config/app.config';
export { appConfig };

22
nervui-smart-community-op/src/enum/http-enum.ts

@ -1,22 +0,0 @@
export enum ResultEnum {
SUCCESS = 0,
ERROR = 1,
TIMEOUT = 401,
TOKEN_INVALID = 403,
}
export enum RequestEnum {
GET = 'GET',
POST = 'POST',
PUT = 'PUT',
DELETE = 'DELETE',
}
export enum ContentTypeEnum {
// json
JSON = 'application/json;charset=UTF-8',
// form-data qs
FORM_URLENCODED = 'application/x-www-form-urlencoded;charset=UTF-8',
// form-data upload
FORM_DATA = 'multipart/form-data;charset=UTF-8',
}

3
nervui-smart-community-op/src/icon/TaskCenter.svg

@ -1,3 +0,0 @@
<svg width="400" height="400" viewBox="0 0 400 400" xmlns="http://www.w3.org/2000/svg">
<path d="M330.664 222.461L329.219 212.5C327.617 201.484 324.609 190.781 320.312 180.625C313.75 165.117 304.336 151.133 292.383 139.141C289.102 135.859 282.578 129.687 278.047 126.133L272.227 121.562C273.711 115.977 274.492 110.156 274.492 104.102C274.492 66.5234 243.945 35.9766 206.367 35.9766C168.789 35.9766 138.242 66.5234 138.242 104.062C138.242 107.656 138.516 111.172 139.062 114.648L132.656 118.711C123.633 124.453 113.594 133.32 107.734 139.18C95.7031 151.211 86.2891 165.195 79.7656 180.664C75.2734 191.289 72.2266 202.383 70.7422 213.672L69.6094 222.109C45.1172 232.422 27.8906 256.68 27.8906 284.883C27.8906 322.461 58.4375 353.008 96.0156 353.008C109.063 353.008 121.25 349.336 131.602 342.969L139.219 346.953C142.734 348.789 146.016 350.352 149.219 351.68C165.312 358.516 182.422 361.953 200.039 361.953C217.656 361.953 234.727 358.477 250.82 351.68C253.516 350.547 256.289 349.258 259.297 347.734L268.281 343.164C278.555 349.375 290.586 352.969 303.438 352.969C341.016 352.969 371.562 322.422 371.562 284.844C371.523 256.992 354.688 233.008 330.664 222.461ZM96.0156 246.055C117.422 246.055 134.844 263.477 134.844 284.883C134.844 306.289 117.422 323.711 96.0156 323.711C74.6094 323.711 57.1875 306.289 57.1875 284.883C57.1875 263.477 74.6094 246.055 96.0156 246.055V246.055ZM303.398 323.711C281.992 323.711 264.57 306.289 264.57 284.883C264.57 263.477 281.992 246.055 303.398 246.055C324.766 246.055 342.187 263.477 342.227 284.883C342.227 306.328 324.805 323.711 303.398 323.711ZM206.367 65.2734C227.773 65.2734 245.195 82.6562 245.195 104.062C245.195 125.469 227.773 142.891 206.367 142.891C184.961 142.891 167.539 125.508 167.539 104.102C167.539 82.6953 184.961 65.2734 206.367 65.2734V65.2734ZM206.367 172.188C227.227 172.188 245.898 162.773 258.398 147.969L261.562 150.547C280.703 166.211 295.273 190 299.531 212.578L300.312 216.797C264.18 218.398 235.273 248.32 235.273 284.844C235.273 298.398 239.258 311.016 246.094 321.641L242.187 323.438C228.828 329.57 214.648 332.656 200.039 332.656C184.766 332.656 170.117 329.336 156.484 322.773L153.516 321.328C160.234 310.781 164.141 298.281 164.141 284.883C164.141 248.594 135.625 218.828 99.8047 216.875L100.391 213.672C105.156 186.875 122.891 160.391 146.602 144.609L150.039 142.305C162.344 160.352 182.969 172.188 206.367 172.188V172.188Z" />
</svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

3
nervui-smart-community-op/src/icon/approve.svg

@ -1,3 +0,0 @@
<svg width="200" height="200" viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg">
<path d="M173.53 123.486H153.75V99.5163H106.45V80.4914H137.732C140.95 80.2229 143.968 78.8231 146.251 76.5404C148.534 74.2578 149.934 71.24 150.202 68.023V28.4683C149.934 25.2513 148.534 22.2336 146.251 19.9509C143.968 17.6683 140.95 16.2684 137.732 16L62.4825 16C59.2268 16.2196 56.1574 17.5978 53.8304 19.8851C51.5034 22.1723 50.0727 25.2173 49.7975 28.4683V68.238C50.1138 71.4165 51.5349 74.3835 53.8134 76.6224C56.0919 78.8613 59.0835 80.2304 62.2675 80.4914H93.55V99.5163H46.25V123.486H26.47C23.286 123.747 20.2944 125.116 18.0159 127.355C15.7374 129.594 14.3163 132.56 14 135.739L14 171.532C14.2685 174.749 15.6685 177.766 17.9514 180.049C20.2344 182.332 23.2526 183.732 26.47 184H78.5C81.7174 183.732 84.7356 182.332 87.0186 180.049C89.3015 177.766 90.7015 174.749 90.97 171.532V135.739C90.6537 132.56 89.2326 129.594 86.9541 127.355C84.6756 125.116 81.6839 123.747 78.5 123.486H58.8275V112.737H141.28V123.486H121.5C118.283 123.754 115.264 125.154 112.981 127.437C110.698 129.719 109.298 132.737 109.03 135.954V171.747C109.346 174.925 110.767 177.892 113.046 180.131C115.324 182.37 118.316 183.739 121.5 184H173.207C176.482 183.805 179.577 182.438 181.926 180.148C184.276 177.859 185.722 174.8 186 171.532V135.739C185.684 132.56 184.263 129.594 181.984 127.355C179.706 125.116 176.714 123.747 173.53 123.486ZM77.64 171.102H27.0075V136.384H77.64V171.102ZM136.765 29.0058V67.7006H62.805V29.0058H136.765ZM173.1 135.846V170.564H122.36V136.276L173.1 135.846Z"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

6
nervui-smart-community-op/src/icon/baimingdanguanli.svg

@ -1,6 +0,0 @@
<svg width="200" height="200" viewBox="0 0 200 200" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path d="M162.25 183H37.75C32.2468 183 26.9689 180.814 23.0775 176.922C19.1862 173.031 17 167.753 17 162.25V148.417C17.0003 146.582 17.7291 144.823 19.0262 143.527C20.3233 142.23 22.0824 141.501 23.9167 141.501C25.7509 141.501 27.51 142.23 28.8071 143.527C30.1042 144.823 30.8331 146.582 30.8333 148.417V162.25C30.8333 164.084 31.5621 165.844 32.8592 167.141C34.1563 168.438 35.9156 169.167 37.75 169.167H162.25C164.084 169.167 165.844 168.438 167.141 167.141C168.438 165.844 169.167 164.084 169.167 162.25V37.75C169.167 35.9156 168.438 34.1563 167.141 32.8592C165.844 31.5621 164.084 30.8333 162.25 30.8333H120.75C118.916 30.8331 117.157 30.1042 115.86 28.8071C114.563 27.51 113.834 25.7509 113.834 23.9167C113.834 22.0824 114.563 20.3233 115.86 19.0262C117.157 17.7291 118.916 17.0003 120.75 17H162.25C167.753 17 173.031 19.1862 176.922 23.0775C180.814 26.9689 183 32.2468 183 37.75V162.25C183 167.753 180.814 173.031 176.922 176.922C173.031 180.814 167.753 183 162.25 183Z" fill="currentColor"/>
<path d="M23.9167 158.792C22.0823 158.792 20.323 158.063 19.0258 156.766C17.7287 155.469 17 153.71 17 151.875V23.9171C17.0003 22.0828 17.7291 20.3238 19.0262 19.0269C20.3233 17.73 22.0824 17.0015 23.9167 17.0015C25.7509 17.0015 27.51 17.73 28.8071 19.0269C30.1042 20.3238 30.8331 22.0828 30.8333 23.9171V151.875C30.8333 153.71 30.1046 155.469 28.8075 156.766C27.5104 158.063 25.7511 158.792 23.9167 158.792V158.792ZM148.417 72.3337H120.75C118.916 72.3335 117.157 71.6046 115.86 70.3075C114.563 69.0104 113.834 67.2513 113.834 65.4171C113.834 63.5828 114.563 61.8237 115.86 60.5266C117.157 59.2295 118.916 58.5007 120.75 58.5004H148.417C150.251 58.5007 152.01 59.2295 153.307 60.5266C154.604 61.8237 155.332 63.5828 155.332 65.4171C155.332 67.2513 154.604 69.0104 153.307 70.3075C152.01 71.6046 150.251 72.3335 148.417 72.3337V72.3337ZM148.417 106.917H120.75C118.916 106.917 117.156 106.188 115.859 104.891C114.562 103.594 113.833 101.835 113.833 100C113.833 98.166 114.562 96.4067 115.859 95.1096C117.156 93.8125 118.916 93.0837 120.75 93.0837H148.417C150.251 93.0837 152.01 93.8125 153.307 95.1096C154.605 96.4067 155.333 98.166 155.333 100C155.333 101.835 154.605 103.594 153.307 104.891C152.01 106.188 150.251 106.917 148.417 106.917ZM148.417 141.5H79.25C77.4158 141.5 75.6568 140.771 74.3599 139.474C73.063 138.177 72.3344 136.418 72.3344 134.584C72.3344 132.75 73.063 130.99 74.3599 129.693C75.6568 128.396 77.4158 127.667 79.25 127.667H148.417C150.251 127.667 152.01 128.396 153.307 129.693C154.604 130.99 155.332 132.75 155.332 134.584C155.332 136.418 154.604 138.177 153.307 139.474C152.01 140.771 150.251 141.5 148.417 141.5Z" fill="currentColor"/>
<path d="M93.0833 100C70.7079 100 62.9267 96.1267 55.4221 92.3571C49.0588 89.1754 43.0413 86.1667 23.9167 86.1667C22.0823 86.1667 20.323 85.4379 19.0258 84.1408C17.7287 82.8437 17 81.0844 17 79.25V23.9167C17 22.0823 17.7287 20.323 19.0258 19.0258C20.323 17.7287 22.0823 17 23.9167 17C46.2921 17 54.0733 20.8733 61.5779 24.6429C67.9412 27.8246 73.9588 30.8333 93.0833 30.8333C94.9177 30.8333 96.677 31.5621 97.9742 32.8592C99.2713 34.1563 100 35.9156 100 37.75V93.0833C100 94.9177 99.2713 96.677 97.9742 97.9742C96.677 99.2713 94.9177 100 93.0833 100V100ZM30.8333 72.3333C48.125 73.0596 55.0417 76.4833 61.5779 79.8379C69.1147 83.9737 77.5697 86.1498 86.1667 86.1667V44.6667C68.875 43.9404 61.9583 40.5167 55.4221 37.1621C47.8853 33.0263 39.4303 30.8502 30.8333 30.8333V72.3333Z" fill="currentColor"/>
<path d="M44.6667 134.583C44.6665 135.492 44.8453 136.391 45.1929 137.23C45.5404 138.07 46.0499 138.832 46.6922 139.475C47.3344 140.117 48.097 140.627 48.9362 140.974C49.7755 141.322 50.675 141.501 51.5834 141.501C52.4918 141.501 53.3913 141.322 54.2305 140.974C55.0697 140.627 55.8323 140.117 56.4746 139.475C57.1168 138.832 57.6263 138.07 57.9738 137.23C58.3214 136.391 58.5002 135.492 58.5 134.583C58.5002 133.675 58.3214 132.775 57.9738 131.936C57.6263 131.097 57.1168 130.334 56.4746 129.692C55.8323 129.049 55.0697 128.54 54.2305 128.192C53.3913 127.844 52.4918 127.666 51.5834 127.666C50.675 127.666 49.7755 127.844 48.9362 128.192C48.097 128.54 47.3344 129.049 46.6922 129.692C46.0499 130.334 45.5404 131.097 45.1929 131.936C44.8453 132.775 44.6665 133.675 44.6667 134.583V134.583Z" fill="currentColor"/>
</svg>

Before

Width:  |  Height:  |  Size: 4.3 KiB

3
nervui-smart-community-op/src/icon/caidanguanli.svg

@ -1,3 +0,0 @@
<svg width="200" height="200" viewBox="0 0 200 200" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M24 37.9941C24 26.3994 33.3791 17 44.9487 17H131.179C135.215 17 138.487 20.2789 138.487 24.3235C138.487 28.3682 135.215 31.6471 131.179 31.6471H44.9487C41.4509 31.6471 38.6154 34.4887 38.6154 37.9941V162.006C38.6154 165.511 41.4509 168.353 44.9487 168.353H155.051C158.549 168.353 161.385 165.511 161.385 162.006V64.8471C161.385 60.8024 164.656 57.5235 168.692 57.5235C172.728 57.5235 176 60.8024 176 64.8471V162.006C176 173.601 166.621 183 155.051 183H44.9487C33.3791 183 24 173.601 24 162.006V37.9941ZM83.4157 147.359H139.031C142.488 147.359 145.308 144.09 145.308 140.041C145.308 135.981 142.488 132.712 138.995 132.712H83.4157C79.9226 132.712 77.1026 135.981 77.1026 140.041C77.1014 141.002 77.2638 141.954 77.5807 142.843C77.8975 143.731 78.3625 144.539 78.949 145.218C79.5354 145.898 80.2319 146.437 80.9983 146.805C81.7648 147.172 82.5863 147.36 83.4157 147.359ZM139.031 108.3H83.4157C82.5863 108.301 81.7648 108.113 80.9983 107.746C80.2319 107.378 79.5354 106.839 78.949 106.16C78.3625 105.48 77.8975 104.672 77.5807 103.784C77.2638 102.895 77.1014 101.943 77.1026 100.982C77.1026 96.9219 79.9226 93.6529 83.4157 93.6529H138.995C142.488 93.6529 145.308 96.9219 145.308 100.982C145.308 105.031 142.488 108.3 139.031 108.3ZM83.4157 70.2176H139.031C142.488 70.2176 145.308 66.9487 145.308 62.8994C145.308 58.8396 142.488 55.5706 138.995 55.5706H83.4157C79.9226 55.5706 77.1026 58.8396 77.1026 62.8994C77.1014 63.8608 77.2638 64.8131 77.5807 65.7016C77.8975 66.5901 78.3625 67.3974 78.949 68.0773C79.5354 68.7571 80.2319 69.2961 80.9983 69.6634C81.7648 70.0307 82.5863 70.219 83.4157 70.2176ZM61.0256 108.3C65.0616 108.3 68.3333 105.021 68.3333 100.976C68.3333 96.9318 65.0616 93.6529 61.0256 93.6529C56.9897 93.6529 53.7179 96.9318 53.7179 100.976C53.7179 105.021 56.9897 108.3 61.0256 108.3ZM68.3333 140.035C68.3333 144.08 65.0616 147.359 61.0256 147.359C56.9897 147.359 53.7179 144.08 53.7179 140.035C53.7179 135.991 56.9897 132.712 61.0256 132.712C65.0616 132.712 68.3333 135.991 68.3333 140.035ZM61.0256 70.2176C65.0616 70.2176 68.3333 66.9388 68.3333 62.8941C68.3333 58.8494 65.0616 55.5706 61.0256 55.5706C56.9897 55.5706 53.7179 58.8494 53.7179 62.8941C53.7179 66.9388 56.9897 70.2176 61.0256 70.2176Z" fill="currentColor"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

3
nervui-smart-community-op/src/icon/changjianwenti.svg

@ -1,3 +0,0 @@
<svg width="200" height="200" viewBox="0 0 200 200" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M166.305 148.886H100.382L69.7434 179.627C68.2189 181.152 66.1361 182 64.1242 182C62.2054 182 60.0916 181.319 58.505 179.732C55.4112 176.638 55.4112 171.588 58.505 168.494L91.6193 135.379C93.1941 133.805 95.1958 133.112 97.2385 133.112H166.411C166.883 133.112 167.354 132.641 167.354 132.168V34.8226C167.354 34.3503 166.883 33.8791 166.411 33.8791H33.3226C32.8503 33.8791 32.3791 34.3503 32.3791 34.8226V132.063C32.3791 132.535 32.8503 133.007 33.3226 133.007H58.5526C62.916 133.007 66.4395 136.53 66.4395 140.894C66.4395 145.257 62.916 148.781 58.5526 148.781H33.3226C24.0183 148.781 16.5 141.262 16.5 131.958V34.8226C16.5 25.5183 24.0183 18 33.3226 18H166.305C175.61 18 183.128 25.5183 183.128 34.8226V132.063C183.128 141.367 175.61 148.886 166.305 148.886ZM51.8246 91.908H63.5986C67.962 91.908 71.4855 88.3845 71.4855 84.021C71.4855 79.6576 67.962 76.134 63.5986 76.134H51.8246C47.4611 76.134 43.9376 79.6576 43.9376 84.021C43.9376 88.3845 47.4611 91.908 51.8246 91.908ZM93.9796 91.908H105.754C110.117 91.908 113.641 88.3845 113.641 84.021C113.641 79.6576 110.117 76.134 105.754 76.134H93.9796C89.6162 76.134 86.0926 79.6576 86.0926 84.021C86.0926 88.3845 89.6162 91.908 93.9796 91.908ZM136.135 91.908H147.909C152.272 91.908 155.796 88.3845 155.796 84.021C155.796 79.6576 152.272 76.134 147.909 76.134H136.135C131.771 76.134 128.248 79.6576 128.248 84.021C128.248 88.3845 131.771 91.908 136.135 91.908Z" fill="currentColor"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

3
nervui-smart-community-op/src/icon/drag.svg

@ -1,3 +0,0 @@
<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M5.14296 2.5715C5.14296 2.14293 4.71439 1.71436 4.28582 1.71436C3.85725 1.71436 3.42868 2.14293 3.42868 2.5715C3.42868 3.00007 3.85725 3.42864 4.28582 3.42864C4.71439 3.42864 5.14296 3.00007 5.14296 2.5715ZM6.85725 9.42864C6.85725 9.85721 7.28582 10.2858 7.71439 10.2858C8.14296 10.2858 8.57153 9.85721 8.57153 9.42864C8.57153 9.00007 8.14296 8.5715 7.71439 8.5715C7.28582 8.5715 6.85725 9.00007 6.85725 9.42864ZM8.57153 2.5715C8.57153 2.14293 8.14296 1.71436 7.71439 1.71436C7.28582 1.71436 6.85725 2.14293 6.85725 2.5715C6.85725 3.00007 7.28582 3.42864 7.71439 3.42864C8.14296 3.42864 8.57153 3.00007 8.57153 2.5715ZM5.14296 9.42864C5.14296 9.00007 4.71439 8.5715 4.28582 8.5715C3.85725 8.5715 3.42868 9.00007 3.42868 9.42864C3.42868 9.85721 3.85725 10.2858 4.28582 10.2858C4.71439 10.2858 5.14296 9.85721 5.14296 9.42864ZM8.57153 6.00007C8.57153 5.5715 8.14296 5.14293 7.71439 5.14293C7.28582 5.14293 6.85725 5.5715 6.85725 6.00007C6.85725 6.42864 7.28582 6.85721 7.71439 6.85721C8.14296 6.85721 8.57153 6.42864 8.57153 6.00007ZM5.14296 6.00007C5.14296 5.5715 4.71439 5.14293 4.28582 5.14293C3.85725 5.14293 3.42868 5.5715 3.42868 6.00007C3.42868 6.42864 3.85725 6.85721 4.28582 6.85721C4.71439 6.85721 5.14296 6.42864 5.14296 6.00007Z" fill="black" fill-opacity="0.65"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

12
nervui-smart-community-op/src/icon/headerLogin.svg

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 18 KiB

4
nervui-smart-community-op/src/icon/jigouguanli.svg

@ -1,4 +0,0 @@
<svg width="200" height="200" viewBox="0 0 200 200" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M152.921 35C152.921 29.4772 148.444 25 142.921 25H109.934C104.411 25 99.9336 29.4772 99.9336 35V45H25.5C21.3579 45 18 48.3579 18 52.5V52.5C18 56.6421 21.3579 60 25.5 60H174.5C178.642 60 182 56.6421 182 52.5V52.5C182 48.3579 178.642 45 174.5 45H152.921V35ZM138.921 45H113.934V37H138.921V45ZM171 81C171 75.4772 166.523 71 161 71H38C32.4772 71 28 75.4772 28 81V166C28 171.523 32.4772 176 38 176H69.5559V155.682H84.3163V176H161C166.523 176 171 171.523 171 166V81ZM44 161V87H155V161H98.3163V140.682H55.5559V161H44Z" fill="currentColor"/>
<rect x="115" y="103" width="25" height="18" stroke="black" stroke-width="10"/>
</svg>

Before

Width:  |  Height:  |  Size: 777 B

3
nervui-smart-community-op/src/icon/jueseguanli.svg

@ -1,3 +0,0 @@
<svg width="200" height="200" viewBox="0 0 200 200" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M120.106 117.789L120.211 117.842L120.323 117.882C144.496 126.584 160 149.808 160 175C160 176.954 160.66 178.739 161.961 180.039C163.261 181.34 165.045 182 167 182C168.897 182 170.954 181.374 172.414 179.914C173.914 178.414 174.55 176.265 174 173.767C173.917 147.015 159.509 122.22 136.329 108.583C146.483 98.3701 152 84.6965 152 71C152 41.8954 128.105 18 99 18C69.8954 18 46 41.8954 46 71C46 85.7159 52.4628 99.4585 63.561 109.648C40.3784 123.338 26 148.202 26 175C26 176.954 26.6602 178.739 27.9608 180.039C29.2613 181.34 31.0455 182 33 182C34.9545 182 36.7387 181.34 38.0392 180.039C39.3398 178.739 40 176.954 40 175C40 149.808 55.504 126.584 79.6774 117.882L79.7887 117.842L79.8944 117.789C81.1109 117.181 82.3297 116.272 83.2685 115.177C84.1878 114.104 85 112.657 85 111C85 108.392 83.7044 105.677 81.0147 104.273C69.529 96.5752 62 84.188 62 71C62 50.1046 79.1046 33 100 33C120.895 33 138 50.1046 138 71C138 85.247 130.418 97.5837 119.043 104.243C116.314 105.638 115 108.373 115 111C115 112.657 115.812 114.104 116.731 115.177C117.67 116.272 118.889 117.181 120.106 117.789ZM83.3269 149.424C83.6851 150.678 84.4374 151.857 85.8383 152.647L96.6229 162.451C98.2004 164.002 99.9045 164.001 100.934 164L101 164C101.529 164 102.054 163.877 102.44 163.767C102.857 163.648 103.269 163.497 103.618 163.357C103.971 163.216 104.285 163.076 104.51 162.972C104.623 162.92 104.716 162.876 104.782 162.844C104.815 162.828 104.841 162.815 104.86 162.806L104.883 162.795L104.89 162.791L104.893 162.79L104.894 162.789L104.894 162.789L105.233 162.619L114.455 152.373C115.134 151.681 115.795 150.689 116.147 149.632C116.437 148.765 116.659 147.351 115.863 146.135L110.991 122.752C110.919 121.714 110.403 120.87 109.975 120.3C109.889 120.185 109.799 120.072 109.706 119.96C110.249 119.257 110.713 118.508 111.078 117.687C111.709 116.267 112 114.733 112 113C112 105.895 106.105 100 99 100C91.8954 100 86 105.895 86 113C86 114.972 86.6655 116.566 87.3767 117.846C87.6893 118.409 88.0291 118.942 88.3233 119.403L88.422 119.558C88.4918 119.668 88.5583 119.773 88.6218 119.874C88.0382 120.972 88.0018 122.031 88 122.785L83 145.785L82.9999 146.11C82.9994 147.032 82.9987 148.275 83.3269 149.424ZM99.8773 147.294L96.2616 144.281L99.5366 132H100.36L102.829 144.343L99.8773 147.294ZM99 112C99.3495 112 99.8665 112.195 100.336 112.664C100.805 113.134 101 113.65 101 114C101 114.35 100.805 114.866 100.336 115.336C99.8665 115.805 99.3495 116 99 116C98.6505 116 98.1335 115.805 97.6642 115.336C97.2976 114.969 97.0984 114.573 97.0288 114.251C97.4479 113.079 97.7856 112.543 98.0392 112.289C98.1984 112.13 98.3867 112 99 112Z" fill="currentColor"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.7 KiB

12
nervui-smart-community-op/src/icon/login.svg

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 18 KiB

4
nervui-smart-community-op/src/icon/menus.svg

@ -1,4 +0,0 @@
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8.76923 4H3V14H14.9231V5.53846H8.76923V4Z" stroke="#8997AB"/>
<path d="M14.9231 7.07715H3V14.0002H14.9231V7.07715Z" fill="#D2D8E1" stroke="#8997AB"/>
</svg>

Before

Width:  |  Height:  |  Size: 263 B

10
nervui-smart-community-op/src/icon/noData.svg

@ -1,10 +0,0 @@
<svg width="240" height="240" viewBox="0 0 240 240" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path d="M118.392 154.493C143.026 154.493 162.996 150.761 162.996 146.158C162.996 141.556 143.026 137.824 118.392 137.824C93.7586 137.824 73.7891 141.556 73.7891 146.158C73.7891 150.761 93.7586 154.493 118.392 154.493Z" fill="#F5F5F7" fill-opacity="0.8"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M154.075 121.674L138.335 102.303C137.58 101.391 136.476 100.839 135.314 100.839H101.471C100.31 100.839 99.2057 101.391 98.4504 102.303L82.7109 121.674V131.795H154.076V121.674H154.075Z" fill="#AEB8C2"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M96.0456 75.8359H140.738C141.436 75.8359 142.106 76.1132 142.599 76.6067C143.093 77.1002 143.37 77.7696 143.37 78.4675V139.878C143.37 140.576 143.093 141.245 142.599 141.739C142.106 142.232 141.436 142.51 140.738 142.51H96.0456C95.3477 142.51 94.6784 142.232 94.1848 141.739C93.6913 141.245 93.4141 140.576 93.4141 139.878V78.4675C93.4141 77.7696 93.6913 77.1002 94.1848 76.6067C94.6784 76.1132 95.3477 75.8359 96.0456 75.8359V75.8359Z" fill="#F5F5F7"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M101.866 82.3838H134.917C135.266 82.3838 135.601 82.5224 135.847 82.7692C136.094 83.0159 136.233 83.3506 136.233 83.6996V100.119C136.233 100.468 136.094 100.802 135.847 101.049C135.601 101.296 135.266 101.434 134.917 101.434H101.866C101.517 101.434 101.183 101.296 100.936 101.049C100.689 100.802 100.55 100.468 100.55 100.119V83.6996C100.55 83.3506 100.689 83.0159 100.936 82.7692C101.183 82.5224 101.517 82.3838 101.866 82.3838ZM102.039 108.577H134.745C135.139 108.577 135.518 108.734 135.797 109.013C136.076 109.292 136.233 109.671 136.233 110.065C136.233 110.46 136.076 110.839 135.797 111.118C135.518 111.397 135.139 111.554 134.745 111.554H102.039C101.644 111.554 101.265 111.397 100.986 111.118C100.707 110.839 100.55 110.46 100.55 110.065C100.55 109.671 100.707 109.292 100.986 109.013C101.265 108.734 101.644 108.577 102.039 108.577ZM102.039 116.316H134.745C135.139 116.316 135.518 116.473 135.797 116.752C136.076 117.031 136.233 117.41 136.233 117.805C136.233 118.199 136.076 118.578 135.797 118.857C135.518 119.136 135.139 119.293 134.745 119.293H102.039C101.644 119.293 101.265 119.136 100.986 118.857C100.707 118.578 100.55 118.199 100.55 117.805C100.55 117.41 100.707 117.031 100.986 116.752C101.265 116.473 101.644 116.316 102.039 116.316ZM153.929 144.936C153.419 146.956 151.628 148.462 149.498 148.462H87.2853C85.155 148.462 83.3642 146.955 82.855 144.936C82.7579 144.551 82.7089 144.155 82.709 143.758V121.675H100.023C101.936 121.675 103.477 123.285 103.477 125.24V125.267C103.477 127.221 105.037 128.8 106.949 128.8H129.834C131.746 128.8 133.306 127.207 133.306 125.252V125.244C133.306 123.288 134.847 121.674 136.76 121.674H154.074V143.759C154.074 144.165 154.023 144.559 153.929 144.936Z" fill="#DCE0E6"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M156.105 76.9026L151.612 78.6461C151.496 78.6909 151.371 78.7023 151.249 78.6789C151.127 78.6555 151.015 78.5982 150.924 78.5137C150.834 78.4292 150.769 78.3208 150.737 78.2011C150.706 78.0813 150.708 77.9551 150.745 77.8368L152.02 73.7533C150.316 71.8164 149.316 69.4546 149.316 66.9059C149.316 60.3303 155.973 55 164.185 55C172.395 55 179.052 60.3303 179.052 66.9059C179.052 73.4816 172.395 78.8118 164.184 78.8118C161.205 78.8118 158.432 78.1105 156.105 76.9026Z" fill="#DCE0E6"/>
<path d="M170.04 69.0555C171.076 69.0555 171.915 68.2264 171.915 67.2035C171.915 66.1807 171.076 65.3516 170.04 65.3516C169.005 65.3516 168.166 66.1807 168.166 67.2035C168.166 68.2264 169.005 69.0555 170.04 69.0555Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M160.202 68.8238H156.453L158.36 65.583L160.202 68.8238ZM162.545 65.583H165.824V68.8238H162.545V65.583Z" fill="white"/>
<path d="M99.513 173.072C98.915 173.124 98.278 173.176 97.602 173.228V172.201H99.63V171.434H97.602V170.576H96.744V171.434H95.236C95.561 171.005 95.873 170.511 96.159 169.965H99.721V169.133H96.549C96.653 168.899 96.744 168.665 96.835 168.431L95.899 168.275C95.795 168.561 95.678 168.847 95.561 169.133H93.754V169.965H95.145C94.833 170.55 94.482 171.044 94.118 171.46L94.326 172.201H96.744V173.28C95.86 173.332 94.911 173.371 93.923 173.423L94.04 174.255C94.976 174.203 95.886 174.138 96.744 174.086V175.022H97.602V174.021C98.265 173.956 98.902 173.891 99.513 173.839V173.072ZM101.333 172.214H103.023V175.035H103.92V172.214H105.298V171.395H101.398V170.043C102.802 169.887 103.972 169.588 104.934 169.172L104.336 168.47C103.426 168.886 102.152 169.172 100.54 169.328V171.369C100.514 172.539 100.202 173.54 99.63 174.385L100.28 175.061C100.839 174.255 101.19 173.306 101.333 172.214ZM103.842 175.412H95.314V180.3H96.276V179.793H102.88V180.3H103.842V175.412ZM96.276 178.987V177.973H102.88V178.987H96.276ZM96.276 177.219V176.205H102.88V177.219H96.276ZM107.729 169.081V169.991H111.46V170.862C111.447 171.668 111.395 172.435 111.291 173.137H106.858V174.034H111.135C110.966 174.853 110.732 175.594 110.42 176.244C109.718 177.57 108.483 178.623 106.689 179.429L107.209 180.261C109.016 179.481 110.316 178.376 111.122 176.972C111.564 176.14 111.889 175.165 112.097 174.034H113.15V178.766C113.15 179.65 113.566 180.092 114.424 180.092H116.53C117.076 180.092 117.466 179.975 117.713 179.741C117.999 179.455 118.194 178.688 118.298 177.414L117.414 177.128C117.349 178.142 117.232 178.74 117.05 178.948C116.907 179.117 116.673 179.208 116.361 179.208H114.71C114.294 179.208 114.086 178.987 114.086 178.571V174.034H118.116V173.137H112.24C112.331 172.435 112.383 171.668 112.409 170.862V169.991H117.063V169.081H107.729ZM127.554 171.265H129.478C129.426 173.02 129.153 174.554 128.646 175.867C128.126 174.775 127.71 173.462 127.385 171.941L127.554 171.265ZM128.217 176.803C127.619 177.908 126.826 178.805 125.812 179.507L126.293 180.287C127.268 179.585 128.074 178.714 128.698 177.674C129.348 178.766 130.128 179.65 131.038 180.3L131.545 179.533C130.609 178.896 129.816 177.999 129.14 176.829C129.868 175.295 130.271 173.436 130.336 171.265H131.181V170.368H127.749C127.853 169.796 127.957 169.172 128.035 168.509L127.125 168.353C126.865 170.823 126.345 172.786 125.578 174.242L126.163 174.957C126.436 174.489 126.696 173.956 126.93 173.358C127.281 174.658 127.71 175.802 128.217 176.803ZM122.055 174.424C121.964 174.684 121.86 174.957 121.743 175.243H119.845V176.062H121.379C121.119 176.582 120.82 177.115 120.482 177.687C121.119 177.921 121.717 178.168 122.289 178.415C121.535 178.844 120.612 179.195 119.546 179.481L119.988 180.261C121.288 179.897 122.367 179.416 123.225 178.818C123.992 179.156 124.655 179.507 125.227 179.845L125.734 179.117C125.162 178.805 124.564 178.519 123.94 178.233C124.616 177.609 125.097 176.868 125.383 176.01V175.243H122.666C122.744 175.009 122.835 174.775 122.926 174.528L122.055 174.424ZM123.082 177.869C122.614 177.674 122.12 177.492 121.6 177.31C121.86 176.92 122.094 176.504 122.302 176.062H124.538C124.226 176.738 123.732 177.349 123.082 177.869ZM120.872 168.626L120.131 168.873C120.443 169.367 120.729 169.926 121.002 170.563L121.678 170.251C121.444 169.679 121.184 169.133 120.872 168.626ZM124.824 168.587C124.59 169.133 124.252 169.679 123.836 170.238L124.499 170.576C124.915 170.03 125.24 169.471 125.5 168.899L124.824 168.587ZM119.871 170.875V171.694H121.717C121.327 172.409 120.625 173.059 119.624 173.644L120.079 174.398C121.197 173.644 121.977 172.76 122.406 171.733V174.203H123.277V172.513C123.745 172.825 124.304 173.241 124.954 173.761L125.435 173.033C124.707 172.591 123.979 172.188 123.277 171.837V171.694H125.643V170.875H123.277V168.392H122.406V170.875H119.871ZM134.132 180.183C134.86 180.183 135.224 179.793 135.224 179.039V175.243C135.627 175.061 136.03 174.879 136.433 174.671V173.748C136.043 173.956 135.64 174.151 135.224 174.333V171.772H136.472V170.875H135.224V168.418H134.314V170.875H132.754V171.772H134.314V174.71C133.742 174.918 133.144 175.1 132.546 175.243L132.78 176.153C133.287 175.997 133.794 175.815 134.314 175.62V178.805C134.314 179.169 134.145 179.364 133.82 179.364C133.508 179.364 133.17 179.338 132.832 179.299L133.027 180.183H134.132ZM138.019 174.437H140.671V176.036H138.5V180.3H139.371V179.663H142.894V180.3H143.765V176.036H141.581V174.437H144.363V173.592H141.581V172.058H144.025V168.899H137.174V172.968C137.161 175.698 136.693 177.934 135.77 179.65L136.498 180.3C137.356 178.61 137.863 176.66 138.019 174.437ZM140.671 172.058V173.592H138.071C138.071 173.384 138.084 173.176 138.084 172.968V172.058H140.671ZM139.371 178.831V176.868H142.894V178.831H139.371ZM143.115 169.77V171.213H138.084V169.77H143.115Z" fill="#BFBFBF"/>
</svg>

Before

Width:  |  Height:  |  Size: 8.4 KiB

20
nervui-smart-community-op/src/icon/passWord.svg

@ -1,20 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="27px" height="27px" viewBox="0 0 27 27" enable-background="new 0 0 27 27" xml:space="preserve"> <image id="image0" width="27" height="27" x="0" y="0"
href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAbCAMAAAC6CgRnAAAABGdBTUEAALGPC/xhBQAAACBjSFJN
AAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABFFBMVEUAAAAAv78AyLYAya4A
yLEAv6oAzLMAw7QAxqoA//8AxLEAyLYAxa8Ax68A/6oAv58AwbAAw60Ay7QAyrUA//8Au6oAv60A
xsYHxrEGzbQAxqoFxq8Bx7EBx7EBx7IBx7IDxrEAxa0A/4AFzLMBx7EBx7ECybICx7MByLEDx7EA
0bkCybEBxrEEyLEGzrYBx7ABx7IHya4AxLEAxa4ByLECxrEDxrIEyrEDyrEByLIBx7ECyLACx7AB
yLECyLIA27YFx7AByLIDyLQByLECyLMCyLIByLEByLIAyKQDx7ABx7EDx7EByLIBxrADyLADxrAB
x7ICxrEGx64DxrAByLIBx7IBx7ICybEFyLIFw64Bx7H///9/bN2AAAAAWnRSTlMABA4TFxgUEQkB
DRwjIAMIHSIiGAIPHAkkKRI2tvP70FUfAjLo8puN2l8LpPdFKtLfJhoW5aZmSFvtsYGR7pgHN/5i
/ZBw3roOZLNbvblhXuF9KVrrzLJsOC/GUEoAAAAAAWJLR0RbdLyVNAAAAAd0SU1FB+YIEQs0EQnT
FeAAAAEMSURBVCjPfZLpVgIxDIUjIssQVHBUUBhFUQQUBQWVRUDFfQHFhXn/B7HlJJ0inN4fbXO/
k542CQBrzjfvXwgEQ2H4p7AVQVI0sDiBlpZRUyyo5VpxnNSKzWgVp7RGmes4Q/4xsqPKSCQ9aEm2
wdFmKu1sbXOUEbfuxCjYze7t5w6cPEMfQIHPxcMjxNLxSZniCsAps7OqXGvuORs2cD0uLusNoWbr
qkROG+iVna7LyhErAB2uhXlz27sT2z1ZD5z3KMwnxGexvai8iMdeEd801uZ3Sua+Y19jNv9vzAYf
jscqqi6fkg2/5Pqt6kL1TGb5C90fVU/uQ/mXNNL6YOqfse/GeTHOmXE+Z8/1H7m9PuesaZKhAAAA
JXRFWHRkYXRlOmNyZWF0ZQAyMDIyLTA4LTE3VDA5OjUyOjE3KzAyOjAwAAEBzQAAACV0RVh0ZGF0
ZTptb2RpZnkAMjAyMi0wOC0xN1QwOTo1MjoxNyswMjowMHFcuXEAAAAASUVORK5CYII=" />
</svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

7
nervui-smart-community-op/src/icon/resource.svg

@ -1,7 +0,0 @@
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="18" height="18" fill="white"/>
<rect x="3.5" y="2.5" width="11" height="12" fill="#D2D8E1" stroke="#8997AB"/>
<rect x="5.25" y="5.25" width="6.5" height="0.5" fill="white" stroke="#8997AB" stroke-width="0.5"/>
<rect x="5.25" y="7.25" width="4.5" height="0.5" fill="white" stroke="#8997AB" stroke-width="0.5"/>
<rect x="5.25" y="9.25" width="3.5" height="0.5" fill="white" stroke="#8997AB" stroke-width="0.5"/>
</svg>

Before

Width:  |  Height:  |  Size: 526 B

4
nervui-smart-community-op/src/icon/smsManage.svg

@ -1,4 +0,0 @@
<svg width="200" height="200" viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M16 43.2056C16 37.0169 21.0046 32 27.1781 32H174.822C180.995 32 186 37.0169 186 43.2056V96.899C176.74 96.899 169.233 89.3736 169.233 80.0906V73.9811L112.354 100.926C105.318 104.259 97.165 104.269 90.1215 100.952L32.7671 73.9468V133.317C32.7671 142.089 39.8519 149.192 48.5935 149.192H84.4658C93.726 149.192 101.233 156.717 101.233 166H48.5935C30.5834 166 16 151.363 16 133.317V43.2056ZM32.7671 55.3766L97.2498 85.7384C99.7653 86.9229 102.677 86.9195 105.19 85.7291L169.233 55.3905V48.8084H32.7671V55.3766Z" />
<path fill-rule="evenodd" clip-rule="evenodd" d="M192.5 137.588C192.5 136.136 191.532 135.168 190.08 135.168V135.652H187.66C186.692 135.652 185.24 134.2 184.756 133.232L183.304 129.36C182.82 128.392 182.82 126.94 183.788 125.972L185.724 124.036C186.692 123.068 186.692 121.616 185.724 120.648L182.336 117.26C181.368 116.292 179.916 116.292 178.948 117.26L177.012 119.196C176.044 120.164 174.108 120.164 173.14 119.68L169.268 118.228C167.816 117.744 166.848 116.776 166.848 115.324V112.42C166.848 110.968 165.88 110 164.428 110H160.072C158.62 110 157.652 110.968 157.652 112.42V114.84C157.652 115.808 156.2 117.26 155.232 117.744L151.36 119.196C150.392 119.68 148.94 119.68 147.972 118.712L146.036 116.776C145.068 115.808 143.616 115.808 142.648 116.776L139.26 120.164C138.292 121.132 138.292 122.584 139.26 123.552L141.196 125.488C142.164 125.972 142.164 127.908 141.68 128.876L140.228 132.748C139.744 134.2 138.776 135.168 137.324 135.168H134.42C132.968 135.168 132 136.136 132 137.588V141.944C132 143.396 132.968 144.364 134.42 144.364H137.324C138.292 144.848 139.744 145.816 140.228 146.784L141.68 150.656C142.164 152.108 142.164 153.56 141.196 154.528L139.26 156.464C138.292 157.432 138.292 158.884 139.26 159.852L142.648 163.24C143.616 164.208 145.068 164.208 146.036 163.24L147.972 161.304C148.456 160.336 150.392 160.336 151.36 160.82L155.232 162.272C156.684 162.756 157.652 163.724 157.652 165.176V168.08C157.652 169.532 158.62 170.5 160.072 170.5H164.428C165.88 170.5 166.848 169.532 166.848 168.08V165.176C166.848 164.208 168.3 162.756 169.268 162.272L173.14 160.82C174.108 160.336 175.56 160.336 176.528 161.304L178.464 163.24C179.432 164.208 180.884 164.208 181.852 163.24L185.24 159.852C186.208 158.884 186.208 157.432 185.24 156.464L183.304 154.528C182.336 153.56 182.336 151.624 182.82 150.656L184.272 146.3C184.756 145.332 185.724 144.364 187.176 144.364H190.08C191.532 144.364 192.5 143.396 192.5 141.944V137.588ZM162.492 128.392C168.784 128.392 174.108 133.716 174.108 140.008C174.108 146.3 168.784 151.14 162.492 151.624C156.2 151.624 150.876 146.3 150.876 140.008C150.876 133.716 156.2 128.392 162.492 128.392Z" />
</svg>

Before

Width:  |  Height:  |  Size: 2.7 KiB

21
nervui-smart-community-op/src/icon/userName.svg

@ -1,21 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="27px" height="27px" viewBox="0 0 27 27" enable-background="new 0 0 27 27" xml:space="preserve"> <image id="image0" width="27" height="27" x="0" y="0"
href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAbCAMAAAC6CgRnAAAABGdBTUEAALGPC/xhBQAAACBjSFJN
AAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABIFBMVEUAAAAA//8A0bkAzLsA
ya4AzLMAw7QAxLEAzMwAxsYAwq0Ay7QAxa8AyrAAgIAAzLgAx68AzLMAybIAwrYA//8Av6oA27YA
w7QAv7MAxa0AuaIAv68CyLIBx7IBx7EByLIEx68AxKoAwbICx7MBx7EGxrAGxrMCyLAAzrYGzrYC
yLMAyK0ByLIDx7EDybIByLEByLEHxrEDxbAByLEBxrACx68HxLEAyKQDyLQCyLECyLICyLIAwbAC
yLIFzLMAv58AyLEEyLMByLICyLAAqqoBx7EAxqoFybMBx7ECx7ADyLQBxrECx7IEyrEDxbIDx7EF
w7QAzKoAzK0AxqoAxLMAz68AxrMA/6oAv68Av6oA1aoAxbkAxLEAyrUBx7H///+f7y28AAAAXnRS
TlMAAgsPExQRDQUJGSIjHQIZIAohFQEMByIUHwsQgeDwukAeIY3lLSh4FSqQHOJlY/3BJFSruYAn
DliKj3QdmDIIFzz+lAOxGy/ye2LvqUhPTjMPGRIeEBsDIBgGFhoYBqEzEAAAAAFiS0dEX3PRUS0A
AAAHdElNRQfmCBELNBEJ0xXgAAABH0lEQVQoz3WSZ1/CMBDGr2BbxFirlmEV3Av3wi2odQ9QFHe+
/8cwNHdpSvV59Tz3/zV3TQ6AZKTSPaZlZyCh3mwfk+q3nBjJDDBNrq2hwSEW17BHKMcSyiLMF5KM
FUPkjbC/5HfYqIpjpfL4BIVJcao3RWmaC83MUhTD+uTnyh3G59U4AAvkF0PEK5QLDiypdsshW1E5
D67yq2sCrW9ok2pjb25t71SjuBt9t7dfETo4VIOm4AjdMUeVTrBSg7o0p2fE+DmyAGw8USF+ISuX
AIF0V9eK3chKWtxnUdrbO0T38i9cQ7AAH7b68CjUaGK3p/+elrFnfNxWEr0YtBSv3aj9Fi2T/x5D
pqcvoWNFd/7x2b28Xq319d3+MXOqE/wCMOFBJy+4pMgAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjIt
MDgtMTdUMDk6NTI6MTcrMDI6MDAAAQHNAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTA4LTE3VDA5
OjUyOjE3KzAyOjAwcVy5cQAAAABJRU5ErkJggg==" />
</svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

3
nervui-smart-community-op/src/icon/xiaoxiguanli.svg

@ -1,3 +0,0 @@
<svg width="200" height="200" viewBox="0 0 200 200" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M20 32.1462C20 25.9904 24.9853 21 31.1351 21H169.396C175.545 21 180.531 25.9904 180.531 32.1462V76.2327C180.531 80.8496 176.792 84.5924 172.179 84.5924C167.567 84.5924 163.828 80.8496 163.828 76.2327V37.7194H36.7026V155.694L67.3215 132.731C69.2481 131.286 71.5907 130.505 73.9981 130.505H84.7544C89.3667 130.505 93.1058 134.248 93.1058 138.865C93.1058 143.482 89.3667 147.224 84.7544 147.224H75.8524L37.8117 175.754C30.4703 181.26 20 176.016 20 166.834V32.1462ZM46.9098 77.1957C46.9098 80.275 48.1318 83.2282 50.307 85.4056C52.4823 87.5831 55.4325 88.8063 58.5088 88.8063C61.585 88.8063 64.5353 87.5831 66.7105 85.4056C68.8858 83.2282 70.1078 80.275 70.1078 77.1957C70.1078 74.1163 68.8858 71.1631 66.7105 68.9857C64.5353 66.8082 61.585 65.585 58.5088 65.585C55.4325 65.585 52.4823 66.8082 50.307 68.9857C48.1318 71.1631 46.9098 74.1163 46.9098 77.1957ZM84.9546 77.1957C84.9546 80.275 86.1277 83.2282 88.216 85.4056C90.3042 87.5831 93.1365 88.8063 96.0897 88.8063C99.0429 88.8063 101.875 87.5831 103.963 85.4056C106.052 83.2282 107.225 80.275 107.225 77.1957C107.225 74.1163 106.052 71.1631 103.963 68.9857C101.875 66.8082 99.0429 65.585 96.0897 65.585C93.1365 65.585 90.3042 66.8082 88.216 68.9857C86.1277 71.1631 84.9546 74.1163 84.9546 77.1957ZM125.469 85.4056C123.294 83.2282 122.071 80.275 122.071 77.1957C122.071 74.1163 123.294 71.1631 125.469 68.9857C127.644 66.8082 130.594 65.585 133.671 65.585C136.747 65.585 139.697 66.8082 141.872 68.9857C144.048 71.1631 145.27 74.1163 145.27 77.1957C145.27 80.275 144.048 83.2282 141.872 85.4056C139.697 87.5831 136.747 88.8063 133.671 88.8063C130.594 88.8063 127.644 87.5831 125.469 85.4056ZM178.728 128.332C180.091 128.332 181 129.242 181 130.607V134.702C181 136.067 180.091 136.977 178.728 136.977H176.002C174.639 136.977 173.73 137.887 173.276 138.797L171.913 142.892C171.458 143.802 171.458 145.622 172.367 146.532L174.184 148.352C175.093 149.262 175.093 150.627 174.184 151.538L171.004 154.723C170.095 155.633 168.732 155.633 167.823 154.723L166.006 152.903C165.097 151.993 163.734 151.993 162.825 152.448L159.19 153.813C158.282 154.268 156.919 155.633 156.919 156.543V159.273C156.919 160.638 156.01 161.548 154.647 161.548H150.557C149.194 161.548 148.286 160.638 148.286 159.273V156.543C148.286 155.178 147.377 154.268 146.014 153.813L142.379 152.448C141.47 151.993 139.653 151.993 139.198 152.903L137.381 154.723C136.472 155.633 135.109 155.633 134.2 154.723L131.02 151.538C130.111 150.627 130.111 149.262 131.02 148.352L132.837 146.532C133.746 145.622 133.746 144.257 133.291 142.892L131.928 139.252C131.474 138.342 130.111 137.432 129.202 136.977H126.476C125.113 136.977 124.204 136.067 124.204 134.702V130.607C124.204 129.242 125.113 128.332 126.476 128.332H129.202C130.565 128.332 131.474 127.422 131.928 126.057L133.291 122.416C133.746 121.506 133.746 119.686 132.837 119.231L131.02 117.411C130.111 116.501 130.111 115.136 131.02 114.226L134.2 111.041C135.109 110.131 136.472 110.131 137.381 111.041L139.198 112.861C140.107 113.771 141.47 113.771 142.379 113.316L146.014 111.951C146.922 111.496 148.286 110.131 148.286 109.221V106.946C148.286 105.581 149.194 104.671 150.557 104.671H154.647C156.01 104.671 156.919 105.581 156.919 106.946V109.676C156.919 111.041 157.827 111.951 159.19 112.406L162.825 113.771C163.734 114.226 165.552 114.226 166.46 113.316L168.278 111.496C169.186 110.586 170.55 110.586 171.458 111.496L174.639 114.681C175.548 115.591 175.548 116.956 174.639 117.866L172.821 119.686C171.913 120.596 171.913 121.961 172.367 122.871L173.73 126.512C174.184 127.422 175.548 128.787 176.456 128.787H178.728V128.332ZM163.734 132.882C163.734 126.967 158.736 121.961 152.829 121.961C146.922 121.961 141.924 126.967 141.924 132.882C141.924 138.797 146.922 143.802 152.829 143.802C158.736 143.347 163.734 138.797 163.734 132.882Z" fill="currentColor"/>
</svg>

Before

Width:  |  Height:  |  Size: 3.9 KiB

3
nervui-smart-community-op/src/icon/xieyiguanli.svg

@ -1,3 +0,0 @@
<svg width="200" height="200" viewBox="0 0 200 200" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M112.4 137.12L112.402 137.124L112.405 137.128C114.144 139.922 117.089 141.649 120.357 141.649H172.018C175.281 141.649 178.253 139.927 179.995 137.128L179.997 137.124L180 137.12C181.853 134.098 181.992 130.29 180.4 127.135L180.398 127.131L154.556 76.2963L154.556 76.2957C152.928 73.0982 149.731 71.0556 146.2 71.0556C142.641 71.0556 139.47 73.1006 137.844 76.2957L137.843 76.2963L112.001 127.131L111.999 127.135C110.407 130.29 110.546 134.098 112.4 137.12ZM152.63 123.063L152.63 123.057V123.05C152.63 120.346 150.935 118.024 148.548 117.087C150.927 116.176 152.63 113.878 152.63 111.173V101.531C152.63 101.059 152.578 100.6 152.48 100.159L167.12 128.982H148.682C150.995 128.009 152.606 125.716 152.63 123.063ZM139.794 123.05C139.794 120.303 141.518 117.975 143.927 117.06C141.585 116.131 139.915 113.852 139.915 111.173V101.531C139.915 100.812 140.035 100.123 140.256 99.4798L125.256 128.982H143.718C141.405 128.008 139.794 125.712 139.794 123.05ZM146.273 95.1978C144.116 95.1978 142.197 96.276 141.045 97.9281L146.199 87.7919L151.065 97.3731C149.897 96.0386 148.177 95.1978 146.273 95.1978ZM32.7754 176.866H134.129C141.895 176.866 148.404 170.977 148.404 163.489V156.009C148.404 152.509 145.571 149.675 142.071 149.675C138.571 149.675 135.737 152.509 135.737 156.009V163.469C135.737 163.47 135.737 163.471 135.736 163.474C135.726 163.499 135.68 163.628 135.458 163.799C135.188 164.008 134.737 164.2 134.129 164.2H32.7754C32.1664 164.2 31.7064 164.007 31.4271 163.794C31.2031 163.623 31.1539 163.495 31.144 163.469C31.1432 163.467 31.1426 163.465 31.1423 163.465V36.8772C31.1426 36.8765 31.1432 36.8751 31.144 36.8729C31.1539 36.8471 31.2031 36.7189 31.4271 36.5478C31.7064 36.3345 32.1664 36.1423 32.7754 36.1423H134.129C134.721 36.1423 135.175 36.3319 135.453 36.5454C135.676 36.7169 135.725 36.8456 135.736 36.8721C135.737 36.8745 135.737 36.8761 135.737 36.8768V55.0684C135.737 58.5685 138.571 61.4016 142.071 61.4016C145.571 61.4016 148.404 58.5685 148.404 55.0684V36.8525C148.404 29.3868 141.893 23.5 134.129 23.5H32.7754C25.0113 23.5 18.5 29.3868 18.5 36.8525V163.514C18.5 170.979 25.0113 176.866 32.7754 176.866ZM49.6555 74.0556H117.249C120.739 74.0556 123.558 71.1834 123.558 67.6981C123.558 64.2078 120.734 61.3405 117.224 61.3405H49.6555C46.1456 61.3405 43.3222 64.2078 43.3222 67.6981C43.3222 71.1883 46.1456 74.0556 49.6555 74.0556ZM49.6555 107.816H93.1065C96.6163 107.816 99.4397 104.948 99.4397 101.458C99.4397 97.9679 96.6163 95.1006 93.1065 95.1006H49.6555C46.1456 95.1006 43.3222 97.9679 43.3222 101.458C43.3222 104.948 46.1456 107.816 49.6555 107.816ZM49.6555 141.576H93.1065C96.5664 141.576 99.4397 138.879 99.4397 135.34C99.4397 131.8 96.5664 129.104 93.1065 129.104H49.6555C46.1955 129.104 43.3222 131.8 43.3222 135.34C43.3222 138.879 46.1955 141.576 49.6555 141.576Z" fill="currentColor"/>
</svg>

Before

Width:  |  Height:  |  Size: 2.9 KiB

3
nervui-smart-community-op/src/icon/yonghuguanli.svg

@ -1,3 +0,0 @@
<svg width="200" height="200" viewBox="0 0 200 200" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M99.9884 101.587C123.172 101.587 142.026 82.7363 142.026 59.555C142.026 36.3755 123.174 17.5 99.9884 17.5C76.8046 17.5 57.9509 36.3505 57.9509 59.5319C57.9509 82.7113 76.8027 101.587 99.9884 101.587ZM99.9884 30.9612C115.741 30.9612 128.564 43.7824 128.564 59.5319C128.564 75.2813 115.741 88.1025 99.9884 88.1025C84.2359 88.1025 71.4133 75.2813 71.4133 59.5319C71.4133 43.7824 84.2359 30.9612 99.9884 30.9612ZM137.769 105.048H62.2312C40.874 105.048 23.5 122.419 23.5 143.774C23.5 165.129 40.874 182.5 62.2312 182.5H137.769C159.126 182.5 176.5 165.129 176.5 143.774C176.5 122.418 159.102 105.048 137.769 105.048ZM82.9726 118.532H117.004L99.9884 135.546L82.9726 118.532ZM137.769 169.016H62.2312C48.3052 169.016 36.9855 157.697 36.9855 143.774C36.9855 129.851 48.3052 118.532 62.2312 118.532H63.9241L95.2381 149.842C96.5555 151.159 98.285 151.822 100.012 151.822C101.738 151.822 103.468 151.159 104.785 149.842L136.099 118.532H137.792C151.718 118.532 163.038 129.851 163.038 143.774C163.038 157.693 151.676 169.016 137.769 169.016Z" fill="currentColor"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

34
nervui-smart-community-op/src/main.ts

@ -1,34 +0,0 @@
import { createApp } from 'vue';
import App from '/@/App.vue';
import { saasInit } from '/nerv-lib/saas';
import { apiModule } from '/@/api';
import { appConfig } from '/@/config';
const app = createApp(App);
saasInit({
app,
apiModule,
appConfig,
});
import nodeWrap from '/@/components/nodeWrap.vue';
app.component('NodeWrap', nodeWrap); //初始化组件
import addNode from '/@/components/addNode.vue';
app.component('AddNode', addNode); //初始化组件
app.directive('focus', {
mounted(el) {
el.focus();
},
});
app.directive('enterNumber', {
mounted(el, { value = 100 }, vnode) {
el = el.nodeName == 'INPUT' ? el : el.children[0];
const RegStr = value == 0 ? `^[\\+\\-]?\\d+\\d{0,0}` : `^[\\+\\-]?\\d+\\.?\\d{0,${value}}`;
el.addEventListener('input', function () {
el.value = el.value.match(new RegExp(RegStr, 'g'));
el.dispatchEvent(new Event('input'));
});
},
});
app.mount('#app');

11
nervui-smart-community-op/src/router/index.ts

@ -1,11 +0,0 @@
/** @format */
const RootRoute = {
path: '/',
name: 'root',
redirect: { name: 'MessageTemplate' },
meta: {
title: 'Root',
},
};
export default RootRoute;

1565
nervui-smart-community-op/src/router/operationManagement/index.ts

File diff suppressed because it is too large

943
nervui-smart-community-op/src/router/systemSettingManage/index.ts

@ -1,943 +0,0 @@
/** @format */
const Base = () => import('/nerv-lib/saas/view/system/layout/content.vue');
const basicData = {
path: '/systemSettingManage',
name: 'systemSettingManage',
meta: { title: '系统设置', icon: 'doorway', index: 10 },
redirect: { name: 'UserIndex' },
children: [
{
path: 'menuManage',
name: 'menuManage',
meta: { title: '菜单管理', hideResource: true, icon: 'caidanguanli', hideChildren: true },
component: Base,
redirect: { name: 'menuManageIndex' },
children: [
{
path: 'index',
name: 'menuManageIndex',
component: () => import('/nerv-lib/saas/view/menuManage/index.vue'),
meta: { title: '菜单管理', keepAlive: true },
},
],
},
{
path: 'user',
name: 'User',
meta: { title: '用户管理', icon: 'yonghuguanli', hideChildren: true },
redirect: { name: 'UserIndex' },
component: Base,
children: [
{
path: 'index',
name: 'UserIndex',
component: () => import('/@/view/userManage/userList/index.vue'),
meta: {
title: '用户管理',
keepAlive: true,
operates: [
{
title: '重置密码',
code: 'UserReset',
backApi: [
{
method: 'POST',
url: '/api/objs/person/reset',
},
],
},
{
title: '删除',
code: 'UserRemove',
backApi: [
{
method: 'POST',
url: '/api/objs/person/delete',
},
],
},
],
backApi: [
{
method: 'GET',
url: '/api/objs/person/pageList',
},
],
},
},
{
path: 'add',
name: 'UserAdd',
meta: {
type: 'op',
title: '新增',
backApi: [
{ method: 'POST', url: '/api/objs/person/add' },
{ method: 'GET', url: '/api/objs/person/detail' },
{ method: 'GET', url: '/api/objs/admin/DictItem' },
{ method: 'GET', url: '/api/objs/Department' },
{ method: 'GET', url: '/api/objs/admin/BaseArea' },
{ method: 'POST', url: '/api/objs/admin/MaterialFile' },
],
},
component: () => import('/@/view/userManage/userList/add.vue'),
},
{
path: 'edit',
name: 'UserEdit',
meta: {
type: 'op',
title: '编辑',
backApi: [
{ method: 'POST', url: '/api/objs/person/update' },
{ method: 'GET', url: '/api/objs/person/detail' },
{ method: 'GET', url: '/api/objs/admin/DictItem' },
{ method: 'GET', url: '/api/objs/Department' },
{ method: 'GET', url: '/api/objs/admin/BaseArea' },
{ method: 'POST', url: '/api/objs/admin/MaterialFile' },
],
},
component: () => import('/@/view/userManage/userList/edit.vue'),
},
{
path: 'detail',
name: 'UserDetail',
meta: {
type: 'op',
title: '详情',
backApi: [{ method: 'GET', url: '/api/objs/person/detail' }],
},
component: () => import('/@/view/userManage/userList/detail.vue'),
},
],
},
{
path: 'roleType',
name: 'RoleType',
meta: { title: '角色管理', icon: 'jueseguanli', hideChildren: true },
redirect: { name: 'RoleTypeIndex' },
component: Base,
children: [
{
path: 'index',
name: 'RoleTypeIndex',
component: () => import('/@/view/userManage/roleType/index.vue'),
meta: {
title: '角色管理',
keepAlive: true,
operates: [
{
title: '删除',
code: 'RoleTypeRemove',
backApi: [
{
method: 'POST',
url: '/api/objs/Role/delete',
},
],
},
],
backApi: [
{
method: 'GET',
url: '/api/objs/Role',
},
],
},
},
{
path: 'add',
meta: {
type: 'op',
title: '新增',
backApi: [
{ method: 'POST', url: '/api/objs/Role' },
{ method: 'POST', url: '/api/objs/Role/update' },
{ method: 'GET', url: '/api/objs/Role/detail' },
{ method: 'GET', url: '/api/objs/Role/ResourcesMap' },
{ method: 'GET', url: '/api/objs/AppResourcesAllList' },
],
},
name: 'RoleTypeAdd',
component: () => import('/@/view/userManage/roleType/addOrEdit.vue'),
},
{
path: 'edit',
meta: {
type: 'op',
title: '编辑',
backApi: [
{ method: 'POST', url: '/api/objs/Role' },
{ method: 'POST', url: '/api/objs/Role/update' },
{ method: 'GET', url: '/api/objs/Role/detail' },
{ method: 'GET', url: '/api/objs/Role/ResourcesMap' },
{ method: 'GET', url: '/api/objs/AppResourcesAllList' },
],
},
name: 'RoleTypeEdit',
component: () => import('/@/view/userManage/roleType/addOrEdit.vue'),
},
{
path: 'setRolePerson',
meta: {
type: 'op',
title: '人员设置',
backApi: [
{
method: 'POST',
url: '/api/objs/Role/Account',
},
{
method: 'GET',
url: '/api/objs/Role/detail',
},
{
method: 'GET',
url: '/api/objs/Role/Account',
},
],
},
name: 'SetRolePerson',
component: () => import('/@/view/userManage/roleType/setRolePerson.vue'),
},
],
},
{
path: '/organManagement',
name: 'organManagement',
meta: { title: '机构管理', icon: 'jigouguanli' },
redirect: { name: 'OperationManagement' },
component: Base,
children: [
{
path: 'organAccount',
name: 'OrganAccount',
meta: { title: '机构账号', hideChildren: true },
redirect: { name: 'OrganAccountIndex' },
component: Base,
children: [
{
path: 'index',
name: 'OrganAccountIndex',
component: () => import('/@/view/organManagement-op/organAccount/index.vue'),
meta: {
title: '机构列表',
keepAlive: true,
backApi: [
{
method: 'GET',
url: '/api/objs/admin/tenant/operator/pageList',
},
{
method: 'POST',
url: '/api/objs/admin/tenant/disable',
},
{
method: 'POST',
url: '/api/objs/admin/tenant/resetPassword',
},
],
operates: [
{
title: '批量导出',
code: 'exports',
},
{
title: '重置密码',
code: 'resetPassword',
},
],
},
},
{
path: 'add',
name: 'OrganAccountAdd',
component: () => import('/@/view/organManagement-op/organAccount/add.vue'),
meta: {
title: '新增',
type: 'op',
backApi: [
{
method: 'GET',
url: '/api/objs/admin/tenant/operator/detail',
},
{
method: 'GET',
url: '/api/objs/bg/institution/pageList',
},
{
method: 'GET',
url: '/api/objs/ResCollType/typeList',
},
{
method: 'POST',
url: '/api/objs/admin/community/tenant/add',
},
{
method: 'POST',
url: '/api/objs/admin/community/tenant/update',
},
],
},
},
{
path: 'edit',
name: 'OrganAccountEdit',
component: () => import('/@/view/organManagement-op/organAccount/edit.vue'),
meta: {
title: '编辑',
type: 'op',
backApi: [
{
method: 'GET',
url: '/api/objs/admin/tenant/operator/detail',
},
{
method: 'GET',
url: '/api/objs/bg/institution/pageList',
},
{
method: 'POST',
url: '/api/objs/admin/pension/tenant/add',
},
{
method: 'GET',
url: '/api/objs/ResCollType/typeList',
},
{
method: 'POST',
url: '/api/objs/admin/community/tenant/update',
},
],
},
},
{
path: 'config',
name: 'OrganAccountConfig',
component: () => import('/@/view/organManagement-op/organAccount/config.vue'),
meta: {
title: '配置项',
type: 'op',
backApi: [
{
method: 'GET',
url: '/api/objs/admin/common/tenant/orgConfigTemplateList',
},
{
method: 'GET',
url: '/api/objs/admin/productType/selectTenant',
},
{
method: 'GET',
url: '/api/objs/admin/v2/tenant/config/orgConfigTemplateList',
},
{
method: 'GET',
url: '/api/objs/admin/common/tenant/hadProduct',
},
{
method: 'GET',
url: '/api/objs/admin/productType/select',
},
{
method: 'GET',
url: '/api/objs/admin/common/tenant/hadAlarmGrade',
},
{
method: 'POST',
url: '/api/objs/admin/tenant/config/orgConfig',
},
{
method: 'POST',
url: '/api/objs/admin/common/tenant/initPension',
},
],
},
},
{
path: 'batchConfig',
name: 'OrganAccountBatchConfig',
component: () => import('/@/view/organManagement-op/organAccount/batchConfig.vue'),
meta: {
title: '批量配置',
type: 'op',
backApi: [
{
method: 'GET',
url: '/api/objs/admin/common/tenant/orgConfigTemplateList',
},
{
method: 'GET',
url: '/api/objs/admin/v2/tenant/config/orgConfigTemplateList',
},
{
method: 'POST',
url: '/api/objs/admin/tenant/config/orgConfig',
},
{
method: 'POST',
url: '/api/objs/admin/common/tenant/initPension',
},
],
},
},
],
},
{
path: 'organType',
name: 'OrganType',
meta: { title: '机构类型', hideChildren: true },
redirect: { name: 'OrganTypeIndex' },
component: Base,
children: [
{
path: 'index',
name: 'OrganTypeIndex',
component: () => import('/nerv-lib/saas/view/commonMoudule/organType/index.vue'),
meta: {
title: '机构类型',
keepAlive: true,
backApi: [
{
method: 'GET',
url: '/api/objs/ResCollType/page',
},
],
operates: [
{
title: '编辑备注',
code: 'OrganTypeEditDec',
backApi: [
{
method: 'POST',
url: '/api/objs/ResCollType/update',
},
],
},
],
},
},
{
path: 'appListUnderOranType',
name: 'AppListUnderOranType',
component: () =>
import('/nerv-lib/saas/view/commonMoudule/organType/appListUnderOranType.vue'),
meta: {
title: '应用管理',
type: 'op',
backApi: [
{
method: 'GET',
url: '/api/objs/CollTypeResource/Application',
},
],
},
},
{
path: 'permissionSet',
name: 'PermissionSet',
component: () =>
import('/nerv-lib/saas/view/commonMoudule/organType/permissionSet.vue'),
meta: {
title: '追加权限',
type: 'op',
backApi: [
{
method: 'GET',
url: '/api/objs/ResCollResource',
},
{
method: 'GET',
url: '/api/objs/Resources/AllList',
},
{
method: 'POST',
url: '/api/objs/ResCollResource/save',
},
],
},
},
{
path: 'menusSort',
name: 'MenusTree',
component: () => import('/nerv-lib/saas/view/commonMoudule/organType/menusTree.vue'),
meta: {
title: '调整布局',
type: 'op',
backApi: [
{
method: 'POST',
url: '/api/objs/CollTypeResource/MenuTree',
},
{
method: 'POST',
url: '/api/objs/CollTypeResource/Sort',
},
],
},
},
{
path: 'menusEdit',
name: 'MenusEdit',
component: () => import('/nerv-lib/saas/view/commonMoudule/organType/menusEdit.vue'),
meta: {
title: '修改菜单',
type: 'op',
backApi: [
{
method: 'POST',
url: '/api/objs/CollTypeResource/MenuTree',
},
{
method: 'POST',
url: '/api/objs/CollTypeResource/Update',
},
{
method: 'POST',
url: '/api/objs/CollTypeResource/Add',
},
{
method: 'POST',
url: '/api/objs/CollTypeResource/Offline',
},
],
},
},
{
path: 'config',
name: 'OrganTypeConfig',
component: () => import('/nerv-lib/saas/view/commonMoudule/organType/config.vue'),
meta: {
title: '配置项',
type: 'op',
backApi: [
{
method: 'GET',
url: '/api/objs/admin/authorityType/queryAuthorityDataListByTenantType',
},
{
method: 'GET',
url: '/api/objs/admin/productType/selectOrganizationType',
},
{
method: 'GET',
url: '/api/objs/admin/v2/tenant/config/OrgTypePageListInit',
},
{
method: 'GET',
url: '/api/objs/admin/common/orgType/allAlarmRule',
},
{
method: 'GET',
url: '/api/objs/admin/common/orgType/hadAlarmRule',
},
{
method: 'GET',
url: '/api/objs/admin/common/orgType/hadProduct',
},
{
method: 'GET',
url: '/api/objs/admin/common/orgType/hadAlarmGrade',
},
{
method: 'GET',
url: '/api/objs/admin/productType/select',
},
{
method: 'POST',
url: '/api/objs/admin/tenant/initPension',
},
{
method: 'GET',
url: '/api/objs/admin/v2/tenant/config/OrgTypePageListInit',
},
{
method: 'GET',
url: '/api/objs/admin/workOrder/queryWorkOrderTypeDataByTenantType',
},
{
method: 'GET',
url: '/api/objs/admin/workOrder/queryWorkOrderTypePage',
},
{
method: 'GET',
url: '/api/objs/admin/v2/ResCollType/config/orgConfigTemplateList',
},
{
method: 'GET',
url: '/api/objs/admin/v2/tenant/config/orgConfigTemplateList',
},
{
method: 'GET',
url: '/api/objs/admin/authorityType/querySetAuthorityDataPublicList',
},
{
method: 'GET',
url: '/api/objs/admin/ResCollType/config/orgConfigTemplateList',
},
{
method: 'GET',
url: '/api/objs/admin/processTemplate/getTypeByOrg',
},
{
method: 'GET',
url: '/api/objs/admin/processTemplate/pageList',
},
{
method: 'POST',
url: '/api/objs/admin/tenant/config/orgTypeConfig',
},
{
method: 'POST',
url: '/api/objs/admin/v2/tenant/config/orgTypeConfigInit',
},
],
},
},
{
path: 'themeConfig',
name: 'OrganTypeThemeConfig',
component: () =>
import('/nerv-lib/saas/view/commonMoudule/organType/themeConfig.vue'),
meta: {
title: '主题配置',
type: 'op',
backApi: [
{
method: 'POST',
url: '/api/objs/admin/sysTheme/orgType/update',
},
{
method: 'GET',
url: '/api/objs/User/themeConfig',
},
{
method: 'GET',
url: '/api/objs/admin/sysTheme/orgType/detail',
},
],
},
},
],
},
],
},
{
path: 'appManage',
name: 'AppManage',
meta: { title: '应用管理', hideChildren: true, icon: 'caidanguanli' },
redirect: { name: 'AppManageIndex' },
component: Base,
children: [
{
path: 'appList',
name: 'AppManageIndex',
component: () => import('/nerv-lib/saas/view/commonMoudule/organType/appList.vue'),
// component: () => import('/@/view/organManagement-op/organType/appList.vue'),
meta: {
title: '应用管理',
icon: 'doorway',
keepAlive: true,
backApi: [
{
method: 'GET',
url: '/api/objs/ProjectManagerInfo',
},
],
operates: [
{
title: '清理版本',
code: 'VersionClear',
backApi: [
{
method: 'POST',
url: '/api/objs/ResourceMagVersionClear',
},
],
},
{
title: '编辑备注',
code: 'VersionDescribeUpdate',
backApi: [
{
method: 'POST',
url: '/api/objs/ResourceMagVersion/update',
},
],
},
{
title: '导出JSON',
code: 'VersionExport',
backApi: [
{
method: 'POST',
url: '/api/objs/ResourceMagVersionComplete',
},
],
},
],
},
},
{
path: 'versionLoad',
name: 'VersionLoad',
component: () => import('/nerv-lib/saas/view/commonMoudule/organType/versionLoad.vue'),
//component: () => import('/@/view/organManagement-op/organType/versionLoad.vue'),
meta: {
title: '导入应用',
type: 'op',
backApi: [
{
method: 'POST',
url: '/api/objs/ResourceMagVersionComplete',
},
],
},
},
{
path: 'versionList',
name: 'VersionList',
component: () => import('/nerv-lib/saas/view/commonMoudule/organType/versionList.vue'),
meta: {
title: '版本管理',
type: 'op',
backApi: [
{
method: 'GET',
url: '/api/objs/ResourceMagVersion',
},
],
},
},
{
path: 'menuTreeDetail',
name: 'MenuTreeDetail',
component: () => import('/nerv-lib/saas/view/commonMoudule/organType/menuTreeDetail.vue'),
meta: {
title: '查看功能树',
type: 'op',
backApi: [
{
method: 'GET',
url: '/api/objs/ResourceMagVersion',
},
],
},
},
],
},
{
path: 'screenOperate',
name: 'ScreenOperate',
meta: { title: '大屏运维', hideChildren: true, icon: 'caidanguanli' },
redirect: { name: 'ScreenOperateIndex' },
component: Base,
children: [
{
path: 'index',
name: 'ScreenOperateIndex',
component: () => import('/nerv-lib/saas/view/commonMoudule/screenOperate/index.vue'),
meta: {
title: '大屏运维',
icon: 'doorway',
keepAlive: true,
backApi: [
{
method: 'GET',
url: '/api/objs/admin/DatavManage/list',
},
],
operates: [
{
title: '导入接口',
code: 'ScreenImportApi',
backApi: [
{
method: 'POST',
url: '/api/objs/admin/DatavManage/saveBackApi',
},
],
},
{
title: '导出接口',
code: 'ScreenExportApi',
backApi: [
{
method: 'GET',
url: '/api/objs/admin/DatavManage/detail',
},
],
},
],
},
},
{
path: 'screenOperateEdit',
name: 'ScreenOperateEdit',
component: () =>
import('/nerv-lib/saas/view/commonMoudule/screenOperate/screenOperateEdit.vue'),
meta: {
title: '编辑大屏',
icon: 'doorway',
type: 'op',
backApi: [
{
method: 'GET',
url: '/api/objs/admin/DatavManage/detail',
},
{
method: 'POST',
url: '/api/objs/admin/DatavManage/editInfo',
},
{
method: 'POST',
url: '/api/objs/admin/MaterialFile',
},
],
},
},
{
path: 'authorize',
name: 'ScreenOperateAuthorize',
component: () => import('/nerv-lib/saas/view/commonMoudule/screenOperate/authorize.vue'),
meta: {
title: '授权机构',
icon: 'doorway',
type: 'op',
backApi: [
{
method: 'GET',
url: '/api/objs/admin/DatavManage/detail',
},
{
method: 'GET',
url: '/api/objs/admin/DatavManage/organizeList',
},
{
method: 'POST',
url: '/api/objs/admin/DatavManage/authOrganize',
},
],
},
},
],
},
{
path: 'bigDataScreen',
name: 'BigDataScreen',
meta: { title: '数据大屏', hideChildren: true, icon: 'caidanguanli' },
redirect: { name: 'BigDataScreenIndex' },
component: Base,
children: [
{
path: 'index',
name: 'BigDataScreenIndex',
component: () => import('/nerv-lib/saas/view/commonMoudule/bigDataScreen/index.vue'),
meta: {
title: '数据大屏',
icon: 'doorway',
keepAlive: true,
backApi: [
{
method: 'GET',
url: '/api/objs/ProjectManagerInfo',
},
],
operates: [
{
title: '分享链接',
code: 'shareLink',
backApi: [
{ method: 'POST', url: '/api/objs/Datav/share' },
{ method: 'POST', url: '/api/objs/Datav/shareCancel' },
{ method: 'GET', url: '/api/objs/Datav/shareList' },
],
},
],
},
},
],
},
{
path: 'administrativeDivision-op',
name: 'AdministrativeDivision',
meta: { title: '行政区域', hideChildren: true, icon: 'caidanguanli' },
redirect: { name: 'AdministrativeDivisionIndex' },
component: Base,
children: [
{
path: 'index',
name: 'AdministrativeDivisionIndex',
component: () =>
import('/nerv-lib/saas/view/commonMoudule/administrativeDivision/index.vue'),
meta: {
title: '行政区域',
keepAlive: true,
backApi: [
{
method: 'GET',
url: '/api/objs/admin/area/listByParentCode',
},
{
method: 'GET',
url: '/api/objs/admin/area/pageList',
},
{
method: 'GET',
url: '/api/objs/op/objs/Role/Account',
},
{
method: 'GET',
url: '/api/objs/admin/area/areaTree',
},
],
},
},
{
path: 'add',
name: 'AdministrativeDivisionAdd',
meta: {
title: '新增',
type: 'op',
backApi: [
{
method: 'GET',
url: '/api/objs/admin/area/listByParentCode',
},
{
method: 'POST',
url: '/api/objs/admin/area/add',
},
],
},
component: () =>
import('/nerv-lib/saas/view/commonMoudule/administrativeDivision/add.vue'),
},
{
path: 'edit',
name: 'AdministrativeDivisionEdit',
meta: {
title: '编辑',
type: 'op',
backApi: [
{
method: 'GET',
url: '/api/objs/admin/area/detail',
},
{
method: 'POST',
url: '/api/objs/admin/area/update',
},
],
},
component: () =>
import('/nerv-lib/saas/view/commonMoudule/administrativeDivision/edit.vue'),
},
],
},
],
};
export default basicData;

12
nervui-smart-community-op/src/store/item.ts

@ -1,12 +0,0 @@
import { defineStore } from 'pinia';
export const items = defineStore({
id: 'items',
state() {
return { list: [], count: 10 };
},
getters: {
double: (state: any) => state.count * 2,
},
actions: {},
});

97
nervui-smart-community-op/src/stores/index.js

@ -1,97 +0,0 @@
import { defineStore } from 'pinia';
export const useStore = defineStore('store', {
state: () => ({
tableId: '',
isTried: false,
promoterDrawer: false,
flowPermission1: {},
approverDrawer: false,
approverConfig1: {},
copyerDrawer: false,
copyerConfig1: {},
conditionDrawer: false,
conditionsConfig1: {
conditionNodes: [],
},
quitReason: [],
}),
actions: {
setTableId(payload) {
this.tableId = payload;
},
setIsTried(payload) {
this.isTried = payload;
},
setPromoter(payload) {
this.promoterDrawer = payload;
},
setFlowPermission(payload) {
this.flowPermission1 = payload;
},
setApprover(payload) {
this.approverDrawer = payload;
},
setApproverConfig(payload) {
this.approverConfig1 = payload;
},
setCopyer(payload) {
this.copyerDrawer = payload;
},
setCopyerConfig(payload) {
this.copyerConfig1 = payload;
},
setCondition(payload) {
this.conditionDrawer = payload;
},
setConditionsConfig(payload) {
this.conditionsConfig1 = payload;
},
setQuitReason(quitType) {
if (quitType == 0) {
this.quitReason = [
{
label: '个人原因',
value: 0,
},
{
label: '家庭原因',
value: 1,
},
{
label: '发展原因',
value: 2,
},
{
label: '合同到期不续约',
value: 3,
},
{
label: '其他',
value: 4,
},
];
}
if (quitType == 1) {
this.quitReason = [
{
label: '协议解除',
value: 5,
},
{
label: '无法胜任工作',
value: 6,
},
{
label: '裁员',
value: 7,
},
{
label: '严重违法违纪',
value: 8,
},
];
}
},
},
});

111
nervui-smart-community-op/src/theme/color.less

@ -1,111 +0,0 @@
// 临时为豪恩部分页面内写死颜色的组件用的样式
// .link-btn {
// color: @primary-color !important;
// }
// .ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected {
// color: @primary-color !important;
// }
// .ant-table-footer .ns-icon {
// color: @primary-color !important;
// }
.ant-tree {
width: 100%;
}
.ant-tree .ant-tree-treenode {
width: 100%;
}
//侧边导航
// .ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
// background: rgb(229, 247, 249) !important;
// }
.ant-menu.ant-menu-dark .ant-menu-item-selected {
color: #fff;
background: rgba(0, 0, 0, 0.06) !important;
}
.ant-menu-dark.ant-menu-horizontal > .ant-menu-item:hover {
background: rgba(0, 0, 0, 0.06) !important;
}
.ant-tree .ant-tree-node-content-wrapper {
transition: none !important;
}
// .ant-tree .ant-tree-node-content-wrapper:hover{
// width: 100%;
// background: #EDF0F3 !important;
// }
.ant-menu-dark.ant-menu-horizontal > .ant-menu-item,
.ant-menu-dark.ant-menu-horizontal > .ant-menu-submenu {
color: #ffffff;
// background: #43BB79 !important;
}
.home_header img {
height: 48px !important;
}
.logo .logoImg {
max-height: 36px !important;
}
.lg_card {
margin-right: 130px !important;
}
@media print {
html,
body {
overflow: unset !important;
}
#printLable img {
display: inline-block !important;
}
}
::-webkit-scrollbar-thumb {
background-color: #c6d2db !important;
}
.ant-btn-primary:hover,
.ant-btn-primary:focus {
color: #ffff !important;
}
.ant-btn[disabled], .ant-btn[disabled]:hover, .ant-btn[disabled]:focus, .ant-btn[disabled]:active {
color: rgba(0, 0, 0, 0.25) !important;
}
//入住登记,弹窗选择床位价格组件样式调整
.noWrapList{
width: 502px;
}
.select-btn,.isMe{
background-color: @primary-color!important;
}
.anticon-check-circle{
color: @primary-color!important;
}
.ns-modeBase{
.ant-modal-title{
font-weight: bold;
}
.ant-modal-body{
padding: 0;
.ns-table .ns-table-main {
padding: 0 16px;
border-top: 16px solid #e5ebf0;
}
.ns-basic-modecontent{
margin: 16px;
border-top: none;
border-right: 16px solid rgb(229, 235, 240);
border-bottom: 16px solid rgb(229, 235, 240);
border-left: 16px solid rgb(229, 235, 240);
border-image: initial;
}
}
}

156
nervui-smart-community-op/src/theme/detail.less

@ -1,156 +0,0 @@
.ns-view {
min-height: 100%;
height: 100%;
background: #e5ebf0;
}
.ns-detail-content {
border-top: 16px solid #e5ebf0;
padding: 16px 21px;
background: #fff;
height: calc(100% - 50px);
}
:deep(.ant-skeleton-paragraph) {
display: flex;
flex-wrap: wrap;
}
:deep(.ant-skeleton-paragraph li:nth-child(n)) {
display: block;
margin-right: 4%;
margin-top: 16px;
margin-bottom: 4px;
}
:deep(.ant-skeleton-paragraph li:nth-child(3n + 3)) {
margin-right: 0;
}
:deep(.ant-skeleton-content) {
padding: 0 8px 10px 10px;
}
:deep(.ant-descriptions-item-label) {
color: rgba(0, 0, 0, 0.5);
}
:deep(.ant-descriptions-item-label),
:deep(.ant-descriptions-item-content) {
line-height: 22px;
}
:deep(.ant-descriptions-view) {
padding-bottom: 8px;
}
:deep(.ant-descriptions-item) {
padding-right: 20px;
&:nth-child(2n) {
padding-left: 20px;
}
&:nth-child(3n) {
padding-left: 20px;
padding-right: 0;
}
}
.descriptions-title {
&:after {
content: '';
width: 75px;
height: 7px;
display: block;
background: linear-gradient(90deg, #537fff 0%, #fff 82.67%);
margin-left: 2px;
margin-top: -2px;
}
}
.ns-page-header {
margin-bottom: 0 !important;
padding-top: 7px !important;
padding-bottom: 7px !important;
width: calc(100% + 32px);
margin-left: -16px;
.title {
cursor: pointer;
font-size: 18px !important;
display: flex;
align-items: center;
.text {
margin-left: 6px;
}
}
}
.ns-detail {
border-bottom: 1px solid #ecedef;
&:last-child {
border-bottom-width: 0;
}
&:first-child {
:deep(.ant-descriptions-header) {
margin-top: 0;
}
}
:deep(.ant-descriptions-header) {
margin-top: 12px;
margin-bottom: 12px;
.ant-descriptions-title {
line-height: 16px;
font-size: 16px;
}
}
}
:deep(.ant-image) {
width: 64px;
height: 64px;
img {
width: 100%;
height: 100%;
object-fit: contain;
}
}
.ns-detail-html {
:deep(table) {
border-top: 1px solid #ffffff;
border-left: 1px solid #ffffff;
:deep(p) {
font-size: 12px;
color: #898e91;
}
}
:deep(th) {
border-right: 1px solid #ffffff;
font-size: 13px;
padding-top: 5px;
padding-bottom: 5px;
font-weight: normal;
background: #eff0f2;
}
:deep(td) {
border-top: 1px solid #ffffff;
border-right: 1px solid #ffffff;
padding-top: 5px;
padding-bottom: 5px;
font-size: 12px;
color: #606060;
text-align: center;
:deep(text) {
border-bottom: 1px solid #ffffff;
}
background: rgba(240, 242, 245, 0.5);
}
}

72
nervui-smart-community-op/src/theme/form.less

@ -1,72 +0,0 @@
.ns-view {
min-height: 100%;
height: 100%;
background: #e5ebf0;
}
.ns-page-header {
margin-bottom: 0 !important;
padding: 7px 16px !important;
width: calc(100% + 32px);
margin-left: -16px;
.title {
cursor: pointer;
font-size: 18px !important;
display: flex;
align-items: center;
.text {
margin-left: 6px;
}
}
}
:deep(.ant-spin-nested-loading) {
min-height: 100%;
height: 100%;
}
:deep(.ant-spin-container) {
min-height: 100%;
height: 100%;
}
:deep(.ant-divider) {
display: none;
}
.ns-add-form {
border-top: 16px solid #e5ebf0;
padding: 16px 21px;
background: #fff;
height: calc(100% - 47px) !important;
.ns-form {
// 第一个子表单Title距离顶部为0
:deep(.ns-form-item .ns-form-body .ns-child-form-title) {
padding-top: 0;
}
&:after {
display: none !important;
}
}
:deep(.ns-child-form-title) {
&:after {
content: '';
width: 75px;
height: 7px;
display: block;
background: linear-gradient(90deg, @primary-color 0%, #fff 82.67%);
margin-left: 2px;
margin-top: -7px;
}
}
}
:deep(.ns-form.ns-vertical-form) {
padding-top: 16px !important;
}

67
nervui-smart-community-op/src/theme/global.less

@ -1,67 +0,0 @@
@font-face {
font-family: 'QuartzMS';
src: url('/asset/font/QuartzMS.TTF') format('truetype');
}
.ant-menu-dark.ant-menu-horizontal>.ant-menu-item,
.ant-menu-dark.ant-menu-horizontal>.ant-menu-submenu {
color: #fff;
}
.ant-menu-dark .ant-menu-item,
.ant-menu-dark .ant-menu-item-group-title,
.ant-menu-dark .ant-menu-item>a,
.ant-menu-dark .ant-menu-item>span>a {
color: #fff;
}
.ant-menu-inline .ant-menu-item,
.ant-menu-inline .ant-menu-submenu-title {
width: 100% !important;
}
.ns-basic-table .ant-btn:hover {
border-color: transparent !important;
}
.ns-basic-table .ant-btn-link:hover {
background: none !important;
}
.ns-richText-ZIndex {
z-index: 1;
}
.ant-input-number {
width: 100%; //inputNumber组件宽度
}
// 详情table样式
.ns-detail-content {
.ns-table .ns-table-main {
padding: 0;
}
.ant-spin-nested-loading,
.ns-table,
.ns-table .ns-table-content {
min-height: 0 !important;
}
}
.ns-table-title {
text-align: left;
height: 46px;
line-height: 46px;
font-size: 18px;
font-weight: bold;
user-select: text;
padding-left: 16px;
background: #fff;
width: calc(100% + 32px);
margin-left: -16px;
cursor: pointer;
}

28
nervui-smart-community-op/src/theme/listTableTitle.less

@ -1,28 +0,0 @@
.ns-table-title {
text-align: left;
height: 46px;
line-height: 46px;
font-size: 18px;
font-weight: bold;
user-select: text;
padding-left: 16px;
background: #fff;
width: calc(100% + 32px);
margin-left: -16px;
cursor: pointer;
}
:deep(.ant-tabs-nav) {
margin-left: -16px !important;
margin-bottom: 0;
width: calc(100% + 32px);
background-color: #fff;
}
.tab-list {
overflow: visible;
}
.tab-operatorManage {
background-color: #fff;
}

2
nervui-smart-community-op/src/theme/theme.scss

@ -1,2 +0,0 @@
@import "variable";
@import "global";

2
nervui-smart-community-op/src/theme/variable.less

@ -1,2 +0,0 @@
@primary-color: #37abc4; // 全局主色
@layout-header-hover:#0096c7

0
nervui-smart-community-op/src/theme/variable.scss

41
nervui-smart-community-op/src/utils/axios.js

@ -1,41 +0,0 @@
'use strict';
import axios from 'axios';
// Full config: https://github.com/axios/axios#request-config
// axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || '';
// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
let config = {
// baseURL: process.env.baseURL || process.env.apiUrl || ""
// timeout: 60 * 1000, // Timeout
// withCredentials: true, // Check cross-site Access-Control
};
const _axios = axios.create(config);
_axios.interceptors.request.use(
function (config) {
// Do something before request is sent
return config;
},
function (error) {
// Do something with request error
return Promise.reject(error);
},
);
// Add a response interceptor
_axios.interceptors.response.use(
function (response) {
// Do something with response data
return response.data;
},
function (error) {
// Do something with response error
return Promise.reject(error);
},
);
export default _axios;

104
nervui-smart-community-op/src/utils/const.js

@ -1,104 +0,0 @@
export let bgColors = ['', '#1BB6B6', '#7E8BF9', '#E89E41'];
export let placeholderList = ['', '发起人', '审批'];
export let setTypes = [
{ value: 1, label: '指定成员' },
{ value: 2, label: '主管' },
{ value: 4, label: '发起人自选' },
{ value: 5, label: '发起人自己' },
{ value: 7, label: '连续多级主管' },
];
export let selectModes = [
{ value: 1, label: '选一个人' },
{ value: 2, label: '选多个人' },
];
export let selectRanges = [
{ value: 1, label: '全公司' },
{ value: 2, label: '指定成员' },
{ value: 3, label: '指定角色' },
];
export let optTypes = [
{ value: '1', label: '小于' },
{ value: '2', label: '大于' },
{ value: '3', label: '小于等于' },
{ value: '4', label: '等于' },
{ value: '5', label: '大于等于' },
{ value: '6', label: '介于两个数之间' },
];
export let opt1s = [
{ value: '<', label: '<' },
{ value: '≤', label: '≤' },
];
let ruzhi = [
{
label: '发起人',
value: 'faqiren',
sort: 1,
},
{
label: '主部门',
value: 'departmentMainUuid',
sort: 2,
},
{
label: '岗位状态',
value: 'personStatus',
sort: 3,
},
{
label: '性别',
value: 'sex',
sort: 4,
},
];
let lizhi = [
{
label: '发起人',
value: 'faqiren',
sort: 1,
},
{
label: '离职类型',
value: 'quitType',
sort: 2,
},
{
label: '离职原因',
value: 'quitReason',
sort: 3,
},
{
label: '是否需要工作交接人',
value: 'workHandover',
sort: 4,
},
];
let diaogang = [
{
label: '发起人',
value: 'faqiren',
sort: 1,
},
{
label: '调入主部门',
value: 'departmentInUuid',
sort: 2,
},
];
let zhuanzheng = [
{
label: '发起人',
value: 'faqiren',
sort: 1,
},
];
export let SelectType = ['', ruzhi, lizhi, zhuanzheng, diaogang];

162
nervui-smart-community-op/src/utils/index.js

@ -1,162 +0,0 @@
import { assign } from 'lodash-es';
function All() {}
All.prototype = {
timer: '',
debounce(fn, delay = 500) {
var _this = this;
return function (arg) {
//获取函数的作用域和变量
let that = this;
let args = arg;
clearTimeout(_this.timer); // 清除定时器
_this.timer = setTimeout(function () {
fn.call(that, args);
}, delay);
};
},
setCookie(val) {
//cookie设置[{key:value}]、获取key、清除['key1','key2']
for (var i = 0, len = val.length; i < len; i++) {
for (var key in val[i]) {
document.cookie = key + '=' + encodeURIComponent(val[i][key]) + '; path=/';
}
}
},
getCookie(name) {
var strCookie = document.cookie;
var arrCookie = strCookie.split('; ');
for (var i = 0, len = arrCookie.length; i < len; i++) {
var arr = arrCookie[i].split('=');
if (name == arr[0]) {
return decodeURIComponent(arr[1]);
}
}
},
clearCookie(name) {
var myDate = new Date();
myDate.setTime(-1000); //设置时间
for (var i = 0, len = name.length; i < len; i++) {
document.cookie = '' + name[i] + "=''; path=/; expires=" + myDate.toGMTString();
}
},
arrToStr(arr) {
if (arr) {
return arr
.map((item) => {
return item.name;
})
.toString();
}
},
toggleClass(arr, elem, key = 'id') {
return arr.some((item) => {
return item[key] == elem[key];
});
},
toChecked(arr, elem, key = 'id') {
var isIncludes = this.toggleClass(arr, elem, key);
!isIncludes ? arr.push(elem) : this.removeEle(arr, elem, key);
},
removeEle(arr, elem, key = 'id') {
var includesIndex;
arr.map((item, index) => {
if (item[key] == elem[key]) {
includesIndex = index;
}
});
arr.splice(includesIndex, 1);
},
setApproverStr(nodeConfig) {
let multiMode = ['', '依次审批', '会签', '或签'];
let assignee = nodeConfig.assignee;
if (!assignee) return '';
if (assignee.assigneeType == 1) {
let userName = assignee.assigneeListUser
.map((item) => {
return item.personName;
})
.join(',');
if (assignee.assigneeListUser.length == 1) return '指定员工' + userName;
return '指定员工' + userName + multiMode[assignee.multiMode];
} else if (assignee.assigneeType == 2) {
return '所属部门负责人' + multiMode[assignee.multiMode];
} else if (assignee.assigneeType == 3) {
return '主部门负责人' + multiMode[assignee.multiMode];
} else if (assignee.assigneeType == 4) {
return '发起人自己';
} else if (assignee.assigneeType == 5) {
if (assignee.lastLeaderLevel == 1) return '直属上级';
return `${assignee.lastLeaderLevel}级直属上级`;
} else if (assignee.assigneeType == 6) {
return `从 主部门负责人 到 发起人向上的第${assignee.lastLeaderLevel}级主链路部门负责人`;
} else if (assignee.assigneeType == 7) {
return `从 主部门负责人 到 组织架构中级别最高的第${assignee.lastLeaderLevel}级主部门负责人`;
} else if (assignee.assigneeType == 8) {
let roleName = assignee.createUserRole
?.map((item) => {
return item.label;
})
.join(',');
return roleName + multiMode[assignee.multiMode];
}
},
dealStr(str, obj) {
let arr = [];
let list = str.split(',');
for (var elem in obj) {
list.map((item) => {
if (item == elem) {
arr.push(obj[elem].value);
}
});
}
return arr.join('或');
},
conditionStr(nodeConfig, index) {
var { conditionGroupList } = nodeConfig.exclusive[index];
// if (!conditionGroupList) conditionGroupList = [];
// 做到这里了,继续处理conditionGroupList
if (!conditionGroupList) {
return index == nodeConfig.exclusive.length - 1 &&
nodeConfig.exclusive[0].conditionGroupList?.length != 0
? '其他条件进入此流程'
: '请设置条件';
} else {
let str = '';
let content = [];
for (var i = 0; i < conditionGroupList.length; i++) {
var { conditionInfoList } = conditionGroupList[i];
if (!conditionInfoList) conditionInfoList = [];
if (conditionInfoList.length) {
let group = conditionInfoList
.map((item) => {
return item.dotDesc;
})
.join(' 且 ');
if (group) content.push(group);
}
}
str = content.join(' 或 ');
return str ? str : '请设置条件';
}
},
copyerStr(nodeConfig) {
console.log(nodeConfig);
if (nodeConfig.nodeUserList.length != 0) {
return this.arrToStr(nodeConfig.nodeUserList);
} else {
if (nodeConfig.ccSelfSelectFlag == 1) {
return '发起人自选';
}
}
},
toggleStrClass(item, key) {
let a = item.zdy1 ? item.zdy1.split(',') : [];
return a.some((item) => {
return item == key;
});
},
};
export default new All();

14
nervui-smart-community-op/src/utils/useGlobal.ts

@ -1,14 +0,0 @@
import { getCurrentInstance } from 'vue';
export default function useGetGlobalProperties() {
const {
emit,
appContext: {
app: {
config: { globalProperties },
},
},
} = getCurrentInstance();
return { ...globalProperties };
}

48
nervui-smart-community-op/src/view/components/FCKEditor.vue

@ -1,48 +0,0 @@
<template>
<div ref="FCKEditor" style="z-index: 1"> </div>
</template>
<script>
import { defineComponent, ref, inject, watch, onMounted } from 'vue';
import Editor from 'wangeditor';
export default defineComponent({
name: 'FCKEditor',
props: {
value: String,
},
emit: ['change'],
setup(props, ctx) {
const editor = ref({});
const components = inject('components');
const FCKEditor = ref();
let editorHtml = ref();
onMounted(() => {
let editor = new Editor(FCKEditor.value);
editor.config.uploadImgShowBase64 = true;
editor.config.withCredentials = true;
editor.config.onchange = function (html) {
editorHtml.value = html;
ctx.emit('change', editorHtml.value);
};
editor.create();
editor.txt.html(props.value);
watch(
() => props.value,
(val) => {
if (val !== editor.txt.html()) {
editor.txt.html(val);
}
}
);
});
return {
editor,
components,
FCKEditor,
};
},
});
</script>
<style lang="less" scoped></style>

100
nervui-smart-community-op/src/view/components/customUpload.vue

@ -1,100 +0,0 @@
<!-- @format -->
<template>
<div>
<a-upload
v-model:file-list="fileList"
name="file"
action="#"
:headers="headers"
:showUploadList="false"
accept="application/json"
:beforeUpload="beforeUpload"
:customRequest="customRequest">
<ns-button>
<upload-outlined />
文件上传
</ns-button>
<div v-if="file" class="fileName"
><span>{{ file?.name }}</span
><CloseOutlined
style="font-size: 13px; position: relative; top: 2px"
@click="delTags($event)" />
</div>
</a-upload>
</div>
</template>
<script>
import { UploadOutlined, CloseOutlined } from '@ant-design/icons-vue';
import { defineComponent, ref } from 'vue';
export default defineComponent({
components: {
UploadOutlined,
CloseOutlined,
},
props: {
componentInfo: {},
},
emits: ['change'],
setup(props, context) {
const beforeUpload = (file) => {
const name = file.name;
// const reader = new FileReader();
// reader.readAsText(file, 'UTF-8'); //
// reader.onload = function (event) {
// context.emit('change', event.target.result);
// //console.log('--------', event.target.result); //
// };
};
const file = ref();
const delTags = (e) => {
e.stopPropagation();
file.value = null;
context.emit('change', null);
};
const customRequest = async (e) => {
file.value = e?.file;
const reader = new FileReader();
reader.readAsText(e?.file, 'UTF-8'); //
reader.onload = function (event) {
context.emit('change', JSON.parse(event.target.result));
//console.log('--------', event.target.result); //
};
// context.emit('change', e);
};
return {
delTags,
file,
customRequest,
beforeUpload,
headers: {
authorization: 'authorization-text',
},
};
},
});
</script>
<style lang="less" scoped>
.fileName {
margin-top: 10px;
padding: 2px 16px 2px 0px;
text-align: center;
justify-content: center;
display: flex;
align-items: center;
cursor: pointer;
font-size: 14px;
height: 30px;
color: #808d96;
span {
font-size: 14px;
color: @text-color-secondary;
margin-right: 15px;
}
}
</style>

372
nervui-smart-community-op/src/view/components/detailForAudit.vue

@ -1,372 +0,0 @@
<!-- @format -->
<template>
<ns-page-header class="ns-page-header">
<template #title>
<div class="title" @click="onBack()">
<ns-icon name="left" /> <div class="text">{{ title }}</div>
</div>
</template>
<template #extra>
<!-- <ns-button @click="onBack()">返回</ns-button> -->
<ns-button v-if="status == 5" type="primary" @click="checkReq('pass')">审核通过</ns-button>
<ns-button v-if="status == 5" type="primary" @click="checkReq('reject')">审核驳回</ns-button>
</template>
</ns-page-header>
<Skeleton
active
v-for="(detailGroup, index) in getDetail"
:key="index"
:loading="loading"
:paragraph="detailGroup.SkeletonParagraphProps"
:title="SkeletonTitleProps">
<div class="ns-detail">
<a-descriptions :title="detailGroup.title">
<a-descriptions-item
v-for="(item, index) in detailGroup.items"
:key="index"
:label="item.label">
<span v-if="!item.type">{{ item.value || '-' }}</span>
<ns-view-list-table v-if="item.type === 'nsViewListTable'" v-bind="item.tableConfig" />
<a-image
v-if="item.type === 'image' && typeof item.value == 'string'"
:width="100"
:src="item.value.includes('http') ? item.value : `/api/op/objs/ParkPic/${item.value}`"
fallback="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMIAAADDCAYAAADQvc6UAAABRWlDQ1BJQ0MgUHJvZmlsZQAAKJFjYGASSSwoyGFhYGDIzSspCnJ3UoiIjFJgf8LAwSDCIMogwMCcmFxc4BgQ4ANUwgCjUcG3awyMIPqyLsis7PPOq3QdDFcvjV3jOD1boQVTPQrgSkktTgbSf4A4LbmgqISBgTEFyFYuLykAsTuAbJEioKOA7DkgdjqEvQHEToKwj4DVhAQ5A9k3gGyB5IxEoBmML4BsnSQk8XQkNtReEOBxcfXxUQg1Mjc0dyHgXNJBSWpFCYh2zi+oLMpMzyhRcASGUqqCZ16yno6CkYGRAQMDKMwhqj/fAIcloxgHQqxAjIHBEugw5sUIsSQpBobtQPdLciLEVJYzMPBHMDBsayhILEqEO4DxG0txmrERhM29nYGBddr//5/DGRjYNRkY/l7////39v///y4Dmn+LgeHANwDrkl1AuO+pmgAAADhlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAAAwqADAAQAAAABAAAAwwAAAAD9b/HnAAAHlklEQVR4Ae3dP3PTWBSGcbGzM6GCKqlIBRV0dHRJFarQ0eUT8LH4BnRU0NHR0UEFVdIlFRV7TzRksomPY8uykTk/zewQfKw/9znv4yvJynLv4uLiV2dBoDiBf4qP3/ARuCRABEFAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghgg0Aj8i0JO4OzsrPv69Wv+hi2qPHr0qNvf39+iI97soRIh4f3z58/u7du3SXX7Xt7Z2enevHmzfQe+oSN2apSAPj09TSrb+XKI/f379+08+A0cNRE2ANkupk+ACNPvkSPcAAEibACyXUyfABGm3yNHuAECRNgAZLuYPgEirKlHu7u7XdyytGwHAd8jjNyng4OD7vnz51dbPT8/7z58+NB9+/bt6jU/TI+AGWHEnrx48eJ/EsSmHzx40L18+fLyzxF3ZVMjEyDCiEDjMYZZS5wiPXnyZFbJaxMhQIQRGzHvWR7XCyOCXsOmiDAi1HmPMMQjDpbpEiDCiL358eNHurW/5SnWdIBbXiDCiA38/Pnzrce2YyZ4//59F3ePLNMl4PbpiL2J0L979+7yDtHDhw8vtzzvdGnEXdvUigSIsCLAWavHp/+qM0BcXMd/q25n1vF57TYBp0a3mUzilePj4+7k5KSLb6gt6ydAhPUzXnoPR0dHl79WGTNCfBnn1uvSCJdegQhLI1vvCk+fPu2ePXt2tZOYEV6/fn31dz+shwAR1sP1cqvLntbEN9MxA9xcYjsxS1jWR4AIa2Ibzx0tc44fYX/16lV6NDFLXH+YL32jwiACRBiEbf5KcXoTIsQSpzXx4N28Ja4BQoK7rgXiydbHjx/P25TaQAJEGAguWy0+2Q8PD6/Ki4R8EVl+bzBOnZY95fq9rj9zAkTI2SxdidBHqG9+skdw43borCXO/ZcJdraPWdv22uIEiLA4q7nvvCug8WTqzQveOH26fodo7g6uFe/a17W3+nFBAkRYENRdb1vkkz1CH9cPsVy/jrhr27PqMYvENYNlHAIesRiBYwRy0V+8iXP8+/fvX11Mr7L7ECueb/r48eMqm7FuI2BGWDEG8cm+7G3NEOfmdcTQw4h9/55lhm7DekRYKQPZF2ArbXTAyu4kDYB2YxUzwg0gi/41ztHnfQG26HbGel/crVrm7tNY+/1btkOEAZ2M05r4FB7r9GbAIdxaZYrHdOsgJ/wCEQY0J74TmOKnbxxT9n3FgGGWWsVdowHtjt9Nnvf7yQM2aZU/TIAIAxrw6dOnAWtZZcoEnBpNuTuObWMEiLAx1HY0ZQJEmHJ3HNvGCBBhY6jtaMoEiJB0Z29vL6ls58vxPcO8/zfrdo5qvKO+d3Fx8Wu8zf1dW4p/cPzLly/dtv9Ts/EbcvGAHhHyfBIhZ6NSiIBTo0LNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiEC/wGgKKC4YMA4TAAAAABJRU5ErkJggg==" />
<!-- eslint-disable-next-line vue/no-v-html -->
<div v-if="item.type == 'html'" v-html="formatTable(item.value)"></div>
<a v-if="item.type == 'billImage' && item.value" target="_blank" :href="item.value"
>发票链接
</a>
<!-- 多条超链接 -->
<div v-if="item.type == 'hyperlink'">
<a
v-for="(itemlink, indexlink) in item.value"
:key="indexlink"
:href="itemlink"
target="_blank"
rel="noopener noreferrer">
{{ `发票链接${indexlink + 1}` }}&nbsp
</a>
</div>
<template v-else-if="item.type == 'status'">
<span :style="{ color: '#AAAAAA' }" v-if="item.value === 2">已失效</span>
<span :style="{ color: '#AAAAAA' }" v-if="item.value === 1">已核销</span>
<span :style="{ color: '#00AA11' }" v-if="item.value === 0">未核销</span>
</template>
<div v-if="item.type === 'image' && typeof item.value == 'object'">
<div
v-for="src in item.value"
:key="src"
style="display: inline-block; margin: 0 5px 5px 0">
<a-image
:width="100"
:src="src.includes('http') ? src : `/api/op/objs/ParkPic/${src}`"
fallback="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMIAAADDCAYAAADQvc6UAAABRWlDQ1BJQ0MgUHJvZmlsZQAAKJFjYGASSSwoyGFhYGDIzSspCnJ3UoiIjFJgf8LAwSDCIMogwMCcmFxc4BgQ4ANUwgCjUcG3awyMIPqyLsis7PPOq3QdDFcvjV3jOD1boQVTPQrgSkktTgbSf4A4LbmgqISBgTEFyFYuLykAsTuAbJEioKOA7DkgdjqEvQHEToKwj4DVhAQ5A9k3gGyB5IxEoBmML4BsnSQk8XQkNtReEOBxcfXxUQg1Mjc0dyHgXNJBSWpFCYh2zi+oLMpMzyhRcASGUqqCZ16yno6CkYGRAQMDKMwhqj/fAIcloxgHQqxAjIHBEugw5sUIsSQpBobtQPdLciLEVJYzMPBHMDBsayhILEqEO4DxG0txmrERhM29nYGBddr//5/DGRjYNRkY/l7////39v///y4Dmn+LgeHANwDrkl1AuO+pmgAAADhlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAAAwqADAAQAAAABAAAAwwAAAAD9b/HnAAAHlklEQVR4Ae3dP3PTWBSGcbGzM6GCKqlIBRV0dHRJFarQ0eUT8LH4BnRU0NHR0UEFVdIlFRV7TzRksomPY8uykTk/zewQfKw/9znv4yvJynLv4uLiV2dBoDiBf4qP3/ARuCRABEFAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghgg0Aj8i0JO4OzsrPv69Wv+hi2qPHr0qNvf39+iI97soRIh4f3z58/u7du3SXX7Xt7Z2enevHmzfQe+oSN2apSAPj09TSrb+XKI/f379+08+A0cNRE2ANkupk+ACNPvkSPcAAEibACyXUyfABGm3yNHuAECRNgAZLuYPgEirKlHu7u7XdyytGwHAd8jjNyng4OD7vnz51dbPT8/7z58+NB9+/bt6jU/TI+AGWHEnrx48eJ/EsSmHzx40L18+fLyzxF3ZVMjEyDCiEDjMYZZS5wiPXnyZFbJaxMhQIQRGzHvWR7XCyOCXsOmiDAi1HmPMMQjDpbpEiDCiL358eNHurW/5SnWdIBbXiDCiA38/Pnzrce2YyZ4//59F3ePLNMl4PbpiL2J0L979+7yDtHDhw8vtzzvdGnEXdvUigSIsCLAWavHp/+qM0BcXMd/q25n1vF57TYBp0a3mUzilePj4+7k5KSLb6gt6ydAhPUzXnoPR0dHl79WGTNCfBnn1uvSCJdegQhLI1vvCk+fPu2ePXt2tZOYEV6/fn31dz+shwAR1sP1cqvLntbEN9MxA9xcYjsxS1jWR4AIa2Ibzx0tc44fYX/16lV6NDFLXH+YL32jwiACRBiEbf5KcXoTIsQSpzXx4N28Ja4BQoK7rgXiydbHjx/P25TaQAJEGAguWy0+2Q8PD6/Ki4R8EVl+bzBOnZY95fq9rj9zAkTI2SxdidBHqG9+skdw43borCXO/ZcJdraPWdv22uIEiLA4q7nvvCug8WTqzQveOH26fodo7g6uFe/a17W3+nFBAkRYENRdb1vkkz1CH9cPsVy/jrhr27PqMYvENYNlHAIesRiBYwRy0V+8iXP8+/fvX11Mr7L7ECueb/r48eMqm7FuI2BGWDEG8cm+7G3NEOfmdcTQw4h9/55lhm7DekRYKQPZF2ArbXTAyu4kDYB2YxUzwg0gi/41ztHnfQG26HbGel/crVrm7tNY+/1btkOEAZ2M05r4FB7r9GbAIdxaZYrHdOsgJ/wCEQY0J74TmOKnbxxT9n3FgGGWWsVdowHtjt9Nnvf7yQM2aZU/TIAIAxrw6dOnAWtZZcoEnBpNuTuObWMEiLAx1HY0ZQJEmHJ3HNvGCBBhY6jtaMoEiJB0Z29vL6ls58vxPcO8/zfrdo5qvKO+d3Fx8Wu8zf1dW4p/cPzLly/dtv9Ts/EbcvGAHhHyfBIhZ6NSiIBTo0LNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiEC/wGgKKC4YMA4TAAAAABJRU5ErkJggg==" />
</div>
</div>
<NsBasicTable
style="width: 100%"
v-if="item.type === 'table'"
:columns="item.columns"
:pagination="false"
:data-source="item.value">
<template #payMethod="{ record }">
<span>{{
record.payMethod !== undefined && record.payMethod !== ''
? channelList[record.payMethod]
: '-'
}}</span>
</template>
<template #payChannel="{ record }">
<span>{{
record.payChannel !== undefined && record.payChannel !== ''
? ditchList[record.payChannel]
: '-'
}}</span>
</template>
<template #status="{ record }">
<div style="display: flex; align-items: center">
<div
class="exanStatusIcon"
:style="[{ background: soldStatusColor[record.status] }]"></div>
<span>{{
record.status !== undefined && record.status !== ''
? soldStatusList[record.status]
: '-'
}}</span>
</div>
</template>
<template #createTime="{ record }">
<span>{{ moment(record.createTime).format('YYYY-MM-DD') }}</span>
</template>
<template #picture="{ record }">
<span class="ns-enter-etable-img">
<a-image
:src="
record.picture.includes('http')
? record.picture
: '/api/op/objs/ParkPic/' + record.picture
" />
</span>
</template>
<template #operation="{ record }">
<a @click="toRenew(record)">续费</a>
</template>
<template #time="{ record }">
<span>{{ record.startTime + '~' + record.endTime }}</span>
</template>
</NsBasicTable>
</a-descriptions-item>
</a-descriptions>
</div>
</Skeleton>
</template>
<script lang="ts">
import moment from 'moment';
import { computed, defineComponent, ref, watch, PropType, createVNode } from 'vue';
import { http } from '/nerv-lib/util/http';
import { useRouter } from 'vue-router';
import { get } from 'lodash-es';
import { Skeleton } from 'ant-design-vue';
import { NsModal } from '/nerv-lib/component/modal';
import { NsMessage } from '/nerv-lib/component/message';
export interface DetailItem {
label: string;
name: string;
value?: string;
format?: Function;
type?: string; // image
}
export interface DetailGroup {
title: string;
items: Array<DetailItem>;
}
export default defineComponent({
name: 'DetailForAudit',
props: {
detail: {
type: Array as PropType<DetailGroup>,
default: () => [],
},
api: {
type: String,
},
checkApi: {
type: String,
},
enumType: {
type: Array,
},
title: {
type: String,
default: '查看',
},
formLayout: {
type: String,
default: '',
},
},
components: { Skeleton },
setup(props) {
const SkeletonTitleProps = ref({
width: 150,
});
const router = useRouter();
const status = ref();
const { query } = router.currentRoute.value;
status.value = query.status;
// const check = query.status == 5 ? true : false;
const dataRef = ref([]);
const textTitle = props.title?.slice(2);
const checkReq = (type) => {
const text = {
pass: {
title: '审核通过',
content: `审核通过后将发布${textTitle}`,
value: 1,
},
reject: {
title: '审核驳回',
content: `确认驳回该${textTitle}发布内容?`,
value: 0,
},
};
NsModal.confirm({
title: createVNode('div', { style: 'font-weight:600;font-size: 16px' }, text[type].title),
content: createVNode('div', { style: 'font-size: 14px' }, text[type].content),
// icon: createVNode(ExclamationCircleOutlined),
okText: '确认',
cancelText: '取消',
onOk() {
req(text[type].value);
},
onCancel() {},
});
};
const req = (val) => {
const data = {
...query,
approvalStatus: val,
status: props.enumType[val],
};
http.post(props.checkApi, data).then((res) => {
NsMessage.success('操作成功', 1, () => {
router.back();
});
});
};
const formatTable = (a) => {
if (a) {
// content = content.replace(/<br[^>]*\/>/gi, '');
a = a.replace(/<th[^<>]*>/gi, '<th style="background-color:#F0F3F4;padding:5px 5px">');
a = a.replace(/<td[^<>]*>/gi, '<td style="padding:5px 5px">');
a = a.replace(
/<table[^>]*>/gi,
'<table cellpadding="0" cellspacing="0" max-width="100%" border="1" style=" text-align:center;border: 1px solid #ccc;"',
);
return a;
} else {
return null;
}
};
let loading = ref<boolean>(true);
function request() {
http.get(props.api, query).then((res) => {
dataRef.value = res.data;
// console.log(dataRef.value);
let info = { carNumber: '', carOwnerName: '', carOwnerPhone: '' };
info.carNumber = res.data.carNumber;
info.carOwnerName = res.data.carOwnerName;
info.carOwnerPhone = res.data.carOwnerPhone;
window.sessionStorage.setItem('carInfo', JSON.stringify(info));
loading.value = false;
});
}
const toRenew = (item) => {
// console.log(item);
router.push(`/monthly/car/add?uuid=renew`);
};
const getDetail = computed(() => {
const { detail } = props;
if (dataRef.value) {
return (detail as Array<DetailGroup>).map((group: DetailGroup) => {
const pushWidth = [];
for (let index = 0; index < group.items.length; index++) {
pushWidth.push(200);
}
return {
title: group.title,
items: group.items.map((item) => {
item.value = get(dataRef.value, item.name);
if (item.format) {
item.value = item.format(item.value, dataRef.value);
}
return item;
}),
SkeletonParagraphProps: {
rows: group.items.length,
width: pushWidth,
},
};
});
}
return [];
});
return {
soldStatusList: ['已失效', '生效中', '待生效'],
soldStatusColor: ['#4EC8EE', '#43BB79', '#BFBFBF'],
carTypeList: ['非新能源车', '新能源车'],
channelList: ['微信', '支付宝', '银联', '现金'],
ditchList: ['平台', '小程序'],
request,
getDetail,
toRenew,
moment,
loading,
SkeletonTitleProps,
formatTable,
checkReq,
status,
};
},
created() {
this.request();
},
methods: {
onBack() {
this.$router.back();
},
},
});
</script>
<style lang="less" scoped>
:deep(.ant-skeleton-paragraph) {
display: inline;
// display: flex;
// flex-wrap: wrap;
}
:deep(.ant-skeleton-paragraph li:nth-child(n)) {
float: left;
display: inline;
margin-right: 130px;
margin-top: 16px;
margin-bottom: 4px;
}
:deep(.ant-skeleton-paragraph li:nth-child(3n + 1)) {
clear: both;
display: inline;
}
:deep(.ant-skeleton-content) {
padding: 0 24px;
}
.ns-detail {
padding: 16px 24px;
}
.exanStatusIcon {
height: 8px;
width: 8px;
border-radius: 50%;
margin-right: 5px;
}
:deep(.ns-enter-etable-img) {
.upload-img-box {
display: flex;
align-items: center;
.ant-image {
margin-right: 5px;
}
}
img {
max-width: 50px;
max-height: 50px;
cursor: pointer;
width: unset;
}
}
:deep(.ant-table-wrapper) {
width: 78vw;
}
.ns-page-header {
border-bottom: 16px solid #e5ebf0 !important;
}
@import '/@/theme/form.less';
</style>

628
nervui-smart-community-op/src/view/components/edit-table.vue

@ -1,628 +0,0 @@
<!-- @format -->
<template>
<div>
<div v-show="false">{{ getDetail }}</div>
<!-- <Editor v-model="jsonStr" height="400" /> -->
<a-table
:columns="isDisable ? columns.slice(0, columns.length - 1) : columns"
:data-source="dataSource"
align="center"
:pagination="false"
rowKey="paramKey">
<template #headerCell="{ column }">
<template v-if="column.required">
<div class="mainColum">{{ column.title }}</div>
</template>
</template>
<template
v-for="col in columns.slice(0, columns.length - 1)"
#[col.dataIndex]="{ record }"
:key="col.dataIndex">
<a-form-item
v-if="col.verification && !isDisable"
:validate-status="col.validator(record)"
:help="col.validator(record, col) === 'error' ? '' : ''"
style="width: 150px">
<a-tooltip>
<template v-if="col.validator(record, col) === 'error'" #title>{{
col.errorTitle
}}</template>
<component
style="min-width: 120px; width: 130px"
v-model:value="record[col.dataIndex]"
:is="col.component"
:disabled="dealDisabled(col, record)"
v-bind="col.formProps" />
</a-tooltip>
</a-form-item>
<a-form-item v-else style="width: 100px">
<component
style="max-width: 100px"
v-model:value="record[col.dataIndex]"
:is="col.component"
:disabled="dealDisabled(col, record)"
v-bind="dealFormProps(col, record)" />
</a-form-item>
</template>
<template #action="{ index, record }" v-if="!isDisable">
<div style="min-width: 120px">
<a style="cursor: pointer" v-if="record.type === 'object'||record.isProperty" @click="remove(index, record)">移除</a>
<a
style="cursor: pointer; margin-left: 12px"
v-if="dealAddProperty(record)"
@click="addProperty(index, record)"
>添加子属性</a
>
</div>
</template>
<!-- <template #footer v-if="!isDisable">
<span style="cursor: pointer" @click="add"> 添加</span>
</template> -->
</a-table>
</div>
</template>
<script lang="ts">
import { defineComponent, ref, inject, watch, computed } from 'vue';
import {
Table as ATable,
Input as AInput,
Select as ASelect,
Textarea as ATextarea,
} from 'ant-design-vue';
export default defineComponent({
name: 'NsEditTable',
props: {
value: {},
initColumns: {
type: Array,
default: () => [],
},
initDataSource: {
type: Array,
default: () => [],
},
isDisable: {
type: Boolean,
default: false,
},
initData: {
type: Array,
default: () => <object>[],
},
},
components: { ATable, AInput, ASelect, ATextarea },
emits: ['change'],
setup(props) {
//const columns = ref<object>([]);
const initItem = ref({
name: null,
type: 'string',
defaultValue: '',
parameterType: '',
description: '',
});
const columns = ref([
{
title: '参数名',
dataIndex: 'name',
slots: { customRender: 'name' },
verification: true,
required: true,
validator: (record) => {
if (!/^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$/.test(record.name)) {
return 'error';
} else {
return 'success';
}
},
errorTitle:
'只能包含字母,数字,短横线(-)和下划线(_),且必须由大小字母或数字开头。长度限制在1-64字符之间',
component: 'AInput',
},
{
title: '类型',
dataIndex: 'type',
slots: { customRender: 'type' },
component: 'ASelect',
formProps: {
placeholder: '请选择',
options: [
{ value: 'string', label: 'string' },
{ value: 'number', label: 'number' },
{ value: 'array', label: 'array' },
{ value: 'object', label: 'object' },
{ value: 'Boolean', label: 'Boolean' },
{ value: 'integer', label: 'integer' },
],
},
},
// {
// title: '',
// dataIndex: 'required',
// slots: { customRender: 'required' },
// component: 'ASelect',
// formProps: {
// options: [
// { value: true, label: '' },
// { value: false, label: '' },
// ],
// },
// },
{
title: '默认值',
dataIndex: 'defaultValue',
slots: { customRender: 'defaultValue' },
component: 'AInput',
verification: true,
validator: (record) => {
return 'success';
// if (record.defaultValue !== '') {
// if (record.defaultValue.length <= 255) {
// switch (record.type) {
// case 'String':
// break;
// case 'Int':
// if (isNaN(Number(record.defaultValue))) {
// return 'error';
// } else {
// if (Number(record.defaultValue) % 1 !== 0) {
// return 'error';
// } else {
// let arr = record.defaultValue.split('.');
// if (arr.length > 1) {
// return 'error';
// } else {
// return 'success';
// }
// }
// }
// break;
// case 'Boolean':
// if (record.defaultValue !== 'true' && record.defaultValue !== 'false') {
// return 'error';
// } else {
// return 'success';
// }
// break;
// case 'Long':
// if (isNaN(Number(record.defaultValue))) {
// return 'error';
// } else {
// if (Number(record.defaultValue) % 1 !== 0) {
// return 'error';
// } else {
// let arr = record.defaultValue.split('.');
// if (arr.length > 1) {
// return 'error';
// } else {
// return 'success';
// }
// }
// }
// break;
// case 'Float':
// if (isNaN(Number(record.defaultValue))) {
// return 'error';
// } else {
// if (Number(record.defaultValue) % 1 === 0) {
// let arr = record.defaultValue.split('.');
// if (arr.length > 1 && arr[1].indexOf('0') !== -1) {
// return 'success';
// } else {
// return 'error';
// }
// } else {
// return 'success';
// }
// }
// break;
// case 'Double':
// if (isNaN(Number(record.defaultValue))) {
// return 'error';
// } else {
// // console.log(Float32Array(record.defaultValue));
// if (Number(record.defaultValue) % 1 === 0) {
// let arr = record.defaultValue.split('.');
// if (arr.length > 1 && arr[1].indexOf('0') !== -1) {
// return 'success';
// } else {
// return 'error';
// }
// } else {
// return 'success';
// }
// }
// break;
// }
// } else {
// return 'error';
// }
// }
},
errorTitle: '默认值类型与所选类型保持一致,长度不得超过255位',
formProps: {},
},
{
title: '描述',
dataIndex: 'description',
slots: { customRender: 'description' },
component: 'ATextarea',
formProps: {
showCount: true,
maxlength: 255,
},
},
{
title: '操作',
dataIndex: 'action',
slots: { customRender: 'action' },
},
]);
const dataSource = ref<object[]>([
{
paramKey: 'key',
name: 'root',
isDisable: true,
type: 'string',
defaultValue: '',
description: '',
},
]);
const addProperty = (index, record) => {
let info = JSON.parse(JSON.stringify(initItem.value));
info.isProperty=true
// info.position = 'Body';
if (record?.children) {
info.paramKey = `${record.paramKey}-${record.children.length}`;
// info.isDisable = true;
record.children.push(info);
} else {
info.paramKey = `${record.paramKey}-0`;
// info.isDisable = true;
record.children = [info];
}
};
const dealFormProps = (col, record) => {
return col.formProps;
// if (record.position === 'Body' && col.dataIndex === 'type') {
// let options = JSON.parse(JSON.stringify(col.formProps.options));
// options.push({ value: 'Object', label: 'Object' });
// return {
// placeholder: '',
// options: options,
// };
// } else {
// return col.formProps;
// }
};
const dealAddProperty = (record) => {
if (!['object', 'array'].includes(record.type) && record.children) {
delete record['children'];
}
if (['object', 'array'].includes(record.type)) {
record.defaultValue = '';
}
if (record.type === 'array' && !record.children) {
let info = JSON.parse(JSON.stringify(initItem.value));
info.paramKey = `${record.paramKey}-0`;
info.name = 'items';
info.isDisable = true;
record.children = [info];
}
return record.type === 'object';
};
const dealDisabled = (col, record) => {
if (col.dataIndex === 'name' && record.isDisable) {
return true;
}
if (col.dataIndex === 'defaultValue' && ['array', 'object'].includes(record.type)) {
return true;
}
// return record.paramKey?.includes('-') && col.dataIndex === 'position';
};
if (props.initData && props.initData.length) {
dataSource.value = props.initData as object[];
}
const rule = {
required: true,
message: '请选择请求方法',
trigger: 'onchange',
};
const getDetail = computed(() => {
const { value } = props;
if (value !== undefined && value) {
// dataSource.value = JSON.parse(value);
}
return value;
});
const add = () => {
let info = JSON.parse(JSON.stringify(initItem.value));
info.paramKey = dataSource.value.length + '';
if (dataSource.value.length === 0 || dataSource.value[dataSource.value.length - 1].code) {
dataSource.value.push(info);
} else {
let ischeck = true;
dataSource.value.forEach((item) => {
console.log(item);
if (Object.keys(item).includes('name')) {
if (!/^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$/.test(item.name)) {
ischeck = false;
} else {
if (item.name === null) {
ischeck = false;
item.name = '';
}
}
}
// if (Object.keys(item).includes('defaultValue')) {
// if (item.defaultValue !== '') {
// if (item.defaultValue.length <= 255) {
// switch (item.type) {
// case 'String':
// break;
// case 'Int':
// if (isNaN(Number(item.defaultValue))) {
// ischeck = false;
// } else {
// if (Number(item.defaultValue) % 1 !== 0) {
// ischeck = false;
// } else {
// let arr = item.defaultValue.split('.');
// if (arr.length > 1) {
// ischeck = false;
// }
// }
// }
// break;
// case 'Boolean':
// if (item.defaultValue !== 'true' && item.defaultValue !== 'false') {
// ischeck = false;
// }
// break;
// case 'Long':
// if (isNaN(Number(item.defaultValue))) {
// ischeck = false;
// } else {
// if (Number(item.defaultValue) % 1 !== 0) {
// ischeck = false;
// } else {
// let arr = item.defaultValue.split('.');
// if (arr.length > 1) {
// ischeck = false;
// }
// }
// }
// break;
// case 'Float':
// if (isNaN(Number(item.defaultValue))) {
// ischeck = false;
// } else {
// if (Number(item.defaultValue) % 1 === 0) {
// let arr = item.defaultValue.split('.');
// if (arr.length > 1 && arr[1].indexOf('0') !== -1) {
// } else {
// ischeck = false;
// }
// }
// }
// break;
// case 'Double':
// if (isNaN(Number(item.defaultValue))) {
// ischeck = false;
// } else {
// if (Number(item.defaultValue) % 1 === 0) {
// let arr = item.defaultValue.split('.');
// if (arr.length > 1 && arr[1].indexOf('0') !== -1) {
// } else {
// ischeck = false;
// }
// }
// }
// break;
// }
// } else {
// ischeck = false;
// }
// }
// }
});
if (ischeck) {
dataSource.value.push(info);
}
}
};
const removeData = (list, key) => {
list.some((el, i) => {
if (el.paramKey === key) {
list.splice(i, 1);
return true;
}
if (el['children']) {
removeData(el['children'], key);
}
});
};
const remove = (i: number, record: { paramKey: string }) => {
removeData(dataSource.value, record.paramKey);
};
const mockJson = ref({});
const dealSchema = () => {
const info = dataSource.value[0];
let schema = {
type: info.type,
title: info.name,
};
if (info.defaultValue) schema['mock'] = { mock: info.defaultValue };
if (info.description) schema['description'] = info.description;
if (info.type === 'array') {
schema.items = {};
dealChildrenSchemaInfo(info, schema);
// if (schemaInfo.children && schemaInfo.children.length) {
// schemaInfo.children.forEach((item) => {
// let childrenSchema = {
// type: item.type,
// title: item.name,
// };
// if (item.defaultValue) childrenSchema['mock'] = { mock: item.defaultValue };
// if (item.description) childrenSchema['description'] = item.description;
// if (item.type === 'array') {
// childrenSchema.items = {
// type: 'array',
// };
// dealSchema(item, childrenSchema.items);
// }
// if (item.type === 'object') {
// childrenSchema.properties = {};
// dealSchema(item, childrenSchema.properties);
// }
// schema.items = childrenSchema;
// });
// }
}
if(info.type==='object'){
schema.properties={}
dealSchemaObject(info,schema.properties)
}
// if (info.type === 'object') {
// fSchemaInfo[schemaInfo.name] = schema;
// schema.properties = {};
// if (schemaInfo.children && schemaInfo.children.length) {
// schemaInfo.children.forEach((item) => {
// let childrenSchema = {
// type: item.type,
// title: item.name,
// };
// if (item.defaultValue) childrenSchema['mock'] = { mock: item.defaultValue };
// if (item.description) childrenSchema['description'] = item.description;
// if (item.type === 'object') {
// childrenSchema.properties = {};
// dealSchema(item, childrenSchema.properties);
// }
// schema.properties[item.name] = childrenSchema;
// });
// }
// }
mockJson.value = schema;
};
const dealSchemaObject = (schemaInfo, schema) => {
// debugger
if (schemaInfo.children && schemaInfo.children.length) {
schemaInfo.children?.forEach((item) => {
let info = {
type: item.type,
};
if (item.defaultValue) info['mock'] = { mock: item.defaultValue };
if (item.description) info['description'] = item.description;
if (item.type === 'array') {
schema[item.name] = info;
dealChildrenSchemaInfo(item, info);
}
if (item.type == 'object') {
info.properties= {}
schema[item.name] = info;
dealSchemaObject(item, info);
}
if (!['array', 'object'].includes(item.type)) {
schema[item.name] = info;
}
});
} else {
schema[schemaInfo.name] = { type: schemaInfo.type };
}
};
const dealChildrenSchemaInfo = (schemaInfo, schema) => {
if (schemaInfo.children && schemaInfo.children.length) {
schemaInfo.children?.forEach((item) => {
let info = {
type: item.type,
};
if (item.defaultValue) info['mock'] = { mock: item.defaultValue };
if (item.description) info['description'] = item.description;
if (item.type === 'array') {
dealChildrenSchemaInfo(item, info);
schema.items = info;
}
if (item.type == 'object') {
info.properties={}
dealSchemaObject(item,info.properties)
schema.items = info;
}
if (!['array', 'object'].includes(item.type)) {
schema.items = info;
}
});
}
};
return {
dealSchema,
getDetail,
dealDisabled,
dealFormProps,
rule,
dealAddProperty,
addProperty,
remove,
add,
dataSource,
columns,
mockJson,
};
},
watch: {
dataSource: {
handler(val) {
this.dealSchema();
this.$emit('change', JSON.stringify(this.mockJson));
},
deep: true,
},
},
});
</script>
<style lang="less" scoped>
:deep(.ant-table-row-indent + .ant-table-row-expand-icon) {
margin-top: 0px !important;
}
:deep(
.ant-table-thead
> tr
> th:not(:last-child):not(.ant-table-selection-column):not(
.ant-table-row-expand-icon-cell
):not([colspan])::before
) {
display: none;
}
.mainColum {
&::before {
display: inline-block;
margin-right: 4 px;
color: #ff4d4f;
font-size: 12px;
font-family: SimSun, sans-serif;
line-height: 1;
content: '*';
}
}
:deep(.ant-form-item-explain.ant-form-item-explain-error) {
display: flex;
min-width: 130px !important;
width: 140px !important;
}
</style>

252
nervui-smart-community-op/src/view/login.vue

@ -1,252 +0,0 @@
<!-- @format -->
<template>
<!-- <div><editTable /> </div> -->
<div style="height: 100%">
<a-layout style="height: 100%">
<a-layout-header class="home_header" style="position: relative">
<ns-icon name="login" size="100" style="width: 220px" />
</a-layout-header>
<a-layout-content class="center-content">
<div class="lg_card">
<h1 class="lg_card_title">账号登录</h1>
<p v-show="!errorShow" style="height: 22px"></p>
<p v-show="errorShow" class="lg_card_error">{{ errorMsg }}</p>
<a-input
placeholder="登录账号"
v-model:value="userName"
style="height: 48px; margin-bottom: 20px">
<template #prefix>
<ns-icon name="userName" size="25" style="margin-right: 5px" />
</template>
</a-input>
<a-input-password placeholder="登录密码" v-model:value="password" style="height: 48px">
<template #prefix>
<ns-icon name="passWord" size="25" style="margin-right: 5px" />
</template>
</a-input-password>
<a-button
@click="submit"
:loading="loading"
type="primary"
style="margin-top: 30px; width: 100%; height: 53px"
>登录</a-button
>
</div>
</a-layout-content>
<a-layout-footer>Copyright 2021 xu科技 All Rights Reserved</a-layout-footer>
</a-layout>
</div>
</template>
<script lang="ts">
import { defineComponent, ref } from 'vue';
import { useRouter } from 'vue-router';
import editTable from './components/edit-table.vue';
import { appConfigStore } from '/nerv-lib/saas/store/modules/app-config';
import { authorizationService } from '/nerv-base/store/modules/authorization-service';
import Cookies from 'js-cookie';
export default defineComponent({
name: 'UserLogin',
components: { editTable },
setup() {
const url = ref('/asset/image/login/background.png');
const userName = ref<string>('');
const password = ref<string>('');
const logUrl = ref<string>('');
const bgUrl = ref<string>('');
const errorMsg = ref<string>('');
const errorShow = ref<boolean>(false);
const router = useRouter();
const title = ref<string>('');
const initUrl = ref('');
title.value = '账号登录';
// title.value = appConfig.title ? appConfig.title : '';
const loading = ref<boolean>(false);
const configStore = appConfigStore();
const useAuthorization = authorizationService();
const submit = (): void => {
if (password.value === '') {
errorMsg.value = '请输入密码';
errorShow.value = true;
}
if (userName.value === '') {
errorMsg.value = '请输入账号';
errorShow.value = true;
}
if (userName.value !== '' && password.value !== '') {
errorShow.value = false;
let data = JSON.stringify({ userName: userName.value, password: password.value });
loading.value = true;
async function logins() {
try {
const res = await configStore.userLogin(JSON.parse(data));
if (res.success) {
if (res.data?.userToken) {
Cookies.set('nervsid', res.data?.userToken);
}
const info = await configStore.userInfo();
info.success
? window.sessionStorage.setItem('userInfo', JSON.stringify(info.data))
: '';
loading.value = false;
if (configStore.enablePermissions) {
const res = await configStore.userResource();
initUrl.value = '';
const dealInitUrl = (item) => {
if (item.type === 'menus' && item.menus && item.menus?.length !== 0) {
dealInitUrl(item.menus[0]);
} else {
// if (item.type === 'noChildrenMenu') {
initUrl.value = configStore.resourceName
? item.code.replace(configStore.resourceName, '')
: item.code;
// }
}
};
if (configStore.resourceName) {
const initResource = [];
res.data.forEach((item) => {
if (item.code.includes(configStore.resourceName)) {
initResource.push(item);
}
});
dealInitUrl(initResource[0]);
} else {
dealInitUrl(res.data[0]);
}
// dealInitUrl(res.data[0]);
useAuthorization.updateUserResource(res.data);
const initRouterList = useAuthorization.getInitRouterList;
console.log(initUrl.value);
router.push({
name: initRouterList.length === 0 ? 'error403' : initUrl.value,
});
} else {
router.replace({ name: 'root' });
}
}
} catch (err) {
loading.value = false;
}
}
logins();
}
};
const checkoutLogo = (): void => {
logUrl.value = '';
};
const checkoutBg = (): void => {
Math.random() > 0.5
? (url.value = 'src/assetimg/background.jpg')
: (url.value = 'src/assetimg/background.png');
};
return {
title,
url,
loading,
userName,
password,
submit,
errorMsg,
bgUrl,
logUrl,
checkoutLogo,
checkoutBg,
errorShow,
};
},
created() {
const _this = this;
window.sessionStorage.clear();
document.onkeydown = function (e) {
const key = window.event === undefined ? e.keyCode : window.event.keyCode;
key === 13 ? _this.submit() : '';
};
},
beforeUnmount() {
document.onkeydown = function (e) {};
},
mounted() {
// if (Cookies.get('nervsid') !== undefined) {
// this.$router.push('/home');
// }
},
});
</script>
<style lang="less" scoped>
.home_header {
height: 64px !important;
display: flex;
align-items: center;
}
:deep(.center-content) {
background: url('/asset/image/login/background.png') center center no-repeat;
background-size: cover;
// background-position-y: -120px;
margin: 0;
}
.icon {
color: @primary-color;
// background: #000;
// min-height: 25px;
// min-width: 25px;
// display: flex;
// justify-content: center;
// align-items: center;
// border-radius: 50%;
}
.ant-layout-header {
min-height: 64px;
background: #fff !important;
}
.ant-layout-content {
height: calc(100vh - 112px);
width: 100%;
min-height: 400px;
display: flex;
align-items: center;
justify-content: flex-end;
}
.ant-layout-footer {
max-height: 48px;
min-height: 48px;
font-size: 14px;
font-weight: 400;
color: #8f8f8f;
padding: 0;
display: flex;
align-items: center;
justify-content: center;
}
.lg_card {
width: 385px;
height: 353px;
background: #fff;
box-shadow: 0 2px 2px 0 rgb(0 0 0 / 5%), 0 0 18px 0 rgb(0 0 0 / 8%);
border-radius: 6px;
margin: 0 30px 0 30px;
padding: 35px;
}
.lg_card .lg_card_title {
height: 28px;
font-size: 20px;
font-weight: bold;
color: #172e3d;
line-height: 28px;
text-align: left;
}
.lg_card_error {
text-align: left;
color: #e4393c;
font-size: 14px;
}
</style>

212
nervui-smart-community-op/src/view/operationManagement/activityManage/functionTestRelease/addEdit.vue

@ -1,212 +0,0 @@
<template>
<ns-view-add-form
formLayout="vertical"
:schemas="formSchema"
:model="data"
:title="uuid ? '编辑功能测试' : '新增功能测试'"
:api="
uuid
? '/api/op_com/objs/admin/functionRecordOper/update'
: '/api/op_com/objs/admin/functionRecordOper/add'
" />
</template>
<script lang="ts">
import { defineComponent, reactive, ref } from 'vue';
import { useRouter } from 'vue-router';
import { http } from '/nerv-lib/util/http';
export default defineComponent({
name: 'FunctionTestReleaseAdd',
setup() {
const router = useRouter();
const { query } = router.currentRoute.value;
const { uuid } = query;
let data = ref({ writeGroupUuidList: '' });
if (uuid) {
http.get('/api/op_com/objs/admin/functionRecordOper/detail', query).then((res) => {
data.value = res.data;
data.value.writeGroupUuidList = res.data.functionWhiteGroupRelationVOList.map((item) => {
return item.whiteGroupUuid;
});
});
}
const formSchema = reactive([
{
field: 'uuid',
show: false,
component: 'NsInput',
},
{
field: 'funcName',
label: '功能名称',
component: 'NsInput',
componentProps: {
placeholder: '请输入',
maxlength: 20,
disabled: uuid ? true : false,
},
rules: [
{
required: true,
type: 'string',
trigger: 'blur',
validator: async (rule, value) => {
const reg = /^[\u4e00-\u9fa50-9a-zA-Z]{0,20}$/;
const _reg = /^[\u4e00-\u9fa5]$/;
if (value) {
let strLength = 0;
let strArray = value.split('');
strArray.forEach((item) => {
if (_reg.test(item)) {
strLength += 2;
} else {
strLength += 1;
}
});
if (!reg.test(value)) {
return Promise.reject('支持数字、字母和汉字');
} else {
if (strLength > 20) {
return Promise.reject('不超过20个字符,中文为2个字符');
}
}
} else {
return Promise.reject('功能名称不能为空');
}
},
},
],
},
{
field: 'funcCode',
label: '功能code',
component: 'NsInput',
componentProps: {
placeholder: '请输入',
maxlength: 20,
disabled: uuid ? true : false,
},
rules: [
{
required: true,
type: 'string',
trigger: 'blur',
validator: async (rule, value) => {
const reg = /^[0-9a-zA-Z]{1,20}$/;
if (!value) {
return Promise.reject('功能code不能为空');
}
if (value.indexOf(' ') !== -1) {
return Promise.reject('不能包含空格');
}
if (!reg.test(value)) {
return Promise.reject('功能code支持英文字母、数字长度限制1~20');
}
},
},
],
},
{
field: 'checkType',
label: '发布策略',
component: 'nsSelectApi',
// autoAddLink: true,
componentProps: {
api: '/api/op_com/objs/admin/functionRecordOper/checkTypeList',
placeholder: '请选择',
// params: {
// page: 0,
// pageSize: 200,
// },
resultField: 'data.data',
labelField: 'name',
valueField: 'id',
immediate: true,
},
rules: [
{
type: 'number',
required: true,
message: '请选择发布策略',
trigger: 'change',
},
],
},
{
field: 'writeGroupUuidList',
label: '白名单组',
component: 'nsSelectApi',
// autoAddLink: true,
ifShow: (formModel: Record<string, any>) => {
if (formModel.checkType === 2) {
//
return true;
}
return false;
},
componentProps: {
api: '/api/op_com/objs/admin/whiteListGroupOper/groupList',
placeholder: '请选择',
resultField: 'data.data',
labelField: 'groupName',
valueField: 'uuid',
mode: 'multiple',
immediate: true,
showSearch: true,
filterOption: (input, option) => {
return option?.groupName.indexOf(input) >= 0;
},
},
rules: [
{
required: true,
type: 'array',
message: '请选择白名单组',
trigger: 'change',
},
],
},
{
field: 'desc',
label: '备注',
component: 'NsInput',
componentProps: {
placeholder: '请输入',
},
rules: [
{
type: 'string',
trigger: 'blur',
validator: async (rule, value) => {
const _reg = /^[\u4e00-\u9fa5]$/;
if (value) {
let strLength = 0;
let strArray = value.split('');
strArray.forEach((item) => {
if (_reg.test(item)) {
strLength += 2;
} else {
strLength += 1;
}
});
if (strLength > 100) {
return Promise.reject('不超过100个字符,中文为2个字符');
}
}
},
},
],
},
]);
return {
data,
formSchema,
uuid,
};
},
});
</script>

140
nervui-smart-community-op/src/view/operationManagement/activityManage/functionTestRelease/index.vue

@ -1,140 +0,0 @@
<!-- @format -->
<template>
<ns-view-list-table v-bind="tableConfig" rowKey="uuid" />
</template>
<script lang="ts">
import { defineComponent } from 'vue';
import { http } from '/nerv-lib/util/http';
import { useRouter } from 'vue-router';
export default defineComponent({
name: 'FunctionTestReleaseIndex',
setup() {
const router = useRouter();
let checkTypeList: any = [];
http.get('/api/op_com/objs/admin/functionRecordOper/checkTypeList').then((res) => {
let data = res.data?.data;
data?.forEach((item: any) => {
checkTypeList[item.id] = item.name;
});
});
const whiteGroupName = (group: any[]) => {
let data: string[] = [];
group?.length && group?.map((item) => data.push(item.whiteGroupName));
return data.join(',') || '-';
};
const tableConfig = {
title: '功能测试',
api: '/api/op_com/objs/admin/functionRecordOper/pageList',
headerActions: [
{
label: '新增',
name: 'FunctionTestReleaseAdd',
type: 'primary',
handle: ({}, name: string) => router.push({ name }),
},
],
rowSelection: null,
columns: [
{
title: '功能名称',
dataIndex: 'funcName',
// textNumber: 5,
},
{
title: '功能code',
dataIndex: 'funcCode',
// textNumber: 5,
},
{
title: '发布策略',
dataIndex: 'checkType',
// textNumber: 12,
customRender: (value: any) => checkTypeList[value.text],
},
{
title: '白名单组',
dataIndex: 'functionWhiteGroupRelationVOList',
textNumber: 10,
textEllipsis: true,
customRender: ({ value }: any) => whiteGroupName(value),
},
{
title: '备注',
dataIndex: 'desc',
textEllipsis: true,
textNumber: 9,
},
],
columnActions: {
title: '操作',
actions: [
{
label: '编辑',
name: 'FunctionTestReleaseEdit',
handle: ({ uuid }: any, name: string) => router.push({ name, query: { uuid } }),
},
{
label: '刷新',
name: 'FunctionTestReleaseRefresh',
confirm: {
title: '提示',
content: `是否确认刷新缓存`,
},
// api: {
// method: 'GET',
// url: '/api/op_com/objs/admin/functionRecordOper/refresh',
// },
api: '/api/op_com/objs/admin/functionRecordOper/refresh',
dynamicParams: 'uuid',
isReload: true,
},
],
},
formConfig: {
schemas: [
{
field: 'funcName',
label: '功能名称',
component: 'NsInput',
componentProps: {
placeholder: '请输入',
},
},
{
field: 'checkType',
label: '发布策略',
component: 'nsSelectApi',
componentProps: {
api: '/api/op_com/objs/admin/functionRecordOper/checkTypeList',
placeholder: '请选择',
resultField: 'data.data',
labelField: 'name',
valueField: 'id',
immediate: true,
},
},
],
},
};
return {
tableConfig,
whiteGroupName,
};
},
});
</script>
<style lang="less">
.desc {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
display: block;
width: 100%;
}
</style>

164
nervui-smart-community-op/src/view/operationManagement/activityManage/whiteListGroup/addEdit.vue

@ -1,164 +0,0 @@
<template>
<ns-view-add-form
formLayout="vertical"
:schemas="formSchema"
:model="data"
:title="uuid ? '编辑白名单组' : '新增白名单组'"
:api="
uuid
? '/api/op_com/objs/admin/whiteListGroupOper/update'
: '/api/op_com/objs/admin/whiteListGroupOper/add'
" />
</template>
<script>
import { defineComponent, reactive, ref } from 'vue';
import { useRouter } from 'vue-router';
import { http } from '/nerv-lib/util/http';
export default defineComponent({
name: 'WhiteListGroupAdd',
setup() {
const router = useRouter();
const { uuid } = router.currentRoute.value.query;
// let data = reactive({
// chargeGunUuid: uuid,
// chargeGunCode: chargeGunCode, //
// chargeGunName: chargeGunName, //
// // pileUuid: pileCode,
// });
let data = ref({});
let isInit = ref(false);
if (uuid) {
http
.get('/api/op_com/objs/admin/whiteListGroupOper/detail', {
uuid: uuid,
page: 0,
pageSize: 10,
})
.then((res) => {
data.value = res.data;
isInit.value = true;
})
.catch(() => {
isInit.value = true;
});
} else {
isInit.value = true;
}
const formSchema = reactive([
{
field: 'uuid',
show: false,
component: 'NsInput',
},
{
field: 'groupName',
label: '白名单组名称',
component: 'NsInput',
componentProps: {
placeholder: '请输入',
disabled: uuid && true,
},
rules: [
{
required: true,
message: '请输入白名单组名称',
trigger: 'blur',
},
{
pattern: /^.{1,30}$/,
message: '长度不得超过30个字符',
trigger: 'blur',
},
],
},
{
field: 'groupType',
defaultValue: 0,
},
// {
// field: 'groupType',
// label: '',
// component: 'NsSelect',
// componentProps: {
// placeholder: '',
// //
// // disabled: true,
// disabled: uuid && true,
// options: [
// {
// label: '',
// value: 0,
// },
// {
// label: '',
// value: 1,
// },
// ],
// },
// rules: [
// {
// required: true,
// message: '',
// type: 'number',
// trigger: 'blur',
// },
// ],
// },
// {
// field: 'functionCode',
// label: 'code',
// component: 'NsInput',
// ifShow: (formModel) => {
// if (formModel.groupType) {
// return true;
// }
// return false;
// },
// // defaultValue: ,
// componentProps: {
// disabled: uuid && true,
// placeholder: '',
// },
// rules: [
// {
// required: true,
// message: 'code',
// type: 'string',
// trigger: 'blur',
// },
// {
// pattern: /^.{1,30}$/,
// message: '30',
// trigger: 'blur',
// },
// ],
// },
{
field: 'remark',
label: '备注',
component: 'NsInput',
componentProps: {
placeholder: '请输入',
},
rules: [
{
pattern: /^.{1,100}$/,
message: '长度不得超过100个字符',
trigger: 'blur',
},
],
},
]);
return {
data,
formSchema,
uuid,
isInit,
};
},
});
</script>

116
nervui-smart-community-op/src/view/operationManagement/activityManage/whiteListGroup/index.vue

@ -1,116 +0,0 @@
<!-- @format -->
<template>
<ns-view-list-table v-bind="tableConfig" :model="data" rowKey="uuid">
<template #bodyCell="{ record, column }">
<template v-if="column.dataIndex === 'status'">
<a-badge v-bind="onlineStatus[record.status]" />
</template>
</template>
</ns-view-list-table>
</template>
<script lang="ts">
import { defineComponent, reactive } from 'vue';
import { useRouter } from 'vue-router';
export default defineComponent({
name: 'WhiteListGroupIndex',
setup() {
const data = reactive({});
const router = useRouter();
const tableConfig = {
title: '白名单组',
api: '/api/op_com/objs/admin/whiteListGroupOper/pageList',
headerActions: [
{
label: '新增',
name: 'WhiteListGroupAdd',
type: 'primary',
handle: ({}, name: string) => router.push({ name }),
},
],
rowSelection: null,
scorll: { x: '100%' },
columns: [
{
title: '白名单组名称',
dataIndex: 'groupName',
width: '33%',
},
{
title: '用户数量',
dataIndex: 'userCount',
width: '33%',
// textNumber: 20,
},
{
title: '备注',
dataIndex: 'remark',
textNumber: 10,
width: '34%',
textEllipsis: true,
},
],
columnActions: {
title: '操作',
actions: [
{
//
label: '查看',
name: 'WhiteListGroupCheck',
handle: ({ uuid }: any) =>
router.push({ name: 'WhiteListUserIndex', query: { uuid } }),
},
{
label: '编辑',
name: 'WhiteListGroupEdit',
handle: ({ uuid }: any, name: string) => router.push({ name, query: { uuid } }),
},
],
},
formConfig: {
schemas: [
{
field: 'groupName',
label: '白名单组名称',
component: 'NsInput',
componentProps: {
placeholder: '请输入',
},
},
{
field: 'groupType',
label: '白名单组类型',
component: 'NsSelect',
defaultValue: '',
componentProps: {
options: [
{
label: '全部',
value: '',
},
{
label: '活动白名单',
value: 0,
},
{
label: '功能白名单',
value: 1,
},
],
},
},
],
params: {},
},
rowKey: 'uuid',
};
return {
tableConfig,
data,
};
},
});
</script>

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save