From 1d61b3946fd02a583776b24aa9791c65c9968abd Mon Sep 17 00:00:00 2001 From: liuhaohui <liuhaohui@seaskysh.com> Date: Tue, 12 Mar 2024 11:03:43 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PublicPCWeb/package-lock.json | 5 + PublicPCWeb/package.json | 1 + PublicPCWeb/src/api/InquiryChildcare.js | 58 ++ PublicPCWeb/src/api/company.js | 24 - PublicPCWeb/src/api/instance-manage.js | 61 -- .../src/components/MoneyInput/index.vue | 212 ++++++ PublicPCWeb/src/main.js | 6 +- PublicPCWeb/src/router/index.js | 15 +- .../src/views/Inquiry-childcare/index.vue | 212 ++++-- .../views/application-form-query/index.vue | 391 +++++++++-- .../src/views/batch-generation/index.vue | 329 ++++++++-- PublicPCWeb/src/views/company/index.vue | 239 ------- .../instance-manage/components/Detail.vue | 322 ---------- .../views/instance-manage/components/List.vue | 458 ------------- .../src/views/instance-manage/index.vue | 46 -- PublicPCWeb/src/views/reimbursement/index.vue | 605 ++++++++++++++++++ PublicPCWeb/vue.config.js | 10 +- 17 files changed, 1665 insertions(+), 1329 deletions(-) create mode 100644 PublicPCWeb/src/api/InquiryChildcare.js delete mode 100644 PublicPCWeb/src/api/company.js delete mode 100644 PublicPCWeb/src/api/instance-manage.js create mode 100644 PublicPCWeb/src/components/MoneyInput/index.vue delete mode 100644 PublicPCWeb/src/views/company/index.vue delete mode 100644 PublicPCWeb/src/views/instance-manage/components/Detail.vue delete mode 100644 PublicPCWeb/src/views/instance-manage/components/List.vue delete mode 100644 PublicPCWeb/src/views/instance-manage/index.vue create mode 100644 PublicPCWeb/src/views/reimbursement/index.vue diff --git a/PublicPCWeb/package-lock.json b/PublicPCWeb/package-lock.json index 68cdb3b..d9e9bdc 100644 --- a/PublicPCWeb/package-lock.json +++ b/PublicPCWeb/package-lock.json @@ -8111,6 +8111,11 @@ "minimist": "^1.2.6" } }, + "moment": { + "version": "2.30.1", + "resolved": "https://registry.npmmirror.com/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==" + }, "move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", diff --git a/PublicPCWeb/package.json b/PublicPCWeb/package.json index 3b96f0d..46005c2 100644 --- a/PublicPCWeb/package.json +++ b/PublicPCWeb/package.json @@ -9,6 +9,7 @@ }, "dependencies": { "core-js": "^3.6.5", + "moment": "^2.30.1", "vue": "^3.0.0", "vue-router": "^4.0.0-0", "vuex": "^4.0.0-0" diff --git a/PublicPCWeb/src/api/InquiryChildcare.js b/PublicPCWeb/src/api/InquiryChildcare.js new file mode 100644 index 0000000..4c669e1 --- /dev/null +++ b/PublicPCWeb/src/api/InquiryChildcare.js @@ -0,0 +1,58 @@ +import request from '@/core/base/request'; + +class InquiryChildcare { + //鎵樺辜璐瑰彂鏀炬煡璇� + static statisticsPageList(data) { + return request.post('/queryStatistics/pc/v1/statisticsPageList', data); + } + //鍙戞斁鎵规鏌ヨ + static pageList(data) { + return request.post('/grant/pc/v1/pageList', data); + } + //鍏佽鍙戞斁鐨勬暟鎹� + static pageCanGrantList(data) { + return request.post('/grant/pc/v1/pageCanGrantList', data); + } + //鐢熸垚鍙戞斁 + static createGrant(data) { + return request.post('/grant/pc/v1/createGrant', data); + } + //鍙戞斁鏄庣粏鏍规嵁鍙戞斁id + static pageGrantDetailList(data) { + return request.post('/grant/pc/v1/pageGrantDetailList', data); + } + //鐢熸垚钖祫鐢虫姤鍗� + static createSalaryDeclare(id) { + return request.post('/grant/pc/v1/createSalaryDeclare/' + id); + } + //鎾ら攢钖祫鐢虫姤鍗� + static cancelSalaryDeclare(id) { + return request.post('/grant/pc/v1/cancelSalaryDeclare/' + id); + } + //鎾ら攢鍙戞斁 + static cancelGrant(id) { + return request.post('/grant/pc/v1/cancelGrant/' + id); + } + //瀹℃牳鐣岄潰鐢宠璁板綍鏌ヨ + static pageLists(data) { + return request.post('/childcarefeeapply/pc/v1/pageList', data); + } + //鍙戞斁鏄庣粏-鍒嗛〉 + static pageListsa(data) { + return request.post('/childcarefeedetail/pc/v1/pageList', data); + } + //浣滃簾 + static cancel(id) { + return request.post('/childcarefeedetail/pc/v1/cancel/' + id); + } + //鍚敤 + static enable(id) { + return request.post('/childcarefeedetail/pc/v1/enable/' + id); + } + //鍙戞斁鏍囧噯 + static grantStandard() { + return request.post('/childCareFeeConfig/pc/v1/grantStandard'); + } +} + +export default InquiryChildcare; diff --git a/PublicPCWeb/src/api/company.js b/PublicPCWeb/src/api/company.js deleted file mode 100644 index 9e4d00f..0000000 --- a/PublicPCWeb/src/api/company.js +++ /dev/null @@ -1,24 +0,0 @@ -import request from '@/core/base/request'; - -class company { - //鑾峰彇浼佷笟鍒楄〃 - static list(data) { - return request.post('/company/pc/v1/list', data); - } - //鏂板浼佷笟鍒楄〃 - static add(data) { - return request.post('/company/pc/v1/add', data); - } - //淇敼浼佷笟鍒楄〃 - static update(data) { - return request.post('/company/pc/v1/update', data); - } - //鍒犻櫎浼佷笟 - static logicDelete(data) { - return request.post('/company/pc/v1/logicDelete', data); - } - - -} - -export default company; diff --git a/PublicPCWeb/src/api/instance-manage.js b/PublicPCWeb/src/api/instance-manage.js deleted file mode 100644 index b36b6be..0000000 --- a/PublicPCWeb/src/api/instance-manage.js +++ /dev/null @@ -1,61 +0,0 @@ -import request from '@/core/base/request'; - -class instancemanage { - //鑾峰彇瀹炰緥鍒楄〃 - static listInstance(data) { - return request.post('/instancemanage/pc/v1/listInstance', data); - } - //鍋滅敤瀹炰緥 - static disableInstance(id) { - return request.post(`/instancemanage/pc/v1/disableInstance?id=${id}`); - } - //鍚敤瀹炰緥 - static enableInstance(id) { - return request.post(`/instancemanage/pc/v1/enableInstance?id=${id}`); - } - //鍚敤瀹炰緥閾炬帴 - static enableLink(data) { - return request.post('/instancemanage/pc/v1/enableLink',data); - } - //鍋滅敤瀹炰緥閾炬帴 - static disableLink(data) { - return request.post('/instancemanage/pc/v1/disableLink',data); - } - //娉ㄥ唽瀹炰緥閾炬帴 - static registerLink(data) { - return request.post('/instancemanage/pc/v1/registerLink',data); - } - //淇敼瀹炰緥閾炬帴 - static changeLinkKey(data) { - return request.post('/instancemanage/pc/v1/changeLinkKey',data); - } - //鍒锋柊瀵嗛挜 - static refreshInstanceKey(id) { - return request.post(`/instancemanage/pc/v1/refreshInstanceKey?id=${id}`); - } - //鑾峰彇鍗曚綅鍒楄〃 - static list(data) { - return request.post('/company/pc/v1/list', data); - } - //鍒涘缓瀹炰緥 - static createInstance(data) { - return request.post('/instancemanage/pc/v1/createInstance', data); - } - //淇敼瀹炰緥 - static modifyInstanceBaseInfo(data) { - return request.post('/instancemanage/pc/v1/modifyInstanceBaseInfo', data); - } - //鏌ヨ瀹炰緥閾炬帴 - static listLink(data) { - return request.post('/instancemanage/pc/v1/listLink', data); - } - //鑾峰彇涓彴鏈嶅姟鍒楄〃 - static getOnlineMiddlegroundService(data) { - return request.post( - '/middleground/pc/v1/getOnlineMiddlegroundService', - data - ); - } -} - -export default instancemanage; diff --git a/PublicPCWeb/src/components/MoneyInput/index.vue b/PublicPCWeb/src/components/MoneyInput/index.vue new file mode 100644 index 0000000..55ee26a --- /dev/null +++ b/PublicPCWeb/src/components/MoneyInput/index.vue @@ -0,0 +1,212 @@ +<template> + <el-input + v-model="moneyShow" + :clearable="clearabled" + :placeholder="placeholder" + :disabled="disabled" + :readonly="readonly" + @change="setMoney" + @keyup="onInput" + @focus="getInputFocus($event)" + > + <template #append v-if="appned"> + <slot name="appned"> </slot> + </template> + <template #suffix v-if="suffix"> + <slot name="suffix"> </slot> + </template> + </el-input> +</template> +<script setup> +import { watch, ref, defineProps, defineEmits } from 'vue'; + +const props = defineProps({ + modelValue: { + type: [Number, String], + }, + // 榛樿杈撳嚭鍊� + default: { + type: Number, + default() { + return null; + }, + }, + // 榛樿灞曠ず鍊� + defaultShow: { + type: String, + default() { + return ''; + }, + }, + placeholder: { + type: String, + default() { + return '璇疯緭鍏ラ噾棰�'; + }, + }, + appned: { + type: [String, Boolean], + }, + suffix: { + type: [String, Boolean], + }, + // 鏄惁鍙竻绌� + clearable: { + type: Boolean, + default() { + return false; + }, + }, + // 鏄惁鍚敤 + disabled: { + type: Boolean, + default() { + return false; + }, + }, + // 鏄惁鍙 + readonly: { + type: Boolean, + default() { + return false; + }, + }, + // 鏄惁鍏佽杈撳叆璐熸暟 + isNegativeAllow: { + type: Boolean, + default() { + return false; + }, + }, + // 鏍¢獙涓嶆弧瓒虫潯浠跺洖婊氫笂娆¤緭鍏ユ纭暟瀛楀洖璋� + onValid: { + type: Function, + default() { + return () => true; + }, + }, + // 闄勫姞鍊� + scope: { + type: Object, + default() { + return null; + }, + }, + // 闄愬埗鏁存暟浣嶆暟 + maxLength: { + type: Number, + default() { + return 9; + }, + }, +}); + +const emit = defineEmits(['update:modelValue', 'change']); + +let moneyShow = ref(''); +let clearabled = ref(false); +let oldVal = ''; // 鏈€鍚庝竴娆¤緭鍏ユ牎楠岄€氳繃鐨勫€� +let maxShowVal = ''; // 鏈€鍚庝竴娆¤緭鍏ユ湭瓒呰繃鎸囧畾闀垮害鐨勫€� + +const init = (val) => { + oldVal = val; + if (val && formart(val) - 0 != props.default - 0) { + moneyShow.value = toThousands(val); + clearabled.value = props.clearable; + } else { + clearabled.value = false; + moneyShow.value = props.defaultShow; + } + maxShowVal = moneyShow.value; +}; + +// eslint-disable-next-line no-unused-vars +const setMoney = () => { + let changeVal = moneyShow.value; + if (changeVal) { + moneyShow.value = toThousands(changeVal); + changeVal = formart(changeVal); + } + if (!changeVal || changeVal == '0.00') { + moneyShow.value = props.defaultShow; + } + emit('update:modelValue', changeVal ? parseFloat(changeVal) : props.default); + maxShowVal = toThousands(moneyShow.value); + if (!props.onValid(changeVal, props.scope)) { + // 鏍¢獙鏈€氳繃鍥炲埌涓婃鏍¢獙閫氳繃鏁板瓧 + init(oldVal); + maxShowVal = toThousands(oldVal); + emit('update:modelValue', parseFloat(oldVal)); + } + emit('change'); +}; + +// 浠绘剰瀛楃涓茶浆鏁板瓧锛堜袱浣嶅皬鏁帮級 +const formart = (num) => moneyToNumValue(toThousands(num)); + +// 浠绘剰瀛楃杞崈鍒嗕綅鍒嗛殧閲戦锛堜袱浣嶅皬鏁帮級 +const toThousands = (num) => { + num += ''; + // eslint-disable-next-line no-useless-escape + let isNegative = props.isNegativeAllow && /^\-/.test(num); + // 娓呴櫎瀛楃涓蹭腑鐨勯潪鏁板瓧闈炩€�.鈥濆瓧绗� + // eslint-disable-next-line no-useless-escape + num = num.replace(/[^0-9|\.]/g, ''); + // 娓呴櫎瀛楃涓插紑澶寸殑0 + num = num.replace(/^0+/, ''); + if (!/\./.test(num)) { + // 涓烘暣鏁板瓧绗︿覆鍦ㄦ湯灏炬坊鍔�.00 + num += '.00'; + } + if (/^\./.test(num)) { + // 瀛楃浠�.寮€澶存椂,鍦ㄥ紑澶存坊鍔�0 + num = '0' + num; + } + num += '00'; + let numMatch = num.match(/\d+\.\d{2}/); + num = numMatch ? numMatch[0] : '0.00'; + num = (num || 0).toString().replace(/^\./g, ''); + // eslint-disable-next-line no-useless-escape + num = num.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3'); + let arr = num.split('.'); + let num1 = (arr[0] || 0).toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,'); + let resultNumStr = arr[1] == undefined ? num1 + '' : num1 + '.' + arr[1]; + if (isNegative && resultNumStr != '0.00') { + resultNumStr = '-' + resultNumStr; + } + return resultNumStr; +}; + +// 鍗冨垎浣嶅垎闅旈噾棰濊浆鏁板瓧锛堜袱浣嶅皬鏁帮級 +const moneyToNumValue = (val) => { + val += ''; + let num = val.trim(); + let numStr = num.toString(); + if (numStr.length == 0) { + return '0.00'; + } + return numStr.replace(/,/g, ''); +}; + +// eslint-disable-next-line no-unused-vars +const onInput = () => { + let value = formart(moneyShow.value); + if (value.toString().length > props.maxLength + 3) { + moneyShow.value = maxShowVal; + } else { + maxShowVal = value; + } +}; + +init(props.modelValue); + +watch( + () => props.modelValue, + (val) => { + init(val); + } +); +const getInputFocus = (e) => { + e.currentTarget.select(); +}; +</script> diff --git a/PublicPCWeb/src/main.js b/PublicPCWeb/src/main.js index 700bc48..2573c22 100644 --- a/PublicPCWeb/src/main.js +++ b/PublicPCWeb/src/main.js @@ -17,8 +17,9 @@ import ElementPlus from 'element-plus'; import 'element-plus/dist/index.css'; import 'dayjs/locale/zh-cn'; // for element zh-cn import locale from 'element-plus/lib/locale/lang/zh-cn'; -import * as ElementPlusIconsVue from '@element-plus/icons-vue' +import * as ElementPlusIconsVue from '@element-plus/icons-vue'; import Pagination from './components/Pagination'; +import MoneyInput from './components/MoneyInput'; /**others */ import components from '@/components'; let app = null; @@ -30,10 +31,11 @@ const render = (props) => { .use(ElementPlus, { size: 'small', zIndex: 3000, locale }) .use(components); app.component('Pagination', Pagination); //鍒嗛〉缁勪欢 + app.component('MoneyInput', MoneyInput); //閲戦杈撳叆妗� // mount instance app.mount('#instance-app'); for (const [key, component] of Object.entries(ElementPlusIconsVue)) { - app.component(key, component) + app.component(key, component); } }; diff --git a/PublicPCWeb/src/router/index.js b/PublicPCWeb/src/router/index.js index ebc1b6f..3a0d133 100644 --- a/PublicPCWeb/src/router/index.js +++ b/PublicPCWeb/src/router/index.js @@ -13,6 +13,11 @@ const routes = [ component: () => import('@/views/Inquiry-childcare'), name: '鎵樺辜璐瑰彂鏀炬煡璇�', }, + { + path: '/reimbursement', + component: () => import('@/views/reimbursement'), + name: '鎵樺辜璐规姤閿€鏌ョ湅', + }, { path: '/batch-generation', component: () => import('@/views/batch-generation'), @@ -23,16 +28,6 @@ const routes = [ component: () => import('@/views/application-form-query'), name: '鐢宠鍗曟煡璇�', }, - { - path: '/instance-manage', - component: () => import('@/views/instance-manage'), - name: '瀹炰緥绠$悊', - }, - { - path: '/company', - component: () => import('@/views/company/index'), - name: '鍗曚綅绠$悊', - }, { path: '/', redirect: '/instance-manage', diff --git a/PublicPCWeb/src/views/Inquiry-childcare/index.vue b/PublicPCWeb/src/views/Inquiry-childcare/index.vue index 7bfd669..37390b6 100644 --- a/PublicPCWeb/src/views/Inquiry-childcare/index.vue +++ b/PublicPCWeb/src/views/Inquiry-childcare/index.vue @@ -16,11 +16,14 @@ :model="data.application" > <el-form-item label="鐢宠浜哄伐鍙锋垨濮撳悕"> - <el-input v-model.trim="data.application.applicant" /> + <el-input + v-model.trim="data.application.applicant" + placeholder="璇疯緭鍏ョ敵璇蜂汉宸ュ彿鎴栧鍚�" + /> </el-form-item> <el-form-item label="鍙戞斁鏈夋晥鏈�"> <el-date-picker - v-model="data.application.effectiveDateMin" + v-model="data.application.grantStartDate" type="date" size="large" placeholder="寮€濮嬫棩鏈�" @@ -30,7 +33,7 @@ /> <el-date-picker - v-model="data.application.effectiveDateMam" + v-model="data.application.grantEndDate" type="date" size="large" placeholder="缁撴潫鏃ユ湡" @@ -40,19 +43,33 @@ </el-form-item> <el-form-item label="鍙戞斁鏈堜唤"> <el-date-picker - v-model="data.application.distributionMonth" - type="date" + v-model="data.application.grantMonth" + type="month" placeholder="閫夋嫨鏈堜唤" - format="YYYY/MM/DD" - value-format="YYYY-MM-DD" + format="YYYY-MM" + value-format="YYYY-MM" /> </el-form-item> <el-form-item label="鍙戞斁鐘舵€�"> - <el-input v-model.trim="data.application.applicationStatus" /> + <el-select + v-model="data.application.grantState" + placeholder="璇烽€夋嫨" + size="large" + > + <el-option + v-for="item in data.options" + :key="item.value" + :label="item.label" + :value="item.value" + /> + </el-select> </el-form-item> <el-form-item label="1"> - <el-button size="large">閲嶇疆</el-button> - <el-button class="fast-reimbursement-button" size="large" + <el-button size="large" @click="resetting">閲嶇疆</el-button> + <el-button + class="fast-reimbursement-button" + size="large" + @click="pageChange({ page: 1, limit: 10 })" >鏌ヨ</el-button > </el-form-item> @@ -61,7 +78,7 @@ </el-card> <el-card> <el-table - :data="tableData" + :data="data.tableData" border :header-cell-style="{ backgroundColor: '#eaf1fd', @@ -76,64 +93,183 @@ max-height="400px" style="border: 1px solid #ebeef5" > - <el-table-column prop="reportCode" label="鐢宠鍗曞彿"></el-table-column> - <el-table-column prop="reportStateName" label="鐢宠浜�"> + <el-table-column prop="employeeName" label="鐢宠浜�"> </el-table-column> + <el-table-column prop="employeeTypeName" label="鏁欏伐绫诲瀷" /> + <el-table-column prop="childName" label="瀛愬コ濮撳悕"> </el-table-column> + <el-table-column prop="childBirthday" label="鍑虹敓鏃ユ湡"> + <template #default="scope"> + {{ moment(scope.row.childBirthday).format('YYYY-MM-DD') }} + </template> + </el-table-column> + <el-table-column prop="grantCode" label="鍙戞斁鎵规鍙�"> </el-table-column> + <el-table-column prop="beginYearMonth" label="鍙戞斁寮€濮嬪勾鏈�"> </el-table-column> - <el-table-column prop="expenseItemNamesStr" label="鏁欏伐绫诲瀷" /> - <el-table-column prop="expenseItemNamesStr" label="鏁欏伐鐘舵€�" /> - <el-table-column prop="name" label="瀛愬コ濮撳悕"> </el-table-column> <el-table-column - prop="budgetProjectNames" - label="鍑虹敓鏃ユ湡" + prop="endYearMonth" + label="鍙戞斁鎴骞存湀" ></el-table-column> - <el-table-column prop="expenseLatoryName" label="鍙戞斁鎵规鍙�"> - </el-table-column> - <el-table-column prop="name" label="鍙戞斁鏈夋晥鏈�"> </el-table-column> <el-table-column - prop="expenseReportUsage" + prop="grantYearMonth" label="鍙戞斁鏈堜唤" ></el-table-column> <el-table-column - prop="expenseReportUsage" + prop="grantAmount" label="鍙戞斁閲戦" - ></el-table-column> + header-align="left" + align="right" + > + <template #default="scope"> + {{ moneyFormat(scope.row.payAmount, 2, ',') }} + </template> + </el-table-column> <el-table-column - prop="expenseReportUsage" + prop="salaryDeclareBillNo" label="鍙戞斁鐢虫姤鍗曞彿" ></el-table-column> - <el-table-column - prop="expenseReportUsage" - label="鍙戞斁鍗曠敵鎶ョ姸鎬�" - ></el-table-column> + <el-table-column prop="salaryDeclareState" label="鍙戞斁鍗曠敵鎶ョ姸鎬�"> + <template #default="scope"> + <div + class="blueColor divFlex" + v-if="scope.row.salaryDeclareState == 0" + > + <div class="yuan"></div> + 鏂板缓 + </div> + <div + class="yellowColor divFlex" + v-else-if="scope.row.salaryDeclareState == 1" + > + <div class="yuan"></div> + 寰呴儴闂ㄥ鏍� + </div> + <div + class="yellowColor divFlex" + v-else-if="scope.row.salaryDeclareState == 2" + > + <div class="yuan"></div> + 寰呰储鍔″鏍� + </div> + <div + class="greenColor divFlex" + v-else-if="scope.row.salaryDeclareState == 3" + > + <div class="yuan"></div> + 宸插鏍� + </div> + <div + class="greenColor divFlex" + v-else-if="scope.row.salaryDeclareState == 4" + > + <div class="yuan"></div> + 宸插彂鏀� + </div> + <div + class="RedColor divFlex" + v-else-if="scope.row.salaryDeclareState == 5" + > + <div class="yuan"></div> + 閮ㄩ棬瀹℃牳椹冲洖 + </div> + <div + class="RedColor divFlex" + v-else-if="scope.row.salaryDeclareState == 6" + > + <div class="yuan"></div> + 璐㈠姟澶勫鏍搁┏鍥� + </div> + <div + class="RedColor divFlex" + v-else-if="scope.row.salaryDeclareState == 7" + > + <div class="yuan"></div> + 浣滃簾 + </div> + </template> + </el-table-column> </el-table> </el-card> <el-card> <Pagination :total="data.total" @pagination="pageChange" - :page="data.pageIndex" - :limit="data.pageSize" + :page="data.application.pageIndex" + :limit="data.application.pageSize" ></Pagination> </el-card> </div> </template> <script setup> -import { reactive } from 'vue'; +import { reactive, onMounted } from 'vue'; +import InquiryChildcare from '@/api/InquiryChildcare'; +import { moneyFormat } from '@/utils'; +import moment from 'moment'; const data = reactive({ application: { applicant: '', - effectiveDateMin: '', - effectiveDateMam: '', - applicationStatus: '', - distributionMonth: '', + grantEndDate: '', + grantMonth: '', + grantStartDate: '', + grantState: 0, + pageIndex: 1, + pageSize: 10, }, + options: [ + { value: 0, label: '鏈彂鏀�' }, + { value: 1, label: '宸插彂鏀�' }, + ], total: 0, - pageIndex: 1, - pageSize: 10, + tableData: [], }); +//閲嶇疆 +const resetting = () => { + data.application = { + applicant: '', + grantEndDate: '', + grantMonth: '', + grantStartDate: '', + grantState: '', + }; +}; +//鍒嗛〉 +const pageChange = ({ page, limit }) => { + data.application.pageIndex = page; + data.application.pageSize = limit; + statisticsPageList(); +}; +//鏌ヨ +const statisticsPageList = () => { + InquiryChildcare.statisticsPageList(data.application).then((res) => { + data.tableData = res.data; + data.total = res.total; + }); +}; + +onMounted(() => {}); </script> <style lang="scss" scoped> +.yuan { + width: 6px; + height: 6px; + border-radius: 3px; + margin-right: 5px; +} +.divFlex { + display: flex; + align-items: center; +} +.RedColor { + color: #ff0000; +} +.yellowColor { + color: #ffab4e; +} +.greenColor { + color: #19b21e; +} +.blueColor { + color: #4e85dd; +} .theSecondStep-form .el-form-item:last-child { :deep(.el-form-item__label) { color: #fff; diff --git a/PublicPCWeb/src/views/application-form-query/index.vue b/PublicPCWeb/src/views/application-form-query/index.vue index 9e6a759..fea438e 100644 --- a/PublicPCWeb/src/views/application-form-query/index.vue +++ b/PublicPCWeb/src/views/application-form-query/index.vue @@ -16,34 +16,48 @@ :model="data.application" > <el-form-item label="鐢宠浜哄伐鍙锋垨濮撳悕"> - <el-input v-model.trim="data.application.applicant" /> + <el-input v-model.trim="data.application.applyPerson" /> </el-form-item> <el-form-item label="鍙戞斁鏈夋晥鏈�"> <el-date-picker - v-model="data.application.effectiveDateMin" - type="date" + v-model="data.application.beginYearMonthStart" + type="month" size="large" placeholder="寮€濮嬫棩鏈�" style="margin-right: 10px" - format="YYYY-MM-DD" - value-format="YYYY-MM-DD" + format="YYYY-MM" + value-format="YYYY-MM" /> <el-date-picker - v-model="data.application.effectiveDateMam" - type="date" + v-model="data.application.endYearMonthEnd" + type="month" size="large" placeholder="缁撴潫鏃ユ湡" - format="YYYY-MM-DD" - value-format="YYYY-MM-DD" + format="YYYY-MM" + value-format="YYYY-MM" /> </el-form-item> <el-form-item label="鐢宠鍗曠姸鎬�"> - <el-input v-model.trim="data.application.applicationStatus" /> + <el-select + v-model="data.application.state" + placeholder="璇烽€夋嫨" + size="large" + > + <el-option + v-for="item in data.options" + :key="item.value" + :label="item.label" + :value="item.value" + /> + </el-select> </el-form-item> <el-form-item label="1"> - <el-button size="large">閲嶇疆</el-button> - <el-button class="fast-reimbursement-button" size="large" + <el-button size="large" @click="resetting">閲嶇疆</el-button> + <el-button + class="fast-reimbursement-button" + size="large" + @click="pageChange({ page: 1, limit: 10 })" >鏌ヨ</el-button > </el-form-item> @@ -60,8 +74,7 @@ > </div> <el-table - :data="tableData" - border + :data="data.tableData" :header-cell-style="{ backgroundColor: '#eaf1fd', color: '#545354', @@ -72,69 +85,108 @@ :row-style="{ height: 60 + 'px', }" + ref="tableDataRef" + highlight-current-row + @cell-click="cellClick" max-height="400px" style="border: 1px solid #ebeef5" > - <el-table-column prop="reportCode" label="鐢宠浜�"></el-table-column> - <el-table-column prop="reportStateName" label="鏁欏伐绫诲瀷"> + <el-table-column prop="employeeName" label="鐢宠浜�"></el-table-column> + <el-table-column prop="employeeTypeName" label="鏁欏伐绫诲瀷"> </el-table-column> - <el-table-column prop="expenseItemNamesStr" label="鏁欏伐鐘舵€�" /> - - <el-table-column prop="name" label="瀛愬コ濮撳悕"> </el-table-column> - <el-table-column prop="expenseAmount" label="鍏崇郴"> </el-table-column> - <el-table-column - prop="budgetProjectNames" - label="鍑虹敓鏃ユ湡" - ></el-table-column> - <el-table-column prop="expenseLatoryName" label="鍙戞斁寮€濮嬪勾鏈�"> + <el-table-column prop="childName" label="瀛愬コ濮撳悕"> </el-table-column> + <el-table-column prop="relationship" label="鍏崇郴"> + <template #default="scope"> + <div v-if="scope.row.relationship == 0">鐖跺瓙</div> + <div v-else-if="scope.row.relationship == 1">鐖跺コ</div> + <div v-else-if="scope.row.relationship == 2">姣嶅瓙</div> + <div v-else-if="scope.row.relationship == 3">姣嶅コ</div> + </template> </el-table-column> - <el-table-column prop="name" label="鍙戞斁鎴骞存湀"> </el-table-column> - <el-table-column - prop="expenseReportUsage" - label="鍙戠エ鏁伴噺" - ></el-table-column> + <el-table-column prop="childBirthday" label="鍑虹敓鏃ユ湡"> + <template #default="scope"> + {{ moment(scope.row.childBirthday).format('YYYY-MM-DD') }} + </template> + </el-table-column> + <el-table-column prop="beginYearMonth" label="鍙戞斁寮€濮嬪勾鏈�"> + </el-table-column> + <el-table-column prop="endYearMonth" label="鍙戞斁鎴骞存湀"> + </el-table-column> + <el-table-column prop="invoiceCount" label="鍙戠エ鏁伴噺"></el-table-column> <el-table-column - prop="expenseReportUsage" + prop="payAmount" label="鏈堟姤閿€閲戦" - ></el-table-column> + header-align="left" + align="right" + > + <template #default="scope"> + {{ moneyFormat(scope.row.payAmount, 2, ',') }} + </template> + </el-table-column> <el-table-column - prop="expenseReportUsage" + prop="claimsAmount" label="鍙戠エ鎶ラ攢閲戦" - ></el-table-column> - <el-table-column - prop="expenseReportUsage" - label="鐢宠鍗曠姸鎬�" - ></el-table-column> + header-align="left" + align="right" + > + <template #default="scope"> + {{ moneyFormat(scope.row.claimsAmount, 2, ',') }} + </template> + </el-table-column> + <el-table-column prop="expenseReportUsage" label="鐢宠鍗曠姸鎬�"> + <template #default="scope"> + <div class="blueColor divFlex" v-if="scope.row.state == 0"> + <div class="yuan"></div> + 鏈彁浜� + </div> + <div class="greenColor divFlex" v-else-if="scope.row.state == 1"> + <div class="yuan"></div> + 鎻愪氦 + </div> + <div class="yellowColor divFlex" v-else-if="scope.row.state == 2"> + <div class="yuan"></div> + 瀹℃牳 + </div> + <div class="RedColor divFlex" v-else-if="scope.row.state == -1"> + <div class="yuan"></div> + 椹冲洖 + </div> + </template> + </el-table-column> </el-table> </el-card> <el-card> <Pagination :total="data.total" @pagination="pageChange" - :page="data.pageIndex" - :limit="data.pageSize" + :page="data.application.pageIndex" + :limit="data.application.pageSize" ></Pagination> </el-card> <!-- 鍙戞斁鏄庣粏鏌ョ湅 --> <el-dialog v-model="data.loanShow" title="鍙戞斁璁″垝鏄庣粏鏌ョ湅" - width="60%" custom-class="fast-reimbursement-dialog" + @close="cancelClick" > <div class="application-div"> <div class="application-left"> <div> <span>鐢宠浜猴細</span> - <span>01001-寮犱笁</span> + <span>{{ data.rowObj.employeeName }}</span> </div> <div> <span>瀛愬コ濮撳悕锛�</span> - <span>寮犳€濇€�</span> + <span>{{ data.rowObj.childName }}</span> </div> <div> <span>鍙戞斁鏈夋晥鏃ユ湡锛�</span> - <span>2023-07-08鑷�2025-07-08</span> + <span + >{{ data.rowObj.beginYearMonth }}鑷硔{ + data.rowObj.endYearMonth + }}</span + > </div> </div> <el-button class="fast-reimbursement-button" @click="manuallyAdding" @@ -142,8 +194,7 @@ > </div> <el-table - :data="tableData" - border + :data="data.detailTable" :header-cell-style="{ backgroundColor: '#eaf1fd', color: '#545354', @@ -157,21 +208,50 @@ max-height="400px" style="border: 1px solid #ebeef5" > - <el-table-column prop="reportCode" label="搴斿彂骞存湀"></el-table-column> - <el-table-column prop="reportStateName" label="搴斿彂閲戦"> - </el-table-column> - <el-table-column prop="expenseItemNamesStr" label="鍙戞斁鏃堕棿" /> - <el-table-column prop="name" label="绫诲瀷"> </el-table-column> - <el-table-column prop="expenseAmount" label="鐘舵€�"> </el-table-column> <el-table-column - prop="budgetProjectNames" - label="鎿嶄綔" + prop="applyYearMonth" + label="搴斿彂骞存湀" ></el-table-column> + <el-table-column + prop="payAmount" + label="搴斿彂閲戦" + header-align="left" + align="right" + > + </el-table-column> + <el-table-column prop="grantYearMonth" label="鍙戞斁鏃堕棿" /> + <el-table-column prop="type" label="绫诲瀷"> + <template #default="scope"> + <div v-if="scope.row.type == 0">鍙戠エ</div> + <div v-else-if="scope.row.type == 1">鑷姩</div> + <div v-else-if="scope.row.type == 2">鎵嬪伐</div> + </template> + </el-table-column> + <el-table-column prop="state" label="鐘舵€�"> + <template #default="scope"> + <div v-if="scope.row.state == 0">鏈彂鏀�</div> + <div v-else-if="scope.row.state == 1">宸插彂鏀�</div> + <div v-else-if="scope.row.state == 2">浣滃簾</div> + </template> + </el-table-column> + <el-table-column label="鎿嶄綔"> + <template #default="scope"> + <el-button v-if="scope.row.state == 2" @click="enable(scope.row)" + >鍚敤</el-button + > + <el-button + v-if="scope.row.state == 0" + type="danger" + @click="cancel(scope.row)" + >浣滃簾</el-button + > + </template> + </el-table-column> </el-table> <template #footer> <Pagination - :total="data.total" - @pagination="pageChange" + :total="data.detailTotal" + @pagination="pageChanges" :page="data.pageIndex" :limit="data.pageSize" ></Pagination> @@ -181,18 +261,50 @@ <el-dialog v-model="data.addDistribution" title="娣诲姞鍙戞斁鏄庣粏" - width="40%" + width="600px" custom-class="fast-reimbursement-dialog application-dialog" > <el-form :model="data.distributionForm" size="large"> - <el-form-item label="鍙戞斁骞存湀"> - <el-input v-model="data.distributionForm.distributionYear" /> + <el-form-item + label="鍙戞斁骞存湀" + prop="applyYearMonth" + :rules="[ + { + required: true, + message: '璇烽€夋嫨鍙戞斁骞存湀', + trigger: 'blur', + }, + ]" + > + <el-date-picker + v-model="data.distributionForm.applyYearMonth" + type="month" + size="large" + placeholder="璇峰~鍐欏彂鏀惧勾鏈�" + style="width: 100%" + format="YYYY-MM" + value-format="YYYY-MM" + /> </el-form-item> - <el-form-item label="鍙戠エ閲戦"> - <el-input v-model="data.distributionForm.invoiceValue" /> + <el-form-item + label="鍙戠エ閲戦" + prop="invoiceAmount" + :rules="[ + { + required: true, + message: '璇峰~鍐欏彂鏀鹃噾棰�', + trigger: 'blur', + }, + ]" + > + <MoneyInput + v-model="data.distributionForm.invoiceAmount" + size="large" + @change="countGrantMoney(data.distributionForm.invoiceAmount)" + ></MoneyInput> </el-form-item> <el-form-item label="鍙戞斁閲戦"> - <el-input v-model="data.distributionForm.distributionAmount" /> + <el-input v-model="data.distributionForm.payAmount" disabled /> </el-form-item> <el-form-item label="鍙戠エ涓婁紶"> <el-button :icon="Paperclip" class="fast-reimbursement-button" @@ -211,36 +323,175 @@ </template> <script setup> import { Paperclip } from '@element-plus/icons-vue'; -import { reactive } from 'vue'; +import { reactive, ref } from 'vue'; +import InquiryChildcare from '@/api/InquiryChildcare'; +import { moneyFormat, absNum } from '@/utils'; +import moment from 'moment'; +import { ElMessage, ElMessageBox } from 'element-plus'; + const data = reactive({ + standards: '', application: { - applicant: '', - effectiveDateMin: '', - effectiveDateMam: '', - applicationStatus: '', + applyPerson: '', + beginYearMonthStart: '', + endYearMonthEnd: '', + state: '', + pageIndex: 1, + pageSize: 10, }, total: 0, + detailTotal: 0, pageIndex: 1, pageSize: 10, loanShow: false, addDistribution: false, distributionForm: { - distributionYear: '', - invoiceValue: '', - distributionAmount: '', + applyYearMonth: '', + invoiceAmount: '', + payAmount: '', }, + options: [ + { value: 0, label: '鏈彁浜�' }, + { value: 1, label: '鎻愪氦' }, + { value: 2, label: '瀹℃牳' }, + { value: -1, label: '椹冲洖' }, + ], + rowObj: {}, + tableData: [], }); +const tableDataRef = ref([]); //鐐瑰嚮鏌ョ湅鍙戞斁璁″垝 const viewDistributionPlan = () => { + if (!data.rowObj.id) { + return ElMessage({ + message: '璇烽€夋嫨鐢虫姤鍗�', + type: 'warning', + }); + } data.loanShow = true; + pageListsa(); +}; +//鏌ョ湅鍙戞斁鏄庣粏 +const pageListsa = () => { + InquiryChildcare.pageListsa({ + applyId: data.rowObj.id, + applyYearMonthEnd: '', + applyYearMonthStart: '', + pageIndex: data.pageIndex, + pageSize: data.pageSize, + }).then((res) => { + data.detailTable = res.data; + data.detailTotal = res.total; + }); }; //鎵嬪姩娣诲姞鍙戞斁鏄庣粏 const manuallyAdding = () => { data.addDistribution = true; + grantStandard(); +}; +//鏌ヨ +const pageLists = () => { + InquiryChildcare.pageLists(data.application).then((res) => { + data.tableData = res.data; + data.total = res.total; + data.rowObj = {}; + }); +}; +//閲嶇疆 +const resetting = () => { + data.application = { + applyPerson: '', + beginYearMonthStart: '', + endYearMonthEnd: '', + state: '', + }; +}; +//涓婚〉鍒嗛〉 +const pageChange = ({ page, limit }) => { + data.application.pageIndex = page; + data.application.pageSize = limit; + pageLists(); +}; +//鐐瑰嚮鍗曞厓鏍� +const cellClick = (row) => { + data.rowObj = row; +}; +//鏄庣粏鍒嗛〉 +const pageChanges = ({ page, limit }) => { + data.application.pageIndex = page; + data.application.pageSize = limit; + pageListsa(); +}; +//浣滃簾 +const cancel = (row) => { + ElMessageBox.confirm('纭浣滃簾鍚�?', '鎻愮ず', { + confirmButtonText: '纭', + cancelButtonText: '鍙栨秷', + type: 'warning', + }).then(() => { + InquiryChildcare.cancel(row.id).then(() => { + ElMessage({ + type: 'success', + message: '浣滃簾鎴愬姛', + }); + pageListsa(); + }); + }); +}; +//鍚敤 +const enable = (row) => { + InquiryChildcare.enable(row.id).then(() => { + ElMessage({ + type: 'success', + message: '鍚敤鎴愬姛', + }); + pageListsa(); + }); +}; +//鍏抽棴鏄庣粏寮瑰嚭妗� +const cancelClick = () => { + data.rowObj = {}; + tableDataRef.value.setCurrentRow(); +}; +//鍙戞斁鏍囧噯 +const grantStandard = () => { + InquiryChildcare.grantStandard().then((res) => { + data.standards = res.data[0]; + }); +}; +//鍙戞斁閲戦璁$畻 +const countGrantMoney = (val) => { + let num = absNum(val, 2, '/'); + data.distributionForm.payAmount = + num > data.standards + ? moneyFormat(data.standards, 2, ',') + : moneyFormat(num, 2, ','); }; </script> <style lang="scss" scoped> +.yuan { + width: 6px; + height: 6px; + border-radius: 3px; + margin-right: 5px; +} +.divFlex { + display: flex; + align-items: center; +} +.RedColor { + color: #ff0000; +} +.yellowColor { + color: #ffab4e; +} +.greenColor { + color: #19b21e; +} +.blueColor { + color: #4e85dd; +} .theSecondStep-form .el-form-item:last-child { :deep(.el-form-item__label) { color: #fff; diff --git a/PublicPCWeb/src/views/batch-generation/index.vue b/PublicPCWeb/src/views/batch-generation/index.vue index 65ea3ef..57f9726 100644 --- a/PublicPCWeb/src/views/batch-generation/index.vue +++ b/PublicPCWeb/src/views/batch-generation/index.vue @@ -13,26 +13,31 @@ > <el-form-item label="鍙戞斁骞存湀"> <el-date-picker - v-model="data.batch.effectiveDateMin" - type="date" + v-model="data.batch.startYearMonth" + type="month" size="large" placeholder="寮€濮嬫棩鏈�" style="margin-right: 10px" - format="YYYY-MM-DD" - value-format="YYYY-MM-DD" + format="YYYY-MM" + :editable="false" + value-format="YYYY-MM" /> <el-date-picker - v-model="data.batch.effectiveDateMam" - type="date" + v-model="data.batch.endYearMonth" + type="month" size="large" + :editable="false" placeholder="缁撴潫鏃ユ湡" - format="YYYY-MM-DD" - value-format="YYYY-MM-DD" + format="YYYY-MM" + value-format="YYYY-MM" /> </el-form-item> <el-form-item label="1"> - <el-button class="fast-reimbursement-button" size="large" + <el-button + class="fast-reimbursement-button" + size="large" + @click="pageList" >鎼滅储</el-button > </el-form-item> @@ -45,11 +50,18 @@ @click="generateDistribution" >鐢熸垚鍙戞斁鎵规</el-button > - <el-button type="danger" size="large">鎾ら攢鍙戞斁鎵规</el-button> + <el-button + type="danger" + size="large" + v-if=" + !data.rowObj.salaryDeclareBillNo && !data.rowObj.salaryDeclareState + " + @click="revokeDistribution" + >鎾ら攢鍙戞斁鎵规</el-button + > </div> <el-table - :data="tableData" - border + :data="data.tableData" :header-cell-style="{ backgroundColor: '#eaf1fd', color: '#545354', @@ -57,23 +69,72 @@ fontSize: 14 + 'px', height: 47 + 'px', }" + ref="detailRef" :row-style="{ height: 60 + 'px', }" max-height="400px" + highlight-current-row + @cell-click="cellClick" style="border: 1px solid #ebeef5" > - <el-table-column prop="reportCode" label="鍙戞斁鎵规鍙�"></el-table-column> - <el-table-column prop="reportStateName" label="鍙戞斁閲戦"> - </el-table-column> - <el-table-column prop="expenseItemNamesStr" label="鍙戞斁浜烘暟" /> - <el-table-column prop="name" label="鐢虫姤鍗曞彿"> </el-table-column> - <el-table-column prop="expenseAmount" label="鍗曟嵁鐘舵€�"> + <el-table-column prop="grantCode" label="鍙戞斁鎵规鍙�"> + <template #default="scope"> + <div style="color: #2972e9">{{ scope.row.grantCode }}</div> + </template> </el-table-column> <el-table-column - prop="budgetProjectNames" - label="钖祫鐢虫姤鎿嶄綔" - ></el-table-column> + prop="grantAmount" + label="鍙戞斁閲戦" + header-align="left" + align="right" + > + <template #default="scope"> + {{ moneyFormat(scope.row.grantAmount, 2, ',') }} + </template> + </el-table-column> + <el-table-column prop="grantCount" label="鍙戞斁浜烘暟" /> + <el-table-column prop="salaryDeclareBillNo" label="鐢虫姤鍗曞彿"> + </el-table-column> + <el-table-column prop="salaryDeclareState" label="鍗曟嵁鐘舵€�"> + <template #default="scope"> + <div v-if="scope.row.salaryDeclareState == 0">鏂板缓</div> + <div v-else-if="scope.row.salaryDeclareState == 1">寰呴儴闂ㄥ鏍�</div> + <div v-else-if="scope.row.salaryDeclareState == 2">寰呰储鍔″鏍�</div> + <div v-else-if="scope.row.salaryDeclareState == 3">宸插鏍�</div> + <div v-else-if="scope.row.salaryDeclareState == 4">宸插彂鏀�</div> + <div v-else-if="scope.row.salaryDeclareState == 5"> + 閮ㄩ棬瀹℃牳椹冲洖 + </div> + <div v-else-if="scope.row.salaryDeclareState == 6"> + 璐㈠姟澶勫鏍搁┏鍥� + </div> + <div v-else-if="scope.row.salaryDeclareState == 7">浣滃簾</div> + </template> + </el-table-column> + <el-table-column label="钖祫鐢虫姤鎿嶄綔"> + <template #default="scope"> + <el-button + @click="createSalaryDeclare(scope.row)" + v-if=" + !scope.row.salaryDeclareBillNo && !scope.row.salaryDeclareState + " + >鐢熸垚鍙戞斁鍗�</el-button + > + <el-button + type="danger" + v-if=" + scope.row.salaryDeclareState != 1 && + scope.row.salaryDeclareState != 2 && + scope.row.salaryDeclareState != 3 && + scope.row.salaryDeclareState != 4 && + scope.row.salaryDeclareState + " + @click="revokeClick(scope.row)" + >鎾ら攢</el-button + > + </template> + </el-table-column> </el-table> </el-card> <!-- 鐢熸垚鍙戞斁鎵规 --> @@ -85,28 +146,38 @@ > <el-form :model="data.generateForm" size="large" inline> <el-form-item label="鍙戞斁骞存湀"> - <el-input - v-model="data.generateForm.distributionYear" + <el-date-picker + v-model="data.generateForm.grantYearMonth" + type="month" + size="large" placeholder="鍙戞斁骞存湀" + :editable="false" + style="margin-right: 10px" + format="YYYY-MM" + value-format="YYYY-MM" /> </el-form-item> <el-form-item> - <el-button size="large">鎼滅储</el-button> - <el-button class="fast-reimbursement-button" size="large" + <el-button size="large" @click="pageChange({ page: 1, limit: 10 })" + >鎼滅储</el-button + > + <el-button + class="fast-reimbursement-button" + size="large" + @click="createGrant" >鐢熸垚</el-button > </el-form-item> <el-form-item> <el-checkbox - v-model="data.generateForm.type" + v-model="data.generateForm.isSameTimeSalary" label="鏄惁鍚屾椂鐢熸垚钖祫鐢虫姤鍗�" size="large" /> </el-form-item> </el-form> <el-table - :data="tableData" - border + :data="data.distributionTable" :header-cell-style="{ backgroundColor: '#eaf1fd', color: '#545354', @@ -120,11 +191,19 @@ max-height="400px" style="border: 1px solid #ebeef5" > - <el-table-column prop="reportCode" label="鐢宠浜�"></el-table-column> - <el-table-column prop="reportStateName" label="瀛愬コ濮撳悕"> + <el-table-column prop="employeeName" label="鐢宠浜�"></el-table-column> + <el-table-column prop="childName" label="瀛愬コ濮撳悕"> </el-table-column> + <el-table-column prop="applyYearMonth" label="搴斿彂骞存湀" /> + <el-table-column + prop="payAmount" + label="鍙戞斁閲戦" + header-align="left" + align="right" + > + <template #default="scope"> + {{ moneyFormat(scope.row.payAmount, 2, ',') }} + </template> </el-table-column> - <el-table-column prop="expenseItemNamesStr" label="搴斿彂骞存湀" /> - <el-table-column prop="name" label="鍙戞斁閲戦"> </el-table-column> </el-table> <template #footer> <Pagination @@ -141,24 +220,24 @@ title="鍙戞斁鎵规鐢熸垚" width="576px" custom-class="fast-reimbursement-dialog" + @close="cancellationClick" > <div class="batch-div"> <div> <span>鍙戞斁鎵规鍙凤細</span> - <span>TY20231231233</span> + <span>{{ data.rowObj.grantCode }}</span> </div> <div> <span>鍙戞斁鎬婚噾棰濓細</span> - <span>10000.00</span> + <span>{{ moneyFormat(data.rowObj.grantAmount, 2, ',') }}</span> </div> <div> <span>鍙戞斁鎬讳汉鏁帮細</span> - <span>55</span> + <span>{{ data.rowObj.grantCount }}</span> </div> </div> <el-table - :data="tableData" - border + :data="data.detailTable" :header-cell-style="{ backgroundColor: '#eaf1fd', color: '#545354', @@ -172,51 +251,193 @@ max-height="400px" style="border: 1px solid #ebeef5" > - <el-table-column prop="reportCode" label="鐢宠浜�"></el-table-column> - <el-table-column prop="reportStateName" label="瀛愬コ濮撳悕"> + <el-table-column prop="employeeName" label="鐢宠浜�"></el-table-column> + <el-table-column prop="childName" label="瀛愬コ濮撳悕"> </el-table-column> + <el-table-column prop="applyYearMonth" label="搴斿彂骞存湀" /> + <el-table-column + prop="payAmount" + label="鍙戞斁閲戦" + header-align="left" + align="right" + > + <template #default="scope"> + {{ moneyFormat(scope.row.payAmount, 2, ',') }} + </template> </el-table-column> - <el-table-column prop="expenseItemNamesStr" label="搴斿彂骞存湀" /> - <el-table-column prop="name" label="鍙戞斁閲戦"> </el-table-column> </el-table> <template #footer> <Pagination - :total="data.generatePaging.total" - @pagination="pageChange" - :page="data.generatePaging.pageIndex" - :limit="data.generatePaging.pageSize" + :total="data.detailPage.total" + @pagination="pageChangeDetail" + :page="data.detailPage.pageIndex" + :limit="data.detailPage.pageSize" ></Pagination> </template> </el-dialog> </div> </template> <script setup> -import { reactive } from 'vue'; - +import { reactive, ref } from 'vue'; +import InquiryChildcare from '@/api/InquiryChildcare'; +import { moneyFormat } from '@/utils'; +import moment from 'moment'; +import { ElMessage, ElMessageBox } from 'element-plus'; const data = reactive({ + detailTable: [], + detailPage: { + pageIndex: 1, + pageSize: 10, + total: 0, + }, + tableData: [], + distributionTable: [], batch: { - effectiveDateMin: '', - effectiveDateMam: '', + startYearMonth: '', + endYearMonth: '', + pageIndex: 1, + pageSize: 10, }, - generateDialog: false, generatePaging: { - total: 0, pageIndex: 1, pageSize: 10, + total: 0, }, + generateDialog: false, + total: 0, generateForm: { - type: true, - distributionYear: '', + isSameTimeSalary: true, + grantYearMonth: moment(new Date()).format('YYYY-MM'), }, + rowObj: {}, detailsDialog: false, }); -//鐢熸垚鍙戞斁鎵规 +const detailRef = ref([]); +//鐢熸垚 +const createGrant = () => { + InquiryChildcare.createGrant(data.generateForm).then(() => { + data.generateDialog = false; + ElMessage({ + message: '鐢熸垚鎴愬姛', + type: 'success', + }); + pageList(); + }); +}; +//鎼滅储 +const pageList = () => { + InquiryChildcare.pageList(data.batch).then((res) => { + data.tableData = res.data; + data.rowObj = {}; + }); +}; +//鐐瑰嚮鐢熸垚鍙戞斁鎵规 const generateDistribution = () => { data.generateDialog = true; + pageCanGrantList(); +}; +//鐢熸垚鍙戞斁鎵规 +const pageCanGrantList = () => { + InquiryChildcare.pageCanGrantList({ + grantYearMonth: data.generateForm.grantYearMonth, + pageIndex: data.generatePaging.pageIndex, + pageSize: data.generatePaging.pageSize, + }).then((res) => { + data.distributionTable = res.data; + data.generatePaging.total = res.total; + }); +}; +//鐢熸垚鍙戞斁鎵规鍒嗛〉 +const pageChange = ({ page, limit }) => { + data.generatePaging.pageIndex = page; + data.generatePaging.pageSize = limit; + pageCanGrantList(); }; //鏄庣粏鏌ョ湅 const detailsView = () => { + if (!data.rowObj.id) { + return ElMessage({ + message: '璇烽€夋嫨鍙戞斁鎵规', + type: 'warning', + }); + } + pageGrantDetailList(); data.detailsDialog = true; }; +//鏄庣粏鍏抽棴 +const cancellationClick = () => { + data.rowObj = {}; + detailRef.value.setCurrentRow(); +}; +//鏄庣粏 +const pageGrantDetailList = () => { + InquiryChildcare.pageGrantDetailList({ + grantId: data.rowObj.id, + pageIndex: data.detailPage.pageIndex, + pageSize: data.detailPage.pageSize, + }).then((res) => { + data.detailTable = res.data; + data.detailPage.total = res.total; + }); +}; +//鐢熸垚鍙戞斁鍗� +const createSalaryDeclare = (row) => { + InquiryChildcare.createSalaryDeclare(row.id).then(() => { + ElMessage({ + message: '鐢熸垚鍙戞斁鍗曟垚鍔�', + type: 'success', + }); + pageList(); + }); +}; +//鐐瑰嚮鍗曞厓鏍� +const cellClick = (row) => { + data.rowObj = row; +}; +//鏄庣粏鏌ョ湅鍒嗛〉 +const pageChangeDetail = ({ page, limit }) => { + data.detailPage.pageIndex = page; + data.detailPage.pageSize = limit; + pageGrantDetailList(); +}; +//鎾ら攢 +const revokeClick = (row) => { + ElMessageBox.confirm('纭鎾ら攢鍚�?', '鎻愮ず', { + confirmButtonText: '纭', + cancelButtonText: '鍙栨秷', + type: 'warning', + }).then(() => { + InquiryChildcare.cancelSalaryDeclare(row.id).then(() => { + ElMessage({ + type: 'success', + message: '鎾ら攢鎴愬姛', + }); + pageList(); + }); + }); +}; +//鎾ら攢鍙戞斁鎵规 +const revokeDistribution = () => { + if (!data.rowObj.id) { + return ElMessage({ + message: '璇烽€夋嫨鍙戞斁鎵规', + type: 'warning', + }); + } + ElMessageBox.confirm('纭鎾ら攢鍚�?', '鎻愮ず', { + confirmButtonText: '纭', + cancelButtonText: '鍙栨秷', + type: 'warning', + }).then(() => { + InquiryChildcare.cancelGrant(data.rowObj.id).then(() => { + ElMessage({ + type: 'success', + message: '鎾ら攢鎴愬姛', + }); + + pageList(); + }); + }); +}; </script> <style lang="scss" scoped> .pagination-container { diff --git a/PublicPCWeb/src/views/company/index.vue b/PublicPCWeb/src/views/company/index.vue deleted file mode 100644 index 95cdb7f..0000000 --- a/PublicPCWeb/src/views/company/index.vue +++ /dev/null @@ -1,239 +0,0 @@ -<template> - <div class="app-container"> - <el-card> - <el-form> - <el-row :gutter="20"> - <el-col :sm="11" :md="8" :lg="6" :xl="6"> - <el-form-item :model="formData" label="鍗曚綅鍚嶇О"> - <el-input v-model="formData.companyName"></el-input> - </el-form-item> - </el-col> - - <el-col :sm="11" :md="7" :lg="6" :xl="6" style="text-align: left"> - <el-button - type="primary" - icon="Plus" - plain - @click="buildexample" - >鏂板</el-button - > - <el-button icon="Search" plain @click="getexamplelist" - >鏌ヨ</el-button - > - </el-col> - </el-row> - </el-form> - </el-card> - <el-card class="mt-20"> - <el-table - :data="tableData" - border - stripe - style="width: 100%" - :header-cell-style="{ 'text-align': 'center' }" - > - <el-table-column - type="selection" - align="center" - width="35" - ></el-table-column> - <el-table-column prop="id" label="鍗曚綅ID" align="center" /> - <el-table-column prop="companyName" label="鍗曚綅鍚嶇О" align="center" /> - <el-table-column label="鎿嶄綔" align="center"> - <template v-slot:default="scope"> - <el-button - type="primary" - icon="Edit" - plain - @click="modity(scope.row)" - >淇敼</el-button - > - <el-popconfirm - title="纭鍒犻櫎璇ュ崟浣嶅悧锛�" - @confirm="confirmEvent(scope.row)" - > - <template #reference> - <el-button type="danger" icon="Delete" plain - >鍒犻櫎</el-button - > - </template> - </el-popconfirm> - </template> - </el-table-column> - </el-table> - <!-- <Pagination - :page="formlist.pageIndex" - :limit="formlist.pageSize" - :total="dataCount" - @pagination="changePage" - /> --> - </el-card> - <el-dialog - v-model="stuFormDialog" - destroy-on-close - title="娣诲姞瀹炰緥" - width="20%" - > - <template #title> - <span v-if="!student" class="title-name">娣诲姞鍗曚綅</span> - <span v-if="student" class="title-age">淇敼鍗曚綅</span> - </template> - <el-form - ref="addform" - :rules="rules" - label-position="top" - label-width="100px" - :model="detail" - > - <el-form-item label="鍗曚綅鍚嶇О " prop="companyName"> - <el-input v-model="detail.companyName"></el-input> - </el-form-item> - </el-form> - <template #footer> - <span class="dialog-footer"> - <el-button type="primary" @click="build(detail)">绔嬪嵆鍒涘缓</el-button> - <el-button @click="stuFormDialog = false">鍙栨秷</el-button> - </span> - </template> - </el-dialog> - </div> -</template> - -<script> -import Api from '@/api/company'; -import { onBeforeMount, reactive, toRefs } from 'vue'; -import { ElMessage } from 'element-plus'; -export default { - name: '鍗曚綅绠$悊', - setup() { - const data = reactive({ - addform: null, - publickey: '', - labelPosition: 'left', - rules: { - companyName: { - required: true, - message: '璇疯緭鍏ュ疄渚嬪悕绉�', - trigger: 'blur', - }, - }, - student: false, - detail: { - companyName: '', - }, - value: '', - options: [], - company: [], - tableData: [], - stuFormDialog: false, - stuFormDialogdetail: false, - formlist: { - pageIndex: 1, - pageSize: 10, - }, - status: [ - { - label: '鍚敤', - value: true, - }, - { - label: '绂佺敤', - value: false, - }, - ], - dataCount: 0, - companyName: '', - serviceDescription: '', - formData: { - companyName: '', - - pageIndex: 1, - pageSize: 10, - }, - }); - const getexamplelist = async () => { - const res = await Api.list(data.formData); - data.tableData = res.data; - data.dataCount = res.total; - }; - const changePage = async (val) => { - data.formData.pageIndex = val.page; - data.formData.pageSize = val.limit; - await getexamplelist(data.formData); - }; - const buildexample = async () => { - data.student = false; - data.detail = { - companyName: '', - }; - data.stuFormDialog = true; - }; - const modity = async (e) => { - data.student = true; - - data.detail = JSON.parse(JSON.stringify(e)); - data.stuFormDialog = true; - }; - - const build = async (val) => { - data.addform.validate(async (valid) => { - if (valid) { - if (!data.student) { - const params = { - ...data.detail, - }; - const res = await Api.add(params); - data.stuFormDialog = false; - if (res.description == '鎴愬姛') { - ElMessage({ - message: '娣诲姞鍗曚綅鎴愬姛', - type: 'success', - }); - } - await getexamplelist(); - } else { - const res = await Api.update(val); - data.stuFormDialog = false; - if (res.description == '鎴愬姛') { - ElMessage({ - message: '淇敼鍗曚綅鎴愬姛', - type: 'success', - }); - } - await getexamplelist(); - } - } else { - console.log('error submit!!'); - return false; - } - }); - }; - const confirmEvent = async (stu) => { - const params = { - id: stu.id, - }; - await Api.logicDelete(params); - await getexamplelist(); - }; - onBeforeMount(async () => { - await getexamplelist(); - }); - return { - ...toRefs(data), - getexamplelist, - - changePage, - buildexample, - confirmEvent, - build, - modity, - }; - }, -}; -</script> - -<style scoped> -.mt-20 { - margin-top: 20px; -} -</style> diff --git a/PublicPCWeb/src/views/instance-manage/components/Detail.vue b/PublicPCWeb/src/views/instance-manage/components/Detail.vue deleted file mode 100644 index e2bd812..0000000 --- a/PublicPCWeb/src/views/instance-manage/components/Detail.vue +++ /dev/null @@ -1,322 +0,0 @@ -<template> - <div class="app-container"> - <el-card class="box-card"> - <template #header> - <el-page-header @back="goBack"> - <template #title> - <span class="title-name">杩斿洖</span> - </template> - <template #content> - <span class="title-name">瀹炰緥閾炬帴绠$悊</span> - </template> - </el-page-header> - </template> - <div style="line-height: 40px">鍗曚綅锛歿{ companyName }}</div> - <div style="line-height: 40px">鏈嶅姟锛歿{ serviceDescription }}</div> - <div style="line-height: 40px">瀹炰緥锛歿{ instanceName }}</div> - </el-card> - <el-card class="box-card" style="margin-top: 20px"> - <el-col :span="10" style="text-align: left; padding-bottom: 20px"> - <el-button - type="primary" - icon="Plus" - plain - @click="buildexample" - >鏂板</el-button - > - </el-col> - <el-table - :data="tableData" - border - style="width: 100%" - :header-cell-style="{ 'text-align': 'center' }" - > - <el-table-column type="selection" width="35"></el-table-column> - <el-table-column prop="requesterId" label="璇锋眰鏂瑰悕绉�" align="center" /> - <el-table-column - prop="requesterDescription" - label="璇锋眰鏂规弿杩�" - align="center" - /> - - <el-table-column prop="requesterKey" label="璇锋眰鏂瑰叕閽�" width="400"> - <template v-slot:default="scope"> - <span style="cursor: pointer" @click="keydetail(scope.row)" - >{{ - scope.row.requesterKey.length > 50 - ? scope.row.requesterKey.substring(0, 50) + '...' - : scope.row.requesterKey - }} - </span> - </template> - </el-table-column> - <el-table-column - prop="active" - label="婵€娲荤姸鎬�" - width="100" - align="center" - > - <template v-slot:default="scope"> - <el-tag type="success" v-if="scope.row.active">婵€娲�</el-tag> - <el-tag type="info" v-if="!scope.row.active">鏈縺娲�</el-tag> - </template> - </el-table-column> - <el-table-column - prop="available" - label="鍚敤鐘舵€�" - width="100" - align="center" - > - <template v-slot:default="scope"> - <el-tag type="success" v-if="scope.row.available">鍚敤</el-tag> - <el-tag type="info" v-if="!scope.row.available">鏈惎鐢�</el-tag> - </template> - </el-table-column> - <el-table-column label="鎿嶄綔" width="350px" align="center"> - <template v-slot:default="scope"> - <el-button - type="info" - v-if="scope.row.available" - @click="stopstatus(scope.row)" - plain - >鍋滅敤</el-button - > - <el-button - type="success" - v-if="!scope.row.available" - @click="startstatus(scope.row)" - plain - >鍚敤</el-button - > - <el-button - type="primary" - icon="Edit" - plain - @click="modity(scope.row)" - >淇敼</el-button - > - </template> - </el-table-column> - </el-table> - </el-card> - <el-dialog - v-model="stuFormDialogdetail" - destroy-on-close - title="璇锋眰鏂瑰叕閽ヨ鎯�" - width="40%" - > - <el-form> - <el-form-item label="瀹炰緥鍏挜"> {{ publickey }} </el-form-item> - </el-form> - <template #footer> - <span class="dialog-footer"> - <el-button type="primary" @click="stuFormDialogdetail = false" - >纭畾</el-button - > - <el-button @click="stuFormDialogdetail = false">鍙栨秷</el-button> - </span> - </template> - </el-dialog> - <el-dialog - v-model="stuFormDialog" - destroy-on-close - title="娣诲姞瀹炰緥" - width="20%" - > - <template #title> - <span v-if="!student" class="title-name">鏂板瀹炰緥閾炬帴</span> - <span v-if="student" class="title-age">淇敼瀹炰緥閾炬帴</span> - </template> - <el-form - ref="addform" - :rules="rules" - label-position="top" - label-width="100px" - :model="detail" - > - <el-form-item label="璇锋眰鏂瑰悕绉�" prop="requesterId"> - <el-input :disabled="student" v-model="detail.requesterId"></el-input> - </el-form-item> - <el-form-item label="璇锋眰鏂规弿杩�" prop="requesterDescription"> - <el-input v-model="detail.requesterDescription"></el-input> - </el-form-item> - <el-form-item label="璇锋眰鏂瑰叕閽� " prop="requesterKey"> - <el-input v-model="detail.requesterKey"></el-input> - </el-form-item> - </el-form> - <template #footer> - <span class="dialog-footer"> - <el-button type="primary" @click="build(detail)">绔嬪嵆鍒涘缓</el-button> - <el-button @click="stuFormDialog = false">鍙栨秷</el-button> - </span> - </template> - </el-dialog> - </div> -</template> - -<script> -import { reactive, toRefs, onBeforeMount } from 'vue'; -import Api from '@/api/instance-manage'; -import { ElMessage } from 'element-plus'; -export default { - props: { - id: { - type: String, - }, - companyName: { - type: String, - }, - serviceDescription: { - type: String, - }, - instanceName: { - type: String, - }, - }, - setup(props, context) { - const data = reactive({ - addform: null, - tableData: [], - detail: { - requesterId: '', - requesterDescription: '', - requesterKey: '', - }, - rules: { - requesterId: { - required: true, - message: '璇疯緭鍏ヨ姹傛柟鍚嶇О', - trigger: 'blur', - }, - requesterDescription: [ - { - required: true, - message: '璇疯緭鍏ヨ姹傛柟鎻忚堪', - trigger: 'blur', - }, - ], - requesterKey: { - required: true, - message: '璇疯緭鍏ヨ姹傛柟鍏挜', - trigger: 'blur', - }, - }, - student: false, - stuFormDialogdetail: false, - stuFormDialog: false, - publickey: '', - }); - const getdetail = async () => { - const params = { - instanceManageId: props.id, - }; - const res = await Api.listLink(params); - data.tableData = res.data; - }; - const goBack = () => { - context.emit('switch-page', 'List'); - }; - const startstatus = async (e) => { - const params = { - instanceManageId: props.id, - requesterId: e.requesterId, - }; - const res = await Api.enableLink(params); - if (res.description == '鎴愬姛') { - ElMessage({ - message: '鍚敤瀹炰緥鎴愬姛', - type: 'success', - }); - } - getdetail(); - }; - const stopstatus = async (e) => { - const params = { - instanceManageId: props.id, - requesterId: e.requesterId, - }; - const res = await Api.disableLink(params); - if (res.description == '鎴愬姛') { - ElMessage({ - message: '鍋滅敤瀹炰緥鎴愬姛', - type: 'success', - }); - } - getdetail(); - }; - const keydetail = async (e) => { - data.publickey = e.requesterKey; - data.stuFormDialogdetail = true; - }; - const buildexample = async () => { - data.student = false; - data.detail = { - requesterId: '', - requesterDescription: '', - requesterKey: '', - }; - (data.stuFormDialog = true); - }; - const build = async (val) => { - data.addform.validate(async (valid) => { - if (valid) { - if (!data.student) { - const params = { - instanceManageId: props.id, - ...data.detail, - }; - const res = await Api.registerLink(params); - data.stuFormDialog = false; - if (res.description == '鎴愬姛') { - ElMessage({ - message: '鍒涘缓瀹炰緥閾炬帴鎴愬姛', - type: 'success', - }); - } - await getdetail(); - } else { - const params = { - instanceManageId: props.id, - ...val, - }; - const res = await Api.changeLinkKey(params); - data.stuFormDialog = false; - if (res.description == '鎴愬姛') { - ElMessage({ - message: '鍒涘缓瀹炰緥閾炬帴鎴愬姛', - type: 'success', - }); - } - await getdetail(); - } - } else { - console.log('error submit!!'); - return false; - } - }); - }; - const modity = async (e) => { - data.student = true; - - data.detail = JSON.parse(JSON.stringify(e)); - data.stuFormDialog = true; - }; - onBeforeMount(async () => { - await getdetail(); - }); - return { - ...toRefs(data), - getdetail, - goBack, - startstatus, - stopstatus, - keydetail, - buildexample, - build, - modity, - }; - }, -}; -</script> - -<style></style> diff --git a/PublicPCWeb/src/views/instance-manage/components/List.vue b/PublicPCWeb/src/views/instance-manage/components/List.vue deleted file mode 100644 index 6529d10..0000000 --- a/PublicPCWeb/src/views/instance-manage/components/List.vue +++ /dev/null @@ -1,458 +0,0 @@ -<template> - <div class="app-container"> - <el-card> - <el-form> - <el-row :gutter="20"> - <el-col :sm="11" :md="7" :lg="3" :xl="3"> - <el-form-item :model="formData" label="鍗曚綅"> - <el-select - clearable - v-model="formData.companyId" - style="width: 100%" - filterable - > - <el-option - v-for="item in options" - :key="item.id" - :label="item.companyName" - :value="item.id" - > - </el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :sm="11" :md="7" :lg="3" :xl="3"> - <el-form-item label="鏈嶅姟鍚嶇О" - ><el-input v-model="formData.serviceName"></el-input - ></el-form-item> - </el-col> - <el-col :sm="11" :md="7" :lg="3" :xl="3"> - <el-form-item label="瀹炰緥鍚嶇О" - ><el-input v-model="formData.instanceName"></el-input - ></el-form-item> - </el-col> - <el-col :sm="11" :md="7" :lg="3" :xl="3"> - <el-form-item label="鏄惁鍚敤"> - <el-select - v-model="formData.instanceIsEnable" - style="width: 100%" - > - <el-option - v-for="item in status" - :key="item.value" - :label="item.label" - :value="item.value" - > - </el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :span="10" style="text-align: left"> - <el-button - type="primary" - icon="Plus" - plain - @click="buildexample" - >鏂板</el-button - > - <el-button icon="Search" plain @click="getexamplelist" - >鏌ヨ</el-button - > - </el-col> - </el-row> - </el-form> - </el-card> - <el-card class="mt-20"> - <el-table - :data="tableData" - border - stripe - style="width: 100%" - :header-cell-style="{ 'text-align': 'center' }" - > - <el-table-column type="selection" width="35"></el-table-column> - <el-table-column - prop="companyName" - label="鍗曚綅" - width="180" - align="center" - /> - <el-table-column - prop="serviceName" - label="鏈嶅姟鍚嶇О" - width="180" - align="center" - /> - <el-table-column - prop="serviceDescription" - label="鏈嶅姟鎻忚堪" - align="center" - /> - <el-table-column prop="instanceId" label="瀹炰緥ID" align="center" /> - <el-table-column prop="instanceName" label="瀹炰緥鍚嶇О" align="center" /> - <el-table-column prop="instanceKey" label="瀹炰緥鍏挜" width="400"> - <template v-slot:default="scope"> - <span style="cursor: pointer" @click="keydetail(scope.row)" - >{{ - scope.row.instanceKey.length > 50 - ? scope.row.instanceKey.substring(0, 50) + '...' - : scope.row.instanceKey - }} - </span> - </template> - </el-table-column> - <el-table-column - prop="instanceIsEnable" - label="鍚敤鐘舵€�" - width="100" - align="center" - > - <template v-slot:default="scope"> - <el-tag type="success" v-if="scope.row.instanceIsEnable" - >鍚敤</el-tag - > - <el-tag type="info" v-if="!scope.row.instanceIsEnable" - >鏈惎鐢�</el-tag - > - </template> - </el-table-column> - <el-table-column label="鎿嶄綔" width="350px" align="center"> - <template v-slot:default="scope"> - <el-button - type="info" - v-if="scope.row.instanceIsEnable" - @click="stopstatus(scope.row)" - plain - >鍋滅敤</el-button - > - <el-button - type="success" - v-if="!scope.row.instanceIsEnable" - @click="startstatus(scope.row)" - plain - >鍚敤</el-button - > - <el-button - type="primary" - icon="Edit" - plain - @click="modity(scope.row)" - >淇敼</el-button - > - <el-button @click="refresh(scope.row)" plain>鍒锋柊瀵嗛挜</el-button> - <el-button @click="compile(scope.row)" type="primary" plain - >瀹炰緥閾炬帴</el-button - > - </template> - </el-table-column> - </el-table> - <Pagination - :page="formlist.pageIndex" - :limit="formlist.pageSize" - :total="dataCount" - @pagination="changePage" - /> - </el-card> - <el-dialog - v-model="stuFormDialog" - destroy-on-close - title="娣诲姞瀹炰緥" - width="20%" - > - <template #title> - <span v-if="!student" class="title-name">娣诲姞瀹炰緥</span> - <span v-if="student" class="title-age">淇敼瀹炰緥</span> - </template> - <el-form - ref="addform" - :rules="rules" - label-position="top" - label-width="100px" - :model="detail" - > - <el-form-item label="鍗曚綅" prop="companyId"> - <el-select - :disabled="student" - clearable - v-model="detail.companyId" - style="width: 100%" - filterable - > - <el-option - v-for="item in options" - :key="item.id" - :label="item.companyName" - :value="item.id" - > - </el-option> - </el-select> - </el-form-item> - <el-form-item label="涓彴鏈嶅姟" prop="serviceDescription"> - <el-select - :disabled="student" - clearable - v-model="detail.serviceName" - style="width: 100%" - > - <el-option - v-for="item in company" - :key="item.serviceName" - :label="item.serviceDescription" - :value="item.serviceName" - > - </el-option> - </el-select> - </el-form-item> - <el-form-item label="瀹炰緥鍚嶇О " prop="instanceName"> - <el-input v-model="detail.instanceName"></el-input> - </el-form-item> - </el-form> - <template #footer> - <span class="dialog-footer"> - <el-button type="primary" @click="build(detail)">绔嬪嵆鍒涘缓</el-button> - <el-button @click="stuFormDialog = false">鍙栨秷</el-button> - </span> - </template> - </el-dialog> - <el-dialog - v-model="stuFormDialogdetail" - destroy-on-close - title="瀹炰緥鍏挜璇︽儏" - width="40%" - > - <el-form> - <el-form-item label="瀹炰緥鍏挜"> {{ publickey }} </el-form-item> - </el-form> - <template #footer> - <span class="dialog-footer"> - <el-button type="primary" @click="stuFormDialogdetail = false" - >纭畾</el-button - > - <el-button @click="stuFormDialogdetail = false">鍙栨秷</el-button> - </span> - </template> - </el-dialog> - </div> -</template> - -<script> -import Api from '@/api/instance-manage'; -import { onBeforeMount, reactive, toRefs } from 'vue'; -import { ElMessage } from 'element-plus'; -export default { - setup(props, context) { - const data = reactive({ - addform: null, - publickey: '', - labelPosition: 'left', - rules: { - companyId: { - required: true, - message: '璇烽€夋嫨鍗曚綅', - trigger: 'change', - }, - serviceName: [ - { - required: true, - message: '璇烽€夋嫨涓彴鏈嶅姟', - trigger: 'change', - }, - ], - instanceName: { - required: true, - message: '璇疯緭鍏ュ疄渚嬪悕绉�', - trigger: 'blur', - }, - }, - student: false, - detail: { - serviceName: '', - instanceName: '', - companyId: '', - }, - value: '', - options: [], - company: [], - tableData: [], - stuFormDialog: false, - stuFormDialogdetail: false, - formlist: { - pageIndex: 1, - pageSize: 10, - }, - status: [ - { - label: '鍚敤', - value: true, - }, - { - label: '绂佺敤', - value: false, - }, - ], - dataCount: 0, - companyName: '', - serviceDescription: '', - formData: { - companyId: '', - serviceName: '', - instanceName: '', - instanceIsEnable: true, - pageIndex: 1, - pageSize: 10, - }, - }); - const getexamplelist = async () => { - const res = await Api.listInstance(data.formData); - data.tableData = res.data; - data.dataCount = res.total; - }; - const companylist = async () => { - const res = await Api.list({}); - data.options = res.data; - }; - const keydetail = async (e) => { - data.publickey = e.instanceKey; - data.stuFormDialogdetail = true; - }; - const stopstatus = async (e) => { - const res = await Api.disableInstance(e.id); - if (res.description == '鎴愬姛') { - ElMessage({ - message: '鍋滅敤瀹炰緥鎴愬姛', - type: 'success', - }); - } - getexamplelist(); - }; - const startstatus = async (e) => { - const res = await Api.enableInstance(e.id); - if (res.description == '鎴愬姛') { - ElMessage({ - message: '鍚敤瀹炰緥鎴愬姛', - type: 'success', - }); - } - getexamplelist(); - }; - const refresh = async (e) => { - const res = await Api.refreshInstanceKey(e.id); - if (res.description == '鎴愬姛') { - ElMessage({ - message: '鍒锋柊瀹炰緥瀵嗛挜鎴愬姛', - type: 'success', - }); - } - getexamplelist(); - }; - const changePage = async (val) => { - data.formlist.pageIndex = val.page; - data.formlist.pageSize = val.limit; - data.formData.pageIndex = val.page; - data.formData.pageSize = val.limit; - await getexamplelist(data.formData); - }; - const buildexample = async () => { - data.student = false; - data.detail = { - serviceName: '', - instanceName: '', - companyId: '', - }; - data.stuFormDialog = true; - }; - const modity = async (e) => { - data.student = true; - - data.detail = JSON.parse(JSON.stringify(e)); - data.stuFormDialog = true; - }; - const companyform = async () => { - const res = await Api.getOnlineMiddlegroundService({}); - data.company = res.data; - }; - const build = async (val) => { - data.addform.validate(async (valid) => { - if (valid) { - if (!data.student) { - data.options.forEach((item) => { - if (item.id == data.detail.companyId) { - data.companyName = item.companyName; - } - }); - data.company.forEach((item) => { - if (item.serviceName == data.detail.serviceName) { - data.serviceDescription = item.serviceDescription; - } - }); - - const params = { - ...val, - serviceDescription: data.serviceDescription, - companyName: data.companyName, - }; - const res = await Api.createInstance(params); - data.stuFormDialog = false; - if (res.description == '鎴愬姛') { - ElMessage({ - message: '鍒涘缓瀹炰緥鎴愬姛', - type: 'success', - }); - } - await getexamplelist(); - } else { - const res = await Api.modifyInstanceBaseInfo(val); - data.stuFormDialog = false; - if (res.description == '鎴愬姛') { - ElMessage({ - message: '鍒涘缓瀹炰緥鎴愬姛', - type: 'success', - }); - } - await getexamplelist(); - } - } else { - console.log('error submit!!'); - return false; - } - }); - }; - const compile = (e) => { - context.emit( - 'switch-page', - 'Detail', - e.id, - e.companyName, - e.serviceName + e.serviceDescription, - e.instanceName - ); - }; - onBeforeMount(async () => { - await getexamplelist(); - await companylist(); - await companyform(); - }); - return { - ...toRefs(data), - getexamplelist, - companylist, - keydetail, - stopstatus, - startstatus, - refresh, - changePage, - buildexample, - companyform, - build, - modity, - compile, - }; - }, -}; -</script> - -<style scoped> -.mt-20 { - margin-top: 20px; -} -</style> diff --git a/PublicPCWeb/src/views/instance-manage/index.vue b/PublicPCWeb/src/views/instance-manage/index.vue deleted file mode 100644 index c778b20..0000000 --- a/PublicPCWeb/src/views/instance-manage/index.vue +++ /dev/null @@ -1,46 +0,0 @@ -<template> - <div> - <component @switch-page="switchPage" :is="currentPage" :id="instanceId" :instanceName="instanceName" :serviceDescription="serviceDescription" :companyName="companyName" /> - </div> -</template> - -<script> -import List from './components/List.vue'; //eslint-disable-line no-unused-vars -import Detail from './components/Detail.vue'; //eslint-disable-line no-unused-vars -import { reactive, toRefs } from 'vue'; -export default { - name: '瀹炰緥绠$悊', - components: { - List, - Detail, - }, - setup() { - const data = reactive({ - currentPage: 'List', - instanceId: '', - companyName: '', - serviceDescription: '', - instanceName:"" - }); - const switchPage = ( - currentComponent, - instanceId, - companyName, - serviceDescription, - instanceName - ) => { - data.currentPage = currentComponent; - data.instanceId = instanceId; - data.companyName = companyName; - data.serviceDescription = serviceDescription; - data.instanceName = instanceName - }; - return { - ...toRefs(data), - switchPage, - }; - }, -}; -</script> - -<style scoped></style> diff --git a/PublicPCWeb/src/views/reimbursement/index.vue b/PublicPCWeb/src/views/reimbursement/index.vue new file mode 100644 index 0000000..b4e5c07 --- /dev/null +++ b/PublicPCWeb/src/views/reimbursement/index.vue @@ -0,0 +1,605 @@ +<template> + <div class="container" id="all"> + <div class="top"> + <div class="title">鎵樺辜璐规姤閿€鐢宠</div> + </div> + <div class="middle"> + <el-card style="padding: 0px 20px 20px 20px"> + <div class="box"> + <div class="blue"></div> + <div class="title">鐢宠浜轰俊鎭�</div> + </div> + <el-form inline :model="formData" label-position="top"> + <el-row :gutter="20" style="width: 100%"> + <el-col :span="6"> + <el-form-item label="宸ュ彿" prop="code"> + <el-input + size="large" + v-model="formData.code" + placeholder="璇疯緭鍏ュ伐鍙�" + readonly + disabled + /> + </el-form-item> + </el-col> + <el-col :span="6"> + <el-form-item label="濮撳悕" prop="name"> + <el-input + size="large" + v-model="formData.name" + placeholder="璇疯緭鍏ュ鍚�" + readonly + disabled + /> + </el-form-item> + </el-col> + <el-col :span="6"> + <el-form-item label="鎵€灞為儴闂�" prop="dep"> + <el-input + size="large" + v-model="formData.dep" + placeholder="璇疯緭鍏ユ墍灞為儴闂�" + readonly + disabled + /> + </el-form-item> + </el-col> + <el-col :span="6"> + <el-form-item label="鑱旂郴鏂瑰紡" prop="number"> + <el-input + size="large" + v-model="formData.number" + placeholder="璇疯緭鍏ヨ仈绯绘柟寮�" + /> + </el-form-item> + </el-col> + </el-row> + </el-form> + <div class="inline"> + <div class="text"> + <div class="blue"></div> + <div class="title">鍑虹敓璇佹槑鍙婂瓙濂充俊鎭�</div> + </div> + <div> + <el-button type="primary" @click="addImg"> + <el-icon style="margin-right: 5px"><Plus /></el-icon>娣诲姞 + </el-button> + </div> + </div> + <div class="borthImg"> + <div class="title">鍑虹敓璇佹槑</div> + <div class="img" v-for="item in imgList" :key="item"> + <el-image + style="width: 100%; height: 113px" + :src="`data:image/jpg;base64,${item.thumbnailImg}`" + fit="contain" + :preview-src-list="srcListBorth" + /> + <div class="right-top-container"> + <el-icon color="#ff2b2b" @click="deleteImg(item)" + ><CircleClose + /></el-icon> + </div> + </div> + </div> + <div class="borthImg"> + <div class="title">瀛愬コ淇℃伅</div> + <el-table + :data="tableData" + style="width: 100%; border: 1px solid #eaeded; border-bottom: none" + :header-cell-style="{ + background: '#eaf1fd', + fontSize: '14px', + color: '#545354', + fontWeight: 400, + height: '47px', + }" + :row-style="{ + height: '60px', + }" + > + <el-table-column label="瀛愬コ濮撳悕" prop="childName"> + <template #default="scope"> + <div class="text" v-if="!scope.row.edit"> + {{ scope.row.childName }} + </div> + <div class="textInput" v-if="scope.row.edit"> + <el-input + v-model="scope.row.childName" + placeholder="璇疯緭鍏ュ瓙濂冲鍚�" + /> + </div> + </template> + </el-table-column> + <el-table-column label="鎬у埆" prop="sex"> + <template #default="scope"> + <div class="text" v-if="!scope.row.edit"> + {{ scope.row.sex }} + </div> + <div class="textInput" v-if="scope.row.edit"> + <el-input + v-model="scope.row.sex" + placeholder="璇疯緭鍏ュ瓙濂虫€у埆" + /> + </div> + </template> + </el-table-column> + <el-table-column label="鍑虹敓鏃ユ湡" prop="borthDate"> + <template #default="scope"> + <div class="text" v-if="!scope.row.edit"> + {{ Moment(scope.row.borthDate).format('YYYY-MM-DD') }} + </div> + <div class="textInput" v-if="scope.row.edit"> + <el-date-picker + v-model="scope.row.borthDate" + placeholder="璇烽€夋嫨鍑虹敓鏃ユ湡" + value-format="YYYY-MM-DD" + format="YYYY-MM-DD" + style="width: 100%" + /> + </div> + </template> + </el-table-column> + <el-table-column label="涓庣敵璇蜂汉鍏崇郴" prop="relationship"> + <template #default="scope"> + <div class="text" v-if="!scope.row.edit"> + {{ scope.row.relationship }} + </div> + <div class="textInput" v-if="scope.row.edit"> + <el-input + v-model="scope.row.relationship" + placeholder="璇疯緭鍏ヤ笌鐢宠浜哄叧绯�" + /> + </div> + </template> + </el-table-column> + <el-table-column label="鎵€灞炲辜鍎垮洯" prop="school"> + <template #default="scope"> + <div class="text" v-if="!scope.row.edit"> + {{ scope.row.school }} + </div> + <div class="textInput" v-if="scope.row.edit"> + <el-input + v-model="scope.row.school" + placeholder="璇疯緭鍏ユ墍灞炲辜鍎垮洯" + /> + </div> + </template> + </el-table-column> + <el-table-column label="鎿嶄綔"> + <template #default="scope"> + <el-button + v-if="!scope.row.edit" + type="primary" + @click="handleEdit(scope.row)" + size="small" + ><el-icon><EditPen /></el-icon>缂栬緫</el-button + > + + <el-button + type="primary" + v-if="scope.row.edit" + @click="handleCheck(scope.row)" + size="small" + ><el-icon><Check /></el-icon>瀹屾垚</el-button + > + </template> + </el-table-column> + </el-table> + </div> + <div style="height: 20px; width: 100%"></div> + <div class="inline"> + <div class="text"> + <div class="blue"></div> + <div class="title">鍙戠エ淇℃伅</div> + </div> + <div> + <el-button type="primary" @click="UploadFileDialogInvoice = true"> + <el-icon style="margin-right: 5px"><Plus /></el-icon>娣诲姞鍙戠エ + </el-button> + </div> + </div> + <div class="invoice"> + <div class="message" v-for="item in inviceList" :key="item"> + <div class="left"> + <el-image + style="width: 100%; height: 113px" + :src="`data:image/jpg;base64,${item.thumbnailImg}`" + fit="contain" + /> + <div class="right-top-container"> + <el-icon color="#ff2b2b"><CircleClose /></el-icon> + </div> + </div> + <div class="right"> + <el-form inline label-position="top"> + <el-row :gutter="20" style="width: 100%"> + <el-col :span="8"> + <el-form-item label="鍙戠エ鏈堜唤"> + <el-input + size="large" + v-model="item.code" + placeholder="璇疯緭鍏ュ彂绁ㄦ湀浠�" + /> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="鍙戠エ閲戦"> + <el-input + size="large" + v-model="item.code" + placeholder="璇疯緭鍏ュ彂绁ㄩ噾棰�" + /> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="鍙戠エ鎶ラ攢閲戦"> + <el-input + size="large" + v-model="item.code" + placeholder="0.00" + readonly + disabled + /> + </el-form-item> + </el-col> + </el-row> + </el-form> + </div> + </div> + </div> + </el-card> + <el-card + style=" + display: flex; + justify-content: flex-end; + padding: 10px 30px 10px 10px; + " + > + <el-button type="danger" size="large" @click="reject">椹冲洖</el-button> + <el-button type="primary" size="large">瀹℃壒閫氳繃</el-button> + </el-card> + </div> + <!-- 椹冲洖 --> + <el-dialog + v-model="rejectShow" + title="椹冲洖" + width="60%" + custom-class="fast-reimbursement-dialog" + > + <el-form inline :model="formReject"> + <el-form-item label="椹冲洖鐞嗙敱锛�"> + <el-input + size="large" + v-model="formReject.code" + placeholder="璇疯緭鍏�" + /> + </el-form-item> + </el-form> + <template #footer> + <el-button size="large">鍙栨秷</el-button> + <el-button type="danger" size="large">椹冲洖</el-button> + </template> + </el-dialog> + <!-- 涓婁紶鍑虹敓璇佹槑 --> + <UploadFile + v-model="UploadFileDialog" + @upload-handler="beforeUpload" + :limit="1" + title="鍑虹敓璇佹槑" + :acceptType="[ + 'pdf', + 'jpg', + 'png', + 'PDF', + 'JPG', + 'PNG', + 'JPEG', + 'jpeg', + 'ofd', + 'OFD', + ]" + ></UploadFile> + <!-- 涓婁紶鍙戠エ淇℃伅 --> + <UploadFile + v-model="UploadFileDialogInvoice" + @upload-handler="beforeUploadInvoice" + :limit="1" + title="鍙戠エ淇℃伅" + :acceptType="[ + 'pdf', + 'jpg', + 'png', + 'PDF', + 'JPG', + 'PNG', + 'JPEG', + 'jpeg', + 'ofd', + 'OFD', + ]" + ></UploadFile> + </div> +</template> +<script> +import { toRefs, reactive, onMounted } from 'vue'; +import Moment from 'moment'; +export default { + setup() { + const state = reactive({ + formReject: { + code: '', + }, + rejectShow: false, + tableData: [ + { + childName: '姹皬绾�', + sex: '濂�', + relationship: '鐖跺コ', + borthDate: '2020-01-10', + school: '缈绘枟骞煎効鍥�', + edit: false, + }, + ], + formData: { + code: '', + name: '', + dep: '', + number: '', + }, + imgList: [ + { + fileId: '1751804741975142401', + thumbnailImg: + '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', + fileName: 'd967a882-6fe6-46ca-a3c4-863b26c1a437.jpg', + fileType: 'image/jpeg', + billId: '1751804742319075330', + }, + ], + inviceList: [ + { + fileId: '1751804741975142401', + thumbnailImg: + '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', + fileName: 'd967a882-6fe6-46ca-a3c4-863b26c1a437.jpg', + fileType: 'image/jpeg', + billId: '1751804742319075330', + }, + { + fileId: '1751804741975142401', + thumbnailImg: + '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', + fileName: 'd967a882-6fe6-46ca-a3c4-863b26c1a437.jpg', + fileType: 'image/jpeg', + billId: '1751804742319075330', + }, + ], + UploadFileDialog: false, + UploadFileDialogInvoice: false, + srcListBorth: [], + }); + onMounted(() => { + console.log(1); + }); + const addImg = () => { + state.UploadFileDialog = true; + }; + //椹冲洖 + const reject = () => { + state.rejectShow = true; + }; + //鍒犻櫎鍑虹敓璇佹槑 + const deleteImg = (index) => { + state.imgList.splice(index, 1); + state.srcListBorth.splice(index, 1); + state.tableData.splice(index, 1); + }; + //涓婁紶鍑虹敓璇佹槑 + const beforeUpload = (file) => { + console.log(file); + const formData = new FormData(); + // formData.append('files', file[0].raw); + file.forEach((item) => { + formData.append('files', item.raw); + }); + // formData.append('claimsOrderId', data.rowList.expenseReportId); + // formData.append('attachmentCategory', data.field.attachmentCategory); + // formData.append('attachmentType', data.field.attachmentType); + // ExpenseAccountInquiry.uploadSupplementAttachFile(formData).then((res) => { + // console.log(res); + // // 鍒ゆ柇鏂囦欢绫诲瀷 + // const type = res.data[0].billImgSimpleEn.fileType; + // const index = type.indexOf('/'); + // let finalType = type.slice(0, index); + // // 鏄浘鐗� + // if (finalType == 'image') { + // billRecognition + // .getOriginalFileByFileId({ + // fileUrl: res.data[0].billImgSimpleEn.originalUrl, + // }) + // .then((res) => { + // state.imgList = res.data[0]; + // state.srcListBorth.push(`data:image/jpg;base64,${data.img}`); + // }); + // } + // }); + }; + //涓婁紶鍙戠エ淇℃伅 + const beforeUploadInvoice = () => {}; + const handleEdit = (row) => { + row.edit = !row.edit; + }; + const handleCheck = (row) => { + row.edit = !row.edit; + }; + return { + Moment, + ...toRefs(state), + addImg, + deleteImg, + beforeUpload, + beforeUploadInvoice, + handleEdit, + handleCheck, + reject, + }; + }, +}; +</script> +<style lang="scss" scoped> +.container { + width: 100vw; + height: 100vh; + .top { + background-color: #ffffff; + width: 100%; + padding: 16px 20px; + display: flex; + align-items: center; + .title { + font-family: 'PingFang SC'; + font-weight: 600; + font-size: 20px; + line-height: 28px; + color: #18191a; + } + } + .middle { + background-color: #eff2f5; + width: 100%; + padding: 30px 20px; + overflow: auto; + height: calc(100vh - 60px); + .box { + .blue { + width: 3px; + height: 18px; + background-color: rgb(80, 138, 255); + line-height: 56px; + display: inline-block; + vertical-align: sub; + margin-right: 3px; + } + .title { + font-weight: 400; + font-size: 18px; + line-height: 56px; + color: #333; + display: inline-block; + } + } + ::v-deep .el-card__body { + padding: 0px; + } + .inline { + display: flex; + line-height: 56px; + .text { + flex: 1; + .blue { + width: 3px; + height: 18px; + background-color: rgb(80, 138, 255); + display: inline-block; + vertical-align: sub; + margin-right: 3px; + } + .title { + font-weight: 400; + font-size: 18px; + color: #333; + display: inline-block; + } + } + } + .borthImg { + .title { + font-size: 18px; + font-weight: 400; + line-height: 40px; + } + .img { + height: 120px; + width: 180px; + border: 1px dashed #ced4db; + border-radius: 4px; + padding: 2px; + background: #f5f7fa; + position: relative; + .right-top-container { + display: inline-block; + position: absolute; + top: 5px; + right: 5px; + } + } + } + .invoice { + .message { + display: flex; + padding: 10px 0; + .left { + height: 120px; + width: 180px; + border: 1px dashed #ced4db; + border-radius: 4px; + padding: 2px; + background: #f5f7fa; + position: relative; + .right-top-container { + display: inline-block; + position: absolute; + top: 5px; + right: 5px; + } + } + .right { + padding: 20px; + line-height: 40px; + width: calc(100% - 180px); + } + } + } + } + ::v-deep .el-button--primary { + background: #2972e9; + } + ::v-deep + .el-form--small.el-form--label-top + .el-form-item + .el-form-item__label { + font-weight: 400; + } + ::v-deep .el-form--inline .el-form-item { + margin-right: 18px; + } +} +:deep(.el-dialog__body) { + display: flex; + justify-content: center; +} +:deep(.el-dialog__header) { + border-radius: 8px 8px 0 0; + font-size: 20px !important; + font-weight: 600 !important; + border-bottom: 1px solid #d7d7d7; + background: #fafafa; + margin-right: 0; +} +:deep(.fast-reimbursement-dialog) { + border-radius: 8px; + .el-form-item__label { + display: flex; + align-items: center; + font-size: 15px; + } +} + +:deep(.fast-reimbursement-dialog .el-dialog__footer) { + display: flex; + justify-content: center; + border-top: 1px solid #d7d7d7; + padding: 10px 0 10px 0; +} +</style> diff --git a/PublicPCWeb/vue.config.js b/PublicPCWeb/vue.config.js index f5dfb0f..8e30d4a 100644 --- a/PublicPCWeb/vue.config.js +++ b/PublicPCWeb/vue.config.js @@ -23,13 +23,13 @@ module.exports = { }, proxy: { [process.env.VUE_APP_BASE_API]: { - target: 'http://192.168.2.10:8100/', + target: 'http://192.168.2.10:8857/', changeOrigin: true, pathRewrite: { - ['^' + process.env.VUE_APP_BASE_API]: '' - } - } - } + ['^' + process.env.VUE_APP_BASE_API]: '', + }, + }, + }, }, configureWebpack: { output: { -- GitLab