bcddc19d by xukangle

fix

1 parent a764f068
...@@ -83,6 +83,13 @@ VITE_APP_PERSONAL_URL = 'ms-daop-personel-service' ...@@ -83,6 +83,13 @@ VITE_APP_PERSONAL_URL = 'ms-daop-personel-service'
83 VITE_APP_CIRCULATION = http://192.168.6.20:18052/ 83 VITE_APP_CIRCULATION = http://192.168.6.20:18052/
84 # 测试环境访问地址 84 # 测试环境访问地址
85 VITE_API_CIRCULATION_URL = http://192.168.6.22:29900/circulation 85 VITE_API_CIRCULATION_URL = http://192.168.6.22:29900/circulation
86
87 #数据加工交付
88 VITE_APP_DATA_DELIVERY = http://192.168.6.20:38052/
89 # 测试环境访问地址
90 VITE_API_DATA_DELIVERY_URL = http://192.168.6.22:29900/delivery
91
92
86 # 本地访问地址 93 # 本地访问地址
87 # VITE_API_CIRCULATION_URL = http://localhost:9000/circulation 94 # VITE_API_CIRCULATION_URL = http://localhost:9000/circulation
88 95
......
...@@ -116,7 +116,8 @@ VITE_APP_PERSONAL_URL = ms-daop-personel-service ...@@ -116,7 +116,8 @@ VITE_APP_PERSONAL_URL = ms-daop-personel-service
116 116
117 #流通平台接口地址 117 #流通平台接口地址
118 VITE_APP_CIRCULATION = http://192.168.6.20:18052/ 118 VITE_APP_CIRCULATION = http://192.168.6.20:18052/
119 119 #数据加工交付
120 VITE_APP_DATA_DELIVERY = http://192.168.6.20:38052/
120 121
121 # 是否在打包时生成 sourcemap 122 # 是否在打包时生成 sourcemap
122 VITE_BUILD_SOURCEMAP = false 123 VITE_BUILD_SOURCEMAP = false
......
...@@ -63,6 +63,23 @@ server { ...@@ -63,6 +63,23 @@ server {
63 rewrite ^/circulation/(.*)$ /$1 break; 63 rewrite ^/circulation/(.*)$ /$1 break;
64 proxy_pass http://192.168.6.20:18052; 64 proxy_pass http://192.168.6.20:18052;
65 } 65 }
66 location /delivery {
67 # 设置允许跨域的域名,可以使用通配符 '*' 允许所有域访问
68 add_header 'Access-Control-Allow-Origin' * always;
69 # 设置允许的 HTTP 方法
70 add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE, PUT';
71 # 设置允许的请求头
72 add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type, Accept, Origin, X-Requested-With';
73 # 如果需要支持 cookie,可以设置以下 header
74 add_header 'Access-Control-Allow-Credentials' 'true';
75 # 缓存设置
76 add_header Cache-Control no-cache;
77 add_header Cache-Control private;
78
79 # 使用 rewrite 将 /circulation 替换为 /new-api
80 rewrite ^/delivery/(.*)$ /$1 break;
81 proxy_pass http://192.168.6.20:38052;
82 }
66 83
67 error_page 500 502 503 504 /50x.html; 84 error_page 500 502 503 504 /50x.html;
68 location = /50x.html { 85 location = /50x.html {
......
...@@ -402,3 +402,30 @@ export const getExchangeList = () => request({ ...@@ -402,3 +402,30 @@ export const getExchangeList = () => request({
402 url: `${import.meta.env.VITE_API_NEW_PORTAL}/register-base/register-num`, 402 url: `${import.meta.env.VITE_API_NEW_PORTAL}/register-base/register-num`,
403 method: 'post' 403 method: 'post'
404 }) 404 })
405
406
407
408 // API详情
409 /** 查询域名和文根 */
410 /** api类型,有表单类型,自定义sql. */
411 export const apiTypes: any = [{
412 value: 1,
413 label: '单表API'
414 }, {
415 value: 2,
416 label: '自定义sql'
417 }, {
418 value: 3,
419 label: '注册API'
420 }];
421
422 /** 获取api详情信息 */
423 export const getApiDetail = (params) => request({
424 // url:`${import.meta.env.VITE_APP_SERVICE_BASEURL}/api-base-info/detail`,
425 // url: `http://localhost:9000/circulation/ms-data-circulation-portal-service/enterprise/detail-by-name`,
426 // url: `http://localhost:9000/delivery/api-base-info/detail`,
427 url: `http://192.168.6.20:38052/delivery/api-base-info/detail`,
428 method: 'get',
429 params
430 })
431
......
...@@ -81,6 +81,20 @@ const routes: RouteRecordRaw[] = [ ...@@ -81,6 +81,20 @@ const routes: RouteRecordRaw[] = [
81 } 81 }
82 } 82 }
83 }, 83 },
84 {
85 // path: 'processDetail',
86 // name: 'APIProcessDetail',
87 path: 'api-detail',
88 name: 'apiDetail',
89 component: () => import('@/views/data_asset/detail_serviceApi.vue'),
90 meta: {
91 title: '流程详情',
92 sidebar: false,
93 breadcrumb: false,
94 cache: true,
95 reuse: true
96 }
97 },
84 // { 98 // {
85 // path: 'import-table-field', 99 // path: 'import-table-field',
86 // name: 'importTableField', 100 // name: 'importTableField',
......
1 <script lang="ts" setup name="detail_serviceApi">
2 import { ref } from "vue";
3 import { TableColumnWidth } from '@/utils/enum';
4 import { getCamundaDeploymentId } from "@/api/modules/workFlowService"
5 import {
6 getApiDetail,
7 apiTypes,
8 } from "@/api/modules/dataAsset";
9 const route = useRoute();
10 const { proxy } = getCurrentInstance() as any;
11 const router = useRouter();
12 const props = defineProps({
13 apiGuid: {
14 type: String,
15 default: ''
16 }
17 });
18 const detailLoading = ref(false);
19 const baseInfoExpand = ref(true);
20 const deploymentId = ref('');
21 const processInstanceId = ref('');
22 const pageDetail = ref({});
23 const bizApproveVO = ref();
24 const process = ref();
25 const flowExpand = ref(true);
26 const detailInfo: any = ref({});
27 const apiType = ref('1');// 单表API.
28 const sql = ref('');
29 const processDTOSValue = ref([]);
30
31 onBeforeMount(() => {
32 if (route.query.guid) {
33 getDetail();
34 } else {
35 getCamundaDeploymentId('10023').then((res: any) => {
36 if (res.code == proxy.$passCode) {
37 deploymentId.value = res.data;
38 } else {
39 proxy.$ElMessage.error(res.msg);
40 }
41 })
42 }
43 });
44
45 onActivated(() => {
46 // if (route.query.guid) {
47 // getDetail();
48 // } else {
49 // getCamundaDeploymentId('10023').then((res: any) => {
50 // if (res.code == proxy.$passCode) {
51 // deploymentId.value = res.data;
52 // } else {
53 // proxy.$ElMessage.error(res.msg);
54 // }
55 // })
56 // }
57 })
58
59 const getDetail = () => {
60 detailLoading.value = true;
61
62 // getApiDetail
63 return getApiDetail(route.query.guid).then((res: any) => {
64 detailLoading.value = false;
65 console.log('getApiDetail', res);
66 if (res?.code == proxy.$passCode) {
67 let data = res.data;
68 let { approveVO } = data
69 pageDetail.value = res.data;
70 bizApproveVO.value = data.approveVO;
71 deploymentId.value = approveVO.camundaDeploymentId
72 processInstanceId.value = approveVO.camundaInstanceId
73 process.value?.renderProcessNodes();
74 detailInfo.value = data;
75 apiType.value = data.apiType;
76 let apiConfigAccessRSVOS = data.configChangeRecordRSVOS || [];
77 let inputParamData: any[] = [];
78 let requestData: any[] = [];
79 let responseData: any[] = [];
80 let registRequestData: any[] = [];
81 let constData: any[] = [];
82 let sortData: any[] = [];
83 apiConfigAccessRSVOS.forEach(vo => {
84 if (vo.paramType == 'DEFIN') {
85 inputParamData.push(vo);
86 } else if (vo.paramType == 'REQ') {
87 if (apiType.value == '3') {
88 registRequestData.push(vo);
89 } else if (apiType.value == '2') {
90 inputParamData.push(vo);
91 } else {
92 requestData.push(vo);
93 }
94 } else if (vo.paramType == 'RESP') {
95 responseData.push(vo);
96 } else if (vo.paramType == 'ORDER') {
97 sortData.push({ ...vo, index: sortData.length + 1 });
98 } else if (vo.paramType == 'SQL') {
99 sql.value = vo.selectSqlStatement;
100 // sqlFormItems.value.forEach(item => {
101 // item.default = vo.selectSqlStatement;
102 // });
103 } else if (vo.paramType == 'CONSTANT') {
104 constData.push(vo);
105 }
106 });
107 if (data.processDTOS && data.processDTOS.length > 0) {
108 let processDTOS = data.processDTOS || [];
109 if (processDTOS?.length > 0) {
110 processDTOS.forEach(obj => {
111 obj.noName = obj.processOrderNo + '' + obj.requirementOrderName
112 })
113 }
114 processDTOSValue.value = processDTOS || [];
115
116 }
117 inputParamsTableInfo.value.data = inputParamData;
118 inputParamsTableInfo.value.height = inputParamData.length > 10 ? '390px' : 'auto';
119 requestParamsTableInfo.value.data = requestData;
120 requestParamsTableInfo.value.height = requestData.length > 10 ? '390px' : 'auto';
121 responseParamsTableInfo.value.data = responseData;
122 responseParamsTableInfo.value.height = responseData.length > 10 ? '390px' : 'auto';
123 sortParamsTableInfo.value.data = sortData;
124 sortParamsTableInfo.value.height = sortData.length > 10 ? '390px' : 'auto';
125 registRequestParamsTableInfo.value.data = registRequestData;
126 registRequestParamsTableInfo.value.height = registRequestData.length > 10 ? '390px' : 'auto';
127 constParamsTableInfo.value.data = constData;
128 constParamsTableInfo.value.height = constData.length > 10 ? '390px' : 'auto';
129 } else {
130 proxy.$ElMessage.error(res?.msg);
131 }
132 });
133 }
134 const seeDetail = (row) => {
135 router.push({
136 name: 'processSheetDetail',
137 query: {
138 guid: row.guid,
139 }
140 });
141 }
142
143 /** 基本信息的入参定义表格配置 */
144 const inputParamsTableInfo = ref({
145 id: "input-params-table",
146 height: 'auto',
147 minHeight: '50px',
148 minPanelHeight: '50px',
149 fields: [
150 { label: "序号", type: "index", width: TableColumnWidth.INDEX, align: "center" },
151 { label: "参数名", field: "paramName", width: 160 },
152 { label: "参数位置", field: "paramPositionName", width: 100 },
153 { label: "参数类型", field: "dataTypeName", width: 120 },
154 {
155 label: "是否必填", field: "isRequired", width: 100, getName: (scope) => {
156 return scope.row.isRequired == 'Y' ? '是' : '否'
157 }
158 },
159 {
160 label: "是否多值", field: "isManyValue", width: 100, getName: (scope) => {
161 return scope.row.isManyValue == 'Y' ? '是' : '否'
162 }
163 },
164 { label: "默认值", field: "defaultValue", width: 200 },
165 { label: "描述", field: "description", width: 160 }
166 ],
167 data: <Array<Object>>[],
168 showPage: false,
169 actionInfo: {
170 show: false,
171 },
172 loading: false
173 });
174
175 const requestParamsTableInfo = ref({
176 id: "request-params-table",
177 height: 'auto',
178 minHeight: '50px',
179 minPanelHeight: '50px',
180 fields: [
181 { label: "序号", type: "index", width: TableColumnWidth.INDEX, align: "center" },
182 { label: "绑定参数", field: "paramName", width: 160 },
183 { label: "绑定字段", field: "boundField", width: 160 },
184 { label: "操作符", field: "operatorName", width: 100 },
185 ],
186 data: <Array<Object>>[],
187 showPage: false,
188 actionInfo: {
189 show: false,
190 },
191 loading: false
192 });
193
194 /** 注册API的请求参数 */
195 const registRequestParamsTableInfo = ref({
196 id: "request-params-table",
197 height: 'auto',
198 minHeight: '50px',
199 minPanelHeight: '50px',
200 fields: [
201 { label: "序号", type: "index", width: TableColumnWidth.INDEX, align: "center" },
202 { label: "参数名", field: "paramName", width: 160 },
203 { label: "参数位置", field: "paramPositionName", width: 100 },
204 { label: "参数类型", field: "dataTypeName", width: 120 },
205 {
206 label: "是否必填", field: "isRequired", width: 100, getName: (scope) => {
207 return scope.row.isRequired == 'Y' ? '是' : '否'
208 }
209 },
210 {
211 label: "是否多值", field: "isManyValue", width: 100, getName: (scope) => {
212 return scope.row.isManyValue == 'Y' ? '是' : '否'
213 }
214 },
215 { label: "默认值", field: "defaultValue", width: 200 },
216 { label: "描述", field: "description", width: 160 }
217 ],
218 data: <Array<Object>>[],
219 showPage: false,
220 actionInfo: {
221 show: false,
222 },
223 loading: false
224 });
225
226 /** 注册API的常量参数 */
227 const constParamsTableInfo = ref({
228 id: "const-params-table",
229 height: 'auto',
230 minHeight: '50px',
231 minPanelHeight: '50px',
232 fields: [
233 { label: "序号", type: "index", width: TableColumnWidth.INDEX, align: "center" },
234 { label: "参数名", field: "paramName", width: 160 },
235 { label: "参数位置", field: "paramPositionName", width: 100 },
236 { label: "参数类型", field: "dataTypeName", width: 120 },
237 {
238 label: "是否必填", field: "isRequired", width: 100, getName: (scope) => {
239 return scope.row.isRequired == 'Y' ? '是' : '否'
240 }
241 },
242 { label: "常量值", field: "defaultValue", width: 200 },
243 { label: "描述", field: "description", width: 160 }
244 ],
245 data: <Array<Object>>[],
246 showPage: false,
247 actionInfo: {
248 show: false,
249 },
250 loading: false
251 });
252
253 const responseParamsTableInfo = ref({
254 id: "response-params-table",
255 height: 'auto',
256 minHeight: '50px',
257 minPanelHeight: '50px',
258 fields: [
259 { label: "序号", type: "index", width: TableColumnWidth.INDEX, align: "center" },
260 { label: "参数名", field: "paramName", width: 160 },
261 { label: "绑定字段", field: "boundField", width: 140 },
262 { label: "参数类型", field: "dataTypeName", width: 120 },
263 { label: "示例值", field: "exampleValue", width: 160 },
264 { label: "描述", field: "description", width: 160 },
265 ],
266 data: <Array<Object>>[],
267 showPage: false,
268 actionInfo: {
269 show: false,
270 },
271 loading: false
272 });
273
274 /** 排序参数配置 */
275 const sortParamsTableInfo = ref({
276 id: "sort-params-table",
277 height: 'auto',
278 minHeight: '100px',
279 minPanelHeight: '100px',
280 fields: [
281 { label: "序号", type: "index", width: TableColumnWidth.INDEX, align: "center" },
282 { label: "参数名", field: "paramName", width: 160 },
283 { label: "绑定字段", field: "boundField", width: 140 },
284 {
285 label: "排序方式", field: "sortMode", width: 100, getName: (scope) => {
286 return scope.row.sortMode == 'ASC' ? '升序' : '降序';
287 }
288 },
289 { label: "描述", field: "description", width: 160 },
290 ],
291 data: <Array<Object>>[],
292 showPage: false,
293 actionInfo: {
294 show: false,
295 },
296 loading: false
297 });
298
299 </script>
300
301 <template>
302 <div class="content_main" v-loading="detailLoading">
303 <ContentWrap title="基础信息" description="" :isExpand="baseInfoExpand" :expand-swicth="true" class="mb16"
304 @expand="(v) => baseInfoExpand = v">
305 <div class="list_panel">
306 <div class="list_item">
307 <span class="item_label">API类型:</span>
308 <span class="item_value">{{ apiTypes.find(a => a.value == apiType)?.label || '-' }}</span>
309 </div>
310 <div class="list_item">
311 <span class="item_label">数据产品名称:</span>
312 <span class="item_value">{{ detailInfo.apiName || '-' }}</span>
313 </div>
314 <div class="list_item">
315 <span class="item_label">场景名称:</span>
316 <span class="item_value">{{ detailInfo.sceneName || '-' }}</span>
317 </div>
318 <div class="list_item">
319 <span class="item_label">加工单号:</span>
320 <span v-for="(obj, idx) in processDTOSValue" @click="seeDetail(obj)" class="item_value cursor"
321 style="color:#4fa1a4;padding-right:8px">{{ obj.noName }}{{ idx < processDTOSValue.length - 1 ? '、' : ''
322 }}</span>
323 <!-- <span class="item_value">{{ detailInfo.sceneName || '-' }}</span> -->
324 </div>
325 <div class="list_item">
326 <span class="item_label">返回类型:</span>
327 <span class="item_value">{{ detailInfo.responseType || '-' }}</span>
328 </div>
329 <div class="list_item">
330 <span class="item_label">请求方式:</span>
331 <span class="item_value">{{ detailInfo.requestMode == 'G' ? 'get' : 'post' }}</span>
332 </div>
333 <div class="list_item">
334 <span class="item_label">安全认证:</span>
335 <span class="item_value">{{ detailInfo.authenticationType == 'T' ? 'token认证' : '无认证' }}</span>
336 </div>
337 <div class="list_item" v-if="detailInfo.authenticationType == 'N'">
338 <span class="item_label">IP白名单:</span>
339 <span class="item_value">
340 <ellipsis-tooltip :content="detailInfo.whiteIPAddrs?.length ? detailInfo.whiteIPAddrs.join(',') : '-'"
341 class-name="w100f mr8-i" :refName="'tooltipOver' + 'WhiteIPs'"></ellipsis-tooltip>
342 </span>
343 </div>
344 <!-- 空白占位符 -->
345 <!-- <div class="list_item" v-if="apiType == '1'">
346 <span class="item_label"></span>
347 <span class="item_value"></span>
348 </div> -->
349 <div class="list_item" v-if="apiType == '1'">
350 <span class="item_label">数据类型:</span>
351 <span class="item_value">{{ detailInfo.dataSourceType == 1 ? '数据源' : '数据目录' }}</span>
352 </div>
353 <div class="list_item" v-if="apiType != '3'">
354 <span class="item_label">数据源:</span>
355 <span class="item_value">{{ detailInfo.dataSourceName || '-' }}</span>
356 </div>
357 <div class="list_item" v-if="apiType == '1'">
358 <span class="item_label">数据表:</span>
359 <span class="item_value">{{ detailInfo.tableName || '-' }}</span>
360 </div>
361 <div class="list_item" v-if="apiType == '1'">
362 <span class="item_label">数据表中文名:</span>
363 <span class="item_value">{{ detailInfo.tableNameCh || '-' }}</span>
364 </div>
365 <div class="list_item is_block">
366 <span class="item_label">请求路径:</span>
367 <span class="item_value">
368 <ellipsis-tooltip :content="detailInfo.requestUrl || '-'" class-name="w100f mr8-i"
369 :refName="'tooltipOver' + 'requestUrl'"></ellipsis-tooltip></span>
370 </div>
371 <div class="list_item is_block">
372 <span class="item_label">API描述:</span>
373 <span class="item_value">
374 <ellipsis-tooltip :content="detailInfo.apiDescription || '-'" class-name="w100f mr8-i"
375 :refName="'tooltipOver' + route.query.guid"></ellipsis-tooltip></span>
376 </div>
377 <template v-if="apiType == '3'">
378 <div class="list_item">
379 <span class="item_label">后台服务HOST:</span>
380 <span class="item_value">{{ `${detailInfo.backstageAgreement}://${detailInfo.backstageHost}` }}</span>
381 </div>
382 <div class="list_item">
383 <span class="item_label">请求方式:</span>
384 <span class="item_value">{{ detailInfo.backstageRequestMode == 'G' ? 'get' : 'post' }}</span>
385 </div>
386 <div class="list_item">
387 <span class="item_label">后端超时:</span>
388 <span class="item_value">{{ detailInfo.backstageOvertime == null ? '-' : (detailInfo.backstageOvertime +
389 'ms') }}</span>
390 </div>
391 <div class="list_item is_block">
392 <span class="item_label">后台服务PATH:</span>
393 <span class="item_value">
394 <ellipsis-tooltip :content="detailInfo.backstagePath || '-'" class-name="w100f mr8-i"
395 :refName="'tooltipOver' + 'path'"></ellipsis-tooltip></span>
396 </div>
397 </template>
398 </div>
399 </ContentWrap>
400
401 <template v-if="inputParamsTableInfo.data.length">
402 <div class="list_item" style="font-weight: 500;color: var(--el-color-regular);margin: 8px 0px;">{{ apiType == '3'
403 ? '请求参数' : '入参定义' }}</div>
404 <Table :tableInfo="inputParamsTableInfo" />
405 </template>
406 <template v-if="requestParamsTableInfo.data.length">
407 <div class="list_item" style="font-weight: 500;color: var(--el-color-regular);margin: 8px 0px;">请求参数</div>
408 <Table :tableInfo="requestParamsTableInfo" />
409 </template>
410 <template v-if="responseParamsTableInfo.data.length">
411 <div class="list_item" style="font-weight: 500;color: var(--el-color-regular);margin: 8px 0px;">返回参数</div>
412 <Table :tableInfo="responseParamsTableInfo" />
413 </template>
414 <template v-if="sortParamsTableInfo.data.length">
415 <div class="list_item" style="font-weight: 500;color: var(--el-color-regular);margin: 8px 0px;">排序参数</div>
416 <Table :tableInfo="sortParamsTableInfo" />
417 </template>
418 <template v-if="apiType == '3'">
419 <template v-if="registRequestParamsTableInfo.data.length">
420 <div class="list_item" style="font-weight: 500;color: var(--el-color-regular);margin: 8px 0px;">请求参数</div>
421 <Table :tableInfo="registRequestParamsTableInfo" />
422 </template>
423 <template v-if="constParamsTableInfo.data.length">
424 <div class="list_item" style="font-weight: 500;color: var(--el-color-regular);margin: 8px 0px;">常量参数</div>
425 <Table :tableInfo="constParamsTableInfo" />
426 </template>
427 </template>
428 <template v-if="apiType == '2'">
429 <div class="list_item" style="font-weight: 500;color: var(--el-color-regular);margin: 8px 0px;">查询sql</div>
430 <el-input v-model.trim="sql" :rows="10" type="textarea" :readonly="true" />
431 </template>
432 <ContentWrap title="流程审批" description="" :isExpand="flowExpand" :expand-swicth="true" class="mb16"
433 @expand="(v) => flowExpand = v">
434 <ApprovalProcess ref="process" v-if="deploymentId" :deploymentId="deploymentId"
435 :processInstanceId="processInstanceId">
436 </ApprovalProcess>
437 </ContentWrap>
438 <FlowBtnGroup pageType="detail" :approveVO="bizApproveVO" @refreshPage="getDetail"></FlowBtnGroup>
439
440 </div>
441 </template>
442
443 <style scoped lang="scss">
444 .content_main {
445 height: calc(100% - 40px);
446 padding: 16px;
447 overflow: hidden auto;
448 position: sticky;
449
450 .list_panel {
451 display: flex;
452 flex-wrap: wrap;
453
454 .list_item {
455 width: 33.33%;
456 line-height: 21px;
457 margin-bottom: 12px;
458 font-size: 14px;
459 color: var(--el-text-color-regular);
460 display: flex;
461 justify-content: space-between;
462 min-width: 120px;
463
464 .item_label {
465 width: 100px;
466 text-align: right;
467 }
468
469 .item_value {
470 color: var(--el-color-regular);
471 padding: 0 8px;
472 flex: 1;
473 text-align: justify;
474 max-width: calc(100% - 100px);
475 }
476
477 &.is_block {
478 width: 100%;
479 }
480
481 .file-operate {
482 display: flex;
483 align-items: center;
484 position: relative;
485
486 .file-img {
487 width: 24px;
488 height: 24px;
489 }
490
491 &:hover {
492 background-color: #f5f5f5;
493 }
494
495 .file-name {
496 color: var(--el-color-regular);
497 margin-left: 4px;
498 }
499
500 .file-preview {
501 position: absolute;
502 cursor: pointer;
503 color: var(--el-color-primary);
504 margin-right: 8px;
505 }
506 }
507 }
508 }
509
510 .table_panel {
511 height: 200px;
512 min-height: 200px;
513 }
514 }
515 </style>
...@@ -134,7 +134,7 @@ const baseInfoFormItems = ref([ ...@@ -134,7 +134,7 @@ const baseInfoFormItems = ref([
134 placeholder: '请输入', 134 placeholder: '请输入',
135 field: 'rightMain', 135 field: 'rightMain',
136 maxlength: 20, 136 maxlength: 20,
137 default: userStore.userName, 137 default: JSON.parse(userStore.userData).tenantName,
138 required: true, 138 required: true,
139 disabled: true 139 disabled: true
140 }, 140 },
...@@ -329,6 +329,7 @@ const assetDataTableInfo = ref({ ...@@ -329,6 +329,7 @@ const assetDataTableInfo = ref({
329 let btns = [{ 329 let btns = [{
330 label: "编辑", value: "edit", click: (scope) => { 330 label: "编辑", value: "edit", click: (scope) => {
331 //分为未建表的编辑,和已建表的编辑。 331 //分为未建表的编辑,和已建表的编辑。
332 console.log(scope, 'scope');
332 let row = scope.row; 333 let row = scope.row;
333 importTableEditIndex.value = scope.$index; 334 importTableEditIndex.value = scope.$index;
334 if (row.guid) {//已建表的 335 if (row.guid) {//已建表的
...@@ -504,6 +505,13 @@ onBeforeMount(() => { ...@@ -504,6 +505,13 @@ onBeforeMount(() => {
504 // ElMessage.error(res.msg) 505 // ElMessage.error(res.msg)
505 // } 506 // }
506 // }) 507 // })
508 // if (route.query.guid && route.query.foundMode == '2') {
509 // baseInfoFormItems.value[0].disabled = true;
510 // baseInfoFormItems.value[1].disabled = true;
511 // baseInfoFormItems.value[2].disabled = true;
512 // baseInfoFormItems.value[5].disabled = true;
513 // }
514
507 getParentAreaPromise.value = getAreaData({ parentId: null }).then((res: any) => { 515 getParentAreaPromise.value = getAreaData({ parentId: null }).then((res: any) => {
508 if (res?.code == proxy.$passCode) { 516 if (res?.code == proxy.$passCode) {
509 parentAreaData.value = res.data ?? []; 517 parentAreaData.value = res.data ?? [];
...@@ -517,7 +525,7 @@ onBeforeMount(() => { ...@@ -517,7 +525,7 @@ onBeforeMount(() => {
517 if (res.code == proxy.$passCode) { 525 if (res.code == proxy.$passCode) {
518 detailInfo.value = res.data || {}; 526 detailInfo.value = res.data || {};
519 baseInfoFormItems.value.forEach((item: any) => { 527 baseInfoFormItems.value.forEach((item: any) => {
520 item.default = detailInfo.value[item.field]; 528 item.default = detailInfo.value[item.field] || '';
521 if (item.field == 'subjectDomain') { 529 if (item.field == 'subjectDomain') {
522 let tree = detailInfo.value.subjectDomainTree?.[0]; 530 let tree = detailInfo.value.subjectDomainTree?.[0];
523 if (tree) { 531 if (tree) {
...@@ -529,6 +537,7 @@ onBeforeMount(() => { ...@@ -529,6 +537,7 @@ onBeforeMount(() => {
529 } 537 }
530 } 538 }
531 else if (item.field == 'coverageArea') { 539 else if (item.field == 'coverageArea') {
540 if (detailInfo.value.coverageArea && Array.isArray(detailInfo.value.coverageArea) && detailInfo.value.coverageArea.length > 0) {
532 if (detailInfo.value.coverageArea[0][0] == 'all') { 541 if (detailInfo.value.coverageArea[0][0] == 'all') {
533 item.default = 'all'; 542 item.default = 'all';
534 if (item.children?.length) { 543 if (item.children?.length) {
...@@ -541,7 +550,7 @@ onBeforeMount(() => { ...@@ -541,7 +550,7 @@ onBeforeMount(() => {
541 item.children[0].visible = true; 550 item.children[0].visible = true;
542 item.children[0].default = [detailInfo.value.coverageArea[0]] as any; 551 item.children[0].default = [detailInfo.value.coverageArea[0]] as any;
543 let p: any = []; 552 let p: any = [];
544 detailInfo.value.coverageArea.forEach(area => { 553 detailInfo.value.coverageArea?.forEach(area => {
545 if (p.includes(area[0])) { 554 if (p.includes(area[0])) {
546 return; 555 return;
547 } 556 }
...@@ -558,7 +567,20 @@ onBeforeMount(() => { ...@@ -558,7 +567,20 @@ onBeforeMount(() => {
558 } 567 }
559 } 568 }
560 } 569 }
570 } else if (item.field == 'rightMain') {
571 item.default = detailInfo.value.rightMainName;
572 }
561 }); 573 });
574 if (route.query.guid && route.query.foundMode == '2') {
575 baseInfoFormItems.value[0].disabled = true;
576 baseInfoFormItems.value[1].disabled = true;
577 baseInfoFormItems.value[2].disabled = true;
578 if (detailInfo.value.databaseType == null && route.query.foundMode == '2') {
579 baseInfoFormItems.value[5].visible = false;
580 } else if (detailInfo.value.databaseType != null && route.query.foundMode == '2') {
581 baseInfoFormItems.value[5].disabled = true;
582 }
583 }
562 checkedInfo.value = {}; 584 checkedInfo.value = {};
563 nextTick(() => { 585 nextTick(() => {
564 baseInfoFormRules.value.damName[1] = checkExistName(checkedInfo.value, existDamName, detailInfo.value, 'damName'); 586 baseInfoFormRules.value.damName[1] = checkExistName(checkedInfo.value, existDamName, detailInfo.value, 'damName');
...@@ -622,7 +644,7 @@ const save = () => { ...@@ -622,7 +644,7 @@ const save = () => {
622 if (valid) { 644 if (valid) {
623 let params = { ...baseInfoFormRef.value.formInline }; 645 let params = { ...baseInfoFormRef.value.formInline };
624 /** 只有数据集和api类型时,目录表必填。 */ 646 /** 只有数据集和api类型时,目录表必填。 */
625 if (params.damType == '1' || params.damType == '2') { 647 if ((params.damType == '1' || params.damType == '2') && route.query.foundMode != '2') {
626 if (!params.databaseType) { 648 if (!params.databaseType) {
627 proxy.$ElMessage.error('资源类型为数据集或API时,数据库类型必填'); 649 proxy.$ElMessage.error('资源类型为数据集或API时,数据库类型必填');
628 baseInfoExpand.value = true; 650 baseInfoExpand.value = true;
...@@ -646,6 +668,8 @@ const save = () => { ...@@ -646,6 +668,8 @@ const save = () => {
646 } 668 }
647 if (damGuid.value) { 669 if (damGuid.value) {
648 params.guid = damGuid.value; 670 params.guid = damGuid.value;
671 params.foundMode = route.query.foundMode;
672 params.rightMain = detailInfo.value.rightMain;
649 fullscreenLoading.value = true; 673 fullscreenLoading.value = true;
650 registerCatalogUpdate(params).then((res: any) => { 674 registerCatalogUpdate(params).then((res: any) => {
651 fullscreenLoading.value = false; 675 fullscreenLoading.value = false;
...@@ -663,6 +687,8 @@ const save = () => { ...@@ -663,6 +687,8 @@ const save = () => {
663 } else { 687 } else {
664 params.damCatalogTableInfo = assetDataTableInfo.value.data; 688 params.damCatalogTableInfo = assetDataTableInfo.value.data;
665 fullscreenLoading.value = true; 689 fullscreenLoading.value = true;
690 console.log(params, 'params');
691 params.rightMain = JSON.parse(userStore.userData).tenantGuid;
666 registerCatalogSave(params).then((res: any) => { 692 registerCatalogSave(params).then((res: any) => {
667 fullscreenLoading.value = false; 693 fullscreenLoading.value = false;
668 if (res.code == proxy.$passCode) { 694 if (res.code == proxy.$passCode) {
......
...@@ -223,9 +223,17 @@ const btnClick = (btn) => { ...@@ -223,9 +223,17 @@ const btnClick = (btn) => {
223 const type = btn.value; 223 const type = btn.value;
224 if (type == 'cancel') { 224 if (type == 'cancel') {
225 userStore.setTabbar(userStore.tabbar.filter((tab: any) => tab.fullPath !== fullPath)); 225 userStore.setTabbar(userStore.tabbar.filter((tab: any) => tab.fullPath !== fullPath));
226 console.log('detailType', detailType.value);
227 if (detailType.value == 'asset') {
228 router.push({
229 name: 'registerCatalogManagement',
230 query: {}
231 });
232 } else {
226 router.push({ 233 router.push({
227 name: detailType.value == 'qualityEvaluate' ? 'qualityEvaluate' : (detailType.value == 'costAssess' ? 'valueEvaluate' : (detailType.value == 'certificate' ? 'certificateManagement' : 'registerManagemant')) 234 name: detailType.value == 'qualityEvaluate' ? 'qualityEvaluate' : (detailType.value == 'costAssess' ? 'valueEvaluate' : (detailType.value == 'certificate' ? 'certificateManagement' : 'registerManagemant'))
228 }); 235 });
236 }
229 } else if (type == 'pass') { 237 } else if (type == 'pass') {
230 passDialogInfo.value.visible = true; 238 passDialogInfo.value.visible = true;
231 assessFormItems.value[2].placeholder = '按照本次评估目的及价值类型,该笔数据资产在评估基准日的评估值为人民币***元。本次评估结论在评估基准日后一年内有效,即自20*年*月*日至20*年*月*日止。超过一年,需重新举行资产评估。'; 239 assessFormItems.value[2].placeholder = '按照本次评估目的及价值类型,该笔数据资产在评估基准日的评估值为人民币***元。本次评估结论在评估基准日后一年内有效,即自20*年*月*日至20*年*月*日止。超过一年,需重新举行资产评估。';
...@@ -768,6 +776,21 @@ const formattedAmount = computed(() => { ...@@ -768,6 +776,21 @@ const formattedAmount = computed(() => {
768 maximumFractionDigits: 2 776 maximumFractionDigits: 2
769 }).format(costAssessDetail.value?.assessmentMoney); 777 }).format(costAssessDetail.value?.assessmentMoney);
770 }); 778 });
779
780 const handleClick = () => {
781 // 跳转到 apiDetail 页面
782 if (detailInfo.value.foundMode == '2') {
783 router.push({
784 name: 'apiDetail',
785 query: {
786 guid: detailInfo.value.guid,
787 type: 'detaile',
788 }
789 });
790 }
791 };
792
793
771 </script> 794 </script>
772 795
773 <template> 796 <template>
...@@ -779,7 +802,8 @@ const formattedAmount = computed(() => { ...@@ -779,7 +802,8 @@ const formattedAmount = computed(() => {
779 <div class="right-main"> 802 <div class="right-main">
780 <div class="asset-title"> 803 <div class="asset-title">
781 <div style="display: flex;align-items: center;"> 804 <div style="display: flex;align-items: center;">
782 <div class="title1">{{ detailInfo.damName ?? '--' }}</div> 805 <div @click="handleClick" :class="{ 'foundMode': detailInfo.foundMode == '2', 'title1': true }">{{
806 detailInfo.damName ?? '--' }}</div>
783 <div class="dataLabel">{{ detailInfo.damTypeName }}</div> 807 <div class="dataLabel">{{ detailInfo.damTypeName }}</div>
784 <div class="dataLabel">{{ detailInfo.subjectDomainName || detailInfo.subjectDomain }}</div> 808 <div class="dataLabel">{{ detailInfo.subjectDomainName || detailInfo.subjectDomain }}</div>
785 <div class="dataLabel dataLabel1" v-if="detailInfo.databaseType">{{ detailInfo.databaseType }}</div> 809 <div class="dataLabel dataLabel1" v-if="detailInfo.databaseType">{{ detailInfo.databaseType }}</div>
...@@ -892,8 +916,8 @@ const formattedAmount = computed(() => { ...@@ -892,8 +916,8 @@ const formattedAmount = computed(() => {
892 </el-table-column> 916 </el-table-column>
893 </el-table> 917 </el-table>
894 </ContentWrap> 918 </ContentWrap>
895 <ContentWrap v-if="route.query.type == 'qualityEvaluate' || 'costAssess'" id="id-assetContent" title="附件信息" 919 <ContentWrap v-if="route.query.type == 'qualityEvaluate' || route.query.type == 'costAssess'" id="id-assetContent"
896 description="" style="margin: 16px 16px 16px"> 920 title="附件信息" description="" style="margin: 16px 16px 16px">
897 <div class="list_panel mt4"> 921 <div class="list_panel mt4">
898 <div class="list_item isFile" v-if="evaDetailInfo?.qualityEvaluationFile?.length" :style="{ width: '40%' }"> 922 <div class="list_item isFile" v-if="evaDetailInfo?.qualityEvaluationFile?.length" :style="{ width: '40%' }">
899 <span class="item_label" :style="{ width: 'auto', 'text-align': 'left' }">数据质量评价收集</span> 923 <span class="item_label" :style="{ width: 'auto', 'text-align': 'left' }">数据质量评价收集</span>
...@@ -1035,14 +1059,14 @@ const formattedAmount = computed(() => { ...@@ -1035,14 +1059,14 @@ const formattedAmount = computed(() => {
1035 </div> 1059 </div>
1036 </ContentWrap> 1060 </ContentWrap>
1037 1061
1038 <ContentWrap v-if="route.query.type == 'qualityEvaluate' || 'costAssess'" id="id-approveInfo" title="审批信息" 1062 <ContentWrap v-if="route.query.type == 'qualityEvaluate' || route.query.type == 'costAssess'" id="id-approveInfo"
1039 description="" style="margin: 16px 16px 16px"> 1063 title="审批信息" description="" style="margin: 16px 16px 16px">
1040 <ApprovalProcess v-if="deploymentId" :deploymentId="deploymentId" :processInstanceId="processInstanceId"> 1064 <ApprovalProcess v-if="deploymentId" :deploymentId="deploymentId" :processInstanceId="processInstanceId">
1041 </ApprovalProcess> 1065 </ApprovalProcess>
1042 </ContentWrap> 1066 </ContentWrap>
1043 </div> 1067 </div>
1044 <div class="tool_btns" 1068 <div class="tool_btns"
1045 v-if="toolBtns.length && (route.query.type == 'qualityEvaluate' || route.query.type == 'costAssess')"> 1069 v-if="toolBtns.length && (route.query.type == 'qualityEvaluate' || route.query.type == 'costAssess' || route.query.type == 'asset')">
1046 <div class="btns"> 1070 <div class="btns">
1047 <el-button v-for="btn in toolBtns" :type="btn.type" :plain="btn.plain" @click="btnClick(btn)">{{ btn.label 1071 <el-button v-for="btn in toolBtns" :type="btn.type" :plain="btn.plain" @click="btnClick(btn)">{{ btn.label
1048 }}</el-button> 1072 }}</el-button>
...@@ -1208,6 +1232,10 @@ const formattedAmount = computed(() => { ...@@ -1208,6 +1232,10 @@ const formattedAmount = computed(() => {
1208 align-items: center; 1232 align-items: center;
1209 justify-content: space-between; 1233 justify-content: space-between;
1210 1234
1235 .foundMode {
1236 color: #1BA854;
1237 }
1238
1211 .title1 { 1239 .title1 {
1212 font-size: 20px; 1240 font-size: 20px;
1213 color: #212121; 1241 color: #212121;
......
...@@ -130,7 +130,7 @@ const listData: any = ref([]); ...@@ -130,7 +130,7 @@ const listData: any = ref([]);
130 const cardBtnVisible: any = ref(false); 130 const cardBtnVisible: any = ref(false);
131 131
132 const getTableBtns = (row) => { 132 const getTableBtns = (row) => {
133 if (row.isRegister != 'N') { 133 if (row.isRegister == 'Y' || row.foundMode == 2) {
134 return []; 134 return [];
135 } 135 }
136 let btnsArr: any[] = []; 136 let btnsArr: any[] = [];
...@@ -142,13 +142,14 @@ const getTableBtns = (row) => { ...@@ -142,13 +142,14 @@ const getTableBtns = (row) => {
142 const currTableData: any = ref({}); 142 const currTableData: any = ref({});
143 143
144 const tableBtnClick = (scope, btn) => { 144 const tableBtnClick = (scope, btn) => {
145 const type = btn.value; 145 console.log(scope, btn);
146 const row = scope.row; 146 const type = btn;
147 const row = scope;
147 currTableData.value = row; 148 currTableData.value = row;
148 if (type === "edit") { 149 if (type === "edit") {
149 router.push({ 150 router.push({
150 name: "registerCatalogCreate", 151 name: "registerCatalogCreate",
151 query: { guid: row.guid, damName: row.damName }, 152 query: { guid: row.guid, damName: row.damName, foundMode: row.foundMode },
152 }); 153 });
153 } else if (type == "delete") { 154 } else if (type == "delete") {
154 proxy.$openMessageBox('此操作将永久删除该资源,是否继续', () => { 155 proxy.$openMessageBox('此操作将永久删除该资源,是否继续', () => {
...@@ -173,7 +174,7 @@ const handleDataClick = (item) => { ...@@ -173,7 +174,7 @@ const handleDataClick = (item) => {
173 if (item.isRegister == "N") { 174 if (item.isRegister == "N") {
174 router.push({ 175 router.push({
175 name: "registerCatalogCreate", 176 name: "registerCatalogCreate",
176 query: { guid: item.guid, damName: item.damName }, 177 query: { guid: item.guid, damName: item.damName, foundMode: item.foundMode },
177 }); 178 });
178 } else { 179 } else {
179 router.push({ 180 router.push({
...@@ -307,7 +308,7 @@ const tableToolsHeight = ref<any>(0); ...@@ -307,7 +308,7 @@ const tableToolsHeight = ref<any>(0);
307 const getTableToolsHeight = () => { 308 const getTableToolsHeight = () => {
308 const tableToolsElement: any = tableToolsRef.value; 309 const tableToolsElement: any = tableToolsRef.value;
309 if (tableToolsElement) { 310 if (tableToolsElement) {
310 tableToolsHeight.value = tableToolsElement.offsetHeight - 40; 311 tableToolsHeight.value = tableToolsElement.offsetHeight;
311 } 312 }
312 }; 313 };
313 // 在组件挂载后获取初始高度 314 // 在组件挂载后获取初始高度
...@@ -339,15 +340,21 @@ const handleWindowResize = () => { ...@@ -339,15 +340,21 @@ const handleWindowResize = () => {
339 <div class="container_wrap"> 340 <div class="container_wrap">
340 <div class="table_tool_wrap" ref="tableToolsRef"> 341 <div class="table_tool_wrap" ref="tableToolsRef">
341 <TableTools :searchItems="searchItemList" :searchId="'register-data-search'" @search="toSearch" /> 342 <TableTools :searchItems="searchItemList" :searchId="'register-data-search'" @search="toSearch" />
342 <div class="tools_btns"> 343 <!-- <div class="tools_btns">
343 <el-button type="primary" @click="handleCreate" v-preReClick>新建</el-button> 344 <el-button type="primary" @click="handleCreate" v-preReClick>新建</el-button>
345 </div> -->
344 </div> 346 </div>
345 </div> 347 <div class="table_panel_wrap" :style="{ height: `calc(100% - ${tableToolsHeight + 60}px)` }">
346 <div class="table_panel_wrap" :style="{ height: 'calc(100% - 89px)' }">
347 <div class="data-content" v-loading="listDataLoading" :style="{ height: `calc(100% - ${tableToolsHeight}px)` }"> 348 <div class="data-content" v-loading="listDataLoading" :style="{ height: `calc(100% - ${tableToolsHeight}px)` }">
348 <div class="card-content" v-if="listData.length" v-for="item in listData" :key="item.guid" 349 <div class="v-add" @click.stop="handleCreate">
349 @click="handleDataClick(item)"> 350 <div class="add-img"></div>
350 <div class="top-dam-img"></div> 351 <div class="add-titile">
352 新增数据产品
353 </div>
354 </div>
355 <div v-if="listData.length" v-for="(item, index) in listData" :key="item.guid" @click="handleDataClick(item)"
356 :class="{ 'v-border-top': item.isRegister == 'Y', 'card-content': true, 'v-border-no-pass': item.isRegister == 'N' }">
357 <!-- <div class="top-dam-img"></div>
351 <div class="dam-catalog-content"> 358 <div class="dam-catalog-content">
352 <div class="title-row"> 359 <div class="title-row">
353 <div class="title"> 360 <div class="title">
...@@ -356,10 +363,11 @@ const handleWindowResize = () => { ...@@ -356,10 +363,11 @@ const handleWindowResize = () => {
356 </div> 363 </div>
357 </div> 364 </div>
358 <div class="type-btn"> 365 <div class="type-btn">
359 <div class="type">{{ item.subjectDomainName || item.subjectDomain }}</div> 366 <div class="type">{{ item.subjectDomainName || item.subjectDomain || '--' }}</div>
360 <div class="type">{{ item.damTypeName || '--' }}</div> 367 <div class="type">{{ item.damTypeName || '--' }}</div>
361 <div class="type">{{ item.isRegister == 'Y' ? '已登记' : '未登记' }}</div> 368 <div class="type">{{ item.isRegister == 'Y' ? '已登记' : '未登记' }}</div>
362 <div class="type">{{ item.foundMode ? (item.foundMode === 1 ? '自建' : '加工交付') : '--' }}</div> 369 <div class="type" v-if="item.foundMode">{{ item.foundMode ? (item.foundMode === 1 ? '自建' : '加工交付') : '--'
370 }}</div>
363 </div> 371 </div>
364 <div class="desc">{{ item.propertyDescription }}</div> 372 <div class="desc">{{ item.propertyDescription }}</div>
365 <el-popover v-model="cardBtnVisible" placement="bottom" width="96" trigger="click" 373 <el-popover v-model="cardBtnVisible" placement="bottom" width="96" trigger="click"
...@@ -370,12 +378,57 @@ const handleWindowResize = () => { ...@@ -370,12 +378,57 @@ const handleWindowResize = () => {
370 <MoreFilled /> 378 <MoreFilled />
371 </el-icon> 379 </el-icon>
372 </template> 380 </template>
373 <div class="levitation-ul"> 381 <div class="levitation-ul">
374 <span class="levitation-li" v-for="btn in getTableBtns(item)" 382 <span class="levitation-li" v-for="btn in getTableBtns(item)" @click="tableBtnClick({ row: item }, btn)">{{
375 @click="tableBtnClick({ row: item }, btn)">{{
376 btn.label }}</span> 383 btn.label }}</span>
384 </div>
385 </el-popover>
386 </div> --><!-- 新增框放在列表的第一个 -->
387
388 <div>
389 <div class="v-top">
390 <div class="top-tip">
391 <div class="top-img" v-if="item.isRegister == 'Y'"></div>
392 <div class="top-default" v-else></div>
393 <div :class="{ 'word': item.isRegister == 'Y', 'word-default': item.isRegister != 'Y' }">{{
394 item.isRegister
395 == 'Y' ?
396 '已登记' : '未登记' }}</div>
397 </div>
398 <div class="top-titile">
399 <ellipsis-tooltip :content="item.damName" class-name="w100f"
400 :refName="'tooltipOver' + item.guid"></ellipsis-tooltip>
401 </div>
402 <div class="top-des">
403 <el-tooltip class="item" :content="item.propertyDescription" effect="dark">
404 <div class="top-des1">
405 {{ item.propertyDescription }}
406 </div>
407 </el-tooltip>
408 </div>
409 </div>
410 <div class="v-middle">
411 <div class="mid-content">
412 <div class="left">资产类型</div>
413 <div class="right">{{ item.damTypeName || '--' }}</div>
414 </div>
415 <div class="mid-content">
416 <div class="left">数据来源</div>
417 <div class="right">{{ item.foundMode ? (item.foundMode === 1 ? '自建' : '加工交付') : '--'
418 }}</div>
419 </div>
420 <div class="mid-content">
421 <div class="left">所属主题</div>
422 <div class="right">{{ item.subjectDomainName || item.subjectDomain || '--' }}</div>
423 </div>
424 </div>
425 <div class="v-bottom">
426 <el-button plain v-if="!(item.isRegister == 'Y' || item.foundMode == 2)"
427 @click.stop="tableBtnClick(item, 'delete')">删除</el-button>
428 <el-button plain v-if="!(item.isRegister == 'Y')" @click.stop="handleDataClick(item)">编辑</el-button>
429 <el-button plain @click.stop="handleDataClick(item)" v-if="(item.isRegister == 'Y')">详情</el-button>
430 </div>
377 </div> 431 </div>
378 </el-popover>
379 </div> 432 </div>
380 </div> 433 </div>
381 <div v-if="!listData.length" class="card-noData"> 434 <div v-if="!listData.length" class="card-noData">
...@@ -385,7 +438,7 @@ const handleWindowResize = () => { ...@@ -385,7 +438,7 @@ const handleWindowResize = () => {
385 </div> 438 </div>
386 <PageNav :class="[pageInfo.type]" :pageInfo="pageInfo" @pageChange="pageChange" /> 439 <PageNav :class="[pageInfo.type]" :pageInfo="pageInfo" @pageChange="pageChange" />
387 </div> 440 </div>
388 </div> 441
389 </template> 442 </template>
390 443
391 <style scoped lang="scss"> 444 <style scoped lang="scss">
...@@ -408,6 +461,10 @@ const handleWindowResize = () => { ...@@ -408,6 +461,10 @@ const handleWindowResize = () => {
408 } 461 }
409 } 462 }
410 463
464 .table_panel_wrap {
465 margin-top: 16px;
466 }
467
411 .data-content { 468 .data-content {
412 // height: calc(100% - 44px); 469 // height: calc(100% - 44px);
413 display: flex; 470 display: flex;
...@@ -428,15 +485,185 @@ const handleWindowResize = () => { ...@@ -428,15 +485,185 @@ const handleWindowResize = () => {
428 font-size: 14px; 485 font-size: 14px;
429 } 486 }
430 487
488
489 .v-add {
490 width: 294px;
491 height: 268px;
492 // height: auto;
493 background: #FAFAFA;
494 border: 1px solid rgba(229, 229, 229, 1);
495 border-radius: 4px;
496 cursor: pointer;
497 transition: box-shadow 0.3s ease;
498 display: flex;
499 justify-content: center;
500 align-items: center;
501 flex-direction: column;
502
503 &:hover {
504 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
505 /* 影阴效果 */
506 }
507
508 .add-img {
509 width: 26px;
510 height: 26px;
511 background: url("../../assets/images/add.png");
512 background-size: 100% 100%;
513 background-position: center right;
514 background-repeat: no-repeat;
515 }
516
517 .add-titile {
518 margin-top: 11px;
519 font-size: 16px;
520 color: #666666;
521 text-align: center;
522 line-height: 24px;
523 font-weight: 500;
524 }
525
526 }
527
431 .card-content { 528 .card-content {
432 width: 22%; 529 width: 294px;
433 min-width: 220px; 530 height: 268px;
434 height: auto; 531 // height: auto;
435 border: 1px solid var(--el-border-color-regular); 532 background: #FAFAFA;
533 border: 1px solid rgba(229, 229, 229, 1);
534 border-radius: 4px;
436 cursor: pointer; 535 cursor: pointer;
536 transition: box-shadow 0.3s ease;
537 position: relative;
538
437 539
438 &:hover { 540 &:hover {
439 border: 1px solid var(--el-color-primary); 541 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
542 /* 影阴效果 */
543 }
544
545 // .v-add {
546 // width: 100%;
547 // height: 100%;
548 // position: absolute;
549 // display: flex;
550 // flex-direction: column;
551 // justify-content: center;
552 // align-items: center;
553 // top: 50%;
554 // left: 50%;
555 // transform: translate(-50%, -50%);
556
557 // .add-img {
558 // width: 26px;
559 // height: 26px;
560 // background: url("../../assets/images/add.png");
561 // background-size: 100% 100%;
562 // background-position: center right;
563 // background-repeat: no-repeat;
564 // }
565
566 // .add-titile {
567 // margin-top: 11px;
568 // font-size: 16px;
569 // color: #666666;
570 // text-align: center;
571 // line-height: 24px;
572 // font-weight: 500;
573 // }
574
575 // }
576
577 .v-top {
578 display: flex;
579 flex-direction: column;
580 background: #FFFFFF;
581 padding: 16px 11px;
582
583 .top-tip {
584 display: flex;
585 align-items: center;
586
587 .top-img {
588 width: 18px;
589 height: 18px;
590 background: url("../../assets/images/passed.png");
591 background-size: 100% 100%;
592 background-repeat: no-repeat;
593 margin-right: 8px;
594 }
595
596 .top-default {
597 width: 18px;
598 height: 18px;
599 background: url("../../assets/images/doing.png");
600 background-size: 100% 100%;
601 background-repeat: no-repeat;
602 margin-right: 8px;
603 }
604 }
605
606 .top-titile {
607 font-size: 16px;
608 color: #212121;
609 line-height: 24px;
610 font-weight: 600;
611 margin-top: 9px;
612 width: 100%;
613 white-space: nowrap;
614 overflow: hidden;
615 text-overflow: ellipsis;
616 }
617
618 .top-des1 {
619 font-size: 14px;
620 color: #999999;
621 margin-top: 4px;
622 line-height: 21px;
623 font-weight: 400;
624 width: 100%;
625 white-space: nowrap;
626 overflow: hidden;
627 text-overflow: ellipsis;
628 }
629
630 .word {
631 color: rgba(27, 168, 84, 1);
632 }
633
634 .word-default {
635 color: rgba(255, 153, 28, 1);
636 }
637 }
638
639 .v-middle {
640 padding: 0 11px;
641
642 .mid-content {
643 display: flex;
644 justify-content: space-between;
645 align-items: center;
646 padding: 8px 0;
647
648 .left {
649 font-size: 14px;
650 color: #999999;
651 line-height: 21px;
652 }
653
654 .right {
655 font-size: 14px;
656 color: #212121;
657 line-height: 21px;
658 font-weight: 400;
659 }
660 }
661 }
662
663 .v-bottom {
664 display: flex;
665 justify-content: end;
666 padding: 0 11px;
440 } 667 }
441 668
442 .top-dam-img { 669 .top-dam-img {
...@@ -503,6 +730,17 @@ const handleWindowResize = () => { ...@@ -503,6 +730,17 @@ const handleWindowResize = () => {
503 text-align: center; 730 text-align: center;
504 margin-right: 4px; 731 margin-right: 4px;
505 } 732 }
733
734 .registered {
735 color: green;
736 /* 已登记 - 绿色 */
737 }
738
739 .not-registered {
740 color: red;
741 /* 未登记 - 红色 */
742 }
743
506 } 744 }
507 745
508 .list-more { 746 .list-more {
...@@ -511,5 +749,13 @@ const handleWindowResize = () => { ...@@ -511,5 +749,13 @@ const handleWindowResize = () => {
511 bottom: 12px; 749 bottom: 12px;
512 } 750 }
513 } 751 }
752
753 .v-border-top {
754 border-top: 4px solid #1BA854;
755 }
756
757 .v-border-no-pass {
758 border-top: 4px solid #FFA500;
759 }
514 } 760 }
515 </style> 761 </style>
......
...@@ -313,17 +313,32 @@ const tableBtnClick = (scope, btn) => { ...@@ -313,17 +313,32 @@ const tableBtnClick = (scope, btn) => {
313 console.log('row', row); 313 console.log('row', row);
314 currTableData.value = row; 314 currTableData.value = row;
315 if (type == "redit") { 315 if (type == "redit") {
316 if (!row.registerGuid) { 316 // if (!row.registerGuid) {
317 formItems.value[2].visible = true; 317 // formItems.value[2].visible = true;
318 formItems.value[3].visible = true; 318 // formItems.value[3].visible = true;
319 formItems.value[4].visible = true; 319 // formItems.value[4].visible = true;
320 formItems.value[5].visible = true; 320 // formItems.value[5].visible = true;
321 formItems.value[0].visible = false; 321 // formItems.value[0].visible = false;
322 formItems.value[0].default = row.damGuid; 322 // formItems.value[0].default = row.damGuid;
323 formItems.value[1].default = row.costAssessmentFile || []; 323 // formItems.value[1].default = row.costAssessmentFile || [];
324 dialogInfo.value.type = 'reSubmit'; 324 // dialogInfo.value.type = 'reSubmit';
325 dialogInfo.value.visible = true; 325 // dialogInfo.value.visible = true;
326 } else { 326 // } else {
327 // formItems.value[2].visible = false;
328 // formItems.value[3].visible = false;
329 // formItems.value[4].visible = false;
330 // formItems.value[5].visible = false;
331 // formItems.value[0].visible = false;
332 // formItems.value[0].default = row.damGuid;
333 // formItems.value[1].default = row.costAssessmentFile || [];
334 // formItems.value[2].default = row.qualityScore;
335 // formItems.value[3].default = row.evaluationRangeStart && row.evaluationRangeEnd ? [row.evaluationRangeStart, row.evaluationRangeEnd] : '';
336 // formItems.value[4].default = row.evaluationNote;
337 // formItems.value[5].default = row.evaluationFile || [];
338 // dialogInfo.value.type = 'reSubmit';
339 // dialogInfo.value.visible = true;
340 // }
341 if (row.qualityScore || (!row.qualityScore && !row.qualityEvaluationGuid)) {
327 formItems.value[2].visible = false; 342 formItems.value[2].visible = false;
328 formItems.value[3].visible = false; 343 formItems.value[3].visible = false;
329 formItems.value[4].visible = false; 344 formItems.value[4].visible = false;
...@@ -338,6 +353,18 @@ const tableBtnClick = (scope, btn) => { ...@@ -338,6 +353,18 @@ const tableBtnClick = (scope, btn) => {
338 dialogInfo.value.type = 'reSubmit'; 353 dialogInfo.value.type = 'reSubmit';
339 dialogInfo.value.visible = true; 354 dialogInfo.value.visible = true;
340 } 355 }
356 if (!row.qualityScore && row.qualityEvaluationGuid) {
357 formItems.value[2].visible = true;
358 formItems.value[3].visible = true;
359 formItems.value[4].visible = true;
360 formItems.value[5].visible = true;
361 formItems.value[0].visible = false;
362 formItems.value[0].default = row.damGuid;
363 formItems.value[1].default = row.costAssessmentFile || [];
364 dialogInfo.value.type = 'reSubmit';
365 dialogInfo.value.visible = true;
366 }
367
341 } else if (type == "delete") { 368 } else if (type == "delete") {
342 delTableOpen("此操作将永久删除该资产价值评估,是否继续?", "warning"); 369 delTableOpen("此操作将永久删除该资产价值评估,是否继续?", "warning");
343 } else if (type === 'backup') { 370 } else if (type === 'backup') {
......
...@@ -874,7 +874,7 @@ const formInfo = ref<any>({ ...@@ -874,7 +874,7 @@ const formInfo = ref<any>({
874 <Table :tableInfo="tableInfo" @tableBtnClick="tableBtnClick" @tablePageChange="tablePageChange" 874 <Table :tableInfo="tableInfo" @tableBtnClick="tableBtnClick" @tablePageChange="tablePageChange"
875 @tableSwitchBeforeChange="tableSwitchBeforeChange" /> 875 @tableSwitchBeforeChange="tableSwitchBeforeChange" />
876 </div> 876 </div>
877 <el-dialog v-model="dialogVisible" :title="dialogTitle" width="60%"> 877 <el-dialog v-model="dialogVisible" :title="dialogTitle" width="30%">
878 <Form ref="listingFormRef" :itemList="formInfo.items" :rules="formInfo.rules" /> 878 <Form ref="listingFormRef" :itemList="formInfo.items" :rules="formInfo.rules" />
879 <el-input type="textarea" :rows="3" maxlength="100" v-model="approveSuggest" resize="none" 879 <el-input type="textarea" :rows="3" maxlength="100" v-model="approveSuggest" resize="none"
880 placeholder="请输入审批意见" /> 880 placeholder="请输入审批意见" />
......
...@@ -45,6 +45,11 @@ export default ({ mode, command }) => { ...@@ -45,6 +45,11 @@ export default ({ mode, command }) => {
45 changeOrigin: env.VITE_OPEN_PROXY === 'true', 45 changeOrigin: env.VITE_OPEN_PROXY === 'true',
46 rewrite: path => path.replace(/\/circulation/, ''), 46 rewrite: path => path.replace(/\/circulation/, ''),
47 }, 47 },
48 '/delivery':{
49 target: env.VITE_APP_DATA_DELIVERY,
50 changeOrigin: env.VITE_OPEN_PROXY === 'true',
51 rewrite: path => path.replace(/\/delivery/, ''),
52 },
48 '/obs': { 53 '/obs': {
49 target: '//csbr-daop.obs.cn-north-1.myhuaweicloud.com:443', 54 target: '//csbr-daop.obs.cn-north-1.myhuaweicloud.com:443',
50 changeOrigin: env.VITE_OPEN_PROXY === 'true', 55 changeOrigin: env.VITE_OPEN_PROXY === 'true',
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!