mirror of
https://git.hmsn.ink/kospo/svcm/oa.git
synced 2026-03-19 19:25:11 +09:00
Merge branch 'main' into featrue/0526-update
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
<script setup lang="ts">
|
||||
import { getIntegratedApproval } from '/src/service/integratedApproval'
|
||||
import type { VFlexTableWrapperSortFunction, VFlexTableWrapperFilterFunction } from '/src/components/app-vuero/ComVFlexTableWrapper.vue'
|
||||
import { users } from '/src/data/layouts/card-grid-v1'
|
||||
import PriceDetail from "/@src/pages/app/priceDetail.vue";
|
||||
import {conveterNo, updateApprovalStatus} from "/@src/service/approvalApi.ts";
|
||||
@@ -69,8 +68,6 @@ function formatRegDt(value) {
|
||||
}
|
||||
|
||||
async function getIntegratedApprovalList() {
|
||||
const today = new Date()
|
||||
searchParamsList.regSdt = new Date().setDate(today.getDate() - 30)
|
||||
|
||||
const approvalParams = {
|
||||
title: params.title,
|
||||
@@ -160,18 +157,23 @@ const onRowClick = async (row) => {
|
||||
sabun: row.sabun
|
||||
}
|
||||
console.log(params)
|
||||
|
||||
let result;
|
||||
// API 호출
|
||||
const result = await conveterNo(params)
|
||||
if(row.gubun=== 'SVCM') {
|
||||
result = await conveterNo(params)
|
||||
// prcsNo 설정 (응답 구조에 맞게 수정)
|
||||
if (result?.prcsNo) {
|
||||
prcsNo.value = result.prcsNo
|
||||
} else {
|
||||
notyf.error('가격조사번호를 찾을 수 없습니다.')
|
||||
}
|
||||
}
|
||||
|
||||
// 모달 무조건 열기
|
||||
isModalOpen.value = true
|
||||
|
||||
// prcsNo 설정 (응답 구조에 맞게 수정)
|
||||
if (result?.prcsNo) {
|
||||
prcsNo.value = result.prcsNo
|
||||
} else {
|
||||
notyf.error('가격조사번호를 찾을 수 없습니다.')
|
||||
}
|
||||
|
||||
|
||||
} catch (e) {
|
||||
isModalOpen.value = true // 에러 시에도 모달 열기
|
||||
|
||||
@@ -275,56 +275,56 @@ const onPrcsFileDownload = async (contNo: string, fileOrd: number, logiFnm: stri
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<VButton
|
||||
color="primary"
|
||||
@click="registerFormOpen = true"
|
||||
>
|
||||
가격조사 가져오기
|
||||
</VButton>
|
||||
<VModal
|
||||
is="form"
|
||||
:open="registerFormOpen"
|
||||
title="계약관리 등록"
|
||||
size="contract-big"
|
||||
actions="right"
|
||||
>
|
||||
<template #content>
|
||||
<div class="modal-form">
|
||||
<ComVFlexTable
|
||||
:data="data.completedPriceSearchData"
|
||||
:columns="params.modalColumn"
|
||||
:compact="true"
|
||||
:separators="true"
|
||||
@row-click="handlePriceRowClick"
|
||||
clickable
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
</VModal>
|
||||
<!-- <VButton-->
|
||||
<!-- color="primary"-->
|
||||
<!-- @click="registerFormOpen = true"-->
|
||||
<!-- >-->
|
||||
<!-- 가격조사 가져오기-->
|
||||
<!-- </VButton>-->
|
||||
<!-- <VModal-->
|
||||
<!-- is="form"-->
|
||||
<!-- :open="registerFormOpen"-->
|
||||
<!-- title="계약관리 등록"-->
|
||||
<!-- size="contract-big"-->
|
||||
<!-- actions="right"-->
|
||||
<!-- >-->
|
||||
<!-- <template #content>-->
|
||||
<!-- <div class="modal-form">-->
|
||||
<!-- <ComVFlexTable-->
|
||||
<!-- :data="data.completedPriceSearchData"-->
|
||||
<!-- :columns="params.modalColumn"-->
|
||||
<!-- :compact="true"-->
|
||||
<!-- :separators="true"-->
|
||||
<!-- @row-click="handlePriceRowClick"-->
|
||||
<!-- clickable-->
|
||||
<!-- />-->
|
||||
<!-- </div>-->
|
||||
<!-- </template>-->
|
||||
<!-- </VModal>-->
|
||||
</td>
|
||||
<td>
|
||||
<VField class="is-flex">
|
||||
<VControl raw subcontrol>
|
||||
<VCheckbox
|
||||
label="가격조사여부"
|
||||
color="info"
|
||||
v-model="priceSeachCheckBoxStatus"
|
||||
/>
|
||||
</VControl>
|
||||
</VField>
|
||||
<!-- <VField class="is-flex">-->
|
||||
<!-- <VControl raw subcontrol>-->
|
||||
<!-- <VCheckbox-->
|
||||
<!-- label="가격조사여부"-->
|
||||
<!-- color="info"-->
|
||||
<!-- v-model="priceSeachCheckBoxStatus"-->
|
||||
<!-- />-->
|
||||
<!-- </VControl>-->
|
||||
<!-- </VField>-->
|
||||
</td>
|
||||
<td colspan="3">
|
||||
<div class="column is-fullhd">
|
||||
<VField>
|
||||
<VControl>
|
||||
<input
|
||||
v-model="completedPriceDataParams.reason"
|
||||
class="input custom-text-filter"
|
||||
placeholder="가격조사 안했을 시 예외 사유 입력(필수)"
|
||||
disabled
|
||||
>
|
||||
</VControl>
|
||||
</VField>
|
||||
<!-- <VField>-->
|
||||
<!-- <VControl>-->
|
||||
<!-- <input-->
|
||||
<!-- v-model="completedPriceDataParams.reason"-->
|
||||
<!-- class="input custom-text-filter"-->
|
||||
<!-- placeholder="가격조사 안했을 시 예외 사유 입력(필수)"-->
|
||||
<!-- disabled-->
|
||||
<!-- >-->
|
||||
<!-- </VControl>-->
|
||||
<!-- </VField>-->
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -410,22 +410,6 @@ const onPrcsFileDownload = async (contNo: string, fileOrd: number, logiFnm: stri
|
||||
>
|
||||
계 약 금 액
|
||||
</VButton>
|
||||
<VModal
|
||||
actions="center"
|
||||
title="계약금액"
|
||||
>
|
||||
<template #content>
|
||||
<VPlaceholderSection
|
||||
title="Go Premium"
|
||||
subtitle="Unlock more features and business tools by going premium"
|
||||
/>
|
||||
</template>
|
||||
<template #action>
|
||||
<VButton color="primary" raised>
|
||||
등록
|
||||
</VButton>
|
||||
</template>
|
||||
</VModal>
|
||||
</td>
|
||||
<td colspan="2">
|
||||
<VField>
|
||||
|
||||
@@ -24,8 +24,6 @@ onBeforeMount(async () => {
|
||||
})
|
||||
|
||||
async function getContractListView() {
|
||||
const today = new Date()
|
||||
params.signSdt = new Date().setDate(today.getDate() - 30)
|
||||
|
||||
const contractParams = {
|
||||
params:{
|
||||
@@ -37,7 +35,6 @@ async function getContractListView() {
|
||||
}
|
||||
const result = await getContractList(contractParams)
|
||||
data.contractData = result.content
|
||||
console.log('result', data.contractData)
|
||||
//페이지 관련 값 설정
|
||||
totalItems.value = result.totalElements
|
||||
totalPages.value = result.totalPages
|
||||
@@ -277,7 +274,7 @@ watch(currentPage, (newParams) => {
|
||||
<div>
|
||||
<VButton
|
||||
v-if="row.contStatCd==='0200'"
|
||||
color="danger"
|
||||
color="info"
|
||||
size="big"
|
||||
@click.stop="getBilling(row)"
|
||||
>
|
||||
@@ -285,7 +282,7 @@ watch(currentPage, (newParams) => {
|
||||
</VButton>
|
||||
<VButton
|
||||
v-else-if="['0300', '0400', '0500'].includes(row.contStatCd)"
|
||||
color="info"
|
||||
color="danger"
|
||||
size="big"
|
||||
@click.stop="getBilling(row)"
|
||||
>
|
||||
|
||||
@@ -305,12 +305,20 @@ const showReasonError = computed(() =>
|
||||
(!completedPriceDataParams.reason || !completedPriceDataParams.reason.trim())
|
||||
)
|
||||
|
||||
const estimateBizNoOptions = computed(() =>
|
||||
completedPriceDataParams.estimates.map(est => ({
|
||||
value: est.bizNo,
|
||||
text: est.bizNo
|
||||
}))
|
||||
)
|
||||
|
||||
const estimateBizNoOptions = computed(() => {
|
||||
if (completedPriceDataParams.compNm) {
|
||||
return [{
|
||||
value: completedPriceDataParams.bizNo,
|
||||
text: completedPriceDataParams.bizNo
|
||||
}]
|
||||
}
|
||||
|
||||
return completedPriceDataParams.estimates.map(est => ({
|
||||
value: est.bizNo,
|
||||
text: est.bizNo
|
||||
}))
|
||||
})
|
||||
|
||||
function onBizNoChange() {
|
||||
const selected = completedPriceDataParams.estimates.find(est => est.bizNo === completedPriceDataParams.bizNo)
|
||||
|
||||
@@ -3,17 +3,20 @@
|
||||
import {getSlipDetail, saveTempSlip} from "/@src/service/slipApi.ts";
|
||||
import {formatDatefromStringDate} from "/@src/utils/common/comfunc.ts";
|
||||
import {VTabsItem} from "/@src/components/app-vuero/VCustomTabs.vue";
|
||||
import {sapApprConveterNo} from "/@src/service/sapApprovalApi.ts";
|
||||
|
||||
|
||||
const props = defineProps<{apprNo : string}>();
|
||||
console.log(props.apprNo)
|
||||
console.log(props)
|
||||
|
||||
onBeforeMount(async ()=>{
|
||||
|
||||
let result;
|
||||
if(history.state.key){
|
||||
result = await getSlipDetail(history.state.key)
|
||||
}else if(props.apprNo){
|
||||
result = await getSlipDetail(props.apprNo)
|
||||
const sapApprNo = await sapApprConveterNo(props.apprNo)
|
||||
result = await getSlipDetail(sapApprNo.data.contNo)
|
||||
}
|
||||
getDetailList(result)
|
||||
apprLine.value = result.zwf0011t.apprs
|
||||
@@ -129,10 +132,7 @@ const addTabFromRow = (row,index) => {
|
||||
<td>소속</td>
|
||||
<td colspan="2">
|
||||
<VField>
|
||||
<VCodeSelect
|
||||
v-model="affiliationCode"
|
||||
cd_grp=11 >
|
||||
</VCodeSelect>
|
||||
<span>{{affiliationCode}}</span>
|
||||
</VField>
|
||||
</td>
|
||||
<td colspan="7" />
|
||||
@@ -141,47 +141,30 @@ const addTabFromRow = (row,index) => {
|
||||
<td>계약명</td>
|
||||
<td colspan="9">
|
||||
<VField>
|
||||
<VControl>
|
||||
<input
|
||||
v-model="params.title"
|
||||
class="input custom-text-filter"
|
||||
placeholder="계약명"
|
||||
>
|
||||
</VControl>
|
||||
<span>{{params.title}}</span>
|
||||
</VField>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>계약상대자</td>
|
||||
<td colspan="2">
|
||||
<td colspan="1" style="text-align: left">
|
||||
<VField>
|
||||
<VControl>
|
||||
<input
|
||||
v-model="params.regNm"
|
||||
class="input custom-text-filter"
|
||||
placeholder="사업자번호"
|
||||
>
|
||||
</VControl>
|
||||
<span>{{params.regNm}}</span>
|
||||
</VField>
|
||||
</td>
|
||||
<td colspan="2">
|
||||
<VField>
|
||||
<VControl>
|
||||
<input
|
||||
v-model="params.place"
|
||||
class="input custom-text-filter"
|
||||
placeholder="업체명"
|
||||
>
|
||||
</VControl>
|
||||
<span>업체명 : {{params.place}}</span>
|
||||
</VField>
|
||||
</td>
|
||||
<td>
|
||||
<VButton color="danger">
|
||||
<td></td>
|
||||
<td colspan="2">
|
||||
<VButton color="danger" disabled>
|
||||
구매처 확인
|
||||
</VButton>
|
||||
</td>
|
||||
<td>
|
||||
<VButton color="success">
|
||||
<VButton color="success" disabled>
|
||||
정상
|
||||
</VButton>
|
||||
</td>
|
||||
@@ -191,14 +174,7 @@ const addTabFromRow = (row,index) => {
|
||||
<td>공급가액</td>
|
||||
<td colspan="2">
|
||||
<VField>
|
||||
<VControl>
|
||||
<input
|
||||
:value="formattedNumber"
|
||||
placeholder="금액"
|
||||
@input="onInput"
|
||||
class="input custom-text-filter"
|
||||
>
|
||||
</VControl>
|
||||
<span>{{formattedNumber}}</span>
|
||||
</VField>
|
||||
</td>
|
||||
<td style="color: black">(부가세 별도)</td>
|
||||
@@ -207,121 +183,61 @@ const addTabFromRow = (row,index) => {
|
||||
</td>
|
||||
<td colspan="2">
|
||||
<VField>
|
||||
<VCodeSelect v-model="taxCode" cd_grp="12">
|
||||
<template #code="{ item }">
|
||||
{{ item.cd }}
|
||||
</template>
|
||||
</VCodeSelect>
|
||||
<span>{{taxCode}}</span>
|
||||
</VField>
|
||||
</td>
|
||||
<td style="background-color: var(--primary); text-align: center">통화</td>
|
||||
<td colspan="2">
|
||||
<VField>
|
||||
<VCodeSelect v-model="currencyCode" cd_grp="13">
|
||||
<template #code="{ item }">
|
||||
{{ item.cd }}
|
||||
</template>
|
||||
</VCodeSelect>
|
||||
<span>{{currencyCode}}</span>
|
||||
</VField>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>증빙일</td>
|
||||
<td colspan="2">
|
||||
<div>
|
||||
<VDatePicker
|
||||
v-model="params.regSdt"
|
||||
color="green"
|
||||
trim-weeks
|
||||
>
|
||||
<template #default="{ inputValue, inputEvents }">
|
||||
<VField>
|
||||
<VControl icon="lucide:calendar">
|
||||
<input
|
||||
class="input v-input"
|
||||
type="text"
|
||||
:value="inputValue"
|
||||
placeholder="증빙일"
|
||||
v-on="inputEvents"
|
||||
>
|
||||
</VControl>
|
||||
</VField>
|
||||
</template>
|
||||
</VDatePicker>
|
||||
</div>
|
||||
<VField>
|
||||
<span>{{ params.regSdt }}</span>
|
||||
</VField>
|
||||
</td>
|
||||
<td />
|
||||
<td style="background-color: var(--primary); text-align: center">
|
||||
<span>전기일</span>
|
||||
</td>
|
||||
<td colspan="2">
|
||||
<div>
|
||||
<VDatePicker
|
||||
v-model="params.regSdt2"
|
||||
color="green"
|
||||
trim-weeks
|
||||
>
|
||||
<template #default="{ inputValue, inputEvents }">
|
||||
<VField>
|
||||
<VControl icon="lucide:calendar">
|
||||
<input
|
||||
class="input v-input"
|
||||
type="text"
|
||||
:value="inputValue"
|
||||
placeholder="전기일"
|
||||
v-on="inputEvents"
|
||||
>
|
||||
</VControl>
|
||||
</VField>
|
||||
</template>
|
||||
</VDatePicker>
|
||||
</div>
|
||||
<td colspan="5">
|
||||
<VField>
|
||||
<span>{{ params.regSdt2 }}</span>
|
||||
</VField>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>계좌관리</td>
|
||||
<td>
|
||||
<VField>
|
||||
<VControl>
|
||||
<input
|
||||
v-model="params.bankl"
|
||||
class="input custom-text-filter"
|
||||
placeholder="계약번호"
|
||||
>
|
||||
</VControl>
|
||||
<span>{{params.bankl}}</span>
|
||||
</VField>
|
||||
</td>
|
||||
<td colspan="2">
|
||||
<VField>
|
||||
<VControl>
|
||||
<input
|
||||
v-model="params.bankn"
|
||||
class="input custom-text-filter"
|
||||
placeholder="계좌번호"
|
||||
>
|
||||
</VControl>
|
||||
<span>{{params.bankn}}</span>
|
||||
</VField>
|
||||
</td>
|
||||
<td>
|
||||
<VButton color="info">
|
||||
<td colspan="2">
|
||||
<VButton color="info" disabled>
|
||||
계좌조회
|
||||
</VButton>
|
||||
</td>
|
||||
<td>
|
||||
<VButton color="success">
|
||||
<VButton color="success" disabled>
|
||||
정상
|
||||
</VButton>
|
||||
</td>
|
||||
<td></td>
|
||||
<td style="background-color: var(--primary); text-align: center">
|
||||
<span>세금계산서</span>
|
||||
</td>
|
||||
<td colspan="2">
|
||||
<VField>
|
||||
<VCodeSelect
|
||||
v-model="taxInvoiceCode"
|
||||
cd_grp=12 >
|
||||
</VCodeSelect>
|
||||
<span>{{taxInvoiceCode}}</span>
|
||||
</VField>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -331,36 +247,24 @@ const addTabFromRow = (row,index) => {
|
||||
<VButton
|
||||
color="primary"
|
||||
@click="centeredActionsOpen = true"
|
||||
disabled
|
||||
>
|
||||
G/L계정// 설정필요
|
||||
</VButton>
|
||||
</td>
|
||||
<td colspan="2">
|
||||
<VField>
|
||||
<VCodeSelect
|
||||
v-model="accountSubjectCode"
|
||||
cd_grp=12 >
|
||||
</VCodeSelect>
|
||||
<span>{{accountSubjectCode}}</span>
|
||||
</VField>
|
||||
</td>
|
||||
<td>
|
||||
<VField>
|
||||
<VSelect v-model="selectCostCode">
|
||||
<option v-for="opt in selectCostCodeOptions" :key="opt.key">
|
||||
{{ opt.text }}
|
||||
</option>
|
||||
</VSelect>
|
||||
<span>코스트센터/WBS{{selectCostCode}}</span>
|
||||
</VField>
|
||||
</td>
|
||||
<td colspan="2">
|
||||
<VField>
|
||||
<VControl>
|
||||
<input
|
||||
v-model="params.title"
|
||||
class="input custom-text-filter"
|
||||
placeholder="코드"
|
||||
>
|
||||
</VControl>
|
||||
<span>코스트센터/WBS코드예정</span>
|
||||
</VField>
|
||||
</td>
|
||||
<td colspan="4"></td>
|
||||
@@ -427,9 +331,6 @@ const addTabFromRow = (row,index) => {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
tr:nth-child(3) {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
tr td button{
|
||||
width: 100%;
|
||||
@@ -462,13 +363,8 @@ button:nth-child(3) {
|
||||
.field {
|
||||
margin: 0px 0px;
|
||||
}
|
||||
|
||||
|
||||
.disabled-button {
|
||||
//opacity: 0.5;
|
||||
background-color: #ccc;
|
||||
cursor: not-allowed;
|
||||
//transition: all 0.2s;
|
||||
}
|
||||
.button[disabled], fieldset[disabled] .button {
|
||||
opacity: 1.0;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
@@ -54,7 +54,7 @@ const params = reactive({
|
||||
{ key: 'deptNm', label: '부서' },
|
||||
{ key: 'sabun', label: '사번' },
|
||||
{ key: 'name', label: '이름' },
|
||||
{ key: 'attendNm', label: '비고' },
|
||||
{ key: 'attendNm', label: '근태' },
|
||||
{ key: 'apprStat', label: '결재상태'},
|
||||
{ key: 'apprDt', label: '승인일자'},
|
||||
],
|
||||
@@ -425,7 +425,7 @@ function minAmtCalc (est) {
|
||||
<td>최소견적서</td>
|
||||
<td colspan="7">
|
||||
<div class="columns">
|
||||
<div class="column is-2">사업자명 : {{params.minAmtComp.join(',')}}</div>
|
||||
<div class="column is-4">사업자명 : {{params.minAmtComp.join(', ')}}</div>
|
||||
<div class="column is-2">견적 금액 : {{formatCurrency(params.minAmt)}}원</div>
|
||||
</div>
|
||||
</td>
|
||||
|
||||
@@ -38,9 +38,6 @@ const params = reactive({
|
||||
})
|
||||
|
||||
async function getPriceListData(){
|
||||
const today = new Date()
|
||||
searchParamsList.regSdt = new Date().setDate(today.getDate() - 30)
|
||||
|
||||
const priceBase = {
|
||||
params:{
|
||||
regSdt: formatDatefromString(searchParamsList.regSdt),
|
||||
|
||||
26
src/service/sapApprovalApi.ts
Normal file
26
src/service/sapApprovalApi.ts
Normal file
@@ -0,0 +1,26 @@
|
||||
import axios from 'axios'
|
||||
|
||||
/**
|
||||
* SAP결재번호를 계약결재번호로 변경
|
||||
* @param {object} params
|
||||
* @property {string} params.apprNo - 결재번호
|
||||
* @returns
|
||||
*/
|
||||
export async function sapApprConveterNo(params = {}) {
|
||||
try {
|
||||
console.log(params)
|
||||
const result = await axios.get(`/api/sap/appr/converter/${params}`)
|
||||
return result
|
||||
}
|
||||
catch (e) {
|
||||
if (e.response) {
|
||||
if (e.response.status >= 500) {
|
||||
throw new Error('서버 오류가 발생했습니다.')
|
||||
} else if (e.response.status >= 400) {
|
||||
throw new Error('잘못된 요청입니다.')
|
||||
}
|
||||
}
|
||||
throw new Error(e.message)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user