mirror of
https://git.hmsn.ink/kospo/svcm/oa.git
synced 2026-03-20 03:22:48 +09:00
Merge branch 'featrue/0526-update'
# Conflicts: # src/pages/app/contractDetail.vue
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import {deletePrcsFile, getPrcsFileDown, savePrice} from '/src/service/priceApi'
|
import {savePrice} from '/src/service/priceApi'
|
||||||
import {type iPbAtt, Person} from '/@src/utils/types'
|
import {type iPbAtt, Person} from '/@src/utils/types'
|
||||||
import {formatBizNum,formatDatefromString} from "/@src/utils/common/comfunc.ts";
|
import {formatBizNum,formatDatefromString} from "/@src/utils/common/comfunc.ts";
|
||||||
|
|
||||||
@@ -204,10 +204,12 @@ const onFileChange = (e: any) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const onFilDelete = async ( index: number, fileOrd: number) => {
|
const onFilDelete = async ( index: number, fileOrd: number) => {
|
||||||
notyf.dismissAll()
|
const confirmed = confirm('삭제하시겠습니까?')
|
||||||
if (index) {
|
if (index) {
|
||||||
|
if (confirmed){
|
||||||
pbAtts.value.splice(index, 1)
|
pbAtts.value.splice(index, 1)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function onInput(row, column){
|
function onInput(row, column){
|
||||||
@@ -239,7 +241,7 @@ function onInput(row, column){
|
|||||||
<tr>
|
<tr>
|
||||||
<td>분야</td>
|
<td>분야</td>
|
||||||
<td colspan="2">
|
<td colspan="2">
|
||||||
<span class="column">
|
<span class="column is-7">
|
||||||
<VField class="pr-2">
|
<VField class="pr-2">
|
||||||
<VCodeSelect
|
<VCodeSelect
|
||||||
cd_grp=5
|
cd_grp=5
|
||||||
@@ -308,7 +310,7 @@ function onInput(row, column){
|
|||||||
<VControl>
|
<VControl>
|
||||||
<input
|
<input
|
||||||
v-model="row[column.key]"
|
v-model="row[column.key]"
|
||||||
class="editable-input"
|
class="input custom-text-filter"
|
||||||
ref="prcsBizsRef"
|
ref="prcsBizsRef"
|
||||||
@blur="onInput(row, column)"
|
@blur="onInput(row, column)"
|
||||||
/>
|
/>
|
||||||
@@ -353,7 +355,9 @@ function onInput(row, column){
|
|||||||
@close="detailActionsOpen = false"
|
@close="detailActionsOpen = false"
|
||||||
>
|
>
|
||||||
<template #content>
|
<template #content>
|
||||||
|
<div class="form-label">
|
||||||
<VButton color="success">일괄업로드</VButton>
|
<VButton color="success">일괄업로드</VButton>
|
||||||
|
</div>
|
||||||
<ComVFlexTable
|
<ComVFlexTable
|
||||||
:key="params.dtlSpecs.length"
|
:key="params.dtlSpecs.length"
|
||||||
:data="params.dtlSpecs"
|
:data="params.dtlSpecs"
|
||||||
@@ -364,11 +368,11 @@ function onInput(row, column){
|
|||||||
>
|
>
|
||||||
<template #body-cell="{ row, column, index, value }">
|
<template #body-cell="{ row, column, index, value }">
|
||||||
<!-- 예: 특정 컬럼이면 input, 아니면 그냥 값 출력 -->
|
<!-- 예: 특정 컬럼이면 input, 아니면 그냥 값 출력 -->
|
||||||
<div>
|
<div class="control w-100" :class="column.key === 'delete'? 'text-center': ''">
|
||||||
<input
|
<input
|
||||||
v-if="column.editable"
|
v-if="column.editable"
|
||||||
v-model="row[column.key]"
|
v-model="row[column.key]"
|
||||||
class="editable-input"
|
class="input custom-text-filter"
|
||||||
/>
|
/>
|
||||||
<span v-else-if="column.key=='num'">{{index+1}}</span>
|
<span v-else-if="column.key=='num'">{{index+1}}</span>
|
||||||
<span v-else-if="column.key=='delete'" class="lnil lnil-close"
|
<span v-else-if="column.key=='delete'" class="lnil lnil-close"
|
||||||
@@ -396,7 +400,7 @@ function onInput(row, column){
|
|||||||
<td>등록기간</td>
|
<td>등록기간</td>
|
||||||
<td colspan="6">
|
<td colspan="6">
|
||||||
<div class="columns">
|
<div class="columns">
|
||||||
<div class="column is-5">
|
<div class="column is-4">
|
||||||
<VDatePicker
|
<VDatePicker
|
||||||
v-model="generalParams.regSdat"
|
v-model="generalParams.regSdat"
|
||||||
color="green"
|
color="green"
|
||||||
@@ -418,7 +422,7 @@ function onInput(row, column){
|
|||||||
</VDatePicker>
|
</VDatePicker>
|
||||||
</div>
|
</div>
|
||||||
<div style="transform: translateY(15px)">~</div>
|
<div style="transform: translateY(15px)">~</div>
|
||||||
<div class="column is-5">
|
<div class="column is-4">
|
||||||
<VDatePicker
|
<VDatePicker
|
||||||
v-model="generalParams.regEdat"
|
v-model="generalParams.regEdat"
|
||||||
color="green"
|
color="green"
|
||||||
@@ -540,6 +544,56 @@ function onInput(row, column){
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
/*css 추가 start*/
|
||||||
|
.flex-table {
|
||||||
|
.flex-table-header {
|
||||||
|
padding: 0.1rem !important;
|
||||||
|
min-height: 40px;
|
||||||
|
border-top-left-radius: .75rem;
|
||||||
|
border-top-right-radius: .75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-table-cell {
|
||||||
|
.w-100 {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.flex-table-item {
|
||||||
|
padding: 0.1rem !important;
|
||||||
|
min-height: 40px;
|
||||||
|
|
||||||
|
.column {
|
||||||
|
min-height: 40px;
|
||||||
|
padding: 0.1rem !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
border-bottom-left-radius: .75rem;
|
||||||
|
border-bottom-right-radius: .75rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-container {
|
||||||
|
overflow:hidden;
|
||||||
|
.control {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
td {
|
||||||
|
padding: 10px 10px !important;
|
||||||
|
.columns {
|
||||||
|
margin-left: 10px !important;
|
||||||
|
padding-top: 10px;
|
||||||
|
}
|
||||||
|
.column {
|
||||||
|
padding: 0 !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-center {
|
||||||
|
text-align:center;
|
||||||
|
}
|
||||||
.table tbody td {
|
.table tbody td {
|
||||||
color: var(--smoke-white);
|
color: var(--smoke-white);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ function getContractDetail(){
|
|||||||
if(params.sessionUser.sabun == arguments[0].regSabun && arguments[0].contStatCd == '0000'){
|
if(params.sessionUser.sabun == arguments[0].regSabun && arguments[0].contStatCd == '0000'){
|
||||||
router.push({ path: '/app/contractUpdate', state: { key: arguments[0].contNo}})
|
router.push({ path: '/app/contractUpdate', state: { key: arguments[0].contNo}})
|
||||||
}else{
|
}else{
|
||||||
//router.push({ path: '/app/priceDetail', state: { key: arguments[0].prcsNo }})
|
router.push({ path: '/app/contractDetail', state: { key: arguments[0].contNo }})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -179,6 +179,7 @@ const onPrcsFileDownload = async (prcsNo: string, fileOrd: number, logiFnm: stri
|
|||||||
v-model="params.cateSelect"
|
v-model="params.cateSelect"
|
||||||
class="input custom-text-filter"
|
class="input custom-text-filter"
|
||||||
placeholder="제목"
|
placeholder="제목"
|
||||||
|
disabled
|
||||||
>
|
>
|
||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
@@ -192,6 +193,7 @@ const onPrcsFileDownload = async (prcsNo: string, fileOrd: number, logiFnm: stri
|
|||||||
v-model="generalParams.title"
|
v-model="generalParams.title"
|
||||||
class="input custom-text-filter"
|
class="input custom-text-filter"
|
||||||
placeholder="제목"
|
placeholder="제목"
|
||||||
|
disabled
|
||||||
>
|
>
|
||||||
</VControl>
|
</VControl>
|
||||||
</VField>
|
</VField>
|
||||||
@@ -209,6 +211,7 @@ const onPrcsFileDownload = async (prcsNo: string, fileOrd: number, logiFnm: stri
|
|||||||
v-model="generalParams.content"
|
v-model="generalParams.content"
|
||||||
class="input custom-text-filter"
|
class="input custom-text-filter"
|
||||||
placeholder="내용"
|
placeholder="내용"
|
||||||
|
disabled
|
||||||
/>
|
/>
|
||||||
</VControl>
|
</VControl>
|
||||||
</VField>
|
</VField>
|
||||||
@@ -218,6 +221,7 @@ const onPrcsFileDownload = async (prcsNo: string, fileOrd: number, logiFnm: stri
|
|||||||
<tr>
|
<tr>
|
||||||
<td>규격입력</td>
|
<td>규격입력</td>
|
||||||
<td colspan="2">
|
<td colspan="2">
|
||||||
|
<span class="column is-7">
|
||||||
<VButton
|
<VButton
|
||||||
color='success'
|
color='success'
|
||||||
icon="fas"
|
icon="fas"
|
||||||
@@ -249,7 +253,8 @@ const onPrcsFileDownload = async (prcsNo: string, fileOrd: number, logiFnm: stri
|
|||||||
:readonly=true
|
:readonly=true
|
||||||
v-if="column.editable"
|
v-if="column.editable"
|
||||||
v-model="row[column.key]"
|
v-model="row[column.key]"
|
||||||
class="editable-input"
|
class="input custom-text-filter"
|
||||||
|
disabled
|
||||||
/>
|
/>
|
||||||
<span v-else-if="column.key=='num'">{{index+1}}</span>
|
<span v-else-if="column.key=='num'">{{index+1}}</span>
|
||||||
<span v-else>{{ value }}</span>
|
<span v-else>{{ value }}</span>
|
||||||
@@ -260,68 +265,26 @@ const onPrcsFileDownload = async (prcsNo: string, fileOrd: number, logiFnm: stri
|
|||||||
<template #cancel>
|
<template #cancel>
|
||||||
</template>
|
</template>
|
||||||
</VModal>
|
</VModal>
|
||||||
|
</span>
|
||||||
</td>
|
</td>
|
||||||
<td>등록기간</td>
|
<td>등록기간</td>
|
||||||
<td colspan="5">
|
<td colspan="5">
|
||||||
<div class="columns">
|
<div class="columns">
|
||||||
<div class="column is-5">
|
<div class="column is-5">
|
||||||
<!-- <VDatePicker-->
|
|
||||||
<!-- v-model="generalParams.regSdat"-->
|
|
||||||
<!-- color="green"-->
|
|
||||||
<!-- disabled-->
|
|
||||||
<!-- trim-weeks-->
|
|
||||||
<!-- style="pointer-events: none;"-->
|
|
||||||
<!-- >-->
|
|
||||||
<!-- <template #default="{ inputValue, inputEvents }">-->
|
|
||||||
<!-- <VField>-->
|
|
||||||
<!-- <VControl icon="lucide:calendar">-->
|
|
||||||
<!-- <input-->
|
|
||||||
<!-- :readonly=true-->
|
|
||||||
<!-- class="input v-input"-->
|
|
||||||
<!-- type="text"-->
|
|
||||||
<!-- :value="inputValue"-->
|
|
||||||
<!-- v-on="inputEvents"-->
|
|
||||||
<!-- placeholder="시작일"-->
|
|
||||||
<!-- >-->
|
|
||||||
<!-- </VControl>-->
|
|
||||||
<!-- </VField>-->
|
|
||||||
<!-- </template>-->
|
|
||||||
<!-- </VDatePicker>-->
|
|
||||||
<input
|
<input
|
||||||
:readonly=true
|
:readonly=true
|
||||||
v-model="generalParams.regSdat"
|
v-model="generalParams.regSdat"
|
||||||
class="input custom-text-filter"
|
class="input custom-text-filter"
|
||||||
placeholder="제목"
|
disabled
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<div style="transform: translateY(15px)">~</div>
|
<div style="transform: translateY(15px)">~</div>
|
||||||
<div class="column is-5">
|
<div class="column is-5">
|
||||||
<!-- <VDatePicker-->
|
|
||||||
<!-- v-model="generalParams.regEdat"-->
|
|
||||||
<!-- color="green"-->
|
|
||||||
<!-- trim-weeks-->
|
|
||||||
<!-- disabledDates=""-->
|
|
||||||
<!-- >-->
|
|
||||||
<!-- <template #default="{ inputValue, inputEvents }">-->
|
|
||||||
<!-- <VField>-->
|
|
||||||
<!-- <VControl icon="lucide:calendar">-->
|
|
||||||
<!-- <input-->
|
|
||||||
<!-- :readonly=true-->
|
|
||||||
<!-- class="input v-input"-->
|
|
||||||
<!-- type="text"-->
|
|
||||||
<!-- :value="inputValue"-->
|
|
||||||
<!-- v-on="inputEvents"-->
|
|
||||||
<!-- placeholder="종료일"-->
|
|
||||||
<!-- >-->
|
|
||||||
<!-- </VControl>-->
|
|
||||||
<!-- </VField>-->
|
|
||||||
<!-- </template>-->
|
|
||||||
<!-- </VDatePicker>-->
|
|
||||||
<input
|
<input
|
||||||
:readonly=true
|
:readonly=true
|
||||||
v-model="generalParams.regEdat"
|
v-model="generalParams.regEdat"
|
||||||
class="input custom-text-filter"
|
class="input custom-text-filter"
|
||||||
placeholder="제목"
|
disabled
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -359,14 +322,7 @@ const onPrcsFileDownload = async (prcsNo: string, fileOrd: number, logiFnm: stri
|
|||||||
<td colspan="6">
|
<td colspan="6">
|
||||||
<slot name="status" v-if="!params.svyYn">
|
<slot name="status" v-if="!params.svyYn">
|
||||||
<div style="display: flex; justify-content: flex-end; gap: 8px;">
|
<div style="display: flex; justify-content: flex-end; gap: 8px;">
|
||||||
<!-- <VButton-->
|
|
||||||
<!-- color="primary"-->
|
|
||||||
<!-- icon="fas"-->
|
|
||||||
<!-- elevated-->
|
|
||||||
<!-- @click="showTable = !showTable"-->
|
|
||||||
<!-- >-->
|
|
||||||
<!-- 견적사 확인-->
|
|
||||||
<!-- </VButton>-->
|
|
||||||
<VButton
|
<VButton
|
||||||
color="primary"
|
color="primary"
|
||||||
icon="fas fa-circle"
|
icon="fas fa-circle"
|
||||||
|
|||||||
@@ -222,16 +222,22 @@ const onFileChange = (e: any) => {
|
|||||||
|
|
||||||
const onFilDelete = async (prcsNo: string, index: number, fileOrd: number) => {
|
const onFilDelete = async (prcsNo: string, index: number, fileOrd: number) => {
|
||||||
notyf.dismissAll()
|
notyf.dismissAll()
|
||||||
console.log(prcsNo)
|
const confirmed = confirm('삭제하시겠습니까?')
|
||||||
if (prcsNo === undefined || prcsNo === null) {
|
if (!prcsNo) {
|
||||||
|
if (confirmed){
|
||||||
pbAtts.value.splice(index, 1)
|
pbAtts.value.splice(index, 1)
|
||||||
}
|
}
|
||||||
else {
|
} else {
|
||||||
await deletePrcsFile(params.prcsNo, fileOrd).then((res: string) => {
|
if (confirmed) {
|
||||||
|
await deletePrcsFile(prcsNo, fileOrd).then((res: string) => {
|
||||||
notyf.success(res)
|
notyf.success(res)
|
||||||
pbAtts.value.splice(index, 1)
|
pbAtts.value.splice(index, 1)
|
||||||
|
}).catch((err) => {
|
||||||
|
notyf.error('삭제 중 오류가 발생했습니다.')
|
||||||
|
console.error(err)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const onPrcsFileDownload = async (prcsNo: string, fileOrd: number, logiFnm: string) => {
|
const onPrcsFileDownload = async (prcsNo: string, fileOrd: number, logiFnm: string) => {
|
||||||
@@ -334,7 +340,7 @@ const onPrcsFileDownload = async (prcsNo: string, fileOrd: number, logiFnm: stri
|
|||||||
<input
|
<input
|
||||||
v-if="column.editable"
|
v-if="column.editable"
|
||||||
v-model="row[column.key]"
|
v-model="row[column.key]"
|
||||||
class="input editable-input"
|
class="input custom-text-filter"
|
||||||
@blur="onInput(row, column)"
|
@blur="onInput(row, column)"
|
||||||
/>
|
/>
|
||||||
<span v-else-if="column.key=='num'">{{index + 1}}</span>
|
<span v-else-if="column.key=='num'">{{index + 1}}</span>
|
||||||
@@ -377,7 +383,9 @@ const onPrcsFileDownload = async (prcsNo: string, fileOrd: number, logiFnm: stri
|
|||||||
@close="detailActionsOpen = false"
|
@close="detailActionsOpen = false"
|
||||||
>
|
>
|
||||||
<template #content>
|
<template #content>
|
||||||
|
<div class="form-label">
|
||||||
<VButton color="success">일괄업로드</VButton>
|
<VButton color="success">일괄업로드</VButton>
|
||||||
|
</div>
|
||||||
<ComVFlexTable
|
<ComVFlexTable
|
||||||
:key="params.dtlSpecs.length"
|
:key="params.dtlSpecs.length"
|
||||||
:data="params.dtlSpecs"
|
:data="params.dtlSpecs"
|
||||||
@@ -391,7 +399,7 @@ const onPrcsFileDownload = async (prcsNo: string, fileOrd: number, logiFnm: stri
|
|||||||
<input
|
<input
|
||||||
v-if="column.editable"
|
v-if="column.editable"
|
||||||
v-model="row[column.key]"
|
v-model="row[column.key]"
|
||||||
class="editable-input input"
|
class="input custom-text-filter"
|
||||||
/>
|
/>
|
||||||
<span v-else-if="column.key=='num'">{{index+1}}</span>
|
<span v-else-if="column.key=='num'">{{index+1}}</span>
|
||||||
<span v-else-if="column.key=='delete'" class="lnil lnil-close"
|
<span v-else-if="column.key=='delete'" class="lnil lnil-close"
|
||||||
@@ -514,9 +522,12 @@ const onPrcsFileDownload = async (prcsNo: string, fileOrd: number, logiFnm: stri
|
|||||||
<div class="estimate-file-name">
|
<div class="estimate-file-name">
|
||||||
{{ f.logiFnm }}{{" ("}}{{Math.ceil(f.size / 1024)}}kb{{")"}}
|
{{ f.logiFnm }}{{" ("}}{{Math.ceil(f.size / 1024)}}kb{{")"}}
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<span>
|
||||||
<i class="fa fa-download estimate-file-download" @click="onPrcsFileDownload(f.prcsNo, f.fileOrd, f.logiFnm)" />
|
<i class="fa fa-download estimate-file-download" @click="onPrcsFileDownload(f.prcsNo, f.fileOrd, f.logiFnm)" />
|
||||||
</div>
|
</span>
|
||||||
|
<span>
|
||||||
|
<i class="fa fa-trash estimate-file-delete" @click="onFilDelete(f.prcsNo, i, f.fileOrd)" />
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</VControl>
|
</VControl>
|
||||||
</VField>
|
</VField>
|
||||||
@@ -557,6 +568,9 @@ const onPrcsFileDownload = async (prcsNo: string, fileOrd: number, logiFnm: stri
|
|||||||
placeholder="재중"
|
placeholder="재중"
|
||||||
cd_grp=6
|
cd_grp=6
|
||||||
v-model="row.attendCd">
|
v-model="row.attendCd">
|
||||||
|
<!-- <template #code>-->
|
||||||
|
<!-- <span v-if="!row.attendCd">{{"재중"}}</span>-->
|
||||||
|
<!-- </template>-->
|
||||||
</VCodeSelect>
|
</VCodeSelect>
|
||||||
</VField>
|
</VField>
|
||||||
</span>
|
</span>
|
||||||
|
|||||||
Reference in New Issue
Block a user