Merge branch 'develop' of http://192.168.18.88:8077/sznyb/daimp-front into develop
This commit is contained in:
commit
da81025bc6
@ -18,6 +18,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@element-plus/icons-vue": "^2.3.1",
|
"@element-plus/icons-vue": "^2.3.1",
|
||||||
|
"@smallwei/avue": "^3.6.2",
|
||||||
"@vueuse/core": "^12.4.0",
|
"@vueuse/core": "^12.4.0",
|
||||||
"axios": "^1.6.5",
|
"axios": "^1.6.5",
|
||||||
"dayjs": "^1.11.11",
|
"dayjs": "^1.11.11",
|
||||||
|
@ -4,7 +4,6 @@
|
|||||||
draggable
|
draggable
|
||||||
title="文件导入"
|
title="文件导入"
|
||||||
width="50%"
|
width="50%"
|
||||||
top="10px"
|
|
||||||
:close-on-click-modal="false"
|
:close-on-click-modal="false"
|
||||||
:close-on-press-escape="false"
|
:close-on-press-escape="false"
|
||||||
@close="onClose"
|
@close="onClose"
|
||||||
|
@ -5,11 +5,13 @@ import router from './router';
|
|||||||
import pinia from './store';
|
import pinia from './store';
|
||||||
import ElementPlus from 'element-plus';
|
import ElementPlus from 'element-plus';
|
||||||
import 'element-plus/dist/index.css';
|
import 'element-plus/dist/index.css';
|
||||||
|
import Avue from '@smallwei/avue';
|
||||||
|
import '@smallwei/avue/lib/index.css';
|
||||||
import { registerGlobalMicroApps } from './micro';
|
import { registerGlobalMicroApps } from './micro';
|
||||||
import { registerElIcons } from './plugins/icon';
|
import { registerElIcons } from './plugins/icon';
|
||||||
import './utils/permission';
|
import './utils/permission';
|
||||||
|
|
||||||
const app = createApp(App);
|
const app = createApp(App);
|
||||||
app.use(pinia).use(router).use(ElementPlus).mount('#root');
|
app.use(pinia).use(router).use(ElementPlus).use(Avue).mount('#root');
|
||||||
registerElIcons(app);
|
registerElIcons(app);
|
||||||
registerGlobalMicroApps();
|
registerGlobalMicroApps();
|
||||||
|
@ -27,12 +27,6 @@ export const constantRoutes = [
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
// {
|
|
||||||
// path: '/sub-government-affairs-service/:pathMatch(.*)',
|
|
||||||
// name: 'sub-government-affairs-service',
|
|
||||||
// component: Layout,
|
|
||||||
// redirect: '/sub-government-affairs-service/home',
|
|
||||||
// },
|
|
||||||
];
|
];
|
||||||
|
|
||||||
const router = createRouter({
|
const router = createRouter({
|
||||||
|
@ -1,12 +1,64 @@
|
|||||||
import { defineStore } from 'pinia';
|
import { defineStore } from 'pinia';
|
||||||
|
import { CONSTANTS } from '@/config';
|
||||||
|
|
||||||
export const useSettingStore = defineStore({
|
export const useSettingStore = defineStore({
|
||||||
id: 'settingStore',
|
id: 'settingStore',
|
||||||
state: () => ({
|
state: () => ({
|
||||||
|
// menu 是否收缩
|
||||||
|
isCollapse: true,
|
||||||
|
//
|
||||||
|
withoutAnimation: false,
|
||||||
|
device: 'desktop',
|
||||||
|
// 刷新当前页
|
||||||
isReload: true,
|
isReload: true,
|
||||||
|
// 主题设置
|
||||||
|
themeConfig: {
|
||||||
|
// 显示设置
|
||||||
|
showSetting: false,
|
||||||
|
// 菜单展示模式 默认 vertical horizontal / vertical /columns
|
||||||
|
mode: 'vertical',
|
||||||
|
// tagsView 是否展示 默认展示
|
||||||
|
showTag: true,
|
||||||
|
// 页脚
|
||||||
|
footer: true,
|
||||||
|
// 深色模式 切换暗黑模式
|
||||||
|
isDark: false,
|
||||||
|
// 显示侧边栏Logo
|
||||||
|
showLogo: true,
|
||||||
|
// 主题颜色
|
||||||
|
primary: CONSTANTS.PRIMARY,
|
||||||
|
// element组件大小
|
||||||
|
globalComSize: 'default',
|
||||||
|
// 是否只保持一个子菜单的展开
|
||||||
|
uniqueOpened: true,
|
||||||
|
// 固定header
|
||||||
|
fixedHeader: true,
|
||||||
|
// 灰色模式
|
||||||
|
gray: false,
|
||||||
|
// 色弱模式
|
||||||
|
weak: false,
|
||||||
|
},
|
||||||
}),
|
}),
|
||||||
getters: {},
|
getters: {},
|
||||||
actions: {
|
actions: {
|
||||||
|
// 设置主题
|
||||||
|
setThemeConfig({ key, val }) {
|
||||||
|
this.themeConfig[key] = val;
|
||||||
|
},
|
||||||
|
// 切换 Collapse
|
||||||
|
setCollapse(value) {
|
||||||
|
this.isCollapse = value;
|
||||||
|
this.withoutAnimation = false;
|
||||||
|
},
|
||||||
|
// 关闭侧边栏
|
||||||
|
closeSideBar({ withoutAnimation }) {
|
||||||
|
this.isCollapse = false;
|
||||||
|
this.withoutAnimation = withoutAnimation;
|
||||||
|
},
|
||||||
|
toggleDevice(device) {
|
||||||
|
this.device = device;
|
||||||
|
},
|
||||||
|
// 刷新
|
||||||
setReload() {
|
setReload() {
|
||||||
this.isReload = false;
|
this.isReload = false;
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
@ -3,7 +3,7 @@ import { GenKey } from '@/config';
|
|||||||
import { isEmpty, encode, decode } from '@/utils';
|
import { isEmpty, encode, decode } from '@/utils';
|
||||||
|
|
||||||
export const useUserStore = defineStore({
|
export const useUserStore = defineStore({
|
||||||
id: GenKey('user_store'),
|
id: GenKey('userStore'),
|
||||||
state: () => ({
|
state: () => ({
|
||||||
token: null,
|
token: null,
|
||||||
userInfo: {},
|
userInfo: {},
|
||||||
@ -52,14 +52,14 @@ export const useUserStore = defineStore({
|
|||||||
this.currentOrg = null;
|
this.currentOrg = null;
|
||||||
this.orgList = [];
|
this.orgList = [];
|
||||||
this.menus = [];
|
this.menus = [];
|
||||||
localStorage.removeItem(GenKey('user_store'));
|
localStorage.removeItem(GenKey('userStore'));
|
||||||
},
|
},
|
||||||
clear() {
|
clear() {
|
||||||
localStorage.removeItem(GenKey('user_store'));
|
localStorage.removeItem(GenKey('userStore'));
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
persist: {
|
persist: {
|
||||||
key: GenKey('user_store'),
|
key: GenKey('userStore'),
|
||||||
storage: window.localStorage,
|
storage: window.localStorage,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
@import 'common/base.scss';
|
@import 'common/base.scss';
|
||||||
@import 'common/define.scss';
|
@import 'common/define.scss';
|
||||||
// @import "@/assets/fonts/iconfont.css";
|
@import "@/assets/fonts/iconfont.css";
|
||||||
|
|
||||||
#root,
|
#root,
|
||||||
#app {
|
#app {
|
||||||
|
@ -41,7 +41,7 @@ const gotoPage = (row) => {
|
|||||||
// curentApp,
|
// curentApp,
|
||||||
// });
|
// });
|
||||||
// console.log('===', actions.getGlobalState('user'));
|
// console.log('===', actions.getGlobalState('user'));
|
||||||
if (row.name !== 'sub-government-affairs-service') return;
|
// if (row.name !== 'sub-government-affairs-service') return;
|
||||||
window.history.pushState({}, row.name, row.activeRule);
|
window.history.pushState({}, row.name, row.activeRule);
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
@ -14,46 +14,37 @@ import { resolve } from 'path';
|
|||||||
|
|
||||||
export default defineConfig(({ command, mode }) => {
|
export default defineConfig(({ command, mode }) => {
|
||||||
console.log('vite.config.js', command, mode, loadEnv(mode, process.cwd()));
|
console.log('vite.config.js', command, mode, loadEnv(mode, process.cwd()));
|
||||||
const {
|
const { VITE_PORT, VITE_APP_NAME, VITE_APP_BASE_API, VITE_APP_BASE_URL, VITE_APP_UPLOAD_API, VITE_APP_UPLOAD_URL } = loadEnv(mode, process.cwd());
|
||||||
VITE_PORT,
|
|
||||||
VITE_APP_NAME,
|
|
||||||
VITE_APP_BASE_API,
|
|
||||||
VITE_APP_BASE_URL,
|
|
||||||
VITE_APP_UPLOAD_API,
|
|
||||||
VITE_APP_UPLOAD_URL,
|
|
||||||
VITE_APP_SYSTEM_API,
|
|
||||||
VITE_APP_SYSTEM_URL,
|
|
||||||
} = loadEnv(mode, process.cwd());
|
|
||||||
const config = {
|
const config = {
|
||||||
base: './',
|
base: './',
|
||||||
build: {
|
build: {
|
||||||
target: 'ESNext',
|
target: 'ESNext',
|
||||||
outDir: 'dist',
|
outDir: 'dist',
|
||||||
minify: 'terser',
|
minify: 'terser',
|
||||||
// terserOptions: {
|
terserOptions: {
|
||||||
// compress: {
|
compress: {
|
||||||
// drop_console: true,
|
drop_console: true,
|
||||||
// drop_debugger: true,
|
drop_debugger: true,
|
||||||
// pure_funcs: ['console.log'],
|
pure_funcs: ['console.log'],
|
||||||
// },
|
},
|
||||||
// output: {
|
output: {
|
||||||
// comments: true,
|
comments: true,
|
||||||
// },
|
},
|
||||||
// },
|
},
|
||||||
// reportCompressedSize: false,
|
reportCompressedSize: false,
|
||||||
// chunkSizeWarningLimit: 2000,
|
chunkSizeWarningLimit: 2000,
|
||||||
// rollupOptions: {
|
rollupOptions: {
|
||||||
// output: {
|
output: {
|
||||||
// manualChunks(id) {
|
manualChunks(id) {
|
||||||
// if (id.includes('node_modules')) {
|
if (id.includes('node_modules')) {
|
||||||
// return id.toString().split('node_modules/')[1].split('/')[1].toString();
|
return id.toString().split('node_modules/')[1].split('/')[1].toString();
|
||||||
// }
|
}
|
||||||
// },
|
},
|
||||||
// chunkFileNames: 'assets/js/[name]-[hash].js',
|
chunkFileNames: 'assets/js/[name]-[hash].js',
|
||||||
// entryFileNames: 'assets/js/[name]-[hash].js',
|
entryFileNames: 'assets/js/[name]-[hash].js',
|
||||||
// assetFileNames: 'assets/[ext]/[name]-[hash].[ext]',
|
assetFileNames: 'assets/[ext]/[name]-[hash].[ext]',
|
||||||
// },
|
},
|
||||||
// },
|
},
|
||||||
},
|
},
|
||||||
server: {
|
server: {
|
||||||
host: '0.0.0.0',
|
host: '0.0.0.0',
|
||||||
@ -74,11 +65,6 @@ export default defineConfig(({ command, mode }) => {
|
|||||||
changeOrigin: true,
|
changeOrigin: true,
|
||||||
rewrite: (path) => path.replace(/^\/uploadApis/, ''),
|
rewrite: (path) => path.replace(/^\/uploadApis/, ''),
|
||||||
},
|
},
|
||||||
[VITE_APP_SYSTEM_API]: {
|
|
||||||
target: VITE_APP_SYSTEM_URL,
|
|
||||||
changeOrigin: true,
|
|
||||||
rewrite: (path) => path.replace(/^\/systemApis/, ''),
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
resolve: {
|
resolve: {
|
||||||
@ -133,13 +119,5 @@ export default defineConfig(({ command, mode }) => {
|
|||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
if (mode === 'production') {
|
|
||||||
config.build.terserOptions = {
|
|
||||||
compress: {
|
|
||||||
drop_console: true,
|
|
||||||
drop_debugger: true,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
|
||||||
return config;
|
return config;
|
||||||
});
|
});
|
||||||
|
@ -195,7 +195,7 @@
|
|||||||
resolved "https://registry.npmmirror.com/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz#519c1549b0e147759e7825701ecffd25e5819f7b"
|
resolved "https://registry.npmmirror.com/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz#519c1549b0e147759e7825701ecffd25e5819f7b"
|
||||||
integrity sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==
|
integrity sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==
|
||||||
|
|
||||||
"@element-plus/icons-vue@^2.3.1":
|
"@element-plus/icons-vue@^2.0.6", "@element-plus/icons-vue@^2.3.1":
|
||||||
version "2.3.1"
|
version "2.3.1"
|
||||||
resolved "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz#1f635ad5fdd5c85ed936481525570e82b5a8307a"
|
resolved "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz#1f635ad5fdd5c85ed936481525570e82b5a8307a"
|
||||||
integrity sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==
|
integrity sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==
|
||||||
@ -678,6 +678,16 @@
|
|||||||
resolved "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.29.2.tgz#dc89d92418ae2efa1d70e071c686cffbcf788147"
|
resolved "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.29.2.tgz#dc89d92418ae2efa1d70e071c686cffbcf788147"
|
||||||
integrity sha512-p6fTArexECPf6KnOHvJXRpAEq0ON1CBtzG/EY4zw08kCHk/kivBc5vUEtnCFNCHOpJZ2ne77fxwRLIKD4wuW2Q==
|
integrity sha512-p6fTArexECPf6KnOHvJXRpAEq0ON1CBtzG/EY4zw08kCHk/kivBc5vUEtnCFNCHOpJZ2ne77fxwRLIKD4wuW2Q==
|
||||||
|
|
||||||
|
"@smallwei/avue@^3.6.2":
|
||||||
|
version "3.6.2"
|
||||||
|
resolved "https://registry.npmmirror.com/@smallwei/avue/-/avue-3.6.2.tgz#a9397aa1ae0863fe7e142f0893d570e5a5225d9d"
|
||||||
|
integrity sha512-Ifkt0o7KLsAMptfoNMG7qYS86OL2pEet761wWZyZGu8e48wuNNPOfqx5jnibGjx2oIoKtYUFh7tFdllOCth2EQ==
|
||||||
|
dependencies:
|
||||||
|
"@element-plus/icons-vue" "^2.0.6"
|
||||||
|
countup.js "^1.9.3"
|
||||||
|
dayjs "^1.10.4"
|
||||||
|
lodash "^4.17.21"
|
||||||
|
|
||||||
"@transloadit/prettier-bytes@0.0.7":
|
"@transloadit/prettier-bytes@0.0.7":
|
||||||
version "0.0.7"
|
version "0.0.7"
|
||||||
resolved "https://registry.npmmirror.com/@transloadit/prettier-bytes/-/prettier-bytes-0.0.7.tgz#cdb5399f445fdd606ed833872fa0cabdbc51686b"
|
resolved "https://registry.npmmirror.com/@transloadit/prettier-bytes/-/prettier-bytes-0.0.7.tgz#cdb5399f445fdd606ed833872fa0cabdbc51686b"
|
||||||
@ -1800,6 +1810,11 @@ cosmiconfig@^9.0.0:
|
|||||||
js-yaml "^4.1.0"
|
js-yaml "^4.1.0"
|
||||||
parse-json "^5.2.0"
|
parse-json "^5.2.0"
|
||||||
|
|
||||||
|
countup.js@^1.9.3:
|
||||||
|
version "1.9.3"
|
||||||
|
resolved "https://registry.npmmirror.com/countup.js/-/countup.js-1.9.3.tgz#ce3e50cd7160441e478f07da31895edcc0f1c9dd"
|
||||||
|
integrity sha512-UHf2P/mFKaESqdPq+UdBJm/1y8lYdlcDd0nTZHNC8cxWoJwZr1Eldm1PpWui446vDl5Pd8PtRYkr3q6K4+Qa5A==
|
||||||
|
|
||||||
cross-spawn@^7.0.2, cross-spawn@^7.0.3:
|
cross-spawn@^7.0.2, cross-spawn@^7.0.3:
|
||||||
version "7.0.6"
|
version "7.0.6"
|
||||||
resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
|
resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
|
||||||
@ -1916,7 +1931,7 @@ data-view-byte-offset@^1.0.1:
|
|||||||
es-errors "^1.3.0"
|
es-errors "^1.3.0"
|
||||||
is-data-view "^1.0.1"
|
is-data-view "^1.0.1"
|
||||||
|
|
||||||
dayjs@^1.11.11, dayjs@^1.11.13:
|
dayjs@^1.10.4, dayjs@^1.11.11, dayjs@^1.11.13:
|
||||||
version "1.11.13"
|
version "1.11.13"
|
||||||
resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c"
|
resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c"
|
||||||
integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==
|
integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==
|
||||||
|
1753
package-lock.json
generated
Normal file
1753
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
@ -2,6 +2,7 @@
|
|||||||
VITE_PORT = 9528
|
VITE_PORT = 9528
|
||||||
VITE_MODE = 'DEV'
|
VITE_MODE = 'DEV'
|
||||||
VITE_APP_MIAN = 'daimp-front-main'
|
VITE_APP_MIAN = 'daimp-front-main'
|
||||||
|
VITE_APP_MIAN_URL = 'http://localhost:9000'
|
||||||
VITE_APP_NAME = 'sub-government-affairs-service'
|
VITE_APP_NAME = 'sub-government-affairs-service'
|
||||||
VITE_APP_BASE_API = '/apis'
|
VITE_APP_BASE_API = '/apis'
|
||||||
VITE_APP_BASE_URL = 'http://192.168.18.99:8080'
|
VITE_APP_BASE_URL = 'http://192.168.18.99:8080'
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
# 生产环境
|
# 生产环境
|
||||||
VITE_MODE = 'PRO'
|
VITE_MODE = 'PRO'
|
||||||
VITE_APP_MIAN = 'daimp-front-main'
|
VITE_APP_MIAN = 'daimp-front-main'
|
||||||
|
VITE_APP_MIAN_URL = 'http://192.168.18.99:88'
|
||||||
VITE_APP_NAME = 'sub-government-affairs-service'
|
VITE_APP_NAME = 'sub-government-affairs-service'
|
||||||
# 接口
|
# 接口
|
||||||
VITE_APP_BASE_API = '/apis'
|
VITE_APP_BASE_API = '/apis'
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<title>政务服务</title>
|
<title>政务服务</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="app"></div>
|
<div id="sub-app"></div>
|
||||||
<script type="module" src="/src/main.js"></script>
|
<script type="module" src="/src/main.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -6,8 +6,7 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite --mode development",
|
"dev": "vite --mode development",
|
||||||
"build": "vite build --mode production",
|
"build": "vite build --mode production",
|
||||||
"build:dev": "vite build --mode dev",
|
"test": "vite build --mode test",
|
||||||
"build:qa": "vite build --mode qa",
|
|
||||||
"preview": "vite preview",
|
"preview": "vite preview",
|
||||||
"format": "prettier --write 'src/**/*.{vue,ts,tsx,js,jsx,css,less,scss,json,md}'",
|
"format": "prettier --write 'src/**/*.{vue,ts,tsx,js,jsx,css,less,scss,json,md}'",
|
||||||
"eslint": "npx eslint --init",
|
"eslint": "npx eslint --init",
|
||||||
|
@ -7,7 +7,7 @@ export function getLandsList(params = {}) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export function saveLands(params = {}) {
|
export function saveLand(params = {}) {
|
||||||
return request('land-resource/landManage/save', {
|
return request('land-resource/landManage/save', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
params,
|
params,
|
||||||
|
@ -1,43 +0,0 @@
|
|||||||
import request from '@/utils/axios';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @Title: 登录
|
|
||||||
*/
|
|
||||||
export function Login(params, token) {
|
|
||||||
return request('/store/login', {
|
|
||||||
method: 'POST',
|
|
||||||
data: null,
|
|
||||||
params: params,
|
|
||||||
headers: {
|
|
||||||
'fairies-auth-token': token,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @Title: 登出
|
|
||||||
*/
|
|
||||||
export function LogOut() {
|
|
||||||
return request('/store/logout', {
|
|
||||||
method: 'POST',
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @Title: 验证码
|
|
||||||
*/
|
|
||||||
export function GetCaptcha() {
|
|
||||||
return request('/store/login-captcha', {
|
|
||||||
method: 'GET',
|
|
||||||
responseType: 'arraybuffer',
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @Title: 获取菜单
|
|
||||||
*/
|
|
||||||
export function GetMenus() {
|
|
||||||
return request('/store/self/menu', {
|
|
||||||
method: 'GET',
|
|
||||||
});
|
|
||||||
}
|
|
61
sub-government-affairs-service/src/apis/plan.js
Normal file
61
sub-government-affairs-service/src/apis/plan.js
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
import request from '@/utils/axios';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Title: 列表
|
||||||
|
*/
|
||||||
|
export function GetEntityList(params = {}) {
|
||||||
|
return request('/land-resource/annualManage/page', {
|
||||||
|
method: 'GET',
|
||||||
|
params,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Title: 新增
|
||||||
|
*/
|
||||||
|
export function AddEntity(data = {}) {
|
||||||
|
return request('/land-resource/annualManage/save', {
|
||||||
|
method: 'POST',
|
||||||
|
data,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Title: 修改
|
||||||
|
*/
|
||||||
|
export function UpdateEntity(data = {}) {
|
||||||
|
return request('/land-resource/annualManage/edit', {
|
||||||
|
method: 'PUT',
|
||||||
|
data,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Title: 审核
|
||||||
|
*/
|
||||||
|
export function AuditEntity(data = {}) {
|
||||||
|
return request('/land-resource/annualManage/exam', {
|
||||||
|
method: 'PUT',
|
||||||
|
data,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Title: 删除
|
||||||
|
*/
|
||||||
|
export function DeleteEntity(params = {}) {
|
||||||
|
return request(`/land-resource/annualManage/delete/${params.id}`, {
|
||||||
|
method: 'DELETE',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Title: 导出
|
||||||
|
*/
|
||||||
|
export function ExportEntity(params = {}) {
|
||||||
|
return request('/land-resource/annualManage/export', {
|
||||||
|
method: 'GET',
|
||||||
|
params,
|
||||||
|
responseType: 'blob',
|
||||||
|
});
|
||||||
|
}
|
@ -0,0 +1,84 @@
|
|||||||
|
<template>
|
||||||
|
<el-select-v2
|
||||||
|
v-model="val"
|
||||||
|
:options="options"
|
||||||
|
:placeholder="props.set.placeholder"
|
||||||
|
:props="props.set.props"
|
||||||
|
:multiple="props.set.multiple"
|
||||||
|
@change="handleSelect"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref, onMounted } from 'vue';
|
||||||
|
import request from '@/utils/axios';
|
||||||
|
const emit = defineEmits(['update:value']);
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
set: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {
|
||||||
|
url: '',
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
value: '1',
|
||||||
|
label: 'label 1',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: '2',
|
||||||
|
label: 'label 2',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: '3',
|
||||||
|
label: 'label 3',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
props: {
|
||||||
|
value: 'value',
|
||||||
|
label: 'label',
|
||||||
|
},
|
||||||
|
multiple: false,
|
||||||
|
placeholder: '请选择',
|
||||||
|
};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
value: {
|
||||||
|
type: String || Array || null,
|
||||||
|
default: null,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
onMounted(async () => {
|
||||||
|
if (props.set.multiple) val.value = [];
|
||||||
|
|
||||||
|
if (props.set.url) {
|
||||||
|
let res = await request(props.set.url, {
|
||||||
|
method: 'get',
|
||||||
|
data: { current: 1, size: 9999 },
|
||||||
|
});
|
||||||
|
if (res.code == 200) {
|
||||||
|
options.value = res.data.records;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
options.value = props.set.options;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/* --------------- data --------------- */
|
||||||
|
// #region
|
||||||
|
const val = ref(null);
|
||||||
|
const options = ref([]);
|
||||||
|
|
||||||
|
// #endregion
|
||||||
|
|
||||||
|
/* --------------- methods --------------- */
|
||||||
|
// #region
|
||||||
|
function handleSelect(val_) {
|
||||||
|
emit('update:value', val_);
|
||||||
|
}
|
||||||
|
// #endregion
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped></style>
|
@ -4,7 +4,8 @@
|
|||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref, onMounted } from 'vue';
|
import { ref, onMounted } from 'vue';
|
||||||
import { GetEntityList } from '@/apis/coding';
|
import { GetEntityList } from '@/apis/grid.js';
|
||||||
|
const emit = defineEmits(['update:value']);
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
// 父组件传过来的值
|
// 父组件传过来的值
|
||||||
@ -35,7 +36,7 @@ const _props = {
|
|||||||
/* --------------- methods --------------- */
|
/* --------------- methods --------------- */
|
||||||
// #region
|
// #region
|
||||||
function handleSelect(val_) {
|
function handleSelect(val_) {
|
||||||
console.log('val_', val_);
|
emit('update:value', val_);
|
||||||
}
|
}
|
||||||
// #endregion
|
// #endregion
|
||||||
</script>
|
</script>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-select v-model="val" @change="change">
|
<el-select v-model="val" @change="change">
|
||||||
<el-option v-for="item in options" :key="`land_type_${item.value}`" :value="item.value" :label="item.label" placeholder="请选择">
|
<el-option v-for="item in options" :key="`land_type_${item.value}`" :value="item.value" :label="item.label" :placeholder="props.placeholder">
|
||||||
{{ item.label }}
|
{{ item.label }}
|
||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
@ -15,6 +15,10 @@ const props = defineProps({
|
|||||||
type: String || null,
|
type: String || null,
|
||||||
default: null,
|
default: null,
|
||||||
},
|
},
|
||||||
|
placeholder: {
|
||||||
|
type: String,
|
||||||
|
default: '请选择',
|
||||||
|
},
|
||||||
});
|
});
|
||||||
const emit = defineEmits(['update:value']);
|
const emit = defineEmits(['update:value']);
|
||||||
/* --------------- data --------------- */
|
/* --------------- data --------------- */
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-select v-model="val" @change="change">
|
<el-select v-model="val" @change="change">
|
||||||
<el-option v-for="item in options" :key="`land_type_${item.value}`" :value="item.value" :label="item.label" placeholder="请选择">
|
<el-option v-for="item in options" :key="`land_type_${item.value}`" :value="item.value" :label="item.label" :placeholder="props.placeholder">
|
||||||
{{ item.label }}
|
{{ item.label }}
|
||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
@ -15,6 +15,10 @@ const props = defineProps({
|
|||||||
type: String || null,
|
type: String || null,
|
||||||
default: null,
|
default: null,
|
||||||
},
|
},
|
||||||
|
placeholder: {
|
||||||
|
type: String,
|
||||||
|
default: '请选择',
|
||||||
|
},
|
||||||
});
|
});
|
||||||
const emit = defineEmits(['update:value']);
|
const emit = defineEmits(['update:value']);
|
||||||
/* --------------- data --------------- */
|
/* --------------- data --------------- */
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-select v-model="val" @change="change">
|
<el-select v-model="val" @change="change">
|
||||||
<el-option v-for="item in options" :key="`land_type_${item.value}`" :value="item.value" :label="item.label" placeholder="请选择">
|
<el-option v-for="item in options" :key="`land_type_${item.value}`" :value="item.value" :label="item.label" :placeholder="props.placeholder">
|
||||||
{{ item.label }}
|
{{ item.label }}
|
||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
@ -15,6 +15,10 @@ const props = defineProps({
|
|||||||
type: String || null,
|
type: String || null,
|
||||||
default: null,
|
default: null,
|
||||||
},
|
},
|
||||||
|
placeholder: {
|
||||||
|
type: String,
|
||||||
|
default: '请选择',
|
||||||
|
},
|
||||||
});
|
});
|
||||||
const emit = defineEmits(['update:value']);
|
const emit = defineEmits(['update:value']);
|
||||||
/* --------------- data --------------- */
|
/* --------------- data --------------- */
|
||||||
|
@ -0,0 +1,54 @@
|
|||||||
|
<template>
|
||||||
|
<el-dialog
|
||||||
|
v-model="state.visible"
|
||||||
|
draggable
|
||||||
|
title="溯源码"
|
||||||
|
width="40%"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
:close-on-press-escape="false"
|
||||||
|
@close="onClose"
|
||||||
|
>
|
||||||
|
<div class="code-panel">
|
||||||
|
<div class="code-panel-picture">
|
||||||
|
<el-image style="width: 200px; height: 200px" :src="row.orCodeUrl" fit="cover" lazy />
|
||||||
|
</div>
|
||||||
|
<el-button type="primary" @click="downloadFile(row.orCodeUrl, `${row.productName}-溯源码.png`, 'image')"> 下载溯源码</el-button>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
<script setup name="code-dialog">
|
||||||
|
import { reactive } from 'vue';
|
||||||
|
import { downloadFile } from '@/utils';
|
||||||
|
const props = defineProps({
|
||||||
|
row: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const emit = defineEmits(['on-close']);
|
||||||
|
|
||||||
|
const state = reactive({
|
||||||
|
visible: false,
|
||||||
|
});
|
||||||
|
|
||||||
|
const onClose = () => {
|
||||||
|
state.visible = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
defineExpose({
|
||||||
|
show: () => {
|
||||||
|
state.visible = true;
|
||||||
|
},
|
||||||
|
hide: () => {
|
||||||
|
onClose();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.code {
|
||||||
|
&-panel {
|
||||||
|
padding-bottom: 40px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -3,7 +3,7 @@
|
|||||||
* @Author: zenghua.wang
|
* @Author: zenghua.wang
|
||||||
* @Date: 2023-06-20 14:29:45
|
* @Date: 2023-06-20 14:29:45
|
||||||
* @LastEditors: zenghua.wang
|
* @LastEditors: zenghua.wang
|
||||||
* @LastEditTime: 2025-02-14 11:39:56
|
* @LastEditTime: 2025-02-18 09:48:18
|
||||||
-->
|
-->
|
||||||
<template>
|
<template>
|
||||||
<el-dropdown class="layout-avatar">
|
<el-dropdown class="layout-avatar">
|
||||||
@ -33,7 +33,7 @@ import { useUserStore } from '@/store/modules/user';
|
|||||||
import { useTagsViewStore } from '@/store/modules/tagsView';
|
import { useTagsViewStore } from '@/store/modules/tagsView';
|
||||||
import { usePermissionStore } from '@/store/modules/permission';
|
import { usePermissionStore } from '@/store/modules/permission';
|
||||||
import { getAssetsFile } from '@/utils';
|
import { getAssetsFile } from '@/utils';
|
||||||
import { LogOut } from '@/apis/login';
|
import { Logout } from '#/apis/login';
|
||||||
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const UserStore = useUserStore();
|
const UserStore = useUserStore();
|
||||||
@ -49,7 +49,7 @@ const logOut = async () => {
|
|||||||
cancelButtonText: '取消',
|
cancelButtonText: '取消',
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
}).then(async () => {
|
}).then(async () => {
|
||||||
LogOut().then((res) => {
|
Logout().then((res) => {
|
||||||
if (res.code === 200) {
|
if (res.code === 200) {
|
||||||
UserStore.logout();
|
UserStore.logout();
|
||||||
TagsViewStore.clearVisitedView();
|
TagsViewStore.clearVisitedView();
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
*/
|
*/
|
||||||
import 'virtual:svg-icons-register';
|
import 'virtual:svg-icons-register';
|
||||||
import { createApp } from 'vue';
|
import { createApp } from 'vue';
|
||||||
|
import { renderWithQiankun, qiankunWindow } from 'vite-plugin-qiankun/dist/helper';
|
||||||
import App from './App.vue';
|
import App from './App.vue';
|
||||||
import router from './router';
|
import router from './router';
|
||||||
import pinia from './store';
|
import pinia from './store';
|
||||||
@ -14,11 +15,10 @@ import ElementPlus from 'element-plus';
|
|||||||
import 'element-plus/dist/index.css';
|
import 'element-plus/dist/index.css';
|
||||||
import Avue from '@smallwei/avue';
|
import Avue from '@smallwei/avue';
|
||||||
import '@smallwei/avue/lib/index.css';
|
import '@smallwei/avue/lib/index.css';
|
||||||
import './utils/permission';
|
|
||||||
import { registerDirective } from './directives';
|
import { registerDirective } from './directives';
|
||||||
import { registerGlobalComponents } from './plugins/globalComponents';
|
import { registerGlobalComponents } from './plugins/globalComponents';
|
||||||
import { registerElIcons } from './plugins/icon';
|
import { registerElIcons } from './plugins/icon';
|
||||||
import { registerMicroApps } from './plugins/micro';
|
import './utils/permission';
|
||||||
import VueAMap, { initAMapApiLoader } from '@vuemap/vue-amap';
|
import VueAMap, { initAMapApiLoader } from '@vuemap/vue-amap';
|
||||||
initAMapApiLoader({
|
initAMapApiLoader({
|
||||||
key: 'c843a50db7157faf295c6fa37c48719f',
|
key: 'c843a50db7157faf295c6fa37c48719f',
|
||||||
@ -27,10 +27,37 @@ initAMapApiLoader({
|
|||||||
// version: '2.0.0'
|
// version: '2.0.0'
|
||||||
//} // 如果需要使用loca组件库,需要加载Loca
|
//} // 如果需要使用loca组件库,需要加载Loca
|
||||||
});
|
});
|
||||||
const app = createApp(App);
|
const registerMicroApps = () => {
|
||||||
|
let app = null;
|
||||||
|
const initQiankun = () => {
|
||||||
|
renderWithQiankun({
|
||||||
|
bootstrap() {
|
||||||
|
console.log('bootstrap');
|
||||||
|
},
|
||||||
|
mount(props) {
|
||||||
|
console.log('mount', props);
|
||||||
|
render(props);
|
||||||
|
},
|
||||||
|
update(props) {
|
||||||
|
console.log('update', props);
|
||||||
|
},
|
||||||
|
unmount(props) {
|
||||||
|
console.log('unmount', props);
|
||||||
|
app = null;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
};
|
||||||
|
const render = async ({ container }) => {
|
||||||
|
await new Promise((resolve) => setTimeout(resolve, 1000));
|
||||||
|
app = createApp(App);
|
||||||
|
app.use(pinia).use(router).use(ElementPlus).use(Avue).use(VueAMap);
|
||||||
|
registerGlobalComponents(app);
|
||||||
|
registerElIcons(app);
|
||||||
|
registerDirective(app);
|
||||||
|
registerMicroApps(app);
|
||||||
|
app.mount(container.querySelector('#sub-app') || '#sub-app');
|
||||||
|
};
|
||||||
|
qiankunWindow.__POWERED_BY_QIANKUN__ ? initQiankun() : render({});
|
||||||
|
};
|
||||||
|
|
||||||
app.use(pinia).use(router).use(ElementPlus).use(Avue).use(VueAMap);
|
registerMicroApps();
|
||||||
registerGlobalComponents(app);
|
|
||||||
registerElIcons(app);
|
|
||||||
registerDirective(app);
|
|
||||||
registerMicroApps(app);
|
|
||||||
|
@ -24,7 +24,7 @@ export const registerMicroApps = (app) => {
|
|||||||
console.error('挂载容器不存在');
|
console.error('挂载容器不存在');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
app.mount(container.querySelector('#app') || '#app');
|
app.mount(container.querySelector('#sub-app') || '#sub-app');
|
||||||
};
|
};
|
||||||
qiankunWindow.__POWERED_BY_QIANKUN__ ? initQiankun() : render({});
|
qiankunWindow.__POWERED_BY_QIANKUN__ ? initQiankun() : render({});
|
||||||
};
|
};
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
* @Author: zenghua.wang
|
* @Author: zenghua.wang
|
||||||
* @Date: 2023-06-20 11:48:41
|
* @Date: 2023-06-20 11:48:41
|
||||||
* @LastEditors: zenghua.wang
|
* @LastEditors: zenghua.wang
|
||||||
* @LastEditTime: 2025-02-17 11:47:53
|
* @LastEditTime: 2025-02-18 11:22:07
|
||||||
*/
|
*/
|
||||||
import { createRouter, createWebHistory } from 'vue-router';
|
import { createRouter, createWebHistory } from 'vue-router';
|
||||||
import { qiankunWindow } from 'vite-plugin-qiankun/dist/helper';
|
import { qiankunWindow } from 'vite-plugin-qiankun/dist/helper';
|
||||||
@ -29,6 +29,16 @@ export const constantRoutes = [
|
|||||||
component: () => import('@/views/error/403.vue'),
|
component: () => import('@/views/error/403.vue'),
|
||||||
hidden: true,
|
hidden: true,
|
||||||
},
|
},
|
||||||
|
// {
|
||||||
|
// path: '/login',
|
||||||
|
// name: 'login',
|
||||||
|
// component: () => import('@/views/error/404.vue'),
|
||||||
|
// hidden: true,
|
||||||
|
// meta: {
|
||||||
|
// title: '登录',
|
||||||
|
// icon: 'Login',
|
||||||
|
// },
|
||||||
|
// },
|
||||||
{
|
{
|
||||||
path: '/',
|
path: '/',
|
||||||
name: 'layout',
|
name: 'layout',
|
||||||
@ -44,7 +54,7 @@ export const constantRoutes = [
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
// ...resourceRouter,
|
...resourceRouter,
|
||||||
...plantingAndBreedingRouter,
|
...plantingAndBreedingRouter,
|
||||||
...annualplanRoutes,
|
...annualplanRoutes,
|
||||||
...landsRoutes,
|
...landsRoutes,
|
||||||
@ -54,9 +64,9 @@ export const constantRoutes = [
|
|||||||
* @Title notFoundRouter(找不到路由)
|
* @Title notFoundRouter(找不到路由)
|
||||||
*/
|
*/
|
||||||
export const notFoundRouter = {
|
export const notFoundRouter = {
|
||||||
// path: '/:pathMatch(.*)',
|
path: '/:pathMatch(.*)',
|
||||||
// name: 'notFound',
|
name: 'notFound',
|
||||||
// redirect: '/404',
|
redirect: '/404',
|
||||||
};
|
};
|
||||||
|
|
||||||
const router = createRouter({
|
const router = createRouter({
|
||||||
|
@ -1,69 +0,0 @@
|
|||||||
import Layout from '@/layouts/index.vue';
|
|
||||||
import Views from '@/layouts/Views.vue';
|
|
||||||
|
|
||||||
export default [
|
|
||||||
{
|
|
||||||
path: '/resource',
|
|
||||||
name: 'resource',
|
|
||||||
component: Layout,
|
|
||||||
redirect: '/grid',
|
|
||||||
meta: { title: '土地资源管理', icon: 'icon-test' },
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
path: '/grid',
|
|
||||||
component: () => import('@/views/resource/grid/index.vue'),
|
|
||||||
name: 'grid',
|
|
||||||
meta: { title: '网格化管理', icon: 'Document' },
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
// {
|
|
||||||
// path: '/resource-info',
|
|
||||||
// name: 'resource-info-manager',
|
|
||||||
// component: Views,
|
|
||||||
// meta: { title: '土地信息管理', icon: 'Document' },
|
|
||||||
// redirect: '/land',
|
|
||||||
// children: [
|
|
||||||
// {
|
|
||||||
// path: '/land',
|
|
||||||
// component: () => import('@/views/resource/land/index.vue'),
|
|
||||||
// name: 'land',
|
|
||||||
// meta: { title: '土地资源', icon: 'Document' },
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// path: '/land-fill',
|
|
||||||
// name: 'land-fill',
|
|
||||||
// component: () => import('@/views/resource/land/index.vue'),
|
|
||||||
// meta: { title: '土地信息填报审核', icon: 'Document' },
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// path: '/land-fill-review',
|
|
||||||
// name: 'land-fill-review',
|
|
||||||
// component: () => import('@/views/resource/land/index.vue'),
|
|
||||||
// meta: { title: '土地流转信息填报审核', icon: 'Document' },
|
|
||||||
// },
|
|
||||||
// ],
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// path: '/land-monitor',
|
|
||||||
// name: 'land-monitor',
|
|
||||||
// component: Views,
|
|
||||||
// meta: { title: '土地监管', icon: 'Document' },
|
|
||||||
// redirect: '/land-patrol',
|
|
||||||
// children: [
|
|
||||||
// {
|
|
||||||
// path: '/land-patrol',
|
|
||||||
// component: () => import('@/views/resource/land/index.vue'),
|
|
||||||
// name: 'land-patrol',
|
|
||||||
// meta: { title: '土地使用巡查', icon: 'Document' },
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// path: '/land-handle',
|
|
||||||
// name: 'land-handle',
|
|
||||||
// component: () => import('@/views/resource/land/index.vue'),
|
|
||||||
// meta: { title: '土地违法处理', icon: 'Document' },
|
|
||||||
// },
|
|
||||||
// ],
|
|
||||||
// },
|
|
@ -15,12 +15,12 @@ export default [
|
|||||||
name: 'grid',
|
name: 'grid',
|
||||||
meta: { title: '网格化管理', icon: 'Document' },
|
meta: { title: '网格化管理', icon: 'Document' },
|
||||||
},
|
},
|
||||||
{
|
// {
|
||||||
path: '/grid2',
|
// path: '/annual-plan',
|
||||||
component: () => import('@/views/resource/grid/index.vue'),
|
// component: () => import('@/views/resource/plan/index.vue'),
|
||||||
name: 'grid2',
|
// name: 'annual-plan',
|
||||||
meta: { title: '网格化管理2', icon: 'Document' },
|
// meta: { title: '年度计划', icon: 'Document' },
|
||||||
},
|
// },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
@ -3,7 +3,7 @@ import { GenKey } from '@/config';
|
|||||||
import { isEmpty, encode, decode } from '@/utils';
|
import { isEmpty, encode, decode } from '@/utils';
|
||||||
|
|
||||||
export const useUserStore = defineStore({
|
export const useUserStore = defineStore({
|
||||||
id: GenKey('user_store'),
|
id: GenKey('userStore'),
|
||||||
state: () => ({
|
state: () => ({
|
||||||
token: null,
|
token: null,
|
||||||
userInfo: {},
|
userInfo: {},
|
||||||
@ -52,14 +52,14 @@ export const useUserStore = defineStore({
|
|||||||
this.currentOrg = null;
|
this.currentOrg = null;
|
||||||
this.orgList = [];
|
this.orgList = [];
|
||||||
this.menus = [];
|
this.menus = [];
|
||||||
localStorage.removeItem(GenKey('user_store'));
|
localStorage.removeItem(GenKey('userStore'));
|
||||||
},
|
},
|
||||||
clear() {
|
clear() {
|
||||||
localStorage.removeItem(GenKey('user_store'));
|
localStorage.removeItem(GenKey('userStore'));
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
persist: {
|
persist: {
|
||||||
key: GenKey('user_store'),
|
key: GenKey('userStore'),
|
||||||
storage: window.localStorage,
|
storage: window.localStorage,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
* @Author: zenghua.wang
|
* @Author: zenghua.wang
|
||||||
* @Date: 2022-02-23 21:12:37
|
* @Date: 2022-02-23 21:12:37
|
||||||
* @LastEditors: zenghua.wang
|
* @LastEditors: zenghua.wang
|
||||||
* @LastEditTime: 2025-02-13 14:47:02
|
* @LastEditTime: 2025-02-18 09:47:41
|
||||||
*/
|
*/
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import { ElNotification } from 'element-plus';
|
import { ElNotification } from 'element-plus';
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
* @LastEditors: zenghua.wang
|
* @LastEditors: zenghua.wang
|
||||||
* @LastEditTime: 2024-02-26 13:54:43
|
* @LastEditTime: 2024-02-26 13:54:43
|
||||||
*/
|
*/
|
||||||
|
import { qiankunWindow } from 'vite-plugin-qiankun/dist/helper';
|
||||||
import NProgress from 'nprogress';
|
import NProgress from 'nprogress';
|
||||||
import 'nprogress/nprogress.css';
|
import 'nprogress/nprogress.css';
|
||||||
import router from '@/router';
|
import router from '@/router';
|
||||||
@ -13,8 +14,8 @@ import { usePermissionStore } from '@/store/modules/permission';
|
|||||||
|
|
||||||
NProgress.configure({ showSpinner: false });
|
NProgress.configure({ showSpinner: false });
|
||||||
|
|
||||||
const whiteList = ['/login', '/auth-redirect']; // 设置白名单
|
const { VITE_APP_MIAN_URL } = import.meta.env;
|
||||||
|
const whiteList = [];
|
||||||
router.beforeEach(async (to, from, next) => {
|
router.beforeEach(async (to, from, next) => {
|
||||||
NProgress.start();
|
NProgress.start();
|
||||||
if (typeof to.meta.title === 'string') {
|
if (typeof to.meta.title === 'string') {
|
||||||
@ -26,28 +27,30 @@ router.beforeEach(async (to, from, next) => {
|
|||||||
console.log('sub', hasToken);
|
console.log('sub', hasToken);
|
||||||
if (hasToken) {
|
if (hasToken) {
|
||||||
if (to.path === '/login') {
|
if (to.path === '/login') {
|
||||||
// 如果已登录,请重定向到主页
|
|
||||||
next({ path: '/' });
|
next({ path: '/' });
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
const PermissionStore = usePermissionStore();
|
const PermissionStore = usePermissionStore();
|
||||||
// 路由添加进去了没有及时更新 需要重新进去一次拦截
|
|
||||||
if (!PermissionStore.routes.length) {
|
if (!PermissionStore.routes.length) {
|
||||||
// 获取权限列表进行接口访问 因为这里页面要切换权限
|
|
||||||
const accessRoutes = await PermissionStore.generateRoutes(userStore.roles);
|
const accessRoutes = await PermissionStore.generateRoutes(userStore.roles);
|
||||||
accessRoutes.forEach((item) => router.addRoute(item)); // 动态添加访问路由表
|
accessRoutes.forEach((item) => router.addRoute(item));
|
||||||
next({ ...to, replace: true }); // 这里相当于push到一个页面 不在进入路由拦截
|
next({ ...to, replace: true });
|
||||||
} else {
|
} else {
|
||||||
next(); // 如果不传参数就会重新执行路由拦截,重新进到这里
|
next();
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
next(`/login?redirect=${to.path}`);
|
next(`/login?redirect=${to.path}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
NProgress.done();
|
||||||
if (whiteList.indexOf(to.path) !== -1) {
|
if (whiteList.indexOf(to.path) !== -1) {
|
||||||
next();
|
next();
|
||||||
} else {
|
} else {
|
||||||
|
if (qiankunWindow.__POWERED_BY_QIANKUN__) {
|
||||||
|
window.location.href = VITE_APP_MIAN_URL;
|
||||||
|
return;
|
||||||
|
}
|
||||||
next(`/login?redirect=${to.path}`);
|
next(`/login?redirect=${to.path}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,47 +1,80 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-drawer v-model="_visible" title="土地信息" :size="800" @close="handleClose">
|
<el-drawer v-model="_visible" title="土地信息" :size="800" @close="handleClose">
|
||||||
<el-card>
|
<el-card>
|
||||||
<div>基础信息</div>
|
<div class="title_">基础信息</div>
|
||||||
<el-form :model="baseInfo" class="base_form" label-width="120px">
|
<el-form ref="baseForm" :model="baseInfo" class="base_form" label-width="120px">
|
||||||
<el-form-item label="土地名称" prop="landName">
|
<el-form-item label="土地名称" prop="landName">
|
||||||
<el-input v-model="baseInfo.landName" placeholder="请输入名称"></el-input>
|
<el-input v-model="baseInfo.landName" placeholder="请输入名称"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="所属网格" prop="gridName">
|
<el-form-item label="所属网格" prop="gridId">
|
||||||
<GridSelect />
|
<CustomSelect
|
||||||
|
v-model:value="baseInfo.gridId"
|
||||||
|
:set="{
|
||||||
|
url: '/land-resource/gridManage/page',
|
||||||
|
props: {
|
||||||
|
value: 'id',
|
||||||
|
label: 'gridName',
|
||||||
|
},
|
||||||
|
}"
|
||||||
|
placeholder="请选择所属网格"
|
||||||
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="用地分类" prop="LandType">
|
<el-form-item label="用地分类" prop="LandType">
|
||||||
<LandClassificationType v-model:value="baseInfo.landClassificationType" />
|
<LandClassificationType v-model:value="baseInfo.landClassificationType" placeholder="请选择用地分类" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="位置" prop="villageCode">
|
<el-form-item label="位置" prop="villageCode">
|
||||||
<el-input v-model="baseInfo.villageCode" placehodler="请输入"></el-input>
|
<el-input v-model="baseInfo.villageCode" placeholder="请输入"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="是否土地流转" prop="isTransfer">
|
<el-form-item label="是否土地流转" prop="isTransfer">
|
||||||
<LandIsTranfer v-model:value="baseInfo.isTransfer" />
|
<LandIsTranfer v-model:value="baseInfo.isTransfer" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="面积" prop="area">
|
<el-form-item label="面积" prop="area">
|
||||||
<el-input v-model="baseInfo.area" placeholder="请输入"></el-input>
|
<el-input v-model="baseInfo.area" placeholder="请输入面积"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="产权人" prop="owner">
|
<el-form-item label="产权人" prop="owner">
|
||||||
<el-input v-model="baseInfo.owner" placeholder="请输入"></el-input>
|
<el-input v-model="baseInfo.owner" placeholder="请输入产权人姓名"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="土壤类型">
|
<el-form-item label="土壤类型">
|
||||||
<LandType v-model:value="baseInfo.landType" />
|
<el-input v-model="baseInfo.soilType" placeholder="请输入土壤类型"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
<br />
|
||||||
<el-card>
|
<el-card>
|
||||||
<div>土地产权信息</div>
|
<div class="title_">土地产权信息</div>
|
||||||
|
<el-form ref="propertyForm" :model="propertyInfo" class="property_form" label-width="120px">
|
||||||
|
<el-form-item label="产权人姓名" prop="propertyName">
|
||||||
|
<el-input v-model="propertyInfo.propertyName" placeholder="请输入联系人"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="产权人联系电话" prop="propertyPhone">
|
||||||
|
<el-input v-model="propertyInfo.propertyPhone" placeholder="请输入联系人"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="产权编号" prop="landCode">
|
||||||
|
<el-input v-model="propertyInfo.landCode" placeholder="请输入联系人"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<!-- <el-form-item label="产权证书" prop="propertyCertificateUrl">
|
||||||
|
<el-upload class="custom-form__uploader" action="#" :show-file-list="false" accept="image/*" :limit="20" :http-request="rowUploadPicture">
|
||||||
|
<el-icon class="custom-form__uploader__icon"><Plus /></el-icon>
|
||||||
|
</el-upload>
|
||||||
|
</el-form-item> -->
|
||||||
|
</el-form>
|
||||||
</el-card>
|
</el-card>
|
||||||
<el-button @click="handleSubmit"></el-button>
|
<section class="btns">
|
||||||
|
<el-button type="primary" @click="handleSubmit">保存并提交审核</el-button>
|
||||||
|
<el-button type="warning" @click="handleSubmit">保存草稿</el-button>
|
||||||
|
<el-button @click="handleClose">取消</el-button>
|
||||||
|
</section>
|
||||||
</el-drawer>
|
</el-drawer>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { reactive, ref, watch } from 'vue';
|
import { reactive, ref, watch } from 'vue';
|
||||||
import LandClassificationType from '@/components/LandClassificationType.vue';
|
import LandClassificationType from '@/components/LandClassificationType.vue';
|
||||||
import GridSelect from '@/components/GridSelect.vue';
|
import CustomSelect from '@/components/CustomSelect.vue';
|
||||||
import LandIsTranfer from '@/components/LandIsTranfer.vue';
|
import LandIsTranfer from '@/components/LandIsTranfer.vue';
|
||||||
import LandType from '@/components/LandType.vue';
|
import { lnadSave } from '@/apis/land';
|
||||||
|
import { ElMessage } from 'element-plus';
|
||||||
|
import { CommonUpload } from '@/apis';
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
visible: {
|
visible: {
|
||||||
@ -56,13 +89,19 @@ const emit = defineEmits(['close']);
|
|||||||
const _visible = ref(false);
|
const _visible = ref(false);
|
||||||
const baseInfo = reactive({
|
const baseInfo = reactive({
|
||||||
landName: '',
|
landName: '',
|
||||||
gridName: '',
|
gridId: '',
|
||||||
landClassificationType: '1',
|
landClassificationType: '',
|
||||||
villageCode: '',
|
villageCode: '',
|
||||||
isTransfer: '1',
|
isTransfer: '',
|
||||||
area: '',
|
area: '',
|
||||||
owner: '',
|
owner: '',
|
||||||
landType: '0',
|
soilType: '',
|
||||||
|
});
|
||||||
|
const propertyInfo = reactive({
|
||||||
|
propertyName: '',
|
||||||
|
propertyPhone: '',
|
||||||
|
landCode: '',
|
||||||
|
propertyCertificateUrl: '',
|
||||||
});
|
});
|
||||||
watch(
|
watch(
|
||||||
() => props.visible,
|
() => props.visible,
|
||||||
@ -76,23 +115,64 @@ watch(
|
|||||||
console.log('---', baseInfo);
|
console.log('---', baseInfo);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
const baseForm = ref();
|
||||||
|
const propertyForm = ref();
|
||||||
// #endregion
|
// #endregion
|
||||||
|
|
||||||
/* --------------- methods --------------- */
|
/* --------------- methods --------------- */
|
||||||
// #region
|
// #region
|
||||||
function handleSubmit() {
|
const rowUploadPicture = async ({ file }) => {
|
||||||
console.log('submit', baseInfo);
|
const formData = new FormData();
|
||||||
|
formData.append('file', file);
|
||||||
|
const res = await CommonUpload(formData);
|
||||||
|
if (res.code === 200) {
|
||||||
|
console.log('---', res);
|
||||||
|
// state.form.productUrl = res.data.url;
|
||||||
|
// const base64 = await imageToBase64(file);
|
||||||
|
// state.form.base64 = base64;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
async function handleSubmit() {
|
||||||
|
const data = {
|
||||||
|
...baseInfo,
|
||||||
|
...propertyInfo,
|
||||||
|
isDraftsSave: 0,
|
||||||
|
};
|
||||||
|
const res = await lnadSave(data);
|
||||||
|
if (res.code == 200) {
|
||||||
|
ElMessage.success('保存成功');
|
||||||
|
resFrom();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
function handleClose() {
|
function handleClose() {
|
||||||
|
resFrom();
|
||||||
emit('close');
|
emit('close');
|
||||||
}
|
}
|
||||||
|
function resFrom() {
|
||||||
|
baseForm.value.resetFields();
|
||||||
|
propertyForm.value.resetFields();
|
||||||
|
}
|
||||||
|
|
||||||
// #endregion
|
// #endregion
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.base_form {
|
.title_ {
|
||||||
|
margin-bottom: 12px;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.base_form,
|
||||||
|
.property_form {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(2, 1fr);
|
grid-template-columns: repeat(2, 1fr);
|
||||||
gap: 20px;
|
gap: 20px;
|
||||||
}
|
}
|
||||||
|
.btns {
|
||||||
|
margin-top: 12px;
|
||||||
|
display: grid;
|
||||||
|
justify-content: center;
|
||||||
|
grid-template-columns: auto auto auto;
|
||||||
|
gap: 12px;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -146,6 +146,10 @@ async function getList() {
|
|||||||
};
|
};
|
||||||
let res = await getLandsList(params);
|
let res = await getLandsList(params);
|
||||||
console.log('res ---------', res);
|
console.log('res ---------', res);
|
||||||
|
if (res.code == 200) {
|
||||||
|
list.value = res.data.records;
|
||||||
|
pageData.total = res.data.total;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
function handleResetSearch() {
|
function handleResetSearch() {
|
||||||
console.log('searchRef', searchRef.value);
|
console.log('searchRef', searchRef.value);
|
||||||
|
@ -146,7 +146,7 @@
|
|||||||
import { ref, reactive, onMounted } from 'vue';
|
import { ref, reactive, onMounted } from 'vue';
|
||||||
import Pagina from '@/components/pagina.vue';
|
import Pagina from '@/components/pagina.vue';
|
||||||
import CustCard from '@/components/CustCard.vue';
|
import CustCard from '@/components/CustCard.vue';
|
||||||
import { getLandsList, saveLands } from '@/apis/land.js';
|
import { getLandsList, saveLand } from '@/apis/land.js';
|
||||||
import { useApp } from '@/hooks';
|
import { useApp } from '@/hooks';
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getList();
|
getList();
|
||||||
@ -185,7 +185,7 @@ const btns = reactive([
|
|||||||
seedSupplier: '园艺',
|
seedSupplier: '园艺',
|
||||||
planDate: '2025-02-25',
|
planDate: '2025-02-25',
|
||||||
};
|
};
|
||||||
saveLands({})
|
saveLand({})
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
if (res.code === 200) {
|
if (res.code === 200) {
|
||||||
app.$message.success('添加成功!');
|
app.$message.success('添加成功!');
|
||||||
|
@ -129,13 +129,13 @@ const state = reactive({
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: '省',
|
label: '省',
|
||||||
prop: 'province',
|
prop: 'provinceCode',
|
||||||
hide: true,
|
hide: true,
|
||||||
display: false,
|
display: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: '市',
|
label: '市',
|
||||||
prop: 'city',
|
prop: 'cityCode',
|
||||||
hide: true,
|
hide: true,
|
||||||
display: false,
|
display: false,
|
||||||
},
|
},
|
||||||
@ -165,11 +165,6 @@ const state = reactive({
|
|||||||
rows: 4,
|
rows: 4,
|
||||||
overHidden: true,
|
overHidden: true,
|
||||||
width: 200,
|
width: 200,
|
||||||
rules: {
|
|
||||||
required: true,
|
|
||||||
message: '请输入',
|
|
||||||
trigger: 'blur',
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: '创建时间',
|
label: '创建时间',
|
||||||
@ -272,9 +267,10 @@ const rowView = (row) => {
|
|||||||
|
|
||||||
const setCity = (row) => {
|
const setCity = (row) => {
|
||||||
if (!isEmpty(row.cities)) {
|
if (!isEmpty(row.cities)) {
|
||||||
row.province = row?.cities[0] ?? null;
|
row.provinceCode = row?.cities[0] ?? null;
|
||||||
row.city = row?.cities[1] ?? null;
|
row.cityCode = row?.cities[1] ?? null;
|
||||||
row.county = row?.cities[2] ?? null;
|
row.gridAreaCode = row?.cities[2] ?? null;
|
||||||
|
row.townCode = row?.cities[3] ?? null;
|
||||||
row.village = row?.cities[3] ?? null;
|
row.village = row?.cities[3] ?? null;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -300,7 +296,7 @@ const rowSave = (row, done, loading) => {
|
|||||||
|
|
||||||
// 编辑
|
// 编辑
|
||||||
const rowEdit = (row) => {
|
const rowEdit = (row) => {
|
||||||
row.cities = compact([row.province, row.city, row.county ?? '', row.village ?? '']);
|
row.cities = compact([row.provinceCode, row.cityCode, row.gridAreaCode ?? '', row.townCode ?? '', row.village ?? '']);
|
||||||
crudRef.value.rowEdit(row);
|
crudRef.value.rowEdit(row);
|
||||||
};
|
};
|
||||||
const rowUpdate = (row, index, done, loading) => {
|
const rowUpdate = (row, index, done, loading) => {
|
||||||
|
383
sub-government-affairs-service/src/views/resource/plan/index.vue
Normal file
383
sub-government-affairs-service/src/views/resource/plan/index.vue
Normal file
@ -0,0 +1,383 @@
|
|||||||
|
<template>
|
||||||
|
<div class="custom-page">
|
||||||
|
<avue-crud
|
||||||
|
ref="crudRef"
|
||||||
|
v-model="state.form"
|
||||||
|
v-model:search="state.query"
|
||||||
|
v-model:page="state.pageData"
|
||||||
|
:table-loading="state.loading"
|
||||||
|
:data="state.data"
|
||||||
|
:option="state.options"
|
||||||
|
@refresh-change="refreshChange"
|
||||||
|
@search-reset="searchChange"
|
||||||
|
@search-change="searchChange"
|
||||||
|
@selection-change="selectionChange"
|
||||||
|
@current-change="currentChange"
|
||||||
|
@size-change="sizeChange"
|
||||||
|
@row-save="rowSave"
|
||||||
|
@row-update="rowUpdate"
|
||||||
|
@row-del="rowDel"
|
||||||
|
>
|
||||||
|
<template #menu-left>
|
||||||
|
<el-button type="success" icon="download" @click="onExport">导出</el-button>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template #menu="scope">
|
||||||
|
<custom-table-operate :actions="state.options.actions" :data="scope" />
|
||||||
|
</template>
|
||||||
|
</avue-crud>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script setup>
|
||||||
|
import { reactive, ref } from 'vue';
|
||||||
|
import { useApp } from '@/hooks';
|
||||||
|
import { CRUD_OPTIONS } from '@/config';
|
||||||
|
import { isEmpty, downloadFile } from '@/utils';
|
||||||
|
import { useUserStore } from '@/store/modules/user';
|
||||||
|
import { compact } from 'lodash';
|
||||||
|
import { GetEntityList, AddEntity, AuditEntity, UpdateEntity, DeleteEntity, ExportEntity } from '@/apis/plan';
|
||||||
|
|
||||||
|
const { VITE_APP_BASE_API } = import.meta.env;
|
||||||
|
const app = useApp();
|
||||||
|
const UserStore = useUserStore();
|
||||||
|
const crudRef = ref(null);
|
||||||
|
const state = reactive({
|
||||||
|
loading: false,
|
||||||
|
query: {
|
||||||
|
current: 1,
|
||||||
|
size: 10,
|
||||||
|
},
|
||||||
|
form: {},
|
||||||
|
selection: [],
|
||||||
|
options: {
|
||||||
|
...CRUD_OPTIONS,
|
||||||
|
addBtnText: '添加计划',
|
||||||
|
column: [
|
||||||
|
{
|
||||||
|
label: '计划编号',
|
||||||
|
prop: 'id',
|
||||||
|
search: true,
|
||||||
|
addDisplay: false,
|
||||||
|
editDisplay: false,
|
||||||
|
viewDisplay: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '计划名称',
|
||||||
|
prop: 'planName',
|
||||||
|
search: true,
|
||||||
|
width: 200,
|
||||||
|
rules: {
|
||||||
|
required: true,
|
||||||
|
message: '请输入',
|
||||||
|
trigger: 'blur',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '种植面积(亩)',
|
||||||
|
prop: 'plantingArea',
|
||||||
|
rules: {
|
||||||
|
required: true,
|
||||||
|
message: '请输入',
|
||||||
|
trigger: 'blur',
|
||||||
|
},
|
||||||
|
formatter: (row) => {
|
||||||
|
return row?.plantingArea ? row.plantingArea + '亩' : '';
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '种植月份',
|
||||||
|
prop: 'plantingMonths',
|
||||||
|
type: 'select',
|
||||||
|
dicData: [
|
||||||
|
{ 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月' },
|
||||||
|
{ label: '11月', value: '11月' },
|
||||||
|
{ label: '12月', value: '12月' },
|
||||||
|
],
|
||||||
|
rules: {
|
||||||
|
required: true,
|
||||||
|
message: '请输入',
|
||||||
|
trigger: 'blur',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '生长周期',
|
||||||
|
prop: 'growthCycle',
|
||||||
|
labelTip: '如:10周-12周',
|
||||||
|
rules: {
|
||||||
|
required: true,
|
||||||
|
message: '请输入',
|
||||||
|
trigger: 'blur',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '计划进度',
|
||||||
|
prop: 'planProgress',
|
||||||
|
addDisplay: false,
|
||||||
|
editDisplay: false,
|
||||||
|
viewDisplay: true,
|
||||||
|
rules: {
|
||||||
|
required: true,
|
||||||
|
message: '请输入',
|
||||||
|
trigger: 'blur',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '状态',
|
||||||
|
prop: 'planStatus',
|
||||||
|
type: 'select',
|
||||||
|
addDisplay: false,
|
||||||
|
editDisplay: false,
|
||||||
|
viewDisplay: true,
|
||||||
|
dicData: [
|
||||||
|
{
|
||||||
|
label: '待提交',
|
||||||
|
value: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '已提交',
|
||||||
|
value: 2,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '审核通过',
|
||||||
|
value: 3,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '审核拒绝',
|
||||||
|
value: 4,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
rules: {
|
||||||
|
required: true,
|
||||||
|
message: '请输入',
|
||||||
|
trigger: 'blur',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '备注',
|
||||||
|
prop: 'note',
|
||||||
|
type: 'textarea',
|
||||||
|
span: 24,
|
||||||
|
rows: 4,
|
||||||
|
overHidden: true,
|
||||||
|
width: 200,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
actions: [
|
||||||
|
{
|
||||||
|
name: '查看',
|
||||||
|
icon: 'view',
|
||||||
|
event: ({ row }) => rowView(row),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '编辑',
|
||||||
|
icon: 'edit',
|
||||||
|
event: ({ row }) => rowEdit(row),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'danger',
|
||||||
|
name: '删除',
|
||||||
|
icon: 'delete',
|
||||||
|
event: ({ row }) => rowDel(row),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '审核通过',
|
||||||
|
type: 'success',
|
||||||
|
icon: 'check',
|
||||||
|
event: ({ row }) => rowCheck(row, 4),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '审核拒绝',
|
||||||
|
type: 'danger',
|
||||||
|
icon: 'close',
|
||||||
|
event: ({ row }) => rowCheck(row, 3),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
pageData: {
|
||||||
|
total: 0,
|
||||||
|
currentPage: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
},
|
||||||
|
data: [],
|
||||||
|
minWeek: null,
|
||||||
|
maxWeek: null,
|
||||||
|
currentRow: {},
|
||||||
|
});
|
||||||
|
|
||||||
|
// 加载
|
||||||
|
const loadData = () => {
|
||||||
|
state.loading = true;
|
||||||
|
GetEntityList(state.query)
|
||||||
|
.then((res) => {
|
||||||
|
if (res.code === 200) {
|
||||||
|
const { current, size, total, records } = res.data;
|
||||||
|
state.data = records;
|
||||||
|
state.pageData = {
|
||||||
|
currentPage: current || 1,
|
||||||
|
pageSize: size || 10,
|
||||||
|
total: total,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
app.$message.error(err.msg);
|
||||||
|
state.data = [];
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
state.loading = false;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
loadData();
|
||||||
|
|
||||||
|
// 页数
|
||||||
|
const currentChange = (current) => {
|
||||||
|
state.query.current = current;
|
||||||
|
loadData();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 条数
|
||||||
|
const sizeChange = (size) => {
|
||||||
|
state.query.size = size;
|
||||||
|
loadData();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 搜索
|
||||||
|
const searchChange = (params, done) => {
|
||||||
|
if (done) done();
|
||||||
|
state.query = params;
|
||||||
|
state.query.current = 1;
|
||||||
|
loadData();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 刷新
|
||||||
|
const refreshChange = () => {
|
||||||
|
loadData();
|
||||||
|
app.$message.success('刷新成功');
|
||||||
|
};
|
||||||
|
|
||||||
|
// 选择
|
||||||
|
const selectionChange = (rows) => {
|
||||||
|
state.selection = rows;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 查看
|
||||||
|
const rowView = (row) => {
|
||||||
|
// state.currentRow = row;
|
||||||
|
crudRef.value.rowView(row);
|
||||||
|
};
|
||||||
|
|
||||||
|
// 新增
|
||||||
|
const rowSave = (row, done, loading) => {
|
||||||
|
AddEntity(row)
|
||||||
|
.then((res) => {
|
||||||
|
if (res.code === 200) {
|
||||||
|
app.$message.success('添加成功!');
|
||||||
|
done();
|
||||||
|
loadData();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
app.$message.error(err.msg);
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
loading();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// 编辑
|
||||||
|
const rowEdit = (row) => {
|
||||||
|
crudRef.value.rowEdit(row);
|
||||||
|
};
|
||||||
|
const rowUpdate = (row, index, done, loading) => {
|
||||||
|
UpdateEntity(row)
|
||||||
|
.then((res) => {
|
||||||
|
if (res.code === 200) {
|
||||||
|
app.$message.success('更新成功!');
|
||||||
|
done();
|
||||||
|
loadData();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
app.$message.error(err.msg);
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
loading();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// 删除
|
||||||
|
const rowDel = (row, index, done) => {
|
||||||
|
if (isEmpty(row)) return;
|
||||||
|
app
|
||||||
|
.$confirm(`删除后信息将不可查看,确认要删除吗?`, '确定删除', {
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
type: 'warning',
|
||||||
|
})
|
||||||
|
.then(() => {
|
||||||
|
DeleteEntity({ id: row.id })
|
||||||
|
.then((res) => {
|
||||||
|
if (res.code === 200) {
|
||||||
|
app.$message.success('删除成功!');
|
||||||
|
done();
|
||||||
|
loadData();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
app.$message.error(err.msg);
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch(() => {});
|
||||||
|
};
|
||||||
|
|
||||||
|
// 审核
|
||||||
|
const rowCheck = (row, status) => {
|
||||||
|
const data = { id: row.id, planStatus: status };
|
||||||
|
AuditEntity(data)
|
||||||
|
.then((res) => {
|
||||||
|
if (res.code === 200) {
|
||||||
|
app.$message.success('操作成功!');
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
app.$message.error(err.msg);
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
loadData();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// 导出
|
||||||
|
const onExport = () => {
|
||||||
|
if (isEmpty(state.data)) {
|
||||||
|
app.$message.error('当前暂时没有可供导出的数据!');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
state.loading = true;
|
||||||
|
const fileName = '年度计划明细表';
|
||||||
|
ExportEntity(state.query)
|
||||||
|
.then((res) => {
|
||||||
|
if (res.status === 200) {
|
||||||
|
downloadFile(res.data, `${fileName}.xlsx`, 'blob');
|
||||||
|
app.$message.success('导出成功!');
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
app.$message.error('导出失败!');
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
state.loading = false;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
</script>
|
@ -23,6 +23,11 @@
|
|||||||
<el-button type="success" icon="upload" @click="onUpload">导入</el-button>
|
<el-button type="success" icon="upload" @click="onUpload">导入</el-button>
|
||||||
<el-button type="success" icon="download" @click="onExport">导出</el-button>
|
<el-button type="success" icon="download" @click="onExport">导出</el-button>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<template #id="{ row }">
|
||||||
|
<el-image style="width: 50px; height: 50px; cursor: pointer" :src="row.orCodeUrl" fit="cover" lazy @click="onViewCode(row)" />
|
||||||
|
</template>
|
||||||
|
|
||||||
<template #productUrl-form="{ column }">
|
<template #productUrl-form="{ column }">
|
||||||
<el-upload class="custom-form__uploader" action="#" :show-file-list="false" accept="image/*" :limit="1" :http-request="rowUploadPicture">
|
<el-upload class="custom-form__uploader" action="#" :show-file-list="false" accept="image/*" :limit="1" :http-request="rowUploadPicture">
|
||||||
<img v-if="state.form.base64" :src="state.form.base64" class="custom-form__uploader__img" />
|
<img v-if="state.form.base64" :src="state.form.base64" class="custom-form__uploader__img" />
|
||||||
@ -56,6 +61,8 @@
|
|||||||
@on-confirm="onUploadExcel"
|
@on-confirm="onUploadExcel"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<code-dialog ref="codeRef" :row="state.currentRow" />
|
||||||
|
|
||||||
<custom-quality-add ref="qualityAddRef" :row="state.currentRow" />
|
<custom-quality-add ref="qualityAddRef" :row="state.currentRow" />
|
||||||
</div>
|
</div>
|
||||||
<!-- <el-dialog v-model="qrInfo.show" title="扫码溯源" width="500" :before-close="() => (qrInfo.show = false)">
|
<!-- <el-dialog v-model="qrInfo.show" title="扫码溯源" width="500" :before-close="() => (qrInfo.show = false)">
|
||||||
@ -80,6 +87,7 @@ const UserStore = useUserStore();
|
|||||||
const crudRef = ref(null);
|
const crudRef = ref(null);
|
||||||
const importExcelRef = ref(null);
|
const importExcelRef = ref(null);
|
||||||
const qualityAddRef = ref(null);
|
const qualityAddRef = ref(null);
|
||||||
|
const codeRef = ref(null);
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
loading: false,
|
loading: false,
|
||||||
query: {
|
query: {
|
||||||
@ -99,7 +107,6 @@ const state = reactive({
|
|||||||
addDisplay: false,
|
addDisplay: false,
|
||||||
editDisplay: false,
|
editDisplay: false,
|
||||||
viewDisplay: true,
|
viewDisplay: true,
|
||||||
width: 200,
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: '采收批次',
|
label: '采收批次',
|
||||||
@ -285,7 +292,7 @@ const state = reactive({
|
|||||||
label: '原产地详细地址',
|
label: '原产地详细地址',
|
||||||
prop: 'originAddressDetail',
|
prop: 'originAddressDetail',
|
||||||
hide: true,
|
hide: true,
|
||||||
// span: 24,
|
viewDisplay: false,
|
||||||
},
|
},
|
||||||
// {
|
// {
|
||||||
// label: '经营主体',
|
// label: '经营主体',
|
||||||
@ -620,15 +627,8 @@ const onExport = () => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const qrInfo = reactive({
|
const onViewCode = (row) => {
|
||||||
url: '1111111111111111111111111111111111111111',
|
state.currentRow = row;
|
||||||
show: true,
|
codeRef?.value && codeRef.value.show();
|
||||||
});
|
};
|
||||||
|
|
||||||
function handleShowQrcode(id) {
|
|
||||||
// a.value = a.value + 1;
|
|
||||||
qrInfo.url = id;
|
|
||||||
qrInfo.show = true;
|
|
||||||
console.log('cell', qrInfo);
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -22,6 +22,10 @@
|
|||||||
<el-button type="danger" icon="delete" @click="onDel(state.selection)">批量删除</el-button>
|
<el-button type="danger" icon="delete" @click="onDel(state.selection)">批量删除</el-button>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<template #harvestId="{ row }">
|
||||||
|
<el-image style="width: 50px; height: 50px; cursor: pointer" :src="row.orCodeUrl" fit="cover" lazy @click="onViewCode(row)" />
|
||||||
|
</template>
|
||||||
|
|
||||||
<template #qualityReportUrl="{ row }">
|
<template #qualityReportUrl="{ row }">
|
||||||
<el-button
|
<el-button
|
||||||
v-if="row.qualityReportUrl"
|
v-if="row.qualityReportUrl"
|
||||||
@ -45,6 +49,8 @@
|
|||||||
<custom-table-operate :actions="state.options.actions" :data="scope" />
|
<custom-table-operate :actions="state.options.actions" :data="scope" />
|
||||||
</template>
|
</template>
|
||||||
</avue-crud>
|
</avue-crud>
|
||||||
|
|
||||||
|
<code-dialog ref="codeRef" :row="state.currentRow" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup>
|
<script setup>
|
||||||
@ -57,6 +63,7 @@ import { GetEntityList, AddEntity, UpdateEntity, DeleteEntity } from '@/apis/qua
|
|||||||
|
|
||||||
const app = useApp();
|
const app = useApp();
|
||||||
const crudRef = ref(null);
|
const crudRef = ref(null);
|
||||||
|
const codeRef = ref(null);
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
loading: false,
|
loading: false,
|
||||||
query: {
|
query: {
|
||||||
@ -74,7 +81,6 @@ const state = reactive({
|
|||||||
prop: 'harvestId',
|
prop: 'harvestId',
|
||||||
search: true,
|
search: true,
|
||||||
disabled: true,
|
disabled: true,
|
||||||
width: 200,
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: '采收批次',
|
label: '采收批次',
|
||||||
@ -249,6 +255,7 @@ const state = reactive({
|
|||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
},
|
},
|
||||||
data: [],
|
data: [],
|
||||||
|
currentRow: {},
|
||||||
});
|
});
|
||||||
|
|
||||||
// 加载
|
// 加载
|
||||||
@ -405,4 +412,9 @@ const onDel = (rows = []) => {
|
|||||||
const rowDel = (row, index, done) => {
|
const rowDel = (row, index, done) => {
|
||||||
onDel([row]);
|
onDel([row]);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const onViewCode = (row) => {
|
||||||
|
state.currentRow = row;
|
||||||
|
codeRef?.value && codeRef.value.show();
|
||||||
|
};
|
||||||
</script>
|
</script>
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
* @Author: zenghua.wang
|
* @Author: zenghua.wang
|
||||||
* @Date: 2022-09-18 21:24:29
|
* @Date: 2022-09-18 21:24:29
|
||||||
* @LastEditors: zenghua.wang
|
* @LastEditors: zenghua.wang
|
||||||
* @LastEditTime: 2025-02-17 10:58:12
|
* @LastEditTime: 2025-02-27 09:16:00
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { defineConfig, loadEnv } from 'vite';
|
import { defineConfig, loadEnv } from 'vite';
|
||||||
@ -23,46 +23,37 @@ import { resolve } from 'path';
|
|||||||
const useDevMode = true;
|
const useDevMode = true;
|
||||||
|
|
||||||
export default defineConfig(({ command, mode }) => {
|
export default defineConfig(({ command, mode }) => {
|
||||||
const {
|
const { VITE_PORT, VITE_APP_NAME, VITE_APP_BASE_API, VITE_APP_BASE_URL, VITE_APP_UPLOAD_API, VITE_APP_UPLOAD_URL } = loadEnv(mode, process.cwd());
|
||||||
VITE_PORT,
|
|
||||||
VITE_APP_NAME,
|
|
||||||
VITE_APP_BASE_API,
|
|
||||||
VITE_APP_BASE_URL,
|
|
||||||
VITE_APP_UPLOAD_API,
|
|
||||||
VITE_APP_UPLOAD_URL,
|
|
||||||
VITE_APP_SYSTEM_API,
|
|
||||||
VITE_APP_SYSTEM_URL,
|
|
||||||
} = loadEnv(mode, process.cwd());
|
|
||||||
const config = {
|
const config = {
|
||||||
base: '/sub-government-affairs-service/',
|
base: '/sub-government-affairs-service/',
|
||||||
build: {
|
build: {
|
||||||
target: 'ESNext',
|
target: 'ESNext',
|
||||||
outDir: 'dist',
|
outDir: 'dist',
|
||||||
minify: 'terser',
|
minify: 'terser',
|
||||||
// terserOptions: {
|
terserOptions: {
|
||||||
// compress: {
|
compress: {
|
||||||
// drop_console: true,
|
drop_console: true,
|
||||||
// drop_debugger: true,
|
drop_debugger: true,
|
||||||
// pure_funcs: ['console.log'],
|
pure_funcs: ['console.log'],
|
||||||
// },
|
},
|
||||||
// output: {
|
output: {
|
||||||
// comments: true,
|
comments: true,
|
||||||
// },
|
},
|
||||||
// },
|
},
|
||||||
// reportCompressedSize: false,
|
reportCompressedSize: false,
|
||||||
// chunkSizeWarningLimit: 2000,
|
chunkSizeWarningLimit: 2000,
|
||||||
// rollupOptions: {
|
rollupOptions: {
|
||||||
// output: {
|
output: {
|
||||||
// manualChunks(id) {
|
manualChunks(id) {
|
||||||
// if (id.includes('node_modules')) {
|
if (id.includes('node_modules')) {
|
||||||
// return id.toString().split('node_modules/')[1].split('/')[1].toString();
|
return id.toString().split('node_modules/')[1].split('/')[1].toString();
|
||||||
// }
|
}
|
||||||
// },
|
},
|
||||||
// chunkFileNames: 'assets/js/[name]-[hash].js',
|
chunkFileNames: 'assets/js/[name]-[hash].js',
|
||||||
// entryFileNames: 'assets/js/[name]-[hash].js',
|
entryFileNames: 'assets/js/[name]-[hash].js',
|
||||||
// assetFileNames: 'assets/[ext]/[name]-[hash].[ext]',
|
assetFileNames: 'assets/[ext]/[name]-[hash].[ext]',
|
||||||
// },
|
},
|
||||||
// },
|
},
|
||||||
},
|
},
|
||||||
server: {
|
server: {
|
||||||
host: '0.0.0.0',
|
host: '0.0.0.0',
|
||||||
@ -83,11 +74,6 @@ export default defineConfig(({ command, mode }) => {
|
|||||||
changeOrigin: true,
|
changeOrigin: true,
|
||||||
rewrite: (path) => path.replace(/^\/uploadApis/, ''),
|
rewrite: (path) => path.replace(/^\/uploadApis/, ''),
|
||||||
},
|
},
|
||||||
[VITE_APP_SYSTEM_API]: {
|
|
||||||
target: VITE_APP_SYSTEM_URL,
|
|
||||||
changeOrigin: true,
|
|
||||||
rewrite: (path) => path.replace(/^\/systemApis/, ''),
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
resolve: {
|
resolve: {
|
||||||
@ -142,13 +128,5 @@ export default defineConfig(({ command, mode }) => {
|
|||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
if (mode === 'production') {
|
|
||||||
config.build.terserOptions = {
|
|
||||||
compress: {
|
|
||||||
drop_console: true,
|
|
||||||
drop_debugger: true,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
|
||||||
return config;
|
return config;
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user