From c9829c6a5c19ae76b0fc301a2cb1b982b9bc99ee Mon Sep 17 00:00:00 2001 From: wangzenghua <1048523306@qq.com> Date: Mon, 10 Feb 2025 05:54:41 +0000 Subject: [PATCH] feat:main css --- main/.env.development | 11 +- .../components/custom-import-excel/index.vue | 101 ++++ main/src/components/index.js | 3 +- main/src/micro/app.js | 98 ++-- main/src/styles/common/define.scss | 66 +-- main/src/utils/index.js | 148 ++--- main/vite.config.js | 48 +- .../.env.development | 9 +- .../.env.production | 4 +- .../src/apis/coding.js | 73 +++ .../src/apis/index.js | 27 + .../assets/template/采收赋码-导入模板.xlsx | Bin 0 -> 10676 bytes .../src/plugins/globalComponents.js | 2 +- .../src/router/index.js | 4 +- .../src/router/modules/plantingAndBreeding.js | 27 +- .../src/store/modules/user.js | 6 +- .../src/styles/common/define.scss | 2 +- .../src/utils/axios.js | 33 +- .../src/utils/index.js | 202 ++++++- .../src/views/trace/breeding/coding/index.vue | 540 ++++++++++++++++++ .../views/trace/breeding/quality/index.vue | 3 + .../planting/{archives.vue => base/index.vue} | 24 +- .../planting/{seed.vue => seed/index.vue} | 2 +- sub-government-affairs-service/vite.config.js | 22 +- 24 files changed, 1142 insertions(+), 313 deletions(-) create mode 100644 main/src/components/custom-import-excel/index.vue create mode 100644 sub-government-affairs-service/src/apis/coding.js create mode 100644 sub-government-affairs-service/src/apis/index.js create mode 100644 sub-government-affairs-service/src/assets/template/采收赋码-导入模板.xlsx create mode 100644 sub-government-affairs-service/src/views/trace/breeding/coding/index.vue create mode 100644 sub-government-affairs-service/src/views/trace/breeding/quality/index.vue rename sub-government-affairs-service/src/views/trace/planting/{archives.vue => base/index.vue} (93%) rename sub-government-affairs-service/src/views/trace/planting/{seed.vue => seed/index.vue} (99%) diff --git a/main/.env.development b/main/.env.development index c23115e..de07547 100644 --- a/main/.env.development +++ b/main/.env.development @@ -2,10 +2,13 @@ VITE_PORT = 9000 VITE_APP_NAME = 'daimp-front-main' VITE_APP_TITLE = '数字农业产业管理平台' -VITE_APP_BASE_API = "https://mock.mengxuegu.com/mock/664ef7fee45d2156fa209ee4/api-qiankun" -VITE_APP_BASE_URL = 'http://192.168.18.158:9080' VITE_APP_SUB_VUE = '//localhost:9526/sub-operation-service/' VITE_APP_SUB_ADMIN = '//localhost:9527/sub-admin/' VITE_APP_SUB_GAS = '//localhost:9528/suv-government-affairs-service/' - - +# 接口 +VITE_APP_BASE_API = '/apis' +VITE_APP_BASE_URL = 'http://192.168.18.99:8080' +VITE_APP_UPLOAD_API = '/uploadApis' +VITE_APP_UPLOAD_URL = 'http://192.168.18.99:9300' +VITE_APP_SYSTEM_API = '/systemApis' +VITE_APP_SYSTEM_URL = 'http://192.168.18.99:99/stage-api' \ No newline at end of file diff --git a/main/src/components/custom-import-excel/index.vue b/main/src/components/custom-import-excel/index.vue new file mode 100644 index 0000000..3d86bea --- /dev/null +++ b/main/src/components/custom-import-excel/index.vue @@ -0,0 +1,101 @@ + + + diff --git a/main/src/components/index.js b/main/src/components/index.js index e0d4830..582e0ff 100644 --- a/main/src/components/index.js +++ b/main/src/components/index.js @@ -1,6 +1,7 @@ import SvgIcon from './svg-icon'; import CustomTableOperate from './custom-table-operate'; +import CustomImportExcel from './custom-import-excel'; import CustomRichEditor from './custom-rich-editor'; import CustomEchartBar from './custom-echart-bar'; -export { SvgIcon, CustomTableOperate, CustomEchartBar, CustomRichEditor }; +export { SvgIcon, CustomTableOperate, CustomImportExcel, CustomEchartBar, CustomRichEditor }; diff --git a/main/src/micro/app.js b/main/src/micro/app.js index 18c6793..0932275 100644 --- a/main/src/micro/app.js +++ b/main/src/micro/app.js @@ -3,34 +3,34 @@ import actions from './actions'; const { VITE_APP_SUB_VUE, VITE_APP_SUB_ADMIN, VITE_APP_SUB_GAS } = import.meta.env; export const leftApps = [ - { - name: 'sub-operation-service', - entry: VITE_APP_SUB_VUE, - activeRule: '/sub-operation-service/', - title: '运营服务', - icon: 'platform/icon-home.png', - }, - { - name: 'sub-admin', - entry: VITE_APP_SUB_ADMIN, - activeRule: '/sub-admin/', - title: '管理后台', - icon: 'platform/icon-admin.png', - }, - { - name: 'sub-app', - entry: VITE_APP_SUB_ADMIN, - activeRule: '/sub-app/', - title: 'APP', - icon: 'platform/icon-app.png', - }, - { - name: 'sub-screen', - entry: VITE_APP_SUB_ADMIN, - activeRule: '/sub-screen/', - title: '数据大屏', - icon: 'platform/icon-screen.png', - }, + // { + // name: 'sub-operation-service', + // entry: VITE_APP_SUB_VUE, + // activeRule: '/sub-operation-service/', + // title: '运营服务', + // icon: 'platform/icon-home.png', + // }, + // { + // name: 'sub-admin', + // entry: VITE_APP_SUB_ADMIN, + // activeRule: '/sub-admin/', + // title: '管理后台', + // icon: 'platform/icon-admin.png', + // }, + // { + // name: 'sub-app', + // entry: VITE_APP_SUB_ADMIN, + // activeRule: '/sub-app/', + // title: 'APP', + // icon: 'platform/icon-app.png', + // }, + // { + // name: 'sub-screen', + // entry: VITE_APP_SUB_ADMIN, + // activeRule: '/sub-screen/', + // title: '数据大屏', + // icon: 'platform/icon-screen.png', + // }, ]; export const rightApps = [ @@ -41,27 +41,27 @@ export const rightApps = [ title: '政务服务', icon: 'platform/icon-home.png', }, - { - name: 'sub-government-admin', - entry: VITE_APP_SUB_ADMIN, - activeRule: '/sub-government-admin/', - title: '管理后台', - icon: 'platform/icon-admin.png', - }, - { - name: 'sub-government-app', - entry: VITE_APP_SUB_ADMIN, - activeRule: '/sub-government-app/', - title: 'APP', - icon: 'platform/icon-app.png', - }, - { - name: 'sub-government-screen', - entry: VITE_APP_SUB_ADMIN, - activeRule: '/sub-government-screen/', - title: '数据大屏', - icon: 'platform/icon-screen.png', - }, + // { + // name: 'sub-government-admin', + // entry: VITE_APP_SUB_ADMIN, + // activeRule: '/sub-government-admin/', + // title: '管理后台', + // icon: 'platform/icon-admin.png', + // }, + // { + // name: 'sub-government-app', + // entry: VITE_APP_SUB_ADMIN, + // activeRule: '/sub-government-app/', + // title: 'APP', + // icon: 'platform/icon-app.png', + // }, + // { + // name: 'sub-government-screen', + // entry: VITE_APP_SUB_ADMIN, + // activeRule: '/sub-government-screen/', + // title: '数据大屏', + // icon: 'platform/icon-screen.png', + // }, ]; export const microApps = [...leftApps, ...rightApps]; diff --git a/main/src/styles/common/define.scss b/main/src/styles/common/define.scss index 1dd628c..242302f 100644 --- a/main/src/styles/common/define.scss +++ b/main/src/styles/common/define.scss @@ -1,4 +1,4 @@ -@use "sass:list"; +@use 'sass:list'; .flex { &-row { @@ -28,67 +28,3 @@ .text-right { text-align: right; } - -.custom { - &-page { - display: flex; - justify-content: center; - - .el-pagination { - font-size: 24px; - } - - .el-pagination .btn-next.is-active, - .el-pagination .btn-prev.is-active, - .el-pagination .el-pager li.is-active { - color: $color-primary !important; - } - - .el-pagination .btn-next, - .el-pagination .btn-prev, - .el-pagination .el-pager li { - margin: 0 12px !important; - font-size: 24px; - color: #999; - } - - .el-pagination .btn-next, - .el-pagination .btn-prev { - // border: 1px dashed #ddd; - &:hover { - color: #000 !important; - } - } - - .el-pagination .btn-next .el-icon, - .el-pagination .btn-prev .el-icon { - font-size: 32px !important; - font-weight: 500 !important; - } - - .el-pagination .el-pager li { - &:hover { - font-weight: 500; - color: $color-primary !important; - } - } - - &-jumper { - margin-left: 40px; - display: flex; - flex-direction: row; - align-items: center; - - span { - font-size: 24px; - color: #999; - } - - .el-input { - width: 50px !important; - margin: 0 20px; - font-size: 24px; - } - } - } -} diff --git a/main/src/utils/index.js b/main/src/utils/index.js index 344fdcb..8ebbb2f 100644 --- a/main/src/utils/index.js +++ b/main/src/utils/index.js @@ -2,16 +2,12 @@ * @Descripttion: * @Author: zenghua.wang * @Date: 2022-02-23 21:12:37 - * @LastEditors: wzh 1048523306@qq.com - * @LastEditTime: 2024-12-17 11:55:31 + * @LastEditors: zenghua.wang + * @LastEditTime: 2025-02-07 14:38:05 */ +import lodash from 'lodash'; import dayjs from 'dayjs'; - -import { cloneDeep } from 'lodash'; import { Base64 } from 'js-base64'; -import JsZip from 'jszip'; -import JsZipUtils from 'jszip-utils'; -import { saveAs } from 'file-saver'; /** * @Title 防抖:指在一定时间内,多次触发同一个事件,只执行最后一次操作 @@ -68,7 +64,7 @@ export const isEmpty = (val) => { * @returns */ export const deepClone = (obj = {}) => { - return cloneDeep(obj); + return lodash.cloneDeep(obj); }; /** * @Title 将number转换为px @@ -77,7 +73,21 @@ export const deepClone = (obj = {}) => { */ export const setPx = (val) => { if (isEmpty(val)) return ''; - return typeof val === 'number' ? `${val}px` : val; + val = val + ''; + if (val.indexOf('%') === -1) { + val = val + 'px'; + } + return val; +}; +/** + * @Tilte 设置属性默认值 + * @param {*} options + * @param {*} prop + * @param {*} defaultVal + * @returns + */ +export const setDefaultOption = (options, prop, defaultVal) => { + return options[prop] === undefined ? defaultVal : options.prop; }; /** * @Title 设置字典值 @@ -261,14 +271,6 @@ export const getUrlQuery = (name) => { const usp = new URLSearchParams(search); return usp.get(name); }; -/** - * @Title 将字符串url参数转换为Object - * @param {*} url - * @returns - */ -export const param2Obj = (url) => { - return (url) => Object.fromEntries(new URLSearchParams(url)); -}; /** * @Title 将Object参数转换为字符串 * @param {*} json @@ -292,88 +294,40 @@ export const getAssetsFile = (url) => { return new URL(`../assets/images/${url}`, import.meta.url); }; /** - * 文件下载 - * @param {*} url - * @param {*} fileName - * @returns + * @Title: a链接方式文件下载 + * @param {void} content: + * @param {void} fileName: + * @return {void} */ -export const dowloadFile = async (options = { url: '', files: null, fileName: '' }) => { - const { url, files, fileName } = options; - const chunkSize = 1 * 1024 * 1024; - const jszip = new JsZip(); - - function chunkFile(file, chunkSize) { - let chunks = []; - let fileSize = file.size; - let currentPos = 0; - while (currentPos < fileSize) { - let endPos = currentPos + chunkSize; - if (endPos > fileSize) { - endPos = fileSize; - } - chunks.push(file.slice(currentPos, endPos)); - currentPos = endPos; - } - return chunks; +export const downloadLink = (url, fileName) => { + const elink = document.createElement('a'); + elink.download = fileName; + elink.style.display = 'none'; + elink.href = url; + elink.target = '_blank'; + elink.click(); + elink.remove(); +}; +/** + * @Title: 下载文件 + * @param {void} content: + * @param {void} fileName: + * @return {void} + */ +export const downloadFile = (content, fileName) => { + const blob = new Blob([content]); + if ('download' in document.createElement('a')) { + const elink = document.createElement('a'); + elink.download = fileName; + elink.style.display = 'none'; + elink.href = URL.createObjectURL(blob); + document.body.appendChild(elink); + elink.click(); + URL.revokeObjectURL(elink.href); + document.body.removeChild(elink); + } else { + navigator.msSaveBlob(blob, fileName); } - - function dowloadLink(content, fileName) { - const blob = new Blob([content]); - if ('download' in document.createElement('a')) { - const elink = document.createElement('a'); - elink.download = fileName; - elink.style.display = 'none'; - elink.href = URL.createObjectURL(blob); - document.body.appendChild(elink); - elink.click(); - URL.revokeObjectURL(elink.href); - document.body.removeChild(elink); - } else { - navigator.msSaveBlob(blob, fileName); - } - } - - return new Promise((resolve, reject) => { - if (!isEmpty(options?.url)) { - JsZipUtils.getBinaryContent(url, (err, file) => { - if (err) { - return reject(err); - } - jszip - .loadAsync(file) - .then((zip) => { - return zip.generateAsync({ type: 'blob' }); - }) - .then((blob) => { - saveAs(blob, `${fileName}.zip`); - }); - }); - } else { - // if (files.type === 'binary/octet-stream') { - // dowloadLink(files, fileName); - // return; - // } - let chunks = null; - if (files.size > chunkSize) { - chunks = chunkFile(files, chunkSize); - } - const fileType = files.type.split('/')[1]; - const newFile = files.type === 'binary/octet-stream' ? fileName : `${fileName}.${fileType}`; - if (chunks) { - let count = 1; - chunks.forEach(function (chunk) { - jszip.file(newFile, chunk, { binary: true }); - count++; - }); - } else { - jszip.file(`${fileName}.${fileType}`, files, { binary: true }); - } - jszip.generateAsync({ type: 'blob' }).then((blob) => { - saveAs(blob, `${fileName}.zip`); - resolve(true); - }); - } - }); }; /** * @Title 模拟休眠 diff --git a/main/vite.config.js b/main/vite.config.js index 4cef404..a3d9684 100644 --- a/main/vite.config.js +++ b/main/vite.config.js @@ -15,7 +15,16 @@ import autoprefixer from 'autoprefixer'; import { resolve } from 'path'; export default defineConfig(({ command, mode }) => { - const { VITE_PORT, VITE_APP_NAME } = loadEnv(mode, process.cwd()); + const { + 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 = { base: './', build: { @@ -32,31 +41,20 @@ export default defineConfig(({ command, mode }) => { 'Access-Control-Allow-Origin': '*', }, proxy: { - // [VITE_APP_BASE_API]: { - // target: VITE_APP_BASE_URL, - // changeOrigin: true, - // rewrite: (path) => path.replace(/^\/apis/, ''), - // }, - '^/api': { - target: process.env.VUE_APP_BASE_API, // 开发环境 + [VITE_APP_BASE_API]: { + target: VITE_APP_BASE_URL, changeOrigin: true, - pathRewrite: { - '^/api': '', - }, - '^/admin_api': { - target: 'https://mock.mengxuegu.com/mock/65d00eb6351bbd02cf3398e3/api', - changeOrigin: true, - pathRewrite: { - '^/admin_api': '', - }, - }, - '^/v2api': { - target: 'https://mock.mengxuegu.com/mock/663f2f7737199f49537c350f/api-v2', - changeOrigin: true, - pathRewrite: { - '^/v2api': '', - }, - }, + rewrite: (path) => path.replace(/^\/apis/, ''), + }, + [VITE_APP_UPLOAD_API]: { + target: VITE_APP_UPLOAD_URL, + changeOrigin: true, + rewrite: (path) => path.replace(/^\/uploadApis/, ''), + }, + [VITE_APP_SYSTEM_API]: { + target: VITE_APP_SYSTEM_URL, + changeOrigin: true, + rewrite: (path) => path.replace(/^\/systemApis/, ''), }, }, }, diff --git a/sub-government-affairs-service/.env.development b/sub-government-affairs-service/.env.development index e3bba56..c03360c 100644 --- a/sub-government-affairs-service/.env.development +++ b/sub-government-affairs-service/.env.development @@ -2,5 +2,10 @@ VITE_PORT = 9528 VITE_MODE = 'DEV' VITE_APP_NAME = 'sub-government-affairs-service' -VITE_APP_BASE_API = '/apis' -VITE_APP_BASE_URL = 'http://localhost:8080/' \ No newline at end of file +VITE_APP_BASE_API = '/traceApis' +VITE_APP_BASE_URL = 'http://192.168.18.99:8080' +VITE_APP_UPLOAD_API = '/uploadApis' +VITE_APP_UPLOAD_URL = 'http://192.168.18.99:9300' +VITE_APP_DICDATA_API = '/dicDataApis' +VITE_APP_DICDATA_URL = 'http://192.168.18.99:99/stage-api' + diff --git a/sub-government-affairs-service/.env.production b/sub-government-affairs-service/.env.production index a1fd1ce..0365e2d 100644 --- a/sub-government-affairs-service/.env.production +++ b/sub-government-affairs-service/.env.production @@ -1,5 +1,5 @@ # 生产环境 VITE_MODE = 'PRO' VITE_APP_NAME = 'sub-government-affairs-service' -VITE_APP_BASE_API = 'https://www.localhost.com/8080/api/' -VITE_APP_BASE_URL = 'https://www.localhost.com/8080/' +VITE_APP_BASE_API = '' +VITE_APP_BASE_URL = 'http://192.168.18.99:8080/trace' diff --git a/sub-government-affairs-service/src/apis/coding.js b/sub-government-affairs-service/src/apis/coding.js new file mode 100644 index 0000000..ef57448 --- /dev/null +++ b/sub-government-affairs-service/src/apis/coding.js @@ -0,0 +1,73 @@ +import request from '@/utils/axios'; + +/** + * @Title: 列表 + */ +export function GetEntityList(params) { + return request('/trace/code/farmMange/page', { + method: 'GET', + params, + }); +} + +/** + * @Title: 新增 + */ +export function AddEntity(data) { + return request('/trace/code/farmMange/save', { + method: 'POST', + data, + }); +} + +/** + * @Title: 修改 + */ +export function UpdateEntity(data) { + return request('/trace/code/farmMange/edit', { + method: 'PUT', + data, + }); +} + +/** + * @Title: 删除 + */ +export function DeleteEntity(params) { + return request('/trace/code/farmMange/delete', { + method: 'DELETE', + params, + }); +} + +/** + * @Title: 导入 + */ +export function ImportEntity(data) { + return request('/trace/code/farmMange/import', { + method: 'POST', + headers: { 'Content-Type': 'multipart/form-data' }, + data, + }); +} + +/** + * @Title: 导出 + */ +export function ExportEntity(params) { + return request('/trace/code/farmMange/export', { + method: 'GET', + params, + responseType: 'blob', + }); +} + +/** + * @Title: 地址列表 + */ +export function GetAreaList(params) { + return request('/trace/code/farmMange/areas', { + method: 'GET', + params, + }); +} diff --git a/sub-government-affairs-service/src/apis/index.js b/sub-government-affairs-service/src/apis/index.js new file mode 100644 index 0000000..108e284 --- /dev/null +++ b/sub-government-affairs-service/src/apis/index.js @@ -0,0 +1,27 @@ +import request from '@/utils/axios'; +import { isEmpty } from '@/utils'; + +/** + * @Title: 获取字典 + */ +export function CommonDicData(params = { pageNum: 1, pageSize: 20, dictType: null }) { + if (isEmpty(params?.dictType)) return; + return request(`/system/dict/data/list`, { + method: 'GET', + apisType: 'dicData', + params, + }); +} + +/** + * @Title: 上传图片 + */ +export function CommonUpload(data, params) { + return request(`/upload`, { + method: 'POST', + apisType: 'upload', + uploadType: 'multipart/form-data', + data, + params, + }); +} diff --git a/sub-government-affairs-service/src/assets/template/采收赋码-导入模板.xlsx b/sub-government-affairs-service/src/assets/template/采收赋码-导入模板.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..2f3782e96c0043484f2f00765c63e84e84fd9bbf GIT binary patch literal 10676 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 literal 0 HcmV?d00001 diff --git a/sub-government-affairs-service/src/plugins/globalComponents.js b/sub-government-affairs-service/src/plugins/globalComponents.js index 2f10b98..98f5bd1 100644 --- a/sub-government-affairs-service/src/plugins/globalComponents.js +++ b/sub-government-affairs-service/src/plugins/globalComponents.js @@ -1,4 +1,4 @@ -import * as components from "../../../main/src/components"; +import * as components from '../../../main/src/components'; // 全局注册组件 export const registerGlobalComponents = (app) => { diff --git a/sub-government-affairs-service/src/router/index.js b/sub-government-affairs-service/src/router/index.js index 63b1212..956caf9 100644 --- a/sub-government-affairs-service/src/router/index.js +++ b/sub-government-affairs-service/src/router/index.js @@ -3,7 +3,7 @@ * @Author: zenghua.wang * @Date: 2023-06-20 11:48:41 * @LastEditors: zenghua.wang - * @LastEditTime: 2025-01-25 10:49:41 + * @LastEditTime: 2025-02-05 09:31:21 */ import { createRouter, createWebHistory } from 'vue-router'; import { qiankunWindow } from 'vite-plugin-qiankun/dist/helper'; @@ -42,7 +42,7 @@ export const constantRoutes = [ }, ], }, - ...resourceRouter, + // ...resourceRouter, ...plantingAndBreedingRouter, ]; diff --git a/sub-government-affairs-service/src/router/modules/plantingAndBreeding.js b/sub-government-affairs-service/src/router/modules/plantingAndBreeding.js index bfa4bce..94fe4b4 100644 --- a/sub-government-affairs-service/src/router/modules/plantingAndBreeding.js +++ b/sub-government-affairs-service/src/router/modules/plantingAndBreeding.js @@ -14,17 +14,17 @@ export default [ name: 'planting', component: Views, meta: { title: '种植档案', icon: 'Document' }, - redirect: '/planting-archives', + redirect: '/planting-base', children: [ { - path: '/planting-archives', - component: () => import('@/views/trace/planting/archives.vue'), - name: 'planting-archives', + path: '/planting-base', + component: () => import('@/views/trace/planting/base/index.vue'), + name: 'planting-base', meta: { title: '基地档案', icon: 'Document' }, }, { path: '/planting-seed', - component: () => import('@/views/trace/planting/seed.vue'), + component: () => import('@/views/trace/planting/seed/index.vue'), name: 'planting-seed', meta: { title: '种子档案', icon: 'Document' }, }, @@ -35,8 +35,21 @@ export default [ name: 'breeding', component: Views, meta: { title: '农事管理', icon: 'Document' }, - redirect: '/breeding-land', - children: [], + redirect: '/coding', + children: [ + { + path: '/coding', + component: () => import('@/views/trace/breeding/coding/index.vue'), + name: 'coding', + meta: { title: '采收与赋码管理', icon: 'Document' }, + }, + { + path: '/quality', + component: () => import('@/views/trace/breeding/quality/index.vue'), + name: 'quality', + meta: { title: '产品质检管理', icon: 'Document' }, + }, + ], }, ], }, diff --git a/sub-government-affairs-service/src/store/modules/user.js b/sub-government-affairs-service/src/store/modules/user.js index 8e96ab0..4684265 100644 --- a/sub-government-affairs-service/src/store/modules/user.js +++ b/sub-government-affairs-service/src/store/modules/user.js @@ -5,7 +5,8 @@ import { isEmpty, encode, decode } from '@/utils'; export const useUserStore = defineStore({ id: GenKey('USER_STATE'), state: () => ({ - token: null, + token: + 'eyJhbGciOiJIUzUxMiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VyX2tleSI6IjA0ZjNmZTE5LTc5ZWYtNGMxNy1iNWQ4LTE5YjA0MTkyNTZiMyIsInVzZXJuYW1lIjoiYWRtaW4ifQ.nGVLjwzO7K6MO9DbKKhfmwsoinDig5tsGWGEb3jcOtUQHcyJhTTvvuq3zAxNHSFRm9Nly_MSEcRV6oVcz3gT_w', userInfo: {}, currentOrg: null, orgList: [], @@ -17,7 +18,8 @@ export const useUserStore = defineStore({ this.token = token; }, hasToken() { - return !isEmpty(this.token); + return true; + //return !isEmpty(this.token); }, setUserInfo(userInfo) { this.userInfo = encode(JSON.stringify(userInfo), true); diff --git a/sub-government-affairs-service/src/styles/common/define.scss b/sub-government-affairs-service/src/styles/common/define.scss index c2ba1fb..386479b 100644 --- a/sub-government-affairs-service/src/styles/common/define.scss +++ b/sub-government-affairs-service/src/styles/common/define.scss @@ -102,7 +102,7 @@ font-size: 18px; } .el-upload { - display: block; + display: block!important; width: 100%; height: 100%; } diff --git a/sub-government-affairs-service/src/utils/axios.js b/sub-government-affairs-service/src/utils/axios.js index b42fc13..7822505 100644 --- a/sub-government-affairs-service/src/utils/axios.js +++ b/sub-government-affairs-service/src/utils/axios.js @@ -3,7 +3,7 @@ * @Author: zenghua.wang * @Date: 2022-02-23 21:12:37 * @LastEditors: zenghua.wang - * @LastEditTime: 2024-01-06 11:29:36 + * @LastEditTime: 2025-02-07 10:26:41 */ import axios from 'axios'; import { ElNotification } from 'element-plus'; @@ -11,7 +11,7 @@ import router from '@/router'; import { isEmpty } from '@/utils'; import { useUserStore } from '@/store/modules/user'; -const { VITE_APP_BASE_API, VITE_APP_UPLOAD_API } = import.meta.env; +const { VITE_APP_BASE_API, VITE_APP_UPLOAD_API, VITE_APP_DICDATA_API } = import.meta.env; /** * 创建axios实例 @@ -45,15 +45,24 @@ const errorHandler = async (error) => { */ publicAxios.interceptors.request.use(async (config) => { const UserStore = useUserStore(); - config.baseURL = config.isUpload ? VITE_APP_UPLOAD_API : VITE_APP_BASE_API; + switch (config.apisType) { + case 'upload': { + config.baseURL = VITE_APP_UPLOAD_API; + config.headers['Content-Type'] = config.uploadType; + break; + } + case 'dicData': { + config.baseURL = VITE_APP_DICDATA_API; + break; + } + default: { + config.baseURL = VITE_APP_BASE_API; + } + } if (UserStore.hasToken()) { - config.headers['fairies-auth-token'] = config.headers['fairies-auth-token'] ?? UserStore.token; - config.headers['fairies-org-id'] = UserStore.currentOrg; + config.headers['authorization'] = config.headers['authorization'] ?? UserStore.token; config.headers['cache-control'] = 'no-cache'; config.headers.Pragma = 'no-cache'; - if (config?.isUpload) { - config.headers['Content-Type'] = config.uploadType; - } } if (config.method === 'POST' || config.method === 'DELETE') { config.headers.Accept = 'application/json'; @@ -76,10 +85,10 @@ const formatResult = (res) => { case 500: case 1: // code === 1 或 500 代表存在错误 - ElNotification.error(res.data.message); + ElNotification.error(res.data.msg); break; default: - ElNotification.error(res.data.message); + ElNotification.error(res.data.msg); break; } }; @@ -91,7 +100,7 @@ publicAxios.interceptors.response.use((response) => { if (config?.responseType) { return response; } - const token = response?.headers['fairies-auth-token']; + const token = response?.headers['authorization']; if (!isEmpty(token)) { const UserStore = useUserStore(); UserStore.setToken(token); @@ -100,7 +109,7 @@ publicAxios.interceptors.response.use((response) => { if (result) { return result; } - throw new Error(response.data.message); + throw new Error(response.data.msg); }, errorHandler); export default publicAxios; diff --git a/sub-government-affairs-service/src/utils/index.js b/sub-government-affairs-service/src/utils/index.js index de9c7ea..fd8a9f9 100644 --- a/sub-government-affairs-service/src/utils/index.js +++ b/sub-government-affairs-service/src/utils/index.js @@ -3,10 +3,10 @@ * @Author: zenghua.wang * @Date: 2022-02-23 21:12:37 * @LastEditors: zenghua.wang - * @LastEditTime: 2025-01-25 17:04:22 + * @LastEditTime: 2025-02-07 15:21:48 */ import lodash from 'lodash'; -import moment from 'moment'; +import dayjs from 'dayjs'; import { Base64 } from 'js-base64'; /** @@ -90,7 +90,7 @@ export const setDefaultOption = (options, prop, defaultVal) => { return options[prop] === undefined ? defaultVal : options.prop; }; /** - * 设置字典值 + * @Title 设置字典值 * @param {*} columns * @param {*} key * @param {*} data @@ -107,7 +107,7 @@ export const setDicData = (columns, key, data = []) => { } }; /** - * 求字段lable + * @Title 求字段lable * @param {*} tree * @returns */ @@ -124,7 +124,35 @@ export const setDicLabel = (dicData, value) => { return label; }; /** - * 加密 + * @Title 数组交集 + * @param {*} arr1 + * @param {*} arr2 + * @returns + */ +export const intersectionArray = (arr1 = [], arr2 = []) => { + return arr1.filter((item) => arr2.includes(item)); +}; +/** + * @Title 数组并集 + * @param {*} arr1 + * @param {*} arr2 + * @returns + */ +export const unionArray = (arr1 = [], arr2 = []) => { + return Array.from(new Set([...arr1, ...arr2])); +}; +/** + * @Title 数组差集 + * @param {*} arr1 + * @param {*} arr2 + * @returns + */ +export const differenceArray = (arr1 = [], arr2 = []) => { + const s = new Set(arr2); + return arr1.filter((x) => !s.has(x)); +}; +/** + * @Title 加密 * @param {*} n * @returns */ @@ -146,7 +174,7 @@ export const encode = (n, flag = false) => { return n; }; /** - * 解密 + * @Title 解密 * @param {*} e * @returns */ @@ -190,6 +218,22 @@ export const imageToBase64 = (file) => { export const bufferToBase64 = (buffer) => { return 'data:image/jpeg;base64,' + window.btoa(new Uint8Array(buffer).reduce((data, byte) => data + String.fromCharCode(byte), '')); }; +/** + * @Title blob转json + * @param {*} file + * @returns + */ +export const blobToJSON = (blob) => { + return new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.readAsText(blob, 'utf-8'); + reader.onload = () => { + const res = !isEmpty(reader.result) ? JSON.parse(reader.result) : reader.result; + resolve(res); + }; + reader.onerror = reject; + }); +}; /** * @Title 将array转化为树 * @param tree @@ -227,22 +271,27 @@ export const getUrlQuery = (name) => { const usp = new URLSearchParams(search); return usp.get(name); }; +/** + * @Title 将Object参数转换为字符串 + * @param {*} json + * @returns + */ +export const obj2Param = (json) => { + if (!json) return ''; + return Object.keys(json) + .map((key) => { + if (isEmpty(json[key])) return ''; + return encodeURIComponent(key) + '=' + encodeURIComponent(json[key]); + }) + .join('&'); +}; /** * @Title 获取静态资源文件 * @param {*} url * @returns */ export const getAssetsFile = (url) => { - return new URL(`../assets/images/${url}`, import.meta.url); -}; -/** - * @Title 替换图片url字段值 - * @param {*} url - * @returns - */ -export const setUploadField = (url) => { - if (isEmpty(url) || url.includes('http')) return null; - return url; + return new URL(`../assets/${url}`, import.meta.url); }; /** * @Title: a链接方式文件下载 @@ -250,7 +299,22 @@ export const setUploadField = (url) => { * @param {void} fileName: * @return {void} */ -export const dowloadLink = (content, fileName) => { +export const downloadLink = (url, fileName) => { + const elink = document.createElement('a'); + elink.download = fileName; + elink.style.display = 'none'; + elink.href = url; + elink.target = '_blank'; + elink.click(); + elink.remove(); +}; +/** + * @Title: 下载文件 + * @param {void} content: + * @param {void} fileName: + * @return {void} + */ +export const downloadFile = (content, fileName) => { const blob = new Blob([content]); if ('download' in document.createElement('a')) { const elink = document.createElement('a'); @@ -275,20 +339,106 @@ export const sleep = (duration = 0) => setTimeout(resolve, duration); }); /** - * 日期格式化 + * @Title 创建id + * @param {*} prefix + * @returns + */ +export const createId = (prefix) => { + const val = Date.now() + Math.ceil(Math.random() * 99999); + return isEmpty(prefix) ? val : prefix + '-' + val; +}; +/** + * @Title 生成数据 + * @param {*} duration + * @returns + */ +export const mockData = (item = {}, len = 1) => { + const list = []; + for (let i = 0; i < len; i++) { + let temp = { ...item, id: createId() }; + list.push(temp); + } + return list; +}; +/** + * @Title 日期格式化 * @param {*} date * @param {*} format * @returns */ -export const dateFormat = (datetime, type = 'yyyy-MM-dd') => { - return moment(datetime).format(type); +export const dateFormat = (datetime, formater = 'YYYY-MM-DD hh:mm:ss') => { + if (datetime instanceof Date || datetime) { + return dayjs(datetime).format(formater); + } else { + return null; + } }; /** - * 上日/周/月/年 + * @Title 字符串转日期 + * @param {*} str + * @returns */ -export const lastDate = (last = 0, date = 'month', type = 'yyyy-MM-dd') => { - if (date === 'day') { - return moment().subtract(last, 'day').endOf('day').format(type); - } - return moment().subtract(last, date).format(type); +export const toDate = (str) => { + return !isEmpty(str) ? dayjs(str) : dayjs(); +}; +/** + * @Title 字符串转日期 + * @param {*} str + * @returns + */ +export const getDate = (num, type, formater = 'YYYY-MM-DD', start = true) => { + const date = dayjs().subtract(num, type); + return start ? date.startOf(type).format(formater) : date.endOf(type).format(formater); +}; +/** + * @Title: 获取时间差 + * @param start + * @param end + * @param type + * @returns + */ +export const getDiffTime = (start, end, type) => { + const startTime = dayjs(start); + const endTime = dayjs(end); + const duration = endTime.diff(startTime); + let diff = 0; + switch (type) { + case 'DD': { + diff = duration / (1000 * 60 * 60 * 24); + break; + } + case 'HH': { + diff = duration / (1000 * 60 * 60); + break; + } + case 'mm': { + diff = duration / (1000 * 60); + break; + } + } + return Math.round(diff); +}; +/** + * @Title: 开始日期 + * @param last + * @param type + * @param formater + * @returns + */ +export const startDate = (num, type = 'month', formater = 'YYYY-MM-DD HH:mm:ss') => { + if (num === 'now') return dayjs().format(formater); + if (typeof num === 'string') return dayjs(num).startOf(type).format(formater); + return num === 0 ? dayjs().startOf(type).format(formater) : dayjs().subtract(num, type).startOf(type).format(formater); +}; +/** + * @Title: 结束日期 + * @param num + * @param type + * @param formater + * @returns + */ +export const endDate = (num = 0, type = 'month', formater = 'YYYY-MM-DD HH:mm:ss') => { + if (num === 'now') return dayjs().format(formater); + if (typeof num === 'string') return dayjs(num).endOf(type).format(formater); + return num === 0 ? dayjs().endOf(type).format(formater) : dayjs().subtract(num, type).endOf(type).format(formater); }; diff --git a/sub-government-affairs-service/src/views/trace/breeding/coding/index.vue b/sub-government-affairs-service/src/views/trace/breeding/coding/index.vue new file mode 100644 index 0000000..c0b607d --- /dev/null +++ b/sub-government-affairs-service/src/views/trace/breeding/coding/index.vue @@ -0,0 +1,540 @@ + + diff --git a/sub-government-affairs-service/src/views/trace/breeding/quality/index.vue b/sub-government-affairs-service/src/views/trace/breeding/quality/index.vue new file mode 100644 index 0000000..d1531b0 --- /dev/null +++ b/sub-government-affairs-service/src/views/trace/breeding/quality/index.vue @@ -0,0 +1,3 @@ + diff --git a/sub-government-affairs-service/src/views/trace/planting/archives.vue b/sub-government-affairs-service/src/views/trace/planting/base/index.vue similarity index 93% rename from sub-government-affairs-service/src/views/trace/planting/archives.vue rename to sub-government-affairs-service/src/views/trace/planting/base/index.vue index 828652b..b98966e 100644 --- a/sub-government-affairs-service/src/views/trace/planting/archives.vue +++ b/sub-government-affairs-service/src/views/trace/planting/base/index.vue @@ -31,11 +31,6 @@ import { useApp } from '@/hooks'; import { sleep } from '@/utils'; import { CRUD_OPTIONS } from '@/config'; -import { useSettingStore } from '@/store/modules/setting'; -const SettingStore = useSettingStore(); - -const globalComSize = computed(() => SettingStore.themeConfig.globalComSize); - import Mock from 'mockjs'; const res = Mock.mock({ 'data|20': [ @@ -64,8 +59,7 @@ const state = reactive({ selection: [], options: { ...CRUD_OPTIONS, - addBtnText: '新增档案', - size: globalComSize.value, + addBtnText: '添加档案', column: [ { label: '基地代码', @@ -116,7 +110,7 @@ const state = reactive({ ], rules: { required: true, - message: '请输入', + message: '请选择', trigger: 'blur', }, }, @@ -145,7 +139,7 @@ const state = reactive({ ], rules: { required: true, - message: '请输入', + message: '请选择', trigger: 'blur', }, }, @@ -165,7 +159,7 @@ const state = reactive({ ], rules: { required: true, - message: '请输入', + message: '请选择', trigger: 'blur', }, }, @@ -173,13 +167,16 @@ const state = reactive({ label: '面积(亩)', prop: 'area', type: 'number', - labelTip: '提示语', - labelTipPlacement: 'bottom', + // labelTip: '提示语', + // labelTipPlacement: 'bottom', rules: { required: true, message: '请输入', trigger: 'blur', }, + formatter: (row) => { + return row.area + '亩'; + }, }, { label: '海拔(米)', @@ -190,6 +187,9 @@ const state = reactive({ message: '请输入', trigger: 'blur', }, + formatter: (row) => { + return row.area + 'm'; + }, }, { label: '创建日期', diff --git a/sub-government-affairs-service/src/views/trace/planting/seed.vue b/sub-government-affairs-service/src/views/trace/planting/seed/index.vue similarity index 99% rename from sub-government-affairs-service/src/views/trace/planting/seed.vue rename to sub-government-affairs-service/src/views/trace/planting/seed/index.vue index 96d4f37..c8ff0a6 100644 --- a/sub-government-affairs-service/src/views/trace/planting/seed.vue +++ b/sub-government-affairs-service/src/views/trace/planting/seed/index.vue @@ -54,7 +54,7 @@ const state = reactive({ selection: [], options: { ...CRUD_OPTIONS, - addBtnText: '新增档案', + addBtnText: '添加档案', column: [ { label: '种子代码', diff --git a/sub-government-affairs-service/vite.config.js b/sub-government-affairs-service/vite.config.js index e385a5b..eaaae92 100644 --- a/sub-government-affairs-service/vite.config.js +++ b/sub-government-affairs-service/vite.config.js @@ -2,8 +2,8 @@ * @Descripttion: * @Author: zenghua.wang * @Date: 2022-09-18 21:24:29 - * @LastEditors: zenghua.wang “1048523306@qq.com” - * @LastEditTime: 2025-01-21 14:11:58 + * @LastEditors: zenghua.wang + * @LastEditTime: 2025-02-07 10:01:57 */ import { defineConfig, loadEnv } from 'vite'; @@ -24,7 +24,16 @@ const useDevMode = true; export default defineConfig(({ command, mode }) => { console.log('vite.config.js', command, mode, loadEnv(mode, process.cwd())); - 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()); + const { + VITE_PORT, + VITE_APP_NAME, + VITE_APP_BASE_API, + VITE_APP_BASE_URL, + VITE_APP_UPLOAD_API, + VITE_APP_UPLOAD_URL, + VITE_APP_DICDATA_API, + VITE_APP_DICDATA_URL, + } = loadEnv(mode, process.cwd()); const config = { base: './', build: { @@ -44,13 +53,18 @@ export default defineConfig(({ command, mode }) => { [VITE_APP_BASE_API]: { target: VITE_APP_BASE_URL, changeOrigin: true, - rewrite: (path) => path.replace(/^\/apis/, ''), + rewrite: (path) => path.replace(/^\/traceApis/, ''), }, [VITE_APP_UPLOAD_API]: { target: VITE_APP_UPLOAD_URL, changeOrigin: true, rewrite: (path) => path.replace(/^\/uploadApis/, ''), }, + [VITE_APP_DICDATA_API]: { + target: VITE_APP_DICDATA_URL, + changeOrigin: true, + rewrite: (path) => path.replace(/^\/dicDataApis/, ''), + }, }, }, resolve: {