From 44166821607ab049a674e24aa88b0ad3d248c3dc Mon Sep 17 00:00:00 2001 From: wxc <191104855@qq.com> Date: Tue, 6 Feb 2024 10:54:09 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B1=80=E9=95=BF=E4=BF=A1=E7=AE=B1(=E5=86=85?= =?UTF-8?q?=E7=BD=91=E7=AB=AF)=20=E4=BF=A1=E4=BB=B6=E7=AD=BE=E6=94=B6?= =?UTF-8?q?=E3=80=81=E5=8A=9E=E7=BB=93=E5=AE=A1=E6=89=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env | 1 + src/api/org/department.ts | 4 + src/assets/icons/lock-fill.svg | 10 + src/assets/icons/logout.svg | 14 + src/components/LeaderSelect.vue | 39 ++ src/components/MailCategorySelect.vue | 30 ++ src/components/MailLevel.vue | 17 +- src/components/Message.vue | 2 +- src/components/PoliceSelect.vue | 2 +- src/components/icon/index.vue | 5 + src/layout/components/Header.vue | 24 +- src/style/element.scss | 19 +- src/style/public.scss | 27 +- src/utils/request.ts | 27 +- src/utils/util.ts | 7 + src/views/Login.vue | 19 +- src/views/home/components/MailTable.vue | 12 + src/views/work/Fav.vue | 9 + src/views/work/Todo.vue | 22 +- .../work/components/ApplicationCompleted.vue | 108 ++--- .../work/components/ConfirmedCompletion.vue | 180 +++++++ .../work/components/InitiateCountersign.vue | 163 +++++++ src/views/work/components/MailDialog.vue | 453 +++++++++++------- src/views/work/components/ReviewComments.vue | 100 ++++ .../CoHandlingAndThreeFlow.vue | 58 ++- .../{ => templates}/CoHandlingPoliceEdit.vue | 0 .../work/components/templates/Comments.vue | 103 ++++ .../{ => templates}/ContactWriterFrom.vue | 0 .../{ => templates}/DeptSelectForm.vue | 0 .../{ => templates}/InterviewWriterFrom.vue | 51 +- .../templates/MailApprovalDetail.vue | 165 +++++++ .../{ => templates}/MailTypeForm.vue | 80 ++-- .../components/templates/MainContactInfo.vue | 98 ++++ .../components/{ => templates}/VerifyForm.vue | 21 +- vite.config.ts | 11 +- 35 files changed, 1545 insertions(+), 336 deletions(-) create mode 100644 .env create mode 100644 src/assets/icons/lock-fill.svg create mode 100644 src/assets/icons/logout.svg create mode 100644 src/components/LeaderSelect.vue create mode 100644 src/components/MailCategorySelect.vue create mode 100644 src/views/work/components/ConfirmedCompletion.vue create mode 100644 src/views/work/components/InitiateCountersign.vue create mode 100644 src/views/work/components/ReviewComments.vue rename src/views/work/components/{ => templates}/CoHandlingAndThreeFlow.vue (50%) rename src/views/work/components/{ => templates}/CoHandlingPoliceEdit.vue (100%) create mode 100644 src/views/work/components/templates/Comments.vue rename src/views/work/components/{ => templates}/ContactWriterFrom.vue (100%) rename src/views/work/components/{ => templates}/DeptSelectForm.vue (100%) rename src/views/work/components/{ => templates}/InterviewWriterFrom.vue (77%) create mode 100644 src/views/work/components/templates/MailApprovalDetail.vue rename src/views/work/components/{ => templates}/MailTypeForm.vue (60%) create mode 100644 src/views/work/components/templates/MainContactInfo.vue rename src/views/work/components/{ => templates}/VerifyForm.vue (93%) diff --git a/.env b/.env new file mode 100644 index 0000000..ed1f14e --- /dev/null +++ b/.env @@ -0,0 +1 @@ +VITE_API_URL=/lan-api \ No newline at end of file diff --git a/src/api/org/department.ts b/src/api/org/department.ts index 9cbdbae..236d89e 100644 --- a/src/api/org/department.ts +++ b/src/api/org/department.ts @@ -36,4 +36,8 @@ export function listThree() { export function listByThree() { return request.get({ url: '/system/dept/three/listByThree'}) +} + +export function listCountersign() { + return request.get({ url: '/system/dept/countersign/list'}) } \ No newline at end of file diff --git a/src/assets/icons/lock-fill.svg b/src/assets/icons/lock-fill.svg new file mode 100644 index 0000000..b89340b --- /dev/null +++ b/src/assets/icons/lock-fill.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/icons/logout.svg b/src/assets/icons/logout.svg new file mode 100644 index 0000000..cd5e0ba --- /dev/null +++ b/src/assets/icons/logout.svg @@ -0,0 +1,14 @@ + + + ic_tuichu + + + + + + + + + + + \ No newline at end of file diff --git a/src/components/LeaderSelect.vue b/src/components/LeaderSelect.vue new file mode 100644 index 0000000..46bcbcd --- /dev/null +++ b/src/components/LeaderSelect.vue @@ -0,0 +1,39 @@ + + + \ No newline at end of file diff --git a/src/components/MailCategorySelect.vue b/src/components/MailCategorySelect.vue new file mode 100644 index 0000000..69b5a1d --- /dev/null +++ b/src/components/MailCategorySelect.vue @@ -0,0 +1,30 @@ + + + \ No newline at end of file diff --git a/src/components/MailLevel.vue b/src/components/MailLevel.vue index 1cede1f..437e63a 100644 --- a/src/components/MailLevel.vue +++ b/src/components/MailLevel.vue @@ -30,5 +30,20 @@ watch(() => props.value, (val) => { }) \ No newline at end of file diff --git a/src/components/Message.vue b/src/components/Message.vue index b40eb0f..73fac3a 100644 --- a/src/components/Message.vue +++ b/src/components/Message.vue @@ -1,5 +1,5 @@ @@ -33,15 +36,28 @@ header { color: #fff; height: var(--header-height); padding: 0 8px; + font-size: 20px; .logo { font-size: 3.89vh; + font-weight: 700; a { text-decoration: none; color: inherit; + letter-spacing: 5.25px; img { width: 4vw; } } } + .el-button { + --el-font-size-base: 18px; + --el-button-bg-color: #283AAC; + --el-button-border-color: #586EFF; + height: 36px; + &:hover { + --el-button-hover-bg-color: var(--el-button-bg-color); + --el-button-hover-border-color: #fff; + } + } } \ No newline at end of file diff --git a/src/style/element.scss b/src/style/element.scss index 8cd2f81..92ed432 100644 --- a/src/style/element.scss +++ b/src/style/element.scss @@ -8,6 +8,9 @@ .el-select { min-width: 80px; } +.el-radio { + color: #333; +} .el-button--primary.is-link>span { font-weight: bold; @@ -28,12 +31,20 @@ --el-color-info: #fff; background-color: var(--primary-color); margin-right: 0; + .el-dialog__headerbtn:hover .el-dialog__close { color: #aaa; } } -.el-dialog.dialog-header-nopadding .el-dialog__header { - - padding: 0; - margin-right: 0; + +.el-dialog.dialog-header-nopadding { + & > .el-dialog__header { + padding: 0; + margin-right: 0; + } + + & > .el-dialog__body { + padding-left: 0; + padding-right: 0; + } } \ No newline at end of file diff --git a/src/style/public.scss b/src/style/public.scss index 6822ff3..62537b0 100644 --- a/src/style/public.scss +++ b/src/style/public.scss @@ -83,6 +83,9 @@ body { .text-center { text-align: center; } + .text-right { + text-align: right; + } .text-nowrap { white-space: nowrap; @@ -164,6 +167,9 @@ body { margin-top: 40px; } + .mb-4 { + margin-bottom: 4px; + } .mb-8 { margin-bottom: 8px; } @@ -189,7 +195,6 @@ body { --setp-font-color: #666; --setp-border-color: rgba(195, 202, 245, 1); --setp-font-size: 20px; - width: 33.33%; height: 45px; padding-left: 6px; background-color: var(--setp-background-color); @@ -207,8 +212,8 @@ body { position: absolute; right: -17px; top: 50%; - width: 32px; - height: 32px; + width: 31px; + height: 31px; background-color: var(--setp-background-color); border-top: 1px solid var(--setp-border-color); border-right: 1px solid var(--setp-border-color); @@ -219,7 +224,7 @@ body { display: block; content: ""; position: absolute; - left: 24%; + left: 26%; top: 50%; width: 16px; height: 16px; @@ -228,4 +233,18 @@ body { border-radius: 50%; transform: translateY(-50%); } +} + +.col { + display: flex; + width: 280px; + &.short { + width: 140px; + } + label { + margin-right: 18px; + } + span { + color: #333; + } } \ No newline at end of file diff --git a/src/utils/request.ts b/src/utils/request.ts index 4063e5b..8d9ddf2 100644 --- a/src/utils/request.ts +++ b/src/utils/request.ts @@ -1,8 +1,13 @@ -const basePath = '/lan-api/api' import { getToken } from './auth' import feedback from './feedback' +const { + VITE_API_URL +} = process.env + +const BASE_PATH = VITE_API_URL + '/api' + type Options = { url: string, method?: 'GET' | 'POST' | 'PUT' | 'DELETE', @@ -12,33 +17,33 @@ type Options = { body?: string | FormData | Record; }; -function get(options:Options) { +function get(options: Options) { options.method = 'GET'; return ajax(options.url, options) } -function post(options:Options) { +function post(options: Options) { options.method = 'POST'; return ajax(options.url, options) } -function put(options:Options) { +function put(options: Options) { options.method = 'PUT'; return ajax(options.url, options) } -function del(options:Options) { +function del(options: Options) { options.method = 'DELETE'; return ajax(options.url, options) } -function ajax(url: string, options:Options) { - const headers:Record = { +function ajax(url: string, options: Options) { + const headers: Record = { "Content-Type": "application/json", "Admin": getToken() }; - - let body:string | FormData; + + let body: string | FormData; if (options?.params && Object.keys(options.params).length > 0) { if (options.method === 'GET') { options.query = options.params; @@ -59,10 +64,10 @@ function ajax(url: string, options:Options) { } } return new Promise((resolve, reject) => { - fetch(`${basePath}${url}`, { + fetch(`${BASE_PATH}${url}`, { method: options.method, body: body, - headers: {...headers, ...options.headers} + headers: { ...headers, ...options.headers } }).then(response => { if (response.status === 413) { diff --git a/src/utils/util.ts b/src/utils/util.ts index 52fdd7a..f948684 100644 --- a/src/utils/util.ts +++ b/src/utils/util.ts @@ -201,3 +201,10 @@ export const getNonDuplicateID = (length = 8) => { export const firstToUpperCase = (str = '') => { return str.toLowerCase().replace(/( |^)[a-z]/g, ($1) => $1.toUpperCase()) } + +export const getDictLable = (dictArr: any[], value: string) => { + if (!value) { + return '' + } + return dictArr.filter(item => item.value === value)[0].name +} \ No newline at end of file diff --git a/src/views/Login.vue b/src/views/Login.vue index f0bbcca..a7cf656 100644 --- a/src/views/Login.vue +++ b/src/views/Login.vue @@ -4,10 +4,10 @@
-
+
-
+
+ @@ -34,15 +37,18 @@ @keyup.enter="handleLogin" style="--el-input-height: 50px" > + - +
@@ -63,7 +69,7 @@ size="large" style=" width: 100%; - --el-button-size: 60px; + --el-button-size: 54px; --el-font-size-base: 18px; " > @@ -146,7 +152,6 @@ function lockLogin() { background-image: url("/imgs/bg.png"); background-position: center; background-size: cover; - font-size: 15px; header { padding-top: 3.2vh; margin-bottom: 8vh; diff --git a/src/views/home/components/MailTable.vue b/src/views/home/components/MailTable.vue index f087afb..92f3ce5 100644 --- a/src/views/home/components/MailTable.vue +++ b/src/views/home/components/MailTable.vue @@ -137,8 +137,12 @@ + + \ No newline at end of file diff --git a/src/views/work/Todo.vue b/src/views/work/Todo.vue index 750d3ff..74c929e 100644 --- a/src/views/work/Todo.vue +++ b/src/views/work/Todo.vue @@ -3,7 +3,6 @@
@@ -141,12 +140,12 @@ prop="mailTime" label="来信时间" align="center" - width="180" + width="170" /> + \ No newline at end of file diff --git a/src/views/work/components/InitiateCountersign.vue b/src/views/work/components/InitiateCountersign.vue new file mode 100644 index 0000000..24aba64 --- /dev/null +++ b/src/views/work/components/InitiateCountersign.vue @@ -0,0 +1,163 @@ + + + \ No newline at end of file diff --git a/src/views/work/components/MailDialog.vue b/src/views/work/components/MailDialog.vue index 6179552..e1ce9a4 100644 --- a/src/views/work/components/MailDialog.vue +++ b/src/views/work/components/MailDialog.vue @@ -5,6 +5,7 @@ width="84vw" top="4vh" class="dialog-header-nopadding" + style="--el-dialog-padding-primary: 10px" >
- - +
-
-

剩余处理时间

- -
- -
-
-
- 总耗时 - 节点流程图 -
-
-
-
- {{ - item.createTime - }} - {{ - item.handlerDeptName + +
+

剩余处理时间

+
+
+
+ + + {{ + mail.mailFirstCategory }} - {{ - item.flowAfterName + {{ + " > " + mail.mailSecondCategory }} -
-
- 用时 - {{ - item.consumingTime + {{ + " > " + mail.mailThreeCategory }} -
+ +
+
+ + {{ getMailLevel(dictData.mail_level, mail.mailLevel) }}
+
+
+ 总耗时 + 节点流程图 +
+ +
+
+
+ {{ + item.createTime + }} + {{ + item.handlerDeptName + }} + {{ + item.flowAfterName + }} +
+
+ 用时 + {{ + formatTimeText( + item.consumingTime + ) + }} +
+
+
+ 无 +
+
+
+
- -
-
-
- - {{ mail.mailTime }} -
-
- - {{ mail.source }} -
-
-

来信人信息

-
-
- - {{ mail.contactName }} -
-
- - {{ mail.contactSex }} -
-
- - {{ mail.contactIdCard }} -
-
- - {{ mail.contactPhone }} -
-
-

信件内容

-
-
- - {{ mail.caseNumber }} -
-
- - {{ mail.involvedDeptName }} -
-
-

{{ mail.content }}

-

附件

-
+ + + +
@@ -229,29 +253,69 @@ - + + + + + \ No newline at end of file diff --git a/src/views/work/components/ReviewComments.vue b/src/views/work/components/ReviewComments.vue new file mode 100644 index 0000000..e3a1dc3 --- /dev/null +++ b/src/views/work/components/ReviewComments.vue @@ -0,0 +1,100 @@ + + + \ No newline at end of file diff --git a/src/views/work/components/CoHandlingAndThreeFlow.vue b/src/views/work/components/templates/CoHandlingAndThreeFlow.vue similarity index 50% rename from src/views/work/components/CoHandlingAndThreeFlow.vue rename to src/views/work/components/templates/CoHandlingAndThreeFlow.vue index c2513a7..b97b28f 100644 --- a/src/views/work/components/CoHandlingAndThreeFlow.vue +++ b/src/views/work/components/templates/CoHandlingAndThreeFlow.vue @@ -23,23 +23,51 @@ class="step flex center v-center" v-for="(label, index) in threeSteps" :key="index" + :active="activeStep === index" + :completed="index < activeStep" > {{ index + 1 }} {{ label }}
- - + \ No newline at end of file diff --git a/src/views/work/components/CoHandlingPoliceEdit.vue b/src/views/work/components/templates/CoHandlingPoliceEdit.vue similarity index 100% rename from src/views/work/components/CoHandlingPoliceEdit.vue rename to src/views/work/components/templates/CoHandlingPoliceEdit.vue diff --git a/src/views/work/components/templates/Comments.vue b/src/views/work/components/templates/Comments.vue new file mode 100644 index 0000000..28f44f0 --- /dev/null +++ b/src/views/work/components/templates/Comments.vue @@ -0,0 +1,103 @@ + + + \ No newline at end of file diff --git a/src/views/work/components/ContactWriterFrom.vue b/src/views/work/components/templates/ContactWriterFrom.vue similarity index 100% rename from src/views/work/components/ContactWriterFrom.vue rename to src/views/work/components/templates/ContactWriterFrom.vue diff --git a/src/views/work/components/DeptSelectForm.vue b/src/views/work/components/templates/DeptSelectForm.vue similarity index 100% rename from src/views/work/components/DeptSelectForm.vue rename to src/views/work/components/templates/DeptSelectForm.vue diff --git a/src/views/work/components/InterviewWriterFrom.vue b/src/views/work/components/templates/InterviewWriterFrom.vue similarity index 77% rename from src/views/work/components/InterviewWriterFrom.vue rename to src/views/work/components/templates/InterviewWriterFrom.vue index 78fc3c4..ab3628c 100644 --- a/src/views/work/components/InterviewWriterFrom.vue +++ b/src/views/work/components/templates/InterviewWriterFrom.vue @@ -23,14 +23,7 @@ - - - + @@ -51,6 +44,20 @@ + + 上传 + + + + @@ -65,9 +72,11 @@ \ No newline at end of file diff --git a/src/views/work/components/templates/MailApprovalDetail.vue b/src/views/work/components/templates/MailApprovalDetail.vue new file mode 100644 index 0000000..407c1c5 --- /dev/null +++ b/src/views/work/components/templates/MailApprovalDetail.vue @@ -0,0 +1,165 @@ + + + \ No newline at end of file diff --git a/src/views/work/components/MailTypeForm.vue b/src/views/work/components/templates/MailTypeForm.vue similarity index 60% rename from src/views/work/components/MailTypeForm.vue rename to src/views/work/components/templates/MailTypeForm.vue index ba8e5dc..7692714 100644 --- a/src/views/work/components/MailTypeForm.vue +++ b/src/views/work/components/templates/MailTypeForm.vue @@ -2,19 +2,18 @@

信件类型

- - +
+
- - +
+
- - +
+
+ + +
+ 正常流程 +

正常流程,包含接访群众步骤

+
+
+ 简易流程 +

简化流程,不包含接访群众步骤

+
+
+
\ No newline at end of file diff --git a/src/views/work/components/templates/MainContactInfo.vue b/src/views/work/components/templates/MainContactInfo.vue new file mode 100644 index 0000000..f6723a1 --- /dev/null +++ b/src/views/work/components/templates/MainContactInfo.vue @@ -0,0 +1,98 @@ + + + \ No newline at end of file diff --git a/src/views/work/components/VerifyForm.vue b/src/views/work/components/templates/VerifyForm.vue similarity index 93% rename from src/views/work/components/VerifyForm.vue rename to src/views/work/components/templates/VerifyForm.vue index 7c2f5fd..db6f320 100644 --- a/src/views/work/components/VerifyForm.vue +++ b/src/views/work/components/templates/VerifyForm.vue @@ -150,8 +150,19 @@ - - 上传 + + 上传 + + + @@ -177,7 +188,8 @@ import { useDictData } from "@/hooks/useDictOptions"; import { listByThree } from "@/api/org/department"; import { allLists } from "@/api/perms/admin"; - +import { getToken } from "@/utils/auth"; +const { VITE_API_URL } = process.env; const { dictData } = useDictData(["verify_problem", "verify_punish"]); const threeDepts = ref([]); const polices = ref([]); @@ -265,7 +277,8 @@ function validate() { const verifyReportedPolices = reportedPolices.value.filter(item => item.empNo) form.value.verifyReportedPolices = JSON.stringify(verifyReportedPolices) form.value.verifyFollowupPolice = JSON.stringify(form.value.verifyFollowupPolice) - emits("update:data", form.value); + const data = { ...props.data, ...form.value }; + emits("update:data", data); resolve(true); } else { reject(); diff --git a/vite.config.ts b/vite.config.ts index 3bee1d1..1dadff4 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,6 +1,6 @@ import { fileURLToPath } from 'url' -import { defineConfig } from 'vite' +import { defineConfig, loadEnv } from 'vite' import vue from '@vitejs/plugin-vue' import path from 'path' @@ -10,8 +10,11 @@ import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' import { createSvgIconsPlugin } from 'vite-plugin-svg-icons' // https://vitejs.dev/config/ -export default defineConfig({ +export default ({ mode }) => defineConfig({ base: '/lan/', + define: { + 'process.env': loadEnv(mode, process.cwd()) + }, server: { host: '0.0.0.0', proxy: { @@ -40,7 +43,7 @@ export default defineConfig({ // 配置路劲在你的src里的svg存放文件 iconDirs: [fileURLToPath(new URL('./src/assets/icons', import.meta.url))], symbolId: 'local-icon-[name]' - }), + }), ], resolve: { // https://cn.vitejs.dev/config/#resolve-alias @@ -59,5 +62,5 @@ export default defineConfig({ }, }, } - + })