8ad5d02b by xukangle

Merge branch 'develop' into dev_20241202_xukangle

2 parents 8e994be3 f86a61ed
...@@ -6,7 +6,11 @@ VITE_APP_TITLE = 数据资产管理系统 ...@@ -6,7 +6,11 @@ VITE_APP_TITLE = 数据资产管理系统
6 VITE_API_BASEURL = http://localhost:9000 6 VITE_API_BASEURL = http://localhost:9000
7 # VITE_API_BASEURL = http://10.4.82.1:28052/ 7 # VITE_API_BASEURL = http://10.4.82.1:28052/
8 # 平台用户 接口请地址 8 # 平台用户 接口请地址
9 VITE_APP_USER_API_BASEURL = gateway-server/user 9 VITE_APP_USER_API_BASEURL = gateway-server
10
11 #AUTH服务
12 VITE_APP_AUTH_URL = 'ms-daop-auth-service'
13
10 # 系统管理 接口地址 14 # 系统管理 接口地址
11 VITE_APP_API_BASEURL = ms-daop-zcgl-system-manager-service 15 VITE_APP_API_BASEURL = ms-daop-zcgl-system-manager-service
12 # 文件上传请求地址 16 # 文件上传请求地址
...@@ -42,3 +46,4 @@ VITE_API_MESSAGE = ms-swzl-message-notification-service ...@@ -42,3 +46,4 @@ VITE_API_MESSAGE = ms-swzl-message-notification-service
42 VITE_BUILD_SOURCEMAP = false 46 VITE_BUILD_SOURCEMAP = false
43 # 是否在打包时开启压缩,支持 gzip 和 brotli 47 # 是否在打包时开启压缩,支持 gzip 和 brotli
44 VITE_BUILD_COMPRESS = gzip,brotli 48 VITE_BUILD_COMPRESS = gzip,brotli
49
......
...@@ -4,7 +4,7 @@ VITE_APP_TITLE = 数据资产管理系统 ...@@ -4,7 +4,7 @@ VITE_APP_TITLE = 数据资产管理系统
4 VITE_API_BASEURL = https://www.zgsjzc.com/api 4 VITE_API_BASEURL = https://www.zgsjzc.com/api
5 # VITE_API_BASEURL = http://49.4.26.201:31709/ 5 # VITE_API_BASEURL = http://49.4.26.201:31709/
6 # 平台用户 接口请地址 6 # 平台用户 接口请地址
7 VITE_APP_USER_API_BASEURL = gateway-server/user 7 VITE_APP_USER_API_BASEURL = gateway-server
8 # 系统管理 接口地址 8 # 系统管理 接口地址
9 VITE_APP_API_BASEURL = ms-daop-zcgl-system-manager-service 9 VITE_APP_API_BASEURL = ms-daop-zcgl-system-manager-service
10 # 文件上传请求地址 10 # 文件上传请求地址
......
...@@ -3,15 +3,16 @@ import request from "@/utils/request"; ...@@ -3,15 +3,16 @@ import request from "@/utils/request";
3 /** 获取数往知来接入idaas的token。 */ 3 /** 获取数往知来接入idaas的token。 */
4 export const getTokenByCode = (params) => { 4 export const getTokenByCode = (params) => {
5 return request({ 5 return request({
6 url: `/csbr-zuul/user/idaas-login?code=${params.code}&platformGuid=${params.platformGuid}&userType=${params.userType}`, 6 url: `${import.meta.env.VITE_APP_USER_API_BASEURL}/staff/login`,
7 method: 'post' 7 method: 'post',
8 data: params
8 }) 9 })
9 } 10 }
10 11
11 /** 退出登录 */ 12 /** 退出登录 */
12 export const loginOut = () => { 13 export const loginOut = () => {
13 return request({ 14 return request({
14 url: `/csbr-zuul/user/logout`, 15 url: `${import.meta.env.VITE_APP_USER_API_BASEURL}/user/logout`,
15 method: 'get' 16 method: 'get'
16 }) 17 })
17 } 18 }
...@@ -19,11 +20,20 @@ export const loginOut = () => { ...@@ -19,11 +20,20 @@ export const loginOut = () => {
19 /** 刷新token,延长过期时间 */ 20 /** 刷新token,延长过期时间 */
20 export const refreshToken = (params) => { 21 export const refreshToken = (params) => {
21 return request({ 22 return request({
22 url: `/csbr-zuul/user/refreshToken?refreshToken=${params.refreshToken}`, 23 url: `${import.meta.env.VITE_APP_USER_API_BASEURL}/user/refreshToken?refreshToken=${params.refreshToken}`,
23 method: 'post' 24 method: 'post'
24 }) 25 })
25 } 26 }
26 27
28 export const getSystemMenu = (params) => {
29 return request({
30 url: `${
31 import.meta.env.VITE_APP_AUTH_URL
32 }/product-menu-permission/tenant/get-product-menu?tenantGuid=${params.tenantGuid}&platformSystemGuid=32774fcfdf5e43e8b866660374d8bced`,
33 method: "get",
34 });
35 };
36
27 // 获取当前用户对应的产品和菜单 37 // 获取当前用户对应的产品和菜单
28 export const getUserInfo = () => { 38 export const getUserInfo = () => {
29 return request({ 39 return request({
......
...@@ -48,8 +48,8 @@ const maxHeight = computed(() => { ...@@ -48,8 +48,8 @@ const maxHeight = computed(() => {
48 return props.tableInfo.maxHeight 48 return props.tableInfo.maxHeight
49 ? props.tableInfo.maxHeight 49 ? props.tableInfo.maxHeight
50 : showPage.value 50 : showPage.value
51 ? "calc(100% - 44px)" 51 ? "calc(100% - 44px)"
52 : "100%"; 52 : "100%";
53 }); 53 });
54 const multiple = computed(() => { 54 const multiple = computed(() => {
55 return props.tableInfo.multiple ?? false; 55 return props.tableInfo.multiple ?? false;
...@@ -123,7 +123,7 @@ const handleClick = (scope, btn) => { ...@@ -123,7 +123,7 @@ const handleClick = (scope, btn) => {
123 if (scope.row.disabled || btn.disabled) return; 123 if (scope.row.disabled || btn.disabled) return;
124 emits("tableBtnClick", scope, btn); 124 emits("tableBtnClick", scope, btn);
125 }; 125 };
126 const popoverHover = (scope, btn)=>{ 126 const popoverHover = (scope, btn) => {
127 emits("tableBtnClick", scope, btn); 127 emits("tableBtnClick", scope, btn);
128 } 128 }
129 const selectionChange = (val) => { 129 const selectionChange = (val) => {
...@@ -158,7 +158,7 @@ const inputKeyUp = (regexp, scope, item) => { ...@@ -158,7 +158,7 @@ const inputKeyUp = (regexp, scope, item) => {
158 return; 158 return;
159 } 159 }
160 if (regexp) { 160 if (regexp) {
161 scope.row[field] = scope.row[field].replace(regexp,'') 161 scope.row[field] = scope.row[field].replace(regexp, '')
162 } 162 }
163 // 特殊处理,apiCreate.vue中defaultParamsTableInfo的pageSize限制输入最大值100. 163 // 特殊处理,apiCreate.vue中defaultParamsTableInfo的pageSize限制输入最大值100.
164 if (scope.row.paramName == 'pageSize' && scope.row[field] > 100) { 164 if (scope.row.paramName == 'pageSize' && scope.row[field] > 100) {
...@@ -175,7 +175,7 @@ const rowClassName = (rowObj) => { ...@@ -175,7 +175,7 @@ const rowClassName = (rowObj) => {
175 } 175 }
176 const row = rowObj.row; 176 const row = rowObj.row;
177 let className = ""; 177 let className = "";
178 if (row.ROWID && row.STATUS === "edit" && row.STATE === "Running" ) { 178 if (row.ROWID && row.STATUS === "edit" && row.STATE === "Running") {
179 className = "edit_row"; 179 className = "edit_row";
180 } 180 }
181 return className; 181 return className;
...@@ -202,8 +202,8 @@ const pageChange = (page) => { ...@@ -202,8 +202,8 @@ const pageChange = (page) => {
202 let info = { ...page, id: props.tableInfo.id }; 202 let info = { ...page, id: props.tableInfo.id };
203 emits("tablePageChange", info); 203 emits("tablePageChange", info);
204 }; 204 };
205 const tableRowClassName1 = ({row,rowIndex})=>{ 205 const tableRowClassName1 = ({ row, rowIndex }) => {
206 return row.isAlter=="Y"? "primary":"" 206 return row.isAlter == "Y" ? "primary" : ""
207 } 207 }
208 208
209 onMounted(() => { 209 onMounted(() => {
...@@ -220,71 +220,33 @@ onMounted(() => { ...@@ -220,71 +220,33 @@ onMounted(() => {
220 </script> 220 </script>
221 221
222 <template> 222 <template>
223 <div 223 <div class="table_panel" :id="props.tableInfo.id" :style="{
224 class="table_panel" 224 height: props.tableInfo.height ?? '100%',
225 :id="props.tableInfo.id" 225 'min-height': props.tableInfo.minPanelHeight ?? ''
226 :style="{ 226 }">
227 height: props.tableInfo.height ?? '100%', 227 <el-table ref="tableRef" :class="{ 'no-edit': props.tableInfo.readonly, 'sort-table': props.tableInfo.sortable }"
228 'min-height': props.tableInfo.minPanelHeight ?? '' 228 :data="tableData" :highlight-current-row="props.tableInfo.heightlightRow ?? true"
229 }" 229 :show-header="props.tableInfo.showHeader ?? true" stripe :border="props.tableInfo.border
230 > 230 ?? true" :height="props.tableInfo.height === null ? null : (props.tableInfo.height ?? '100%')"
231 <el-table 231 :max-height="maxHeight" :row-key="rowKey" :current-row-key="currentRowKey" :row-class-name="rowClassName"
232 ref="tableRef" 232 v-loading="tableDataLoading" @row-click="rowClick" @row-dblclick="rowDblClick" @selection-change="selectionChange"
233 :class="{ 'no-edit': props.tableInfo.readonly, 'sort-table': props.tableInfo.sortable }" 233 @select="tableCheckboxSelectChange" @select-all="tableCheckboxAllSelectChange"
234 :data="tableData" 234 style="width: 100%; display: inline-block" :style="{ 'min-height': props.tableInfo.minHeight ?? '200px' }"
235 :highlight-current-row=" props.tableInfo.heightlightRow ?? true" 235 tooltip-effect="light" :tooltip-options="{ placement: 'top', popperClass: 'table_cell_tooltip' }"
236 :show-header="props.tableInfo.showHeader ?? true" 236 :show-summary="props.tableInfo.showSummary ?? false">
237 stripe 237 <el-table-column type="selection" :width="32" align="center" v-if="multiple" :selectable="rowSelectable"
238 :border="props.tableInfo.border 238 :fixed="fixedSelection" />
239 ?? true" :height="props.tableInfo.height === null ? null : (props.tableInfo.height ?? '100%')" 239 <el-table-column v-for="item in tableFields" :label="item.label" :width="item.width" :min-width="item.minWidth"
240 :max-height="maxHeight" 240 :fixed="item.fixed" :align="item.align" :type="item.type == 'index' ? '' : undefined"
241 :row-key="rowKey" 241 :sortable="item.sortable ?? false" :prop="item.field" :class-name="item.columClass"
242 :current-row-key="currentRowKey" 242 :show-overflow-tooltip="item.type != 'switch'">
243 :row-class-name="rowClassName" 243 <template #header>
244 v-loading="tableDataLoading"
245 @row-click="rowClick"
246 @row-dblclick="rowDblClick"
247 @selection-change="selectionChange"
248 @select="tableCheckboxSelectChange"
249 @select-all="tableCheckboxAllSelectChange"
250 style="width: 100%; display: inline-block"
251 :style="{ 'min-height': props.tableInfo.minHeight ?? '200px' }"
252 tooltip-effect="light"
253 :tooltip-options="{ placement: 'top', popperClass: 'table_cell_tooltip' }"
254 :show-summary="props.tableInfo.showSummary ?? false"
255 >
256 <el-table-column
257 type="selection"
258 :width="32"
259 align="center"
260 v-if="multiple"
261 :selectable="rowSelectable"
262 :fixed="fixedSelection"
263 />
264 <el-table-column
265 v-for="item in tableFields"
266 :label="item.label"
267 :width="item.width"
268 :min-width="item.minWidth"
269 :fixed="item.fixed"
270 :align="item.align"
271 :type="item.type == 'index' ? '' : undefined"
272 :sortable="item.sortable ?? false"
273 :prop="item.field"
274 :class-name="item.columClass"
275 :show-overflow-tooltip="item.type != 'switch'"
276 >
277 <template #header>
278 <template v-if="!!item?.toolTipContent"> 244 <template v-if="!!item?.toolTipContent">
279 <span style="color:#000;display: inline-block">{{ item.label }}</span> 245 <span style="color:#000;display: inline-block">{{ item.label }}</span>
280 <el-tooltip 246 <el-tooltip effect="light" :content="item.toolTipContent" placement="top">
281 effect="light" 247 <el-icon style="color:#b2b2b2;">
282 :content="item.toolTipContent" 248 <QuestionFilled />
283 placement="top" 249 </el-icon>
284 >
285 <el-icon style="color:#b2b2b2;">
286 <QuestionFilled />
287 </el-icon>
288 250
289 </el-tooltip> 251 </el-tooltip>
290 252
...@@ -293,7 +255,7 @@ onMounted(() => { ...@@ -293,7 +255,7 @@ onMounted(() => {
293 <span style="color:#000">{{ item.label }}</span> 255 <span style="color:#000">{{ item.label }}</span>
294 <span v-if="item.required === true" style="color:red;margin-left: 2px;">*</span> 256 <span v-if="item.required === true" style="color:red;margin-left: 2px;">*</span>
295 </template> 257 </template>
296 </template> 258 </template>
297 <template #default="scope" v-if="item.type == 'index'"> 259 <template #default="scope" v-if="item.type == 'index'">
298 <span v-if="showPage">{{ 260 <span v-if="showPage">{{
299 pageInfo.curr !== undefined 261 pageInfo.curr !== undefined
...@@ -303,97 +265,78 @@ onMounted(() => { ...@@ -303,97 +265,78 @@ onMounted(() => {
303 <span v-else>{{ props.tableInfo.sortable ? (scope.row.index) : (scope.$index + 1) }}</span> 265 <span v-else>{{ props.tableInfo.sortable ? (scope.row.index) : (scope.$index + 1) }}</span>
304 </template> 266 </template>
305 <template #default="scope" v-else-if="item.type == 'tag'"> 267 <template #default="scope" v-else-if="item.type == 'tag'">
306 <el-tag v-if="scope.row[item.field] !== undefined" :type="item.tagType?item.tagType(scope):tagType(scope.row, item.field)">{{ 268 <el-tag v-if="scope.row[item.field] !== undefined"
307 item.getName?item.getName(scope):tagMethod(scope.row, item.field) 269 :type="item.tagType ? item.tagType(scope) : tagType(scope.row, item.field)">{{
308 }}</el-tag> 270 item.getName ? item.getName(scope) : tagMethod(scope.row, item.field)
309 <span v-else>{{ '--' }}</span> 271 }}</el-tag>
272 <span v-else>{{ '--' }}</span>
310 </template> 273 </template>
311 <template #default="scope" v-else-if="item.type == 'popover'"> 274 <template #default="scope" v-else-if="item.type == 'popover'">
312 <el-popover 275 <el-popover v-if="scope.row[item.field] !== undefined && (item.checkName ? item.checkName(scope) : true)"
313 v-if="scope.row[item.field] !== undefined && (item.checkName?item.checkName(scope):true)" 276 placement="left-start" :title="props.tableInfo.popoverTitle || '变化'" :width="476" trigger="hover"
314 placement="left-start" 277 @show="() => popoverHover(scope, item)">
315 :title="props.tableInfo.popoverTitle || '变化'" 278 <template #reference>
316 :width="476" 279 <span :class="{ text_btn: item.checkName ? item.checkName(scope) : true }">{{
317 trigger="hover" 280 item.getName ? item.getName(scope):"详情" }}</span>
318 @show="()=>popoverHover(scope,item)" 281 </template>
319 > 282 <el-table :data="props.tableInfo.popoverData" v-loading="props.tableInfo.popoverloading" class="tablePover"
320 <template #reference> 283 :row-class-name="tableRowClassName1" border tooltip-effect="light"
321 <span :class="{text_btn:item.checkName?item.checkName(scope):true}">{{ item.getName?item.getName(scope):"详情" }}</span> 284 :span-method="props.tableInfo?.arraySpanMethod">
322 </template> 285 <el-table-column v-for="col in item.column" :width="col.width" :property="col.field" :label="col.label"
323 <el-table :data="props.tableInfo.popoverData" v-loading="props.tableInfo.popoverloading" 286 :key="col.field" show-overflow-tooltip>
324 class="tablePover" :row-class-name="tableRowClassName1" border tooltip-effect="light" :span-method="props.tableInfo?.arraySpanMethod"> 287 <template #default="scope">
325 <el-table-column v-for="col in item.column" :width="col.width" :property="col.field" :label="col.label" :key="col.field" show-overflow-tooltip >
326 <template #default="scope">
327 {{ scope.row[col.field] || '--' }} 288 {{ scope.row[col.field] || '--' }}
328 </template> 289 </template>
329 </el-table-column> 290 </el-table-column>
330 </el-table> 291 </el-table>
331 </el-popover> 292 </el-popover>
332 <span v-else>{{item.getName?(item.getName(scope) || '--'):"--"}}</span> 293 <span v-else>{{ item.getName ? (item.getName(scope) || '--') : "--" }}</span>
333 </template> 294 </template>
334 <template #default="scope" v-else-if="item.type == 'filter'"> 295 <template #default="scope" v-else-if="item.type == 'filter'">
335 <span>{{ tagMethod(scope.row, item.field) }}</span> 296 <span>{{ tagMethod(scope.row, item.field) }}</span>
336 </template> 297 </template>
337 <template #default="scope" v-else-if="item.type == 'chnum'"> 298 <template #default="scope" v-else-if="item.type == 'chnum'">
338 <span v-if="!!item.isNaN">{{ scope.row[item.field]?changeNum(scope.row[item.field]):"--" }}</span> 299 <span v-if="!!item.isNaN">{{ scope.row[item.field] ? changeNum(scope.row[item.field]) : "--" }}</span>
339 <span v-else>{{ 300 <span v-else>{{
340 scope.row[item.field] != null ? 301 scope.row[item.field] != null ?
341 changeNum( 302 changeNum(
342 scope.row[item.field] ? scope.row[item.field] : 0, 303 scope.row[item.field] ? scope.row[item.field] : 0,
343 item.fixedNum ?? 0 304 item.fixedNum ?? 0
344 ) : '--' 305 ) : '--'
345 }}</span> 306 }}</span>
346 <span v-if="item.unit">{{ item.unit }}</span> 307 <span v-if="item.unit">{{ item.unit }}</span>
347 </template> 308 </template>
348 <template #default="scope" v-else-if="item.type == 'switch'"> 309 <template #default="scope" v-else-if="item.type == 'switch'">
349 <el-switch 310 <el-switch v-model="scope.row[item.field]" inline-prompt
350 v-model="scope.row[item.field]" 311 :disabled="!item.isDisabled ? false : item.isDisabled(scope)" :active-value="item.activeValue"
351 inline-prompt 312 :inactive-value="item.inactiveValue" :width="item.switchWidth" :active-text="item.activeText"
352 :disabled="!item.isDisabled ? false : item.isDisabled(scope)" 313 :inactive-text="item.inactiveText" :before-change="() => beforeChange(scope, item)"
353 :active-value="item.activeValue" 314 @change="(val) => switchChange(val, scope, item.field)" />
354 :inactive-value="item.inactiveValue"
355 :width="item.switchWidth"
356 :active-text="item.activeText"
357 :inactive-text="item.inactiveText"
358 :before-change="() => beforeChange(scope, item)"
359 @change="(val) => switchChange(val, scope, item.field)"
360 />
361 </template> 315 </template>
362 <template #default="scope" v-else-if="item.type == 'menu'"> 316 <template #default="scope" v-else-if="item.type == 'menu'">
363 {{ item.menus[scope.row[item.field]] }} 317 {{ item.menus[scope.row[item.field]] }}
364 <!-- {{ scope.row[item.field] }} --> 318 <!-- {{ scope.row[item.field] }} -->
365 </template> 319 </template>
366 <template #default="scope" v-else-if="item.type == 'text_btn'"> 320 <template #default="scope" v-else-if="item.type == 'text_btn'">
367 <span v-if="scope.row[item.field] != null" :class="item.class + ' text_btn'" 321 <span v-if="scope.row[item.field] != null" :class="item.class + ' text_btn'"
368 @click="(item.click && !item.disabled && !scope.row.disabled) ? item.click(scope, { label: item.label, value: item.value }): handleClick(scope, { label: item.label, value: item.value })" v-preReClick>{{ item.getName ? item.getName(scope) : scope.row[item.field] 322 @click="(item.click && !item.disabled && !scope.row.disabled) ? item.click(scope, { label: item.label, value: item.value }) : handleClick(scope, { label: item.label, value: item.value })"
323 v-preReClick>{{ item.getName ? item.getName(scope) : scope.row[item.field]
369 }}</span> 324 }}</span>
370 <span v-else>--</span> 325 <span v-else>--</span>
371 </template> 326 </template>
372 <template #default="scope" v-else-if="item.type == 'btn'"> 327 <template #default="scope" v-else-if="item.type == 'btn'">
373 <template v-for="btn in item.btns"> 328 <template v-for="btn in item.btns">
374 <span 329 <span v-if="btn.visible ?? true" class="text_btn"
375 v-if="btn.visible ?? true" 330 @click="(btn.click && !btn.disabled && !scope.row.disabled) ? btn.click(scope, btn) : handleClick(scope, btn)"
376 class="text_btn" 331 v-preReClick>{{ btn.label }}</span>
377 @click="(btn.click && !btn.disabled && !scope.row.disabled) ? btn.click(scope, btn):handleClick(scope, btn)"
378 v-preReClick
379 >{{ btn.label }}</span
380 >
381 </template> 332 </template>
382 </template> 333 </template>
383 <template #default="scope" v-else-if="item.type == 'input'"> 334 <template #default="scope" v-else-if="item.type == 'input'">
384 <el-input 335 <el-input v-model.trim="scope.row[item.field]" placeholder="请输入" :maxlength="item.maxlength ?? ''"></el-input>
385 v-model.trim="scope.row[item.field]"
386 placeholder="请输入"
387 :maxlength="item.maxlength ?? ''"
388 ></el-input>
389 </template> 336 </template>
390 <template #default="scope" v-else-if="item.type == 'tooltip'"> 337 <template #default="scope" v-else-if="item.type == 'tooltip'">
391 <el-tooltip 338 <el-tooltip :placement="item.placement ?? 'bottom-start'" effect="light" popper-class="table_tooltip"
392 :placement="item.placement ?? 'bottom-start'" 339 :trigger="item.trigger">
393 effect="light"
394 popper-class="table_tooltip"
395 :trigger="item.trigger"
396 >
397 <template #content> 340 <template #content>
398 <div style="width: 236px; text-align: justify"> 341 <div style="width: 236px; text-align: justify">
399 <p class="tips_title">不符合规则</p> 342 <p class="tips_title">不符合规则</p>
...@@ -405,159 +348,85 @@ onMounted(() => { ...@@ -405,159 +348,85 @@ onMounted(() => {
405 </el-tooltip> 348 </el-tooltip>
406 </template> 349 </template>
407 <template #default="scope" v-else-if="item.type && item.type == 'edit'"> 350 <template #default="scope" v-else-if="item.type && item.type == 'edit'">
408 <template v-if="(props.tableInfo.STATUS == 'edit' || scope.row.STATUS == 'edit') && (item.getVisible ? item.getVisible(scope) : true)"> 351 <template
409 <el-select 352 v-if="(props.tableInfo.STATUS == 'edit' || scope.row.STATUS == 'edit') && (item.getVisible ? item.getVisible(scope) : true)">
410 v-if=" 353 <el-select v-if="
411 editForm[item.field] && editForm[item.field].type == 'select' 354 editForm[item.field] && editForm[item.field].type == 'select'
412 " 355 " v-model="scope.row[item.field]" :placeholder="editForm[item.field].placeholder"
413 v-model="scope.row[item.field]" 356 :clearable="editForm[item.field].clearable" :filterable="editForm[item.field].filterable ?? true"
414 :placeholder="editForm[item.field].placeholder" 357 :disabled="editForm[item.field].disabled && scope.row.guid !== undefined
415 :clearable="editForm[item.field].clearable" 358 " @change="(val) => selectChange(val, scope, item)">
416 :filterable="editForm[item.field].filterable ?? true"
417 :disabled="
418 editForm[item.field].disabled && scope.row.guid !== undefined
419 "
420 @change="(val) => selectChange(val, scope, item)"
421 >
422 <el-option v-if="props.tableInfo.readonly" label="--" value="" /> 359 <el-option v-if="props.tableInfo.readonly" label="--" value="" />
423 <el-option 360 <el-option
424 v-for="opt in editForm[item.field].getOptions ? editForm[item.field].getOptions(scope) : editForm[item.field].options" 361 v-for="opt in editForm[item.field].getOptions ? editForm[item.field].getOptions(scope) : editForm[item.field].options"
425 :label="editForm[item.field]?.props?.label ? opt[editForm[item.field].props.label] : opt.label" 362 :label="editForm[item.field]?.props?.label ? opt[editForm[item.field].props.label] : opt.label"
426 :value="editForm[item.field]?.props?.value ? opt[editForm[item.field].props.value] : opt.value" 363 :value="editForm[item.field]?.props?.value ? opt[editForm[item.field].props.value] : opt.value"
427 :key="editForm[item.field]?.props?.value ? opt[editForm[item.field].props.value] : opt.value" 364 :key="editForm[item.field]?.props?.value ? opt[editForm[item.field].props.value] : opt.value" />
428 />
429 </el-select> 365 </el-select>
430 <el-input 366 <el-input v-else-if="
431 v-else-if=" 367 editForm[item.field] && editForm[item.field].type == 'input'
432 editForm[item.field] && editForm[item.field].type == 'input' 368 " v-model.trim="scope.row[item.field]" :placeholder="editForm[item.field].placeholder"
433 " 369 :clearable="editForm[item.field].clearable" :maxlength="editForm[item.field].maxlength ?? ''" :disabled="editForm[item.field].disabled && scope.row.guid !== undefined
434 v-model.trim="scope.row[item.field]" 370 " @input="inputKeyUp(editForm[item.field].regexp, scope, editForm[item.field])"
435 :placeholder="editForm[item.field].placeholder"
436 :clearable="editForm[item.field].clearable"
437 :maxlength="editForm[item.field].maxlength ?? ''"
438 :disabled="
439 editForm[item.field].disabled && scope.row.guid !== undefined
440 "
441 @input="inputKeyUp(editForm[item.field].regexp, scope, editForm[item.field])"
442 @change="(val) => inputChange(val, scope, item)" 371 @change="(val) => inputChange(val, scope, item)"
443 @focus="(event) => inputFocus(event, scope, editForm[item.field])" 372 @focus="(event) => inputFocus(event, scope, editForm[item.field])"></el-input>
444 ></el-input>
445 <template v-else-if="editForm[item.field] && editForm[item.field].type == 'defaultValue'"> 373 <template v-else-if="editForm[item.field] && editForm[item.field].type == 'defaultValue'">
446 <el-date-picker v-if="scope.row[item.dataTypeName] === 'date'" v-model="scope.row[item.field]" type="date" 374 <el-date-picker v-if="scope.row[item.dataTypeName] === 'date'" v-model="scope.row[item.field]" type="date"
447 format="YYYY-MM-DD" value-format="YYYY-MM-DD" :placeholder="editForm[item.field].placeholder" /> 375 format="YYYY-MM-DD" value-format="YYYY-MM-DD" :placeholder="editForm[item.field].placeholder" />
448 <el-date-picker v-else-if="scope.row[item.dataTypeName] === 'datetime'" 376 <el-date-picker v-else-if="scope.row[item.dataTypeName] === 'datetime'" v-model="scope.row[item.field]"
449 v-model="scope.row[item.field]" :placeholder="editForm[item.field].placeholder" type="datetime" format="YYYY-MM-DD HH:mm:ss" 377 :placeholder="editForm[item.field].placeholder" type="datetime" format="YYYY-MM-DD HH:mm:ss"
450 value-format="YYYY-MM-DD HH:mm:ss" /> 378 value-format="YYYY-MM-DD HH:mm:ss" />
451 <el-input v-else v-model.trim="scope.row[item.field]" :placeholder="editForm[item.field].placeholder" :clearable="editForm[item.field].clearable" 379 <el-input v-else v-model.trim="scope.row[item.field]" :placeholder="editForm[item.field].placeholder"
452 :maxlength="editForm[item.field].maxlength ?? ''" 380 :clearable="editForm[item.field].clearable" :maxlength="editForm[item.field].maxlength ?? ''"
453 @input="inputKeyUp(scope.row[item.dataTypeName] == 'int' ? /\D/g : (scope.row[item.dataTypeName] == 'decimal' ? /[^0-9.-]/g : ''), scope, editForm[item.field])" 381 @input="inputKeyUp(scope.row[item.dataTypeName] == 'int' ? /\D/g : (scope.row[item.dataTypeName] == 'decimal' ? /[^0-9.-]/g : ''), scope, editForm[item.field])"
454 @change="(val) => inputChange(val, scope, item)" /> 382 @change="(val) => inputChange(val, scope, item)" />
455 </template> 383 </template>
456 <template 384 <template v-else-if="
457 v-else-if=" 385 editForm[item.field] && editForm[item.field].type == 'btn'
458 editForm[item.field] && editForm[item.field].type == 'btn' 386 ">
459 "
460 >
461 <template v-for="btn in scope.row[item.field].btns"> 387 <template v-for="btn in scope.row[item.field].btns">
462 <span 388 <span v-if="btn.visible ?? true" class="text_btn"
463 v-if="btn.visible ?? true" 389 @click="(btn.click && !btn.disabled && !scope.row.disabled) ? btn.click(scope, btn) : handleClick(scope, btn)"
464 class="text_btn" 390 v-preReClick>{{ btn.label }}</span>
465 @click="(btn.click && !btn.disabled && !scope.row.disabled) ? btn.click(scope, btn):handleClick(scope, btn)"
466 v-preReClick
467 >{{ btn.label }}</span
468 >
469 </template> 391 </template>
470 </template> 392 </template>
471 <template 393 <template v-else-if="
472 v-else-if=" 394 editForm[item.field] && editForm[item.field].type == 'comb'
473 editForm[item.field] && editForm[item.field].type == 'comb' 395 ">
474 "
475 >
476 <div v-if="scope.row['ruleType'] == 'Serial'" class="input_comb"> 396 <div v-if="scope.row['ruleType'] == 'Serial'" class="input_comb">
477 <span> 397 <span>
478 <span>起始值</span> 398 <span>起始值</span>
479 <el-input 399 <el-input v-model.trim="scope.row.start" style="width: 40px"></el-input>
480 v-model.trim="scope.row.start"
481 style="width: 40px"
482 ></el-input>
483 </span> 400 </span>
484 <span> 401 <span>
485 <span>最大值</span> 402 <span>最大值</span>
486 <el-input 403 <el-input v-model.trim="scope.row.max" style="width: 100px"></el-input>
487 v-model.trim="scope.row.max"
488 style="width: 100px"
489 ></el-input>
490 </span> 404 </span>
491 <span> 405 <span>
492 <span>长度</span> 406 <span>长度</span>
493 <el-input 407 <el-input v-model.trim="scope.row.len" style="width: 40px"></el-input>
494 v-model.trim="scope.row.len"
495 style="width: 40px"
496 ></el-input>
497 </span> 408 </span>
498 <span> 409 <span>
499 <span>步长</span> 410 <span>步长</span>
500 <el-input 411 <el-input v-model.trim="scope.row.step" style="width: 40px"></el-input>
501 v-model.trim="scope.row.step"
502 style="width: 40px"
503 ></el-input>
504 </span> 412 </span>
505 </div> 413 </div>
506 <el-input 414 <el-input v-else-if="scope.row['ruleType'] == 'Fixed'" v-model.trim="scope.row.fixedValue"
507 v-else-if="scope.row['ruleType'] == 'Fixed'" 415 clearable></el-input>
508 v-model.trim="scope.row.fixedValue" 416 <el-select v-else-if="scope.row['ruleType'] == 'Separator'" v-model="scope.row.separator" clearable>
509 clearable 417 <el-option v-if="props.tableInfo.readonly" label="--" value="" />
510 ></el-input> 418 <el-option v-for="opt in editForm[item.field].codeRule.Separator.options" :key="opt.value"
511 <el-select 419 :label="opt.label" :value="opt.value" />
512 v-else-if="scope.row['ruleType'] == 'Separator'"
513 v-model="scope.row.separator"
514 clearable
515 >
516 <el-option
517 v-if="props.tableInfo.readonly"
518 label="--"
519 value=""
520 />
521 <el-option
522 v-for="opt in editForm[item.field].codeRule.Separator.options"
523 :key="opt.value"
524 :label="opt.label"
525 :value="opt.value"
526 />
527 </el-select> 420 </el-select>
528 <el-select 421 <el-select v-else-if="scope.row['ruleType'] == 'Date'" v-model="scope.row.format" clearable>
529 v-else-if="scope.row['ruleType'] == 'Date'" 422 <el-option v-if="props.tableInfo.readonly" label="--" value="" />
530 v-model="scope.row.format" 423 <el-option v-for="opt in editForm[item.field].codeRule.Date.options" :key="opt.value" :label="opt.label"
531 clearable 424 :value="opt.value" />
532 >
533 <el-option
534 v-if="props.tableInfo.readonly"
535 label="--"
536 value=""
537 />
538 <el-option
539 v-for="opt in editForm[item.field].codeRule.Date.options"
540 :key="opt.value"
541 :label="opt.label"
542 :value="opt.value"
543 />
544 </el-select> 425 </el-select>
545 <el-select 426 <el-select v-else-if="scope.row['ruleType'] == 'Guid'" v-model="scope.row.mode" clearable>
546 v-else-if="scope.row['ruleType'] == 'Guid'" 427 <el-option v-if="props.tableInfo.readonly" label="--" value="" />
547 v-model="scope.row.mode" 428 <el-option v-for="opt in editForm[item.field].codeRule.Guid.options" :key="opt.value" :label="opt.label"
548 clearable 429 :value="opt.value" />
549 >
550 <el-option
551 v-if="props.tableInfo.readonly"
552 label="--"
553 value=""
554 />
555 <el-option
556 v-for="opt in editForm[item.field].codeRule.Guid.options"
557 :key="opt.value"
558 :label="opt.label"
559 :value="opt.value"
560 />
561 </el-select> 430 </el-select>
562 <span v-else>{{ scope.row[item.field] ?? "--" }}</span> 431 <span v-else>{{ scope.row[item.field] ?? "--" }}</span>
563 </template> 432 </template>
...@@ -568,41 +437,32 @@ onMounted(() => { ...@@ -568,41 +437,32 @@ onMounted(() => {
568 <template #default="scope" v-else> 437 <template #default="scope" v-else>
569 <template v-if="item.getSvg"> 438 <template v-if="item.getSvg">
570 <el-icon class="svg-title-icon" :class="item.getSvg(scope)"> 439 <el-icon class="svg-title-icon" :class="item.getSvg(scope)">
571 <svg-icon :name="item.getSvg(scope)" /> 440 <svg-icon :name="item.getSvg(scope)" />
572 </el-icon> 441 </el-icon>
573 <span :style="{'margin-left': '5px'}">{{ 442 <span :style="{ 'margin-left': '5px' }">{{
574 item.getName 443 item.getName
575 ? item.getName(scope) 444 ? item.getName(scope)
576 : scope.row[item.field] !== 0 && !scope.row[item.field] 445 : scope.row[item.field] !== 0 && !scope.row[item.field]
577 ? "--" 446 ? "--"
578 : scope.row[item.field] 447 : scope.row[item.field]
579 }}</span> 448 }}</span>
580 </template> 449 </template>
581 <!--- 直接用??会导致空字符串时无法显示'--',此处需要区分0和“” --> 450 <!--- 直接用??会导致空字符串时无法显示'--',此处需要区分0和“” -->
582 <span v-else>{{ 451 <span v-else>{{
583 item.getName 452 item.getName
584 ? item.getName(scope) 453 ? item.getName(scope)
585 : scope.row[item.field] !== 0 && !scope.row[item.field] 454 : scope.row[item.field] !== 0 && !scope.row[item.field]
586 ? "--" 455 ? "--"
587 : scope.row[item.field] 456 : scope.row[item.field]
588 }}</span> 457 }}</span>
589 </template> 458 </template>
590 </el-table-column> 459 </el-table-column>
591 <el-table-column 460 <el-table-column :width="actionInfo.width" :class-name="actionInfo.columClass" fixed="right"
592 :width="actionInfo.width" 461 v-if="actionInfo.show ?? true">
593 :class-name="actionInfo.columClass"
594 fixed="right"
595 v-if="actionInfo.show ?? true"
596 >
597 <template #header> 462 <template #header>
598 <div class="header_title"> 463 <div class="header_title">
599 <span>{{ actionInfo.label ?? "操作" }}</span> 464 <span>{{ actionInfo.label ?? "操作" }}</span>
600 <el-tooltip 465 <el-tooltip placement="top" effect="light" popper-class="table_tooltip" v-if="actionInfo.tooltip">
601 placement="top"
602 effect="light"
603 popper-class="table_tooltip"
604 v-if="actionInfo.tooltip"
605 >
606 <template #content> 466 <template #content>
607 <div style="width: 236px; text-align: justify"> 467 <div style="width: 236px; text-align: justify">
608 帮助:初始化为系统底层操作,为会员创建数据库及系统表操作,一旦初始化将不可以删除会员。 468 帮助:初始化为系统底层操作,为会员创建数据库及系统表操作,一旦初始化将不可以删除会员。
...@@ -618,169 +478,95 @@ onMounted(() => { ...@@ -618,169 +478,95 @@ onMounted(() => {
618 <!-- 某些操作按钮需要根据当前行信息设置显示隐藏,actionInfo.btns使用回调函数返回。 --> 478 <!-- 某些操作按钮需要根据当前行信息设置显示隐藏,actionInfo.btns使用回调函数返回。 -->
619 <template v-if="actionInfo.isMore"> 479 <template v-if="actionInfo.isMore">
620 <template v-if="Array.isArray(actionInfo.btns) 480 <template v-if="Array.isArray(actionInfo.btns)
621 ? actionInfo.btns.length>4 481 ? actionInfo.btns.length > 4
622 : actionInfo.btns(scope).length>4"> 482 : actionInfo.btns(scope).length > 4">
623 <template 483 <template v-for="(btn, b) in Array.isArray(actionInfo.btns)
624 v-for="(btn, b) in Array.isArray(actionInfo.btns) 484 ? actionInfo.btns.slice(0, 4)
625 ? actionInfo.btns.slice(0,4) 485 : actionInfo.btns(scope).slice(0, 4)">
626 : actionInfo.btns(scope).slice(0,4)" 486 <span class="operate_btn" :class="{ active: btn.visible ?? true }" v-if="btn.visible ?? true">
627 > 487 <BtnPopover v-if="btn.value == 'authority'" :popover-info="{ scope, btn, ...popverData }"
628 <span 488 @showPopver="handleClick" @popverBtnClick="handleClick" />
629 class="operate_btn" 489 <span class="text_btn" :class="{ 'is-disabled': !!btn.disabled }" v-else
630 :class="{ active: btn.visible ?? true }" 490 @click="(btn.click && !btn.disabled && !scope.row.disabled) ? btn.click(scope, btn) : handleClick(scope, btn)"
631 v-if="btn.visible ?? true" 491 v-preReClick>{{ btn.label }}</span>
632 > 492 </span>
633 <BtnPopover 493 </template>
634 v-if="btn.value == 'authority'" 494 <span class="operate_btn active">
635 :popover-info="{ scope, btn, ...popverData }" 495 <el-dropdown trigger="hover" :show-timeout="50">
636 @showPopver="handleClick" 496 <span class="text_btn">...</span>
637 @popverBtnClick="handleClick" 497 <template #dropdown>
638 /> 498 <el-dropdown-menu>
639 <span 499 <el-dropdown-item v-for="(btn, b) in Array.isArray(actionInfo.btns)
640 class="text_btn" 500 ? actionInfo.btns.slice(4)
641 :class="{ 'is-disabled': !!btn.disabled }" 501 : actionInfo.btns(scope).slice(4)">
642 v-else 502 <span class="operate_btn" style="width: 100%; display: inline-block;"
643 @click="(btn.click && !btn.disabled && !scope.row.disabled) ? btn.click(scope, btn):handleClick(scope, btn)" 503 :class="{ active: btn.visible ?? true }" v-if="btn.visible ?? true">
644 v-preReClick 504 <BtnPopover v-if="btn.value == 'authority'" :popover-info="{ scope, btn, ...popverData }"
645 >{{ btn.label }}</span> 505 @showPopver="handleClick" @popverBtnClick="handleClick" />
646 </span> 506 <span class="text_btn" style="width: 100%;display: block;"
647 </template> 507 :class="{ 'is-disabled': !!btn.disabled }" v-else
648 <span class="operate_btn active"> 508 @click="(btn.click && !btn.disabled && !scope.row.disabled) ? btn.click(scope, btn) : handleClick(scope, btn)"
649 <el-dropdown trigger="hover" :show-timeout="50" > 509 v-preReClick>{{ btn.label }}</span>
650 <span class="text_btn">...</span> 510 </span>
651 <template #dropdown> 511 </el-dropdown-item>
652 512 </el-dropdown-menu>
653 <el-dropdown-menu > 513 </template>
654 <el-dropdown-item v-for="(btn, b) in Array.isArray(actionInfo.btns) 514 </el-dropdown>
655 ? actionInfo.btns.slice(4)
656 : actionInfo.btns(scope).slice(4)">
657 <span
658 class="operate_btn"
659 style="width: 100%; display: inline-block;"
660 :class="{ active: btn.visible ?? true }"
661 v-if="btn.visible ?? true"
662 >
663 <BtnPopover
664 v-if="btn.value == 'authority'"
665 :popover-info="{ scope, btn, ...popverData }"
666 @showPopver="handleClick"
667 @popverBtnClick="handleClick"
668 />
669 <span
670 class="text_btn"
671 style="width: 100%;display: block;"
672 :class="{ 'is-disabled': !!btn.disabled }"
673 v-else
674 @click="(btn.click && !btn.disabled && !scope.row.disabled) ? btn.click(scope, btn) : handleClick(scope, btn)"
675 v-preReClick
676 >{{ btn.label }}</span
677 >
678 </span> 515 </span>
679 </el-dropdown-item>
680 </el-dropdown-menu>
681 </template> 516 </template>
682 </el-dropdown> 517 <template v-else>
683 </span> 518 <template v-for="(btn, b) in Array.isArray(actionInfo.btns)
684 </template> 519 ? actionInfo.btns
685 <template v-else> 520 : actionInfo.btns(scope)">
686 <template 521 <span class="operate_btn" :class="{ active: btn.visible ?? true }" v-if="btn.visible ?? true">
687 v-for="(btn, b) in Array.isArray(actionInfo.btns) 522 <BtnPopover v-if="btn.value == 'authority'" :popover-info="{ scope, btn, ...popverData }"
688 ? actionInfo.btns 523 @showPopver="handleClick" @popverBtnClick="handleClick" />
689 : actionInfo.btns(scope)" 524 <span class="text_btn" :class="{ 'is-disabled': !!btn.disabled }" v-else
690 > 525 @click="(btn.click && !btn.disabled && !scope.row.disabled) ? btn.click(scope, btn) : handleClick(scope, btn)"
691 <span 526 v-preReClick>{{ btn.label }}</span>
692 class="operate_btn" 527 </span>
693 :class="{ active: btn.visible ?? true }" 528 </template>
694 v-if="btn.visible ?? true" 529 </template>
695 >
696 <BtnPopover
697 v-if="btn.value == 'authority'"
698 :popover-info="{ scope, btn, ...popverData }"
699 @showPopver="handleClick"
700 @popverBtnClick="handleClick"
701 />
702 <span
703 class="text_btn"
704 :class="{ 'is-disabled': !!btn.disabled }"
705 v-else
706 @click="(btn.click && !btn.disabled && !scope.row.disabled) ? btn.click(scope, btn) : handleClick(scope, btn)"
707 v-preReClick
708 >{{ btn.label }}</span>
709 </span>
710 </template>
711 </template>
712 </template> 530 </template>
713 <template v-else> 531 <template v-else>
714 <template 532 <template v-for="(btn, b) in Array.isArray(actionInfo.btns)
715 v-for="(btn, b) in Array.isArray(actionInfo.btns)
716 ? actionInfo.btns 533 ? actionInfo.btns
717 : actionInfo.btns(scope)" 534 : actionInfo.btns(scope)">
718 > 535 <span class="operate_btn" :class="{ active: btn.visible ?? true, 'sort-icon': btn.value == 'sort' }"
719 <span 536 v-if="btn.visible ?? true">
720 class="operate_btn" 537 <el-icon v-if="btn.value == 'sort'" style="width: 24px;height: 15px;vertical-align: text-top;">
721 :class="{ active: btn.visible ?? true, 'sort-icon': btn.value == 'sort' }" 538 <svg-icon style="width: 24px;height: 15px;" name="sort-drag" />
722 v-if="btn.visible ?? true" 539 </el-icon>
723 > 540 <BtnPopover v-if="btn.value == 'authority'" :popover-info="{ scope, btn, ...popverData }"
724 <el-icon v-if="btn.value == 'sort'" style="width: 24px;height: 15px;vertical-align: text-top;"> 541 @showPopver="handleClick" @popverBtnClick="handleClick" />
725 <svg-icon style="width: 24px;height: 15px;" name="sort-drag" /> 542 <span class="text_btn" :class="{ 'is-disabled': !!btn.disabled }" v-else
726 </el-icon> 543 @click="(btn.click && !btn.disabled && !scope.row.disabled) ? btn.click(scope, btn) : handleClick(scope, btn)"
727 <BtnPopover 544 v-preReClick>{{ btn.label }}</span>
728 v-if="btn.value == 'authority'" 545 </span>
729 :popover-info="{ scope, btn, ...popverData }" 546 </template>
730 @showPopver="handleClick"
731 @popverBtnClick="handleClick"
732 />
733 <span
734 class="text_btn"
735 :class="{ 'is-disabled': !!btn.disabled }"
736 v-else
737 @click="(btn.click && !btn.disabled && !scope.row.disabled) ? btn.click(scope, btn):handleClick(scope, btn)"
738 v-preReClick
739 >{{ btn.label }}</span>
740 </span>
741 </template>
742 </template> 547 </template>
743 548 <template v-if="
744 <template 549 props.tableInfo.id.indexOf('maintenance') > -1 &&
745 v-if=" 550 scope.row.isInit == 'N'
746 props.tableInfo.id.indexOf('maintenance') > -1 && 551 ">
747 scope.row.isInit == 'N' 552 <span class="text_btn" @click="handleClick(scope, { label: '初始化', value: 'init' })" v-preReClick>初始化</span>
748 "
749 >
750 <span
751 class="text_btn"
752 @click="handleClick(scope, { label: '初始化', value: 'init' })"
753 v-preReClick
754 >初始化</span
755 >
756 </template> 553 </template>
757 <template 554 <template v-else-if="
758 v-else-if=" 555 props.tableInfo.id.indexOf('product-menu') > -1 &&
759 props.tableInfo.id.indexOf('product-menu') > -1 && 556 scope.row.menuType != 'F'
760 scope.row.menuType != 'F' 557 ">
761 " 558 <span class="text_btn" @click="
762 > 559 handleClick(scope, { label: '添加子菜单', value: 'menu' })
763 <span 560 " v-preReClick>添加子菜单</span>
764 class="text_btn"
765 @click="
766 handleClick(scope, { label: '添加子菜单', value: 'menu' })
767 "
768 v-preReClick
769 >添加子菜单</span
770 >
771 </template> 561 </template>
772 </template> 562 </template>
773 </el-table-column> 563 </el-table-column>
774 <template #append> 564 <template #append>
775 <td :class="props.tableInfo.footerClass" v-if="props.tableInfo.footerHtml" :colspan="5" v-html="props.tableInfo.footerHtml"></td> 565 <td :class="props.tableInfo.footerClass" v-if="props.tableInfo.footerHtml" :colspan="5"
776 </template> 566 v-html="props.tableInfo.footerHtml"></td>
567 </template>
777 </el-table> 568 </el-table>
778 <PageNav 569 <PageNav v-if="showPage" :class="[pageInfo.type, pageInfo.col]" :pageInfo="pageInfo" @pageChange="pageChange" />
779 v-if="showPage"
780 :class="[pageInfo.type, pageInfo.col]"
781 :pageInfo="pageInfo"
782 @pageChange="pageChange"
783 />
784 </div> 570 </div>
785 </template> 571 </template>
786 572
...@@ -810,17 +596,18 @@ onMounted(() => { ...@@ -810,17 +596,18 @@ onMounted(() => {
810 } 596 }
811 } 597 }
812 } 598 }
599
813 .input_comb { 600 .input_comb {
814 > span:not(:last-child) { 601 >span:not(:last-child) {
815 margin-right: 12px; 602 margin-right: 12px;
816 603
817 > span { 604 >span {
818 margin-right: 4px; 605 margin-right: 4px;
819 } 606 }
820 } 607 }
821 608
822 > span:last-child { 609 >span:last-child {
823 > span { 610 >span {
824 margin-right: 4px; 611 margin-right: 4px;
825 } 612 }
826 } 613 }
...@@ -834,7 +621,7 @@ onMounted(() => { ...@@ -834,7 +621,7 @@ onMounted(() => {
834 padding-right: 4px; 621 padding-right: 4px;
835 position: relative; 622 position: relative;
836 623
837 & ~ .active { 624 &~.active {
838 padding-left: 4px; 625 padding-left: 4px;
839 margin-left: 1px; 626 margin-left: 1px;
840 627
...@@ -855,13 +642,14 @@ onMounted(() => { ...@@ -855,13 +642,14 @@ onMounted(() => {
855 } 642 }
856 } 643 }
857 } 644 }
858 .primary {
859 645
860 .el-table__cell { 646 .primary {
861 background: none; 647
648 .el-table__cell {
649 background: none;
650 }
862 } 651 }
863 } 652 }
864 }
865 653
866 .svg-title-icon { 654 .svg-title-icon {
867 width: 16px; 655 width: 16px;
...@@ -875,6 +663,7 @@ onMounted(() => { ...@@ -875,6 +663,7 @@ onMounted(() => {
875 &.icon-audit { 663 &.icon-audit {
876 color: #b2b2b2 664 color: #b2b2b2
877 } 665 }
666
878 svg { 667 svg {
879 width: 100%; 668 width: 100%;
880 height: 100%; 669 height: 100%;
...@@ -883,14 +672,13 @@ onMounted(() => { ...@@ -883,14 +672,13 @@ onMounted(() => {
883 672
884 .last-row { 673 .last-row {
885 display: flex; 674 display: flex;
886 height: 36px; 675 height: 36px;
887 line-height: 36px; 676 line-height: 36px;
888 background: #FFF1D4; 677 background: #FFF1D4;
889 border-bottom: 1px solid #d9d9d9; 678 border-bottom: 1px solid #d9d9d9;
890 border-right: 1px solid #d9d9d9; 679 border-right: 1px solid #d9d9d9;
891 flex-direction: row; 680 flex-direction: row;
892 justify-content: space-between; 681 justify-content: space-between;
893 padding: 0px 8px; 682 padding: 0px 8px;
894 } 683 }
895
896 </style> 684 </style>
......
...@@ -50,7 +50,7 @@ router.beforeEach(async (to, from, next) => { ...@@ -50,7 +50,7 @@ router.beforeEach(async (to, from, next) => {
50 }) 50 })
51 } 51 }
52 // 如果未开启主页,但进入的是主页,则会进入侧边栏导航第一个模块 52 // 如果未开启主页,但进入的是主页,则会进入侧边栏导航第一个模块
53 else if (!settingsStore.settings.home.enable && to.name === 'home') { 53 else if (!settingsStore.settings.home.enable && (to.name === 'home' || to.name === undefined)) {
54 if (menuStore.sidebarMenus.length > 0) { 54 if (menuStore.sidebarMenus.length > 0) {
55 next({ 55 next({
56 path: menuStore.sidebarMenusFirstDeepestPath, 56 path: menuStore.sidebarMenusFirstDeepestPath,
......
...@@ -34,7 +34,7 @@ const routes: RouteRecordRaw[] = [ ...@@ -34,7 +34,7 @@ const routes: RouteRecordRaw[] = [
34 cache: true, 34 cache: true,
35 reuse: true, 35 reuse: true,
36 editPage: true, 36 editPage: true,
37 activeMenu: '/data-inventory/classify-grade-manage/template-config' 37 activeMenu: '/data-inventory/classify-grade-manage/task-config'
38 }, 38 },
39 beforeEnter: (to, from) => { 39 beforeEnter: (to, from) => {
40 if (to.query.name) { 40 if (to.query.name) {
...@@ -45,6 +45,46 @@ const routes: RouteRecordRaw[] = [ ...@@ -45,6 +45,46 @@ const routes: RouteRecordRaw[] = [
45 } 45 }
46 }, 46 },
47 { 47 {
48 path: 'task-detail',
49 name: 'taskDetail',
50 component: () => import('@/views/data_inventory/taskDetail.vue'),
51 meta: {
52 title: '结果-',
53 sidebar: false,
54 breadcrumb: false,
55 cache: true,
56 reuse: true,
57 editPage: true,
58 activeMenu: '/data-inventory/classify-grade-manage/task-config'
59 },
60 beforeEnter: (to, from) => {
61 if (to.query.type == 'confirm') {
62 to.meta.title = `${to.query.name}-结果确认`;
63 } else {
64 to.meta.title = `${to.query.name}-结果修改`;
65 }
66 }
67 },
68 {
69 path: 'task-log',
70 name: 'taskLog',
71 component: () => import('@/views/data_inventory/taskLog.vue'),
72 meta: {
73 title: '分级分类日志',
74 sidebar: false,
75 breadcrumb: false,
76 cache: true,
77 reuse: true,
78 editPage: true,
79 activeMenu: '/data-inventory/classify-grade-manage/task-config'
80 },
81 beforeEnter: (to, from) => {
82 // if (to.query.name) {
83 // to.meta.title = `编辑-${to.query.name}`;
84 // }
85 }
86 },
87 {
48 path: 'template-config', 88 path: 'template-config',
49 name: 'templateConfig', 89 name: 'templateConfig',
50 component: () => import('@/views/data_inventory/templateConfig.vue'), 90 component: () => import('@/views/data_inventory/templateConfig.vue'),
......
...@@ -4,7 +4,7 @@ import router from '@/router' ...@@ -4,7 +4,7 @@ import router from '@/router'
4 import { ElMessage } from 'element-plus' 4 import { ElMessage } from 'element-plus'
5 import apiUser from '@/api/modules/user' 5 import apiUser from '@/api/modules/user'
6 import { getCurrentTime } from '@/utils/common' 6 import { getCurrentTime } from '@/utils/common'
7 import { getUserInfo, getTokenByCode, loginOut, refreshToken, editPasswordInterface } from '@/api/modules/queryService' 7 import { getSystemMenu, getUserInfo, getTokenByCode, loginOut, refreshToken, editPasswordInterface } from '@/api/modules/queryService'
8 8
9 const useUserStore = defineStore( 9 const useUserStore = defineStore(
10 // 唯一ID 10 // 唯一ID
...@@ -17,6 +17,7 @@ const useUserStore = defineStore( ...@@ -17,6 +17,7 @@ const useUserStore = defineStore(
17 const userId = ref(localStorage.userId ?? '') 17 const userId = ref(localStorage.userId ?? '')
18 const userName = ref(localStorage.userName ?? '') 18 const userName = ref(localStorage.userName ?? '')
19 const userData = ref(localStorage.userData ?? '{}') 19 const userData = ref(localStorage.userData ?? '{}')
20 const currentTenantGuid = ref(localStorage.currentTenantGuid ?? '');
20 const userInfoData = ref(JSON.parse(localStorage.userInfoData ?? "[]")) 21 const userInfoData = ref(JSON.parse(localStorage.userInfoData ?? "[]"))
21 const token = ref(localStorage.token ?? '') 22 const token = ref(localStorage.token ?? '')
22 const tabbarMap: any = ref({}) 23 const tabbarMap: any = ref({})
...@@ -30,10 +31,14 @@ const useUserStore = defineStore( ...@@ -30,10 +31,14 @@ const useUserStore = defineStore(
30 const timer: any = ref(null); 31 const timer: any = ref(null);
31 //获取token. 32 //获取token.
32 function getToken(data, state) { 33 function getToken(data, state) {
33 data.platformGuid = "6646dcad76c411eea911fa163e419da9"; 34 data.platformGuid = "7f16f697aec111ef8656fa163e60becd";
34 data.userType = 2; 35 data.userType = 2;
35 isLogin.value = true; 36 data.validateUri = location.origin + '/';
37 debugger
38 debugger
36 return getTokenPromise.value = getTokenByCode(data).then((res: any) => { 39 return getTokenPromise.value = getTokenByCode(data).then((res: any) => {
40 debugger
41 debugger
37 getTokenPromise.value = null; 42 getTokenPromise.value = null;
38 console.log(res); 43 console.log(res);
39 if (res.code == '00000') { 44 if (res.code == '00000') {
...@@ -41,25 +46,24 @@ const useUserStore = defineStore( ...@@ -41,25 +46,24 @@ const useUserStore = defineStore(
41 isLogin.value = true; 46 isLogin.value = true;
42 localStorage.setItem('code', `${data.code}`); 47 localStorage.setItem('code', `${data.code}`);
43 localStorage.setItem('state', state); 48 localStorage.setItem('state', state);
44 localStorage.setItem('token', res.data.access_token || ""); 49 localStorage.setItem('token', res.data.token || "");
45 token.value = res.data.access_token; 50 token.value = res.data.access_token;
46 localStorage.setItem('refresh_token', res.data.refresh_token || ""); 51 localStorage.setItem('refresh_token', res.data.refreshToken || "");
47 const expiresIn = (Date.now() + 1700000) + ""; 52 const expiresIn = (Date.now() + 1700000) + "";
48 localStorage.setItem('expiresIn', expiresIn); 53 localStorage.setItem('expiresIn', expiresIn);
49 refreshUserToken(); 54 refreshUserToken();
50 //获取用户信息 55 //获取用户信息
51 localStorage.setItem('account', res.data.logonUser)
52 localStorage.setItem('userId', res.data.userId)
53 localStorage.setItem('userName', res.data.userName)
54 localStorage.setItem('userData', JSON.stringify(res.data.data))
55 account.value = res.data.logonUser 56 account.value = res.data.logonUser
56 userId.value = res.data.userId 57 userId.value = res.data.userId
57 userName.value = res.data.userName 58 userName.value = res.data.userName
58 userData.value = JSON.stringify(res.data.data) 59 // userData.value = JSON.stringify(res.data.data);
59 return getUserInfo().then((info: any) => { 60 currentTenantGuid.value = res.data.tenantInfoList && res.data.tenantInfoList.length ? res.data.tenantInfoList[0].guid : '';
61 let currentTenant = res.data.tenantInfoList?.[0];
62 return getSystemMenu({ tenantGuid: currentTenantGuid.value }).then((info: any) => {
60 if (info.code == '00000') { 63 if (info.code == '00000') {
61 localStorage.setItem('userInfoData', JSON.stringify(info.data)) 64 localStorage.setItem('userName', currentTenant?.name)
62 userInfoData.value = info.data 65 localStorage.setItem('userInfoData', JSON.stringify(info.data));
66 userInfoData.value = info.data;
63 } else { 67 } else {
64 ElMessage.error(info.msg) 68 ElMessage.error(info.msg)
65 } 69 }
......
...@@ -19,6 +19,319 @@ const router = useRouter(); ...@@ -19,6 +19,319 @@ const router = useRouter();
19 const userStore = useUserStore(); 19 const userStore = useUserStore();
20 const userData = JSON.parse(userStore.userData); 20 const userData = JSON.parse(userStore.userData);
21 const assetStore = useDataAssetStore(); 21 const assetStore = useDataAssetStore();
22 const datas = [
23 {
24 "updateTime": "2024-07-16 13:17:00",
25 "updateUserName": "数往知来管理员",
26 "guid": "4e0e76c48fa043d5b35d09f3ccc7c265",
27 "approvalGuid": null,
28 "standardSetGuid": "58d1178a04904d599284fc1e61594c43",
29 "fieldStandardCode": "COL202406070021",
30 "dataVersion": 1,
31 "chName": "地址",
32 "enName": "address",
33 "dataTypeValue": "字符型",
34 "dataTypeCode": "varchar",
35 "dataDicGuid": "",
36 "dataDicName": null,
37 "isDataDic": "N",
38 "fieldLength": 600,
39 "fieldPrecision": null,
40 "dataState": 0,
41 "approveState": "N",
42 "dataCategory": "合伙人",
43 "dataEncryptionLevel": "界面加密",
44 "businessDefDesc": "地址",
45 "flowFlag": null,
46 "flowCode": null,
47 "functionCode": null,
48 "createStaffGuid": null,
49 "createUserId": "98df01b8d86c46f786dd10b4d0eb11dd",
50 "displayVersion": "V1",
51 "standardSetName": null,
52 "ruleType": null
53 },
54 {
55 "updateTime": "2024-01-27 10:19:45",
56 "updateUserName": "数往知来管理员",
57 "guid": "bc630207357c466dbff7613ea38985cc",
58 "approvalGuid": null,
59 "standardSetGuid": "58d1178a04904d599284fc1e61594c43",
60 "fieldStandardCode": "COL202401260124",
61 "dataVersion": 1,
62 "chName": "包含最小销售包装单元数量",
63 "enName": "inboxQuantity",
64 "dataTypeValue": "整型",
65 "dataTypeCode": "int",
66 "dataDicGuid": null,
67 "dataDicName": null,
68 "isDataDic": null,
69 "fieldLength": null,
70 "fieldPrecision": null,
71 "dataState": 1,
72 "approveState": "A",
73 "dataCategory": null,
74 "dataEncryptionLevel": "明文显示",
75 "businessDefDesc": "当前药品追溯码中包含的最小销售包装单元药品追溯码的数量,发货类型为03时可选",
76 "flowFlag": null,
77 "flowCode": null,
78 "functionCode": null,
79 "createStaffGuid": null,
80 "createUserId": "98df01b8d86c46f786dd10b4d0eb11dd",
81 "displayVersion": "V1",
82 "standardSetName": null,
83 "ruleType": null
84 },
85 {
86 "updateTime": "2024-01-27 11:03:59",
87 "updateUserName": "审批人4",
88 "guid": "420f2a68bd4441bf92010eadf698b685",
89 "approvalGuid": null,
90 "standardSetGuid": "58d1178a04904d599284fc1e61594c43",
91 "fieldStandardCode": "COL202401260122",
92 "dataVersion": 1,
93 "chName": "包装层级",
94 "enName": "packageLevel",
95 "dataTypeValue": "字符型",
96 "dataTypeCode": "varchar",
97 "dataDicGuid": null,
98 "dataDicName": null,
99 "isDataDic": null,
100 "fieldLength": 200,
101 "fieldPrecision": null,
102 "dataState": 1,
103 "approveState": "A",
104 "dataCategory": null,
105 "dataEncryptionLevel": "明文显示",
106 "businessDefDesc": "当前药品追溯码所处包装层级描述,发货类型为03时可选",
107 "flowFlag": null,
108 "flowCode": null,
109 "functionCode": null,
110 "createStaffGuid": null,
111 "createUserId": "98df01b8d86c46f786dd10b4d0eb11dd",
112 "displayVersion": "V1",
113 "standardSetName": null,
114 "ruleType": null
115 },
116 {
117 "updateTime": "2024-06-06 10:01:06",
118 "updateUserName": "审批人1",
119 "guid": "f841e1848ab94b1e81a0217a09a7a3d3",
120 "approvalGuid": "b674bffe8d2f4132918016b6baaf75aa",
121 "standardSetGuid": "58d1178a04904d599284fc1e61594c43",
122 "fieldStandardCode": "COL202401260120",
123 "dataVersion": 1,
124 "chName": "上一级包装药品追溯码",
125 "enName": "parentDTC",
126 "dataTypeValue": "字符型",
127 "dataTypeCode": "varchar",
128 "dataDicGuid": "",
129 "dataDicName": null,
130 "isDataDic": "N",
131 "fieldLength": 200,
132 "fieldPrecision": null,
133 "dataState": 1,
134 "approveState": "Y",
135 "dataCategory": "",
136 "dataEncryptionLevel": "明文显示",
137 "businessDefDesc": "当前药品追溯码大一级包装上的药品追溯码,发货类型为03时可选;当存在上一级包装时必选",
138 "flowFlag": null,
139 "flowCode": null,
140 "functionCode": null,
141 "createStaffGuid": null,
142 "createUserId": "98df01b8d86c46f786dd10b4d0eb11dd",
143 "displayVersion": "V1",
144 "standardSetName": null,
145 "ruleType": null
146 },
147 {
148 "updateTime": "2024-01-26 00:10:47",
149 "updateUserName": "数往知来管理员",
150 "guid": "d4d42dea2a5844b4a7f9238806ea507b",
151 "approvalGuid": null,
152 "standardSetGuid": "58d1178a04904d599284fc1e61594c43",
153 "fieldStandardCode": "COL202401260118",
154 "dataVersion": 1,
155 "chName": "药品追溯码",
156 "enName": "DTC",
157 "dataTypeValue": "字符型",
158 "dataTypeCode": "varchar",
159 "dataDicGuid": null,
160 "dataDicName": null,
161 "isDataDic": null,
162 "fieldLength": 200,
163 "fieldPrecision": null,
164 "dataState": 0,
165 "approveState": "N",
166 "dataCategory": null,
167 "dataEncryptionLevel": "明文显示",
168 "businessDefDesc": "用于唯一标识药品各级销售包装单元的代码,发货类型为03时可选",
169 "flowFlag": null,
170 "flowCode": null,
171 "functionCode": null,
172 "createStaffGuid": null,
173 "createUserId": "98df01b8d86c46f786dd10b4d0eb11dd",
174 "displayVersion": "V1",
175 "standardSetName": null,
176 "ruleType": null
177 },
178 {
179 "updateTime": "2024-01-26 00:10:47",
180 "updateUserName": "数往知来管理员",
181 "guid": "ff9d0e4f6fbb444c8dcf6f67bffcb659",
182 "approvalGuid": null,
183 "standardSetGuid": "58d1178a04904d599284fc1e61594c43",
184 "fieldStandardCode": "COL202401260116",
185 "dataVersion": 1,
186 "chName": "发货数量",
187 "enName": "deliveryQuantity",
188 "dataTypeValue": "整型",
189 "dataTypeCode": "int",
190 "dataDicGuid": null,
191 "dataDicName": null,
192 "isDataDic": null,
193 "fieldLength": null,
194 "fieldPrecision": null,
195 "dataState": 0,
196 "approveState": "N",
197 "dataCategory": null,
198 "dataEncryptionLevel": "明文显示",
199 "businessDefDesc": "发货的最小销售包装单元数量",
200 "flowFlag": null,
201 "flowCode": null,
202 "functionCode": null,
203 "createStaffGuid": null,
204 "createUserId": "98df01b8d86c46f786dd10b4d0eb11dd",
205 "displayVersion": "V1",
206 "standardSetName": null,
207 "ruleType": null
208 },
209 {
210 "updateTime": "2024-01-26 00:10:46",
211 "updateUserName": "数往知来管理员",
212 "guid": "fe88ac9e8d9c4f148833dbb3976fca77",
213 "approvalGuid": null,
214 "standardSetGuid": "58d1178a04904d599284fc1e61594c43",
215 "fieldStandardCode": "COL202401260114",
216 "dataVersion": 1,
217 "chName": "药品生产批号",
218 "enName": "batch",
219 "dataTypeValue": "字符型",
220 "dataTypeCode": "varchar",
221 "dataDicGuid": null,
222 "dataDicName": null,
223 "isDataDic": null,
224 "fieldLength": 20,
225 "fieldPrecision": null,
226 "dataState": 0,
227 "approveState": "N",
228 "dataCategory": null,
229 "dataEncryptionLevel": "明文显示",
230 "businessDefDesc": "药品包装上标示的生产批号",
231 "flowFlag": null,
232 "flowCode": null,
233 "functionCode": null,
234 "createStaffGuid": null,
235 "createUserId": "98df01b8d86c46f786dd10b4d0eb11dd",
236 "displayVersion": "V1",
237 "standardSetName": null,
238 "ruleType": null
239 },
240 {
241 "updateTime": "2024-01-26 00:10:45",
242 "updateUserName": "数往知来管理员",
243 "guid": "9759837e0d72472ab7441c1873c9159a",
244 "approvalGuid": null,
245 "standardSetGuid": "58d1178a04904d599284fc1e61594c43",
246 "fieldStandardCode": "COL202401260112",
247 "dataVersion": 1,
248 "chName": "药品有效期截止日期",
249 "enName": "expirationDate",
250 "dataTypeValue": "日期型",
251 "dataTypeCode": "date",
252 "dataDicGuid": null,
253 "dataDicName": null,
254 "isDataDic": null,
255 "fieldLength": null,
256 "fieldPrecision": null,
257 "dataState": 0,
258 "approveState": "N",
259 "dataCategory": null,
260 "dataEncryptionLevel": "明文显示",
261 "businessDefDesc": "药品有效期的截止日期",
262 "flowFlag": null,
263 "flowCode": null,
264 "functionCode": null,
265 "createStaffGuid": null,
266 "createUserId": "98df01b8d86c46f786dd10b4d0eb11dd",
267 "displayVersion": "V1",
268 "standardSetName": null,
269 "ruleType": null
270 },
271 {
272 "updateTime": "2024-01-26 00:10:45",
273 "updateUserName": "数往知来管理员",
274 "guid": "a39ed6123c6a420d9d1265315e714f86",
275 "approvalGuid": null,
276 "standardSetGuid": "58d1178a04904d599284fc1e61594c43",
277 "fieldStandardCode": "COL202401260110",
278 "dataVersion": 1,
279 "chName": "药品生产日期",
280 "enName": "productionDate",
281 "dataTypeValue": "日期型",
282 "dataTypeCode": "date",
283 "dataDicGuid": null,
284 "dataDicName": null,
285 "isDataDic": null,
286 "fieldLength": null,
287 "fieldPrecision": null,
288 "dataState": 0,
289 "approveState": "N",
290 "dataCategory": null,
291 "dataEncryptionLevel": "明文显示",
292 "businessDefDesc": "药品包装上标示的生产日期",
293 "flowFlag": null,
294 "flowCode": null,
295 "functionCode": null,
296 "createStaffGuid": null,
297 "createUserId": "98df01b8d86c46f786dd10b4d0eb11dd",
298 "displayVersion": "V1",
299 "standardSetName": null,
300 "ruleType": null
301 },
302 {
303 "updateTime": "2024-01-26 00:10:45",
304 "updateUserName": "数往知来管理员",
305 "guid": "ea597c1b8bb24a5ab053a80b084de98c",
306 "approvalGuid": null,
307 "standardSetGuid": "58d1178a04904d599284fc1e61594c43",
308 "fieldStandardCode": "COL202401260108",
309 "dataVersion": 1,
310 "chName": "统一社会信用代码(进口药品代理企业)",
311 "enName": "drugImporterUSCID",
312 "dataTypeValue": "字符型",
313 "dataTypeCode": "varchar",
314 "dataDicGuid": null,
315 "dataDicName": null,
316 "isDataDic": null,
317 "fieldLength": 18,
318 "fieldPrecision": null,
319 "dataState": 0,
320 "approveState": "N",
321 "dataCategory": null,
322 "dataEncryptionLevel": "明文显示",
323 "businessDefDesc": "进口药品代理企业的统一社会信用代码,进口药品必选;没有统一社会信用代码时使用组织机构代码",
324 "flowFlag": null,
325 "flowCode": null,
326 "functionCode": null,
327 "createStaffGuid": null,
328 "createUserId": "98df01b8d86c46f786dd10b4d0eb11dd",
329 "displayVersion": "V1",
330 "standardSetName": null,
331 "ruleType": null
332 }
333 ]
334
22 const page = ref({ 335 const page = ref({
23 limit: 50, 336 limit: 50,
24 curr: 1, 337 curr: 1,
...@@ -36,24 +349,26 @@ const tableInfo = ref({ ...@@ -36,24 +349,26 @@ const tableInfo = ref({
36 id: "mapping-table", 349 id: "mapping-table",
37 fields: [ 350 fields: [
38 { label: "序号", type: "index", width: 56, align: "center", fixed: "left" }, 351 { label: "序号", type: "index", width: 56, align: "center", fixed: "left" },
39 { label: "任务名称", field: "damCode", width: 96 }, 352 { label: "任务名称", field: "taskName", width: 96 },
40 { label: "目录名称", field: "damName", width: 120 },
41 { label: "分类分级模板", field: "damTypeName", width: 200 },
42 { label: "元数据", field: "damTypeName", width: 200 },
43 // {
44 // label: "是否公共数据", field: "isPublicData", width: 120, getName: (scope) => {
45 // return scope.row.isPublicData == 'Y' ? '是' : '否';
46 // }
47 // },
48 { 353 {
49 label: "执行状态", field: "approveState", width: TableColumnWidth.STATE, align: 'center', type: "tag", getName: (scope) => { 354 label: "目录名称", field: "cgDirName", width: 120, type: "text_btn", columClass: 'text_btn', click: (scope) => {
50 return filterVal(scope.row.approveState, 'approveState'); 355 router.push({
356 name: "templateConfig",
357 query: { guid: scope.row.damGuid },
358 });
51 } 359 }
52 }, 360 },
53 { label: "任务修改人", field: "damName", width: 120 }, 361 { label: "分类分级模板", field: "cgTemplateName", width: 200 },
362 { label: "元数据", field: "metaNames", width: 200 },
363 {
364 label: "执行状态", field: "status", width: TableColumnWidth.STATE, align: 'center', type: "tag", getName: (scope) => {
365 return filterVal(scope.row.status, 'status');
366 }
367 },
368 { label: "任务修改人", field: "dataCategory", width: 120 },
54 { label: "修改时间", field: "updateTime", width: TableColumnWidth.DATETIME }, 369 { label: "修改时间", field: "updateTime", width: TableColumnWidth.DATETIME },
55 { label: "确认次数", field: "damName", width: 96, align: 'right' }, 370 { label: "确认次数", field: "fieldLength", width: 96, align: 'right' },
56 { label: "结果确认人", field: "damName", width: 120 }, 371 { label: "结果确认人", field: "updateUserName", width: 120 },
57 { label: "确认时间", field: "updateTime", width: TableColumnWidth.DATETIME }, 372 { label: "确认时间", field: "updateTime", width: TableColumnWidth.DATETIME },
58 { 373 {
59 label: "结果状态", field: "approveState", width: TableColumnWidth.STATE, align: 'center', type: "tag", getName: (scope) => { 374 label: "结果状态", field: "approveState", width: TableColumnWidth.STATE, align: 'center', type: "tag", getName: (scope) => {
...@@ -62,7 +377,7 @@ const tableInfo = ref({ ...@@ -62,7 +377,7 @@ const tableInfo = ref({
62 }, 377 },
63 ], 378 ],
64 loading: false, 379 loading: false,
65 data: [], 380 data: datas || [],
66 page: { 381 page: {
67 type: "normal", 382 type: "normal",
68 rows: 0, 383 rows: 0,
...@@ -71,22 +386,28 @@ const tableInfo = ref({ ...@@ -71,22 +386,28 @@ const tableInfo = ref({
71 actionInfo: { 386 actionInfo: {
72 label: "操作", 387 label: "操作",
73 type: "btn", 388 type: "btn",
74 width: 200, 389 width: 280,
75 btns: (scope) => { 390 btns: (scope) => {
76 let row = scope.row, btnArr: any = []; 391 let row = scope.row, btnArr: any = [
77 if (row.approveState == 'Y') { 392 { label: "结果确认", value: "confirm" },
78 if (row.listingStatus == 'Y') { 393 { label: "结果修改", value: "modify" },
79 btnArr.splice(0, 0, { label: "详情", value: "detail" }); 394 { label: "编辑", value: "edit" },
80 } else { 395 { label: "日志", value: "log" },
81 btnArr.splice(0, 0, { label: "编辑", value: "edit" }, { label: "详情", value: "detail" }, { label: "删除", value: "delete" }); 396 { label: "删除", value: "delete" }
82 } 397 ];
83 } else { 398 // if (row.approveState == 'Y') {
84 if (row.approveState == 'A') { 399 // if (row.listingStatus == 'Y') {
85 btnArr.splice(0, 0, { label: "详情", value: "detail" }); 400 // btnArr.splice(0, 0, { label: "详情", value: "detail" });
86 } else { 401 // } else {
87 btnArr.splice(0, 0, { label: "编辑", value: "edit" }, { label: "详情", value: "detail" }, { label: "删除", value: "delete" }); 402 // btnArr.splice(0, 0, { label: "编辑", value: "edit" }, { label: "详情", value: "detail" }, { label: "删除", value: "delete" });
88 } 403 // }
89 } 404 // } else {
405 // if (row.approveState == 'A') {
406 // btnArr.splice(0, 0, { label: "详情", value: "detail" });
407 // } else {
408 // btnArr.splice(0, 0, { label: "编辑", value: "edit" }, { label: "详情", value: "detail" }, { label: "删除", value: "delete" });
409 // }
410 // }
90 return btnArr; 411 return btnArr;
91 }, 412 },
92 }, 413 },
...@@ -115,7 +436,7 @@ const tableBtnClick = (scope, btn) => { ...@@ -115,7 +436,7 @@ const tableBtnClick = (scope, btn) => {
115 const type = btn.value; 436 const type = btn.value;
116 const row = scope.row; 437 const row = scope.row;
117 currTableData.value = row; 438 currTableData.value = row;
118 if (type == "detail" || type === "edit") { 439 if(type == 'confirm' || type == 'modify' || type == 'edit' || type == "log"){
119 toPath(type); 440 toPath(type);
120 } else if (type === "delete") { 441 } else if (type === "delete") {
121 open("此操作将永久删除,是否继续?", "warning"); 442 open("此操作将永久删除,是否继续?", "warning");
...@@ -130,7 +451,7 @@ const toPath = (type) => { ...@@ -130,7 +451,7 @@ const toPath = (type) => {
130 type 451 type
131 }, 452 },
132 }); 453 });
133 } else { 454 } else if(type == 'edit'){
134 router.push({ 455 router.push({
135 name: "taskEdit", 456 name: "taskEdit",
136 query: { 457 query: {
...@@ -139,6 +460,24 @@ const toPath = (type) => { ...@@ -139,6 +460,24 @@ const toPath = (type) => {
139 type 460 type
140 }, 461 },
141 }); 462 });
463 } else if(type == 'confirm' || type == 'modify'){
464 router.push({
465 name: "taskDetail",
466 query: {
467 guid: currTableData.value.guid,
468 name: currTableData.value.damName,
469 type
470 },
471 });
472 } else {
473 router.push({
474 name: "taskLog",
475 query: {
476 guid: currTableData.value.guid,
477 name: currTableData.value.damName,
478 type
479 },
480 });
142 } 481 }
143 } 482 }
144 483
......
1 <route lang="yaml">
2 name: taskDetail //分类分级任务结果
3 </route>
4
5 <script lang="ts" setup name="taskDetail">
6 import { ref, onMounted } from "vue";
7 import { useRouter, useRoute } from "vue-router";
8 import useUserStore from "@/store/modules/user";
9 import { ElMessage, ElMessageBox } from "element-plus";
10 import { Search, Warning } from "@element-plus/icons-vue";
11 import { setItemsDisabled, tagMethod, tagType, changeNum, } from "@/utils/common";
12 import useDataAssetStore from "@/store/modules/dataAsset";
13 import TableTools from '@/components/Tools/table_tools.vue';
14 import Table from "@/components/Table/index.vue";
15 import { getListingList, listingDelete, listingUpdateStatus, filterVal, getParamsDataList } from "@/api/modules/dataProduct";
16
17 const { proxy } = getCurrentInstance() as any;
18 const router = useRouter();
19 const userStore = useUserStore();
20 const userData = JSON.parse(userStore.userData);
21 const assetStore = useDataAssetStore();
22 const datas = [
23 {
24 "updateTime": "2024-07-16 13:17:00",
25 "updateUserName": "数往知来管理员",
26 "guid": "4e0e76c48fa043d5b35d09f3ccc7c265",
27 "approvalGuid": null,
28 "standardSetGuid": "58d1178a04904d599284fc1e61594c43",
29 "fieldStandardCode": "COL202406070021",
30 "dataVersion": 1,
31 "chName": "地址",
32 "enName": "address",
33 "dataTypeValue": "字符型",
34 "dataTypeCode": "varchar",
35 "dataDicGuid": "",
36 "dataDicName": null,
37 "isDataDic": "N",
38 "fieldLength": 600,
39 "fieldPrecision": null,
40 "dataState": 0,
41 "approveState": "N",
42 "dataCategory": "合伙人",
43 "dataEncryptionLevel": "界面加密",
44 "businessDefDesc": "地址",
45 "flowFlag": null,
46 "flowCode": null,
47 "functionCode": null,
48 "createStaffGuid": null,
49 "createUserId": "98df01b8d86c46f786dd10b4d0eb11dd",
50 "displayVersion": "V1",
51 "standardSetName": null,
52 "ruleType": null
53 },
54 {
55 "updateTime": "2024-01-27 10:19:45",
56 "updateUserName": "数往知来管理员",
57 "guid": "bc630207357c466dbff7613ea38985cc",
58 "approvalGuid": null,
59 "standardSetGuid": "58d1178a04904d599284fc1e61594c43",
60 "fieldStandardCode": "COL202401260124",
61 "dataVersion": 1,
62 "chName": "包含最小销售包装单元数量",
63 "enName": "inboxQuantity",
64 "dataTypeValue": "整型",
65 "dataTypeCode": "int",
66 "dataDicGuid": null,
67 "dataDicName": null,
68 "isDataDic": null,
69 "fieldLength": null,
70 "fieldPrecision": null,
71 "dataState": 1,
72 "approveState": "A",
73 "dataCategory": null,
74 "dataEncryptionLevel": "明文显示",
75 "businessDefDesc": "当前药品追溯码中包含的最小销售包装单元药品追溯码的数量,发货类型为03时可选",
76 "flowFlag": null,
77 "flowCode": null,
78 "functionCode": null,
79 "createStaffGuid": null,
80 "createUserId": "98df01b8d86c46f786dd10b4d0eb11dd",
81 "displayVersion": "V1",
82 "standardSetName": null,
83 "ruleType": null
84 },
85 {
86 "updateTime": "2024-01-27 11:03:59",
87 "updateUserName": "审批人4",
88 "guid": "420f2a68bd4441bf92010eadf698b685",
89 "approvalGuid": null,
90 "standardSetGuid": "58d1178a04904d599284fc1e61594c43",
91 "fieldStandardCode": "COL202401260122",
92 "dataVersion": 1,
93 "chName": "包装层级",
94 "enName": "packageLevel",
95 "dataTypeValue": "字符型",
96 "dataTypeCode": "varchar",
97 "dataDicGuid": null,
98 "dataDicName": null,
99 "isDataDic": null,
100 "fieldLength": 200,
101 "fieldPrecision": null,
102 "dataState": 1,
103 "approveState": "A",
104 "dataCategory": null,
105 "dataEncryptionLevel": "明文显示",
106 "businessDefDesc": "当前药品追溯码所处包装层级描述,发货类型为03时可选",
107 "flowFlag": null,
108 "flowCode": null,
109 "functionCode": null,
110 "createStaffGuid": null,
111 "createUserId": "98df01b8d86c46f786dd10b4d0eb11dd",
112 "displayVersion": "V1",
113 "standardSetName": null,
114 "ruleType": null
115 },
116 {
117 "updateTime": "2024-06-06 10:01:06",
118 "updateUserName": "审批人1",
119 "guid": "f841e1848ab94b1e81a0217a09a7a3d3",
120 "approvalGuid": "b674bffe8d2f4132918016b6baaf75aa",
121 "standardSetGuid": "58d1178a04904d599284fc1e61594c43",
122 "fieldStandardCode": "COL202401260120",
123 "dataVersion": 1,
124 "chName": "上一级包装药品追溯码",
125 "enName": "parentDTC",
126 "dataTypeValue": "字符型",
127 "dataTypeCode": "varchar",
128 "dataDicGuid": "",
129 "dataDicName": null,
130 "isDataDic": "N",
131 "fieldLength": 200,
132 "fieldPrecision": null,
133 "dataState": 1,
134 "approveState": "Y",
135 "dataCategory": "",
136 "dataEncryptionLevel": "明文显示",
137 "businessDefDesc": "当前药品追溯码大一级包装上的药品追溯码,发货类型为03时可选;当存在上一级包装时必选",
138 "flowFlag": null,
139 "flowCode": null,
140 "functionCode": null,
141 "createStaffGuid": null,
142 "createUserId": "98df01b8d86c46f786dd10b4d0eb11dd",
143 "displayVersion": "V1",
144 "standardSetName": null,
145 "ruleType": null
146 },
147 {
148 "updateTime": "2024-01-26 00:10:47",
149 "updateUserName": "数往知来管理员",
150 "guid": "d4d42dea2a5844b4a7f9238806ea507b",
151 "approvalGuid": null,
152 "standardSetGuid": "58d1178a04904d599284fc1e61594c43",
153 "fieldStandardCode": "COL202401260118",
154 "dataVersion": 1,
155 "chName": "药品追溯码",
156 "enName": "DTC",
157 "dataTypeValue": "字符型",
158 "dataTypeCode": "varchar",
159 "dataDicGuid": null,
160 "dataDicName": null,
161 "isDataDic": null,
162 "fieldLength": 200,
163 "fieldPrecision": null,
164 "dataState": 0,
165 "approveState": "N",
166 "dataCategory": null,
167 "dataEncryptionLevel": "明文显示",
168 "businessDefDesc": "用于唯一标识药品各级销售包装单元的代码,发货类型为03时可选",
169 "flowFlag": null,
170 "flowCode": null,
171 "functionCode": null,
172 "createStaffGuid": null,
173 "createUserId": "98df01b8d86c46f786dd10b4d0eb11dd",
174 "displayVersion": "V1",
175 "standardSetName": null,
176 "ruleType": null
177 },
178 {
179 "updateTime": "2024-01-26 00:10:47",
180 "updateUserName": "数往知来管理员",
181 "guid": "ff9d0e4f6fbb444c8dcf6f67bffcb659",
182 "approvalGuid": null,
183 "standardSetGuid": "58d1178a04904d599284fc1e61594c43",
184 "fieldStandardCode": "COL202401260116",
185 "dataVersion": 1,
186 "chName": "发货数量",
187 "enName": "deliveryQuantity",
188 "dataTypeValue": "整型",
189 "dataTypeCode": "int",
190 "dataDicGuid": null,
191 "dataDicName": null,
192 "isDataDic": null,
193 "fieldLength": null,
194 "fieldPrecision": null,
195 "dataState": 0,
196 "approveState": "N",
197 "dataCategory": null,
198 "dataEncryptionLevel": "明文显示",
199 "businessDefDesc": "发货的最小销售包装单元数量",
200 "flowFlag": null,
201 "flowCode": null,
202 "functionCode": null,
203 "createStaffGuid": null,
204 "createUserId": "98df01b8d86c46f786dd10b4d0eb11dd",
205 "displayVersion": "V1",
206 "standardSetName": null,
207 "ruleType": null
208 },
209 {
210 "updateTime": "2024-01-26 00:10:46",
211 "updateUserName": "数往知来管理员",
212 "guid": "fe88ac9e8d9c4f148833dbb3976fca77",
213 "approvalGuid": null,
214 "standardSetGuid": "58d1178a04904d599284fc1e61594c43",
215 "fieldStandardCode": "COL202401260114",
216 "dataVersion": 1,
217 "chName": "药品生产批号",
218 "enName": "batch",
219 "dataTypeValue": "字符型",
220 "dataTypeCode": "varchar",
221 "dataDicGuid": null,
222 "dataDicName": null,
223 "isDataDic": null,
224 "fieldLength": 20,
225 "fieldPrecision": null,
226 "dataState": 0,
227 "approveState": "N",
228 "dataCategory": null,
229 "dataEncryptionLevel": "明文显示",
230 "businessDefDesc": "药品包装上标示的生产批号",
231 "flowFlag": null,
232 "flowCode": null,
233 "functionCode": null,
234 "createStaffGuid": null,
235 "createUserId": "98df01b8d86c46f786dd10b4d0eb11dd",
236 "displayVersion": "V1",
237 "standardSetName": null,
238 "ruleType": null
239 },
240 {
241 "updateTime": "2024-01-26 00:10:45",
242 "updateUserName": "数往知来管理员",
243 "guid": "9759837e0d72472ab7441c1873c9159a",
244 "approvalGuid": null,
245 "standardSetGuid": "58d1178a04904d599284fc1e61594c43",
246 "fieldStandardCode": "COL202401260112",
247 "dataVersion": 1,
248 "chName": "药品有效期截止日期",
249 "enName": "expirationDate",
250 "dataTypeValue": "日期型",
251 "dataTypeCode": "date",
252 "dataDicGuid": null,
253 "dataDicName": null,
254 "isDataDic": null,
255 "fieldLength": null,
256 "fieldPrecision": null,
257 "dataState": 0,
258 "approveState": "N",
259 "dataCategory": null,
260 "dataEncryptionLevel": "明文显示",
261 "businessDefDesc": "药品有效期的截止日期",
262 "flowFlag": null,
263 "flowCode": null,
264 "functionCode": null,
265 "createStaffGuid": null,
266 "createUserId": "98df01b8d86c46f786dd10b4d0eb11dd",
267 "displayVersion": "V1",
268 "standardSetName": null,
269 "ruleType": null
270 },
271 {
272 "updateTime": "2024-01-26 00:10:45",
273 "updateUserName": "数往知来管理员",
274 "guid": "a39ed6123c6a420d9d1265315e714f86",
275 "approvalGuid": null,
276 "standardSetGuid": "58d1178a04904d599284fc1e61594c43",
277 "fieldStandardCode": "COL202401260110",
278 "dataVersion": 1,
279 "chName": "药品生产日期",
280 "enName": "productionDate",
281 "dataTypeValue": "日期型",
282 "dataTypeCode": "date",
283 "dataDicGuid": null,
284 "dataDicName": null,
285 "isDataDic": null,
286 "fieldLength": null,
287 "fieldPrecision": null,
288 "dataState": 0,
289 "approveState": "N",
290 "dataCategory": null,
291 "dataEncryptionLevel": "明文显示",
292 "businessDefDesc": "药品包装上标示的生产日期",
293 "flowFlag": null,
294 "flowCode": null,
295 "functionCode": null,
296 "createStaffGuid": null,
297 "createUserId": "98df01b8d86c46f786dd10b4d0eb11dd",
298 "displayVersion": "V1",
299 "standardSetName": null,
300 "ruleType": null
301 },
302 {
303 "updateTime": "2024-01-26 00:10:45",
304 "updateUserName": "数往知来管理员",
305 "guid": "ea597c1b8bb24a5ab053a80b084de98c",
306 "approvalGuid": null,
307 "standardSetGuid": "58d1178a04904d599284fc1e61594c43",
308 "fieldStandardCode": "COL202401260108",
309 "dataVersion": 1,
310 "chName": "统一社会信用代码(进口药品代理企业)",
311 "enName": "drugImporterUSCID",
312 "dataTypeValue": "字符型",
313 "dataTypeCode": "varchar",
314 "dataDicGuid": null,
315 "dataDicName": null,
316 "isDataDic": null,
317 "fieldLength": 18,
318 "fieldPrecision": null,
319 "dataState": 0,
320 "approveState": "N",
321 "dataCategory": null,
322 "dataEncryptionLevel": "明文显示",
323 "businessDefDesc": "进口药品代理企业的统一社会信用代码,进口药品必选;没有统一社会信用代码时使用组织机构代码",
324 "flowFlag": null,
325 "flowCode": null,
326 "functionCode": null,
327 "createStaffGuid": null,
328 "createUserId": "98df01b8d86c46f786dd10b4d0eb11dd",
329 "displayVersion": "V1",
330 "standardSetName": null,
331 "ruleType": null
332 }
333 ]
334 const data1 = [
335 {
336 "children": [
337 {
338 "children": null,
339 "parentGuids": [
340 "c32ddd77191ff4afe149538ef4b2e0c3"
341 ],
342 "guid": "9c92df55a19cdce88f61e20a8e1e8a65",
343 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
344 "organisationCode": "11150001",
345 "organisationName": "链享供应链运营一部",
346 "bizState": "Y",
347 "createTime": "2023-10-25 14:23:31",
348 "createUserName": "测试",
349 "parentGuid": "c32ddd77191ff4afe149538ef4b2e0c3",
350 "orderNum": 1,
351 "level": 2,
352 "levelCode": "1.1",
353 "displayCreateTime": "2023-10-25 14:23:31"
354 }
355 ],
356 "parentGuids": null,
357 "guid": "c32ddd77191ff4afe149538ef4b2e0c3",
358 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
359 "organisationCode": "1115004",
360 "organisationName": "链享供应链",
361 "bizState": "Y",
362 "createTime": "2023-08-15 12:59:10",
363 "createUserName": "测试",
364 "parentGuid": "",
365 "orderNum": 2,
366 "level": 0,
367 "levelCode": "1",
368 "displayCreateTime": "2023-08-15 12:59:10"
369 },
370 {
371 "children": [
372 {
373 "children": [
374 {
375 "children": null,
376 "parentGuids": [
377 "e10332122834077907cd5ea61fa576c1",
378 "cdae7bb3cafb560482cad1b89a1e4b78"
379 ],
380 "guid": "16ea472a155c07433a63220f2ae1afe9",
381 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
382 "organisationCode": "11160011",
383 "organisationName": "链享运营一部1组",
384 "bizState": "S",
385 "createTime": "2023-10-25 13:15:57",
386 "createUserName": "测试",
387 "parentGuid": "cdae7bb3cafb560482cad1b89a1e4b78",
388 "orderNum": 1,
389 "level": 2,
390 "levelCode": "2.1.1",
391 "displayCreateTime": "2023-10-25 13:15:57"
392 }
393 ],
394 "parentGuids": [
395 "e10332122834077907cd5ea61fa576c1"
396 ],
397 "guid": "cdae7bb3cafb560482cad1b89a1e4b78",
398 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
399 "organisationCode": "1116001",
400 "organisationName": "链享运营一部",
401 "bizState": "S",
402 "createTime": "2023-10-25 13:14:15",
403 "createUserName": "测试",
404 "parentGuid": "e10332122834077907cd5ea61fa576c1",
405 "orderNum": 1,
406 "level": 1,
407 "levelCode": "2.1",
408 "displayCreateTime": "2023-10-25 13:14:15"
409 },
410 {
411 "children": null,
412 "parentGuids": [
413 "e10332122834077907cd5ea61fa576c1"
414 ],
415 "guid": "d98b44ffb35e4d17cf68f9a922e1c7b7",
416 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
417 "organisationCode": null,
418 "organisationName": "二部",
419 "bizState": "Y",
420 "createTime": "2023-10-26 09:45:36",
421 "createUserName": "测试",
422 "parentGuid": "e10332122834077907cd5ea61fa576c1",
423 "orderNum": 2,
424 "level": 1,
425 "levelCode": "2.2",
426 "displayCreateTime": "2023-10-26 09:45:36"
427 }
428 ],
429 "parentGuids": null,
430 "guid": "e10332122834077907cd5ea61fa576c1",
431 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
432 "organisationCode": "1115005",
433 "organisationName": "链享医药",
434 "bizState": "Y",
435 "createTime": "2023-09-12 15:59:35",
436 "createUserName": "测试",
437 "parentGuid": null,
438 "orderNum": 3,
439 "level": 0,
440 "levelCode": "2",
441 "displayCreateTime": "2023-09-12 15:59:35"
442 },
443 {
444 "children": [
445 {
446 "children": null,
447 "parentGuids": [
448 "9bd46f0f4fcf429518fae6ecb4849a9e"
449 ],
450 "guid": "870f23ae47e036eb88b35f726c31959b",
451 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
452 "organisationCode": null,
453 "organisationName": "运用三部",
454 "bizState": "Y",
455 "createTime": "2024-04-28 16:33:24",
456 "createUserName": "数往知来管理员",
457 "parentGuid": "9bd46f0f4fcf429518fae6ecb4849a9e",
458 "orderNum": 3,
459 "level": 1,
460 "levelCode": "3.3",
461 "displayCreateTime": "2024-04-28 16:33:24"
462 },
463 {
464 "children": null,
465 "parentGuids": [
466 "9bd46f0f4fcf429518fae6ecb4849a9e"
467 ],
468 "guid": "e06049046241dd71b153f227dbe7f801",
469 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
470 "organisationCode": null,
471 "organisationName": "运营二部",
472 "bizState": "Y",
473 "createTime": "2023-11-14 16:01:50",
474 "createUserName": "数往知来管理员",
475 "parentGuid": "9bd46f0f4fcf429518fae6ecb4849a9e",
476 "orderNum": 40,
477 "level": 1,
478 "levelCode": "3.2",
479 "displayCreateTime": "2023-11-14 16:01:50"
480 },
481 {
482 "children": null,
483 "parentGuids": [
484 "9bd46f0f4fcf429518fae6ecb4849a9e"
485 ],
486 "guid": "731cd185c868da8af48b492068ffaed4",
487 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
488 "organisationCode": null,
489 "organisationName": "运营一部",
490 "bizState": "Y",
491 "createTime": "2023-11-14 15:19:35",
492 "createUserName": "测试",
493 "parentGuid": "9bd46f0f4fcf429518fae6ecb4849a9e",
494 "orderNum": 41,
495 "level": 1,
496 "levelCode": "3.1",
497 "displayCreateTime": "2023-11-14 15:19:35"
498 }
499 ],
500 "parentGuids": null,
501 "guid": "9bd46f0f4fcf429518fae6ecb4849a9e",
502 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
503 "organisationCode": null,
504 "organisationName": "药企服务事业部1",
505 "bizState": "Y",
506 "createTime": "2023-11-14 14:49:14",
507 "createUserName": "数往知来管理员",
508 "parentGuid": "",
509 "orderNum": 4,
510 "level": 0,
511 "levelCode": "3",
512 "displayCreateTime": "2023-11-14 14:49:14"
513 },
514 {
515 "children": [
516 {
517 "children": null,
518 "parentGuids": [
519 "23be149ea3167a3f7f2d383023336efe"
520 ],
521 "guid": "e5f2b4958ee2d99309a41e0c6e1447c8",
522 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
523 "organisationCode": null,
524 "organisationName": "智能存储装备部",
525 "bizState": "Y",
526 "createTime": "2023-11-14 16:09:36",
527 "createUserName": "数往知来管理员",
528 "parentGuid": "23be149ea3167a3f7f2d383023336efe",
529 "orderNum": 51,
530 "level": 1,
531 "levelCode": "4.1",
532 "displayCreateTime": "2023-11-14 16:09:36"
533 }
534 ],
535 "parentGuids": null,
536 "guid": "23be149ea3167a3f7f2d383023336efe",
537 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
538 "organisationCode": null,
539 "organisationName": "医药物联网事业部",
540 "bizState": "Y",
541 "createTime": "2023-11-14 15:11:35",
542 "createUserName": "数往知来管理员",
543 "parentGuid": "",
544 "orderNum": 5,
545 "level": 0,
546 "levelCode": "4",
547 "displayCreateTime": "2023-11-14 15:11:35"
548 },
549 {
550 "children": null,
551 "parentGuids": null,
552 "guid": "1d82e875163749ca9ae45809ec432ae8",
553 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
554 "organisationCode": null,
555 "organisationName": "财务管理中心",
556 "bizState": "S",
557 "createTime": "2023-11-14 15:14:07",
558 "createUserName": "数往知来管理员",
559 "parentGuid": "",
560 "orderNum": 6,
561 "level": 0,
562 "levelCode": "6",
563 "displayCreateTime": "2023-11-14 15:14:07"
564 },
565 {
566 "children": null,
567 "parentGuids": null,
568 "guid": "cd9e6a0c76102364a9e88b79b28b0b32",
569 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
570 "organisationCode": null,
571 "organisationName": "资产服务",
572 "bizState": "Y",
573 "createTime": "2024-08-14 11:40:33",
574 "createUserName": "数往知来管理员",
575 "parentGuid": "",
576 "orderNum": 7,
577 "level": 0,
578 "levelCode": "9",
579 "displayCreateTime": "2024-08-14 11:40:33"
580 },
581 {
582 "children": [
583 {
584 "children": null,
585 "parentGuids": [
586 "dac448b77fa35f798bb4a06d8fd86334"
587 ],
588 "guid": "cb76777efe69182cfb2c75d41944553c",
589 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
590 "organisationCode": null,
591 "organisationName": "审批1",
592 "bizState": "Y",
593 "createTime": "2024-01-17 14:28:36",
594 "createUserName": "数往知来管理员",
595 "parentGuid": "dac448b77fa35f798bb4a06d8fd86334",
596 "orderNum": 100,
597 "level": 1,
598 "levelCode": "8.1",
599 "displayCreateTime": "2024-01-17 14:28:36"
600 }
601 ],
602 "parentGuids": null,
603 "guid": "dac448b77fa35f798bb4a06d8fd86334",
604 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
605 "organisationCode": null,
606 "organisationName": "审批组织",
607 "bizState": "Y",
608 "createTime": "2024-01-16 11:38:24",
609 "createUserName": "数往知来管理员",
610 "parentGuid": "",
611 "orderNum": 99,
612 "level": 0,
613 "levelCode": "8",
614 "displayCreateTime": "2024-01-16 11:38:24"
615 }
616 ]
617 const data2 = [
618 {}
619 ]
620 const treeIndex: any = ref({})
621 const treeInfo = ref({
622 id: "data-pickup-tree",
623 filter: true,
624 queryValue: "",
625 queryPlaceholder: "输入组织名称搜索",
626 props: {
627 label: "organisationName",
628 value: "guid",
629 },
630 nodeKey: 'guid',
631 expandedKey: [],
632 expandOnNodeClick: false,
633 data: data1 || [],
634 });
635
636 const templateInfo = ref({
637 title: '医疗数据分类分级模板',
638 mark: '待确认',
639 descGroup: [
640 { label: '目录名称', value: '医疗数据', type: 'text_btn' },
641 { label: '执行时间', value: '2021-12-12 09:12:13' },
642 { label: '分级分类模板', value: '医疗数据分级分类', type: 'text_btn' },
643 { label: '版本', value: 'V5' },
644 { label: '元数据名称', value: '名称1、名称2、名称3' },
645 ],
646 })
647 const tabsInfo = ref({
648 activeName: 'field',
649 tabs: [
650 { label: '库表', name: 'sheet' },
651 { label: '字段', name: 'field' },
652 ]
653 });
654
655 const sheetItemList = ref([
656 {
657 type: "select",
658 label: "",
659 placeholder: '变更类型',
660 field: 'dataSourceGuid',
661 default: '',
662 options: [],
663 props: {
664 label: 'databaseNameZh',
665 value: 'guid'
666 },
667 clearable: true,
668 },
669 {
670 type: "select",
671 label: "",
672 placeholder: '数据库名',
673 field: 'dataSourceGuid',
674 default: '',
675 options: [],
676 props: {
677 label: 'databaseNameZh',
678 value: 'guid'
679 },
680 clearable: true,
681 },
682 {
683 type: "select",
684 label: "",
685 placeholder: '表中文/英文名',
686 field: 'dataSourceGuid',
687 default: '',
688 options: [],
689 props: {
690 label: 'databaseNameZh',
691 value: 'guid'
692 },
693 clearable: true,
694 },
695 ]);
696
697 const fieldItemList = ref([
698 {
699 type: "select",
700 label: "",
701 placeholder: '变更类型',
702 field: 'dataSourceGuid',
703 default: '',
704 options: [],
705 props: {
706 label: 'databaseNameZh',
707 value: 'guid'
708 },
709 clearable: true,
710 },
711 {
712 type: "select",
713 label: "",
714 placeholder: '字段中文/英文名',
715 field: 'dataSourceGuid',
716 default: '',
717 options: [],
718 props: {
719 label: 'databaseNameZh',
720 value: 'guid'
721 },
722 clearable: true,
723 },
724 {
725 type: "select",
726 label: "",
727 placeholder: '表中文/英文名',
728 field: 'dataSourceGuid',
729 default: '',
730 options: [],
731 props: {
732 label: 'databaseNameZh',
733 value: 'guid'
734 },
735 clearable: true,
736 },
737 {
738 type: "select",
739 label: "",
740 placeholder: '分类',
741 field: 'dataSourceGuid',
742 default: '',
743 options: [],
744 props: {
745 label: 'databaseNameZh',
746 value: 'guid'
747 },
748 clearable: true,
749 },
750 {
751 type: "select",
752 label: "",
753 placeholder: '分级',
754 field: 'dataSourceGuid',
755 default: '',
756 options: [],
757 props: {
758 label: 'databaseNameZh',
759 value: 'guid'
760 },
761 clearable: true,
762 },
763 {
764 type: "select",
765 label: "",
766 placeholder: '数据库名',
767 field: 'dataSourceGuid',
768 default: '',
769 options: [],
770 props: {
771 label: 'databaseNameZh',
772 value: 'guid'
773 },
774 clearable: true,
775 },
776 ]);
777
778 const checked1 = ref(false);
779 const checked2 = ref(false);
780
781 const page = ref({
782 limit: 50,
783 curr: 1,
784 sizes: [
785 { label: "10", value: 10 },
786 { label: "50", value: 50 },
787 { label: "100", value: 100 },
788 { label: "150", value: 150 },
789 { label: "200", value: 200 },
790 ],
791 });
792 const searchItemValue: any = ref({});
793 const currTableData: any = ref({});
794 const sheetTableInfo = ref({
795 id: "mapping-table",
796 fields: [
797 { label: "序号", type: "index", width: 56, align: "center", fixed: "left" },
798 {
799 label: "分类分级变更状态", field: "damCode", width: 140, align: 'center', type: "tag", getName: (scope) => {
800 return filterVal(scope.row.status, 'status');
801 }
802 },
803 { label: "表中文名", field: "damTypeName", width: 120 },
804 {
805 label: "表英文名", field: "damName", width: 200, type: "text_btn", columClass: 'text_btn', click: (scope) => {
806 router.push({
807 name: "templateConfig",
808 query: { guid: scope.row.damGuid },
809 });
810 }
811 },
812 { label: "数据库名", field: "damTypeName", width: 120 },
813 { label: "字段数", field: "damTypeName", width: 96, align: 'right' },
814 { label: "已分类字段数", field: "damTypeName", width: 120, align: 'right' },
815 { label: "已分级字段数", field: "damTypeName", width: 120, align: 'right' },
816 ],
817 loading: false,
818 data: datas || [],
819 page: {
820 type: "normal",
821 rows: 0,
822 ...page.value,
823 },
824 actionInfo: {
825 show: false
826 },
827 });
828
829 const fieldTableInfo = ref({
830 id: "metadata-table",
831 fields: [
832 { label: "序号", type: "index", width: 56, align: "center", fixed: "left" },
833 {
834 label: "分类分级变更状态", field: "approveState", width: 140, align: 'center', type: "tag", getName: (scope) => {
835 return filterVal(scope.row.approveState, 'approveState');
836 }
837 },
838 { label: "字段名", field: "damTypeName", width: 200 },
839 { label: "字段中文名", field: "damTypeName", width: 200 },
840 { label: "分类", field: "damTypeName", width: 280, type: 'select', columClass: 'edit_cell' },
841 { label: "分级", field: "damTypeName", width: 120, type: 'select', columClass: 'edit_cell' },
842 { label: "标签", field: "damCode", width: 96 },
843 { label: "规则", field: "damCode", width: 200 },
844 { label: "表中文名", field: "damTypeName", width: 120 },
845 { label: "表英文名", field: "damName", width: 200 },
846 { label: "数据库名", field: "damTypeName", width: 120 },
847 ],
848 loading: false,
849 data: data2 || [],
850 showPage: true,
851 page: {
852 type: "normal",
853 rows: 0,
854 ...page.value,
855 },
856 actionInfo: {
857 label: "操作",
858 type: "btn",
859 width: 80,
860 btns: (scope) => {
861 let row = scope.row, btnArr: any = [
862 { label: "编辑", value: "edit" },
863 ];
864 // if (row.approveState == 'Y') {
865 // if (row.listingStatus == 'Y') {
866 // btnArr.splice(0, 0, { label: "详情", value: "detail" });
867 // } else {
868 // btnArr.splice(0, 0, { label: "编辑", value: "edit" }, { label: "详情", value: "detail" }, { label: "删除", value: "delete" });
869 // }
870 // } else {
871 // if (row.approveState == 'A') {
872 // btnArr.splice(0, 0, { label: "详情", value: "detail" });
873 // } else {
874 // btnArr.splice(0, 0, { label: "编辑", value: "edit" }, { label: "详情", value: "detail" }, { label: "删除", value: "delete" });
875 // }
876 // }
877 return btnArr;
878 },
879 },
880 })
881
882 const tabChange = (val) => {
883 tabsInfo.value.activeName = val;
884 }
885
886 const nodeClick = (data) => {
887 treeIndex.value = data
888 }
889
890 const getTableData = () => {
891 tableInfo.value.loading = true;
892 getListingList(
893 Object.assign({}, searchItemValue.value, {
894 pageIndex: page.value.curr,
895 pageSize: page.value.limit,
896 })
897 ).then((res: any) => {
898 tableInfo.value.loading = false;
899 tableInfo.value.data = res.data.records || [];
900 tableInfo.value.page.curr = res.data.pageIndex;
901 tableInfo.value.page.limit = res.data.pageSize;
902 tableInfo.value.page.rows = res.data.totalRows;
903 })
904 .catch((res) => {
905 tableInfo.value.loading = false;
906 });
907 };
908
909 const tableBtnClick = (scope, btn) => {
910 const type = btn.value;
911 const row = scope.row;
912 currTableData.value = row;
913 if (type == "detail" || type === "edit") {
914 toPath(type);
915 } else if (type === "delete") {
916 open("此操作将永久删除,是否继续?", "warning");
917 }
918 };
919
920 const toPath = (type = null) => {
921 router.push({
922 name: "taskConfig",
923 query: {
924 type
925 },
926 });
927 }
928
929 const tablePageChange = (info) => {
930 page.value.curr = Number(info.curr);
931 page.value.limit = Number(info.limit);
932 tableInfo.value.page.limit = page.value.limit;
933 tableInfo.value.page.curr = page.value.curr;
934 getTableData();
935 };
936
937 const open = (msg, type, isBatch = false) => {
938 ElMessageBox.confirm(msg, "提示", {
939 confirmButtonText: "确定",
940 cancelButtonText: "取消",
941 type: type,
942 }).then(() => {
943 const guids = [currTableData.value.guid];
944 listingDelete(guids).then((res: any) => {
945 if (res.code == proxy.$passCode) {
946 getFirstPageData();
947 ElMessage({
948 type: "success",
949 message: "删除成功",
950 });
951 } else {
952 ElMessage({
953 type: "error",
954 message: res.msg,
955 });
956 }
957 }).catch((res) => {
958 tableInfo.value.loading = false;
959 });
960 });
961 };
962
963 const getFirstPageData = () => {
964 page.value.curr = 1
965 tableInfo.value.page.curr = 1;
966 getTableData();
967 }
968
969 const btnClick = async (btn, bType = null) => {
970 const type = btn.value;
971 };
972
973 /** 搜索查询分类分级模板。 */
974 const searchTemplate = (val: any, clear: boolean = false) => {
975 // page.value.curr = 1;
976 // if (clear) {
977 // searchItemList.value.map(item => item.default = '')
978 // page.value.planName = '';
979 // page.value.state = null;
980 // getTableData();
981 // return;
982 // }
983 // page.value.planName = val.planName;
984 // page.value.state = val.state;
985 // getTableData();
986 };
987
988 const changTable = () => {
989 // toSearch({})
990 };
991
992 const getPermissionList = (val, init = false) => {
993 let params: any = val ? { ...val } : {}
994 // params.pageIndex = listPage.value.curr;
995 // params.pageSize = listPage.value.limit;
996 // getPermissionDictList(params).then((res: any) => {
997 // if (res.code == proxy.$passCode) {
998 // const data = res.data?.records || []
999 // if (init) {
1000 // permissionList.value = JSON.parse(JSON.stringify(data))
1001 // currpermissionList.value = JSON.parse(JSON.stringify(data))
1002 // listPage.value.totalPages = res.data.totalPages
1003 // toSearch({})
1004 // } else {
1005 // permissionList.value.push(...JSON.parse(JSON.stringify(data)))
1006 // querySearch(asideSearchInput.value)
1007 // }
1008 // }
1009 // listLoading.value = false
1010 // }).catch(() => {
1011 // listLoading.value = false
1012 // })
1013 }
1014
1015 onActivated(() => {
1016
1017 })
1018
1019 onBeforeMount(() => {
1020
1021 })
1022
1023 </script>
1024
1025 <template>
1026 <div class="container_wrap full flex">
1027 <div class="main_wrap full">
1028 <div class="content_main panel">
1029 <div class="template_panel">
1030 <div class="panel_title">
1031 <div class="title_wrap">
1032 <span class="title_text">{{ templateInfo.title }}</span>
1033 <el-tag type="warning">{{ templateInfo.mark }}</el-tag>
1034 </div>
1035 </div>
1036 <div class="title_desc">
1037 <div class="desc_group">
1038 <div class="desc_item">
1039 <span class="desc_label">目录名称:</span>
1040 <span class="desc_value text_btn">医疗数据</span>
1041 </div>
1042 <div class="desc_item">
1043 <span class="desc_label">执行时间:</span>
1044 <span class="desc_value">2021-12-12 09:12:13</span>
1045 </div>
1046 </div>
1047 <div class="desc_group">
1048 <div class="desc_item">
1049 <span class="desc_label">分类:</span>
1050 <span class="desc_value text_btn">医疗数据</span>
1051 </div>
1052 <div class="desc_item">
1053 <span class="desc_label">元数据名称:</span>
1054 <span class="desc_value">名称1、名称2、名称3</span>
1055 </div>
1056 </div>
1057 </div>
1058 <p class="panel_desc">
1059 <el-icon>
1060 <Warning />
1061 </el-icon>
1062 <span>本次分类分级任务共涉及: </span>
1063 <span class="text_btn">40</span>
1064 <span>张表,共</span>
1065 <span class="text_btn">4023</span>
1066 <span>个字段,已分类</span>
1067 <span class="text_btn">2099</span>
1068 <span>个字段,已分级</span>
1069 <span class="text_btn">1987</span>
1070 <span>个字段</span>
1071 </p>
1072 </div>
1073 <div class="panel_content">
1074 <Tabs class="panel_tabs" :tabs-info="tabsInfo" @tab-change="tabChange" />
1075 <div class="panel" v-show="tabsInfo.activeName == 'sheet'">
1076 <div class="table_tool_wrap">
1077 <TableTools :searchItems="sheetItemList" :searchId="'template-manage-search'" @search="searchTemplate" />
1078 </div>
1079 <div class="table_panel_wrap">
1080 <Table :tableInfo="sheetTableInfo" @tableBtnClick="tableBtnClick" @tablePageChange="tablePageChange" />
1081 </div>
1082 </div>
1083 <div class="panel flex" v-show="tabsInfo.activeName == 'field'">
1084 <div class="box_left">
1085 <div class="aside_title">分类分级目录</div>
1086 <Tree :treeInfo="treeInfo" @nodeClick="nodeClick" />
1087 </div>
1088 <div class="box_right">
1089 <div class="table_tool_wrap">
1090 <TableTools :searchItems="fieldItemList" :searchId="'template-manage-search'"
1091 @search="searchTemplate" />
1092 <div class="tools_btns">
1093 <div class="btns">
1094 <el-button type="primary" plain @click="btnClick({ value: 'batch' })">批量变量分类分级</el-button>
1095 <el-button plain @click="btnClick({ value: 'import' })">导入</el-button>
1096 <el-button plain @click="btnClick({ value: 'export' })">导出</el-button>
1097 </div>
1098 <div class="checkboxs">
1099 <el-checkbox v-model="checked1">仅看未分级分类</el-checkbox>
1100 <el-checkbox v-model="checked2">仅看变更</el-checkbox>
1101 </div>
1102 </div>
1103 </div>
1104 <div class="table_panel_wrap panel">
1105 <div class="table_panel">
1106 <el-table ref="costTableRef" :data="fieldTableInfo.data" border :height="'100%'"
1107 style="width: 100%; display: inline-block" :style="{ 'min-height': '100%' }">
1108 <el-table-column v-for="(item, i) in fieldTableInfo.fields" :label="item.label" :width="item.width"
1109 :min-width="item.minWidth" :fixed="item.fixed" :align="item.align"
1110 :sortable="item.sortable ?? false" :prop="item.field" :class-name="item.columClass"
1111 show-overflow-tooltip>
1112 <template #default="scope">
1113 <div class="select_cell" v-if="item.type == 'select'">
1114 <el-select v-model="scope.row[item.field]" :placeholder="item.placeholder"
1115 :disabled="item.disabled" :clearable="item.clearable || true" />
1116 </div>
1117 <div v-else-if="item.type == 'tag'">
1118 <el-tag :type="item.tagType ? item.tagType(scope) : tagType(scope.row, item.field)">{{
1119 item.getName ? item.getName(scope) : tagMethod(scope.row, item.field)
1120 }}</el-tag>
1121 </div>
1122 <span v-else>
1123 {{ item.getName ? item.getName(scope) : scope.row[item.field] !== 0 && !scope.row[item.field]
1124 ?
1125 "--" : scope.row[item.field] }}
1126 </span>
1127 </template>
1128 </el-table-column>
1129 <el-table-column label="操作" :width="fieldTableInfo.actionInfo.width"
1130 :class-name="fieldTableInfo.actionInfo.columClass" fixed="right">
1131 <template #default="scope">
1132 <template v-for="(btn, b) in Array.isArray(fieldTableInfo.actionInfo.btns)
1133 ? fieldTableInfo.actionInfo.btns
1134 : fieldTableInfo.actionInfo.btns(scope)">
1135 <span class="operate_btn" :class="{ active: btn.visible ?? true }" v-if="btn.visible ?? true">
1136 <span class="text_btn" :class="{ 'is-disabled': !!btn.disabled }"
1137 @click="(btn.click && !btn.disabled && !scope.row.disabled) ? btn.click(scope, btn) : tableBtnClick(scope, btn)"
1138 v-preReClick>{{ btn.label }}</span>
1139 </span>
1140 </template>
1141 </template>
1142 </el-table-column>
1143 </el-table>
1144 <PageNav :class="[fieldTableInfo.page.type, fieldTableInfo.page.col]" :pageInfo="fieldTableInfo.page"
1145 @pageChange="tablePageChange" />
1146 </div>
1147 </div>
1148 </div>
1149 </div>
1150 </div>
1151 </div>
1152 <div class="tool_btns">
1153 <div class="btns">
1154 <el-button @click="btnClick({ value: 'cancel' })">暂存</el-button>
1155 <el-button type="primary" @click="btnClick({ value: 'next' })">确认变更</el-button>
1156 </div>
1157 </div>
1158 </div>
1159 </div>
1160 </template>
1161
1162 <style scoped lang="scss">
1163 .container_wrap {
1164 .aside_wrap {
1165 width: 199px;
1166 border-right: 1px solid #d9d9d9;
1167 box-shadow: none;
1168
1169 .aside_title {
1170 width: calc(100% - 32px);
1171 display: inline-block;
1172 }
1173
1174 .icon-add.el-icon {
1175 width: 24px;
1176 height: 24px;
1177 vertical-align: middle;
1178 cursor: pointer;
1179
1180 svg {
1181 width: 24px;
1182 height: 24px;
1183 }
1184 }
1185
1186 .tree_panel {
1187 height: calc(100% - 72px);
1188 padding-top: 0;
1189 border-bottom: 1px solid #d9d9d9;
1190
1191 :deep(.el-tree) {
1192 margin: 0;
1193 height: calc(100% - 32px);
1194 overflow: hidden auto;
1195 }
1196 }
1197
1198 .page_nav_wrap.concise {
1199 justify-content: center;
1200 }
1201
1202 }
1203 }
1204
1205 .container_wrap {
1206 overflow: hidden auto;
1207
1208 .main_wrap {
1209 padding: 0;
1210
1211 &.full {
1212 width: 100%;
1213 }
1214
1215 .content_main {
1216 display: flex;
1217 flex-direction: column;
1218 height: calc(100% - 45px);
1219 padding: 0 !important;
1220 overflow: hidden auto;
1221 flex: 1;
1222
1223 &.panel {
1224 padding: 0 16px;
1225 }
1226
1227 .template_panel {
1228 padding: 0 16px;
1229
1230 .panel_title {
1231 display: flex;
1232 justify-content: space-between;
1233 align-items: center;
1234 margin: 8px 0;
1235 flex: 1;
1236
1237 .title_wrap {
1238 display: flex;
1239 align-items: center;
1240
1241 .title_text {
1242 font-size: 16px;
1243 color: #212121;
1244 line-height: 24px;
1245 font-weight: 600;
1246 margin-right: 12px;
1247 }
1248 }
1249 }
1250
1251 .title_desc {
1252
1253 .desc_group {
1254 display: flex;
1255 margin: 8px 0;
1256
1257 .desc_item+.desc_item {
1258 margin-left: 40px;
1259 }
1260 }
1261 }
1262
1263 .panel_tags {
1264 .el-tag {
1265 margin-right: 8px;
1266 }
1267 }
1268
1269 .panel_desc {
1270 height: 40px;
1271 margin: 16px 0 8px;
1272 padding: 0 12px;
1273 font-size: 14px;
1274 color: #666;
1275 display: flex;
1276 align-items: center;
1277 background: #EFFBFC;
1278 border: 1px solid rgba(195, 219, 219, 1);
1279
1280 .el-icon {
1281 width: 14px;
1282 height: 14px;
1283 color: #4FA1A4;
1284 }
1285
1286 >span {
1287 margin-left: 8px;
1288 }
1289 }
1290 }
1291
1292 .panel_content {
1293 height: 100%;
1294
1295 .panel {
1296 height: calc(100% - 47px);
1297 padding: 0 16px;
1298
1299 &.flex {
1300 height: calc(100% - 36px);
1301 display: flex;
1302 justify-content: space-between;
1303 flex: 1;
1304
1305 .box_left {
1306 width: 240px;
1307 height: 100%;
1308 border-right: 1px solid #d9d9d9;
1309 margin-left: -16px;
1310
1311 .aside_title {
1312 padding: 0 8px;
1313 height: 40px;
1314 line-height: 40px;
1315 font-size: 14px;
1316 color: #212121;
1317 font-weight: 600;
1318 margin-top: 8px;
1319 }
1320
1321 .tree_panel {
1322 padding: 0;
1323 }
1324 }
1325
1326 .box_right {
1327 width: calc(100% - 240px);
1328 }
1329 }
1330 }
1331
1332 :deep(.panel_tabs) {
1333 .el-tabs__header {
1334 margin-bottom: 0;
1335 }
1336
1337 .el-tabs__nav-scroll {
1338 padding: 0 16px;
1339 }
1340 }
1341
1342 :deep(.table_tool_wrap) {
1343 .table-tools {
1344 .tools_search {
1345 padding-top: 12px;
1346 }
1347 }
1348 }
1349
1350 .tools_btns {
1351 display: flex;
1352 justify-content: space-between;
1353 align-items: center;
1354 padding: 4px 0 8px;
1355 }
1356
1357 .table_panel_wrap {
1358 width: 100%;
1359 height: calc(100% - 40px);
1360 padding: 4px 0 0;
1361
1362 &.panel {
1363 height: calc(100% - 135px);
1364
1365 .table_panel {
1366 width: 100%;
1367 height: 100%;
1368 }
1369 }
1370 }
1371 }
1372 }
1373
1374 .tool_btns {
1375 height: 44px;
1376 margin: 0 -8px;
1377 display: flex;
1378 justify-content: center;
1379 align-items: center;
1380 border-top: 1px solid #d9d9d9;
1381 }
1382 }
1383 }
1384 </style>
...@@ -20,6 +20,290 @@ const userStore = useUserStore(); ...@@ -20,6 +20,290 @@ const userStore = useUserStore();
20 const userData = JSON.parse(userStore.userData); 20 const userData = JSON.parse(userStore.userData);
21 const assetStore = useDataAssetStore(); 21 const assetStore = useDataAssetStore();
22 22
23 const data1 = [
24 {
25 "children": [
26 {
27 "children": null,
28 "parentGuids": [
29 "c32ddd77191ff4afe149538ef4b2e0c3"
30 ],
31 "guid": "9c92df55a19cdce88f61e20a8e1e8a65",
32 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
33 "organisationCode": "11150001",
34 "organisationName": "链享供应链运营一部",
35 "bizState": "Y",
36 "createTime": "2023-10-25 14:23:31",
37 "createUserName": "测试",
38 "parentGuid": "c32ddd77191ff4afe149538ef4b2e0c3",
39 "orderNum": 1,
40 "level": 2,
41 "levelCode": "1.1",
42 "displayCreateTime": "2023-10-25 14:23:31"
43 }
44 ],
45 "parentGuids": null,
46 "guid": "c32ddd77191ff4afe149538ef4b2e0c3",
47 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
48 "organisationCode": "1115004",
49 "organisationName": "链享供应链",
50 "bizState": "Y",
51 "createTime": "2023-08-15 12:59:10",
52 "createUserName": "测试",
53 "parentGuid": "",
54 "orderNum": 2,
55 "level": 0,
56 "levelCode": "1",
57 "displayCreateTime": "2023-08-15 12:59:10"
58 },
59 {
60 "children": [
61 {
62 "children": [
63 {
64 "children": null,
65 "parentGuids": [
66 "e10332122834077907cd5ea61fa576c1",
67 "cdae7bb3cafb560482cad1b89a1e4b78"
68 ],
69 "guid": "16ea472a155c07433a63220f2ae1afe9",
70 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
71 "organisationCode": "11160011",
72 "organisationName": "链享运营一部1组",
73 "bizState": "S",
74 "createTime": "2023-10-25 13:15:57",
75 "createUserName": "测试",
76 "parentGuid": "cdae7bb3cafb560482cad1b89a1e4b78",
77 "orderNum": 1,
78 "level": 2,
79 "levelCode": "2.1.1",
80 "displayCreateTime": "2023-10-25 13:15:57"
81 }
82 ],
83 "parentGuids": [
84 "e10332122834077907cd5ea61fa576c1"
85 ],
86 "guid": "cdae7bb3cafb560482cad1b89a1e4b78",
87 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
88 "organisationCode": "1116001",
89 "organisationName": "链享运营一部",
90 "bizState": "S",
91 "createTime": "2023-10-25 13:14:15",
92 "createUserName": "测试",
93 "parentGuid": "e10332122834077907cd5ea61fa576c1",
94 "orderNum": 1,
95 "level": 1,
96 "levelCode": "2.1",
97 "displayCreateTime": "2023-10-25 13:14:15"
98 },
99 {
100 "children": null,
101 "parentGuids": [
102 "e10332122834077907cd5ea61fa576c1"
103 ],
104 "guid": "d98b44ffb35e4d17cf68f9a922e1c7b7",
105 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
106 "organisationCode": null,
107 "organisationName": "二部",
108 "bizState": "Y",
109 "createTime": "2023-10-26 09:45:36",
110 "createUserName": "测试",
111 "parentGuid": "e10332122834077907cd5ea61fa576c1",
112 "orderNum": 2,
113 "level": 1,
114 "levelCode": "2.2",
115 "displayCreateTime": "2023-10-26 09:45:36"
116 }
117 ],
118 "parentGuids": null,
119 "guid": "e10332122834077907cd5ea61fa576c1",
120 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
121 "organisationCode": "1115005",
122 "organisationName": "链享医药",
123 "bizState": "Y",
124 "createTime": "2023-09-12 15:59:35",
125 "createUserName": "测试",
126 "parentGuid": null,
127 "orderNum": 3,
128 "level": 0,
129 "levelCode": "2",
130 "displayCreateTime": "2023-09-12 15:59:35"
131 },
132 {
133 "children": [
134 {
135 "children": null,
136 "parentGuids": [
137 "9bd46f0f4fcf429518fae6ecb4849a9e"
138 ],
139 "guid": "870f23ae47e036eb88b35f726c31959b",
140 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
141 "organisationCode": null,
142 "organisationName": "运用三部",
143 "bizState": "Y",
144 "createTime": "2024-04-28 16:33:24",
145 "createUserName": "数往知来管理员",
146 "parentGuid": "9bd46f0f4fcf429518fae6ecb4849a9e",
147 "orderNum": 3,
148 "level": 1,
149 "levelCode": "3.3",
150 "displayCreateTime": "2024-04-28 16:33:24"
151 },
152 {
153 "children": null,
154 "parentGuids": [
155 "9bd46f0f4fcf429518fae6ecb4849a9e"
156 ],
157 "guid": "e06049046241dd71b153f227dbe7f801",
158 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
159 "organisationCode": null,
160 "organisationName": "运营二部",
161 "bizState": "Y",
162 "createTime": "2023-11-14 16:01:50",
163 "createUserName": "数往知来管理员",
164 "parentGuid": "9bd46f0f4fcf429518fae6ecb4849a9e",
165 "orderNum": 40,
166 "level": 1,
167 "levelCode": "3.2",
168 "displayCreateTime": "2023-11-14 16:01:50"
169 },
170 {
171 "children": null,
172 "parentGuids": [
173 "9bd46f0f4fcf429518fae6ecb4849a9e"
174 ],
175 "guid": "731cd185c868da8af48b492068ffaed4",
176 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
177 "organisationCode": null,
178 "organisationName": "运营一部",
179 "bizState": "Y",
180 "createTime": "2023-11-14 15:19:35",
181 "createUserName": "测试",
182 "parentGuid": "9bd46f0f4fcf429518fae6ecb4849a9e",
183 "orderNum": 41,
184 "level": 1,
185 "levelCode": "3.1",
186 "displayCreateTime": "2023-11-14 15:19:35"
187 }
188 ],
189 "parentGuids": null,
190 "guid": "9bd46f0f4fcf429518fae6ecb4849a9e",
191 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
192 "organisationCode": null,
193 "organisationName": "药企服务事业部1",
194 "bizState": "Y",
195 "createTime": "2023-11-14 14:49:14",
196 "createUserName": "数往知来管理员",
197 "parentGuid": "",
198 "orderNum": 4,
199 "level": 0,
200 "levelCode": "3",
201 "displayCreateTime": "2023-11-14 14:49:14"
202 },
203 {
204 "children": [
205 {
206 "children": null,
207 "parentGuids": [
208 "23be149ea3167a3f7f2d383023336efe"
209 ],
210 "guid": "e5f2b4958ee2d99309a41e0c6e1447c8",
211 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
212 "organisationCode": null,
213 "organisationName": "智能存储装备部",
214 "bizState": "Y",
215 "createTime": "2023-11-14 16:09:36",
216 "createUserName": "数往知来管理员",
217 "parentGuid": "23be149ea3167a3f7f2d383023336efe",
218 "orderNum": 51,
219 "level": 1,
220 "levelCode": "4.1",
221 "displayCreateTime": "2023-11-14 16:09:36"
222 }
223 ],
224 "parentGuids": null,
225 "guid": "23be149ea3167a3f7f2d383023336efe",
226 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
227 "organisationCode": null,
228 "organisationName": "医药物联网事业部",
229 "bizState": "Y",
230 "createTime": "2023-11-14 15:11:35",
231 "createUserName": "数往知来管理员",
232 "parentGuid": "",
233 "orderNum": 5,
234 "level": 0,
235 "levelCode": "4",
236 "displayCreateTime": "2023-11-14 15:11:35"
237 },
238 {
239 "children": null,
240 "parentGuids": null,
241 "guid": "1d82e875163749ca9ae45809ec432ae8",
242 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
243 "organisationCode": null,
244 "organisationName": "财务管理中心",
245 "bizState": "S",
246 "createTime": "2023-11-14 15:14:07",
247 "createUserName": "数往知来管理员",
248 "parentGuid": "",
249 "orderNum": 6,
250 "level": 0,
251 "levelCode": "6",
252 "displayCreateTime": "2023-11-14 15:14:07"
253 },
254 {
255 "children": null,
256 "parentGuids": null,
257 "guid": "cd9e6a0c76102364a9e88b79b28b0b32",
258 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
259 "organisationCode": null,
260 "organisationName": "资产服务",
261 "bizState": "Y",
262 "createTime": "2024-08-14 11:40:33",
263 "createUserName": "数往知来管理员",
264 "parentGuid": "",
265 "orderNum": 7,
266 "level": 0,
267 "levelCode": "9",
268 "displayCreateTime": "2024-08-14 11:40:33"
269 },
270 {
271 "children": [
272 {
273 "children": null,
274 "parentGuids": [
275 "dac448b77fa35f798bb4a06d8fd86334"
276 ],
277 "guid": "cb76777efe69182cfb2c75d41944553c",
278 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
279 "organisationCode": null,
280 "organisationName": "审批1",
281 "bizState": "Y",
282 "createTime": "2024-01-17 14:28:36",
283 "createUserName": "数往知来管理员",
284 "parentGuid": "dac448b77fa35f798bb4a06d8fd86334",
285 "orderNum": 100,
286 "level": 1,
287 "levelCode": "8.1",
288 "displayCreateTime": "2024-01-17 14:28:36"
289 }
290 ],
291 "parentGuids": null,
292 "guid": "dac448b77fa35f798bb4a06d8fd86334",
293 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
294 "organisationCode": null,
295 "organisationName": "审批组织",
296 "bizState": "Y",
297 "createTime": "2024-01-16 11:38:24",
298 "createUserName": "数往知来管理员",
299 "parentGuid": "",
300 "orderNum": 99,
301 "level": 0,
302 "levelCode": "8",
303 "displayCreateTime": "2024-01-16 11:38:24"
304 }
305 ]
306
23 const step = ref(0); 307 const step = ref(0);
24 const selectIndex = ref(0); 308 const selectIndex = ref(0);
25 const asideSearchInput = ref(""); 309 const asideSearchInput = ref("");
...@@ -55,7 +339,7 @@ const currpermissionList: any = ref([ ...@@ -55,7 +339,7 @@ const currpermissionList: any = ref([
55 } 339 }
56 ]) 340 ])
57 const templateInfo = ref({ 341 const templateInfo = ref({
58 title: '医疗数据分类分级模板', 342 title: '医疗数据分类',
59 descGroup: [ 343 descGroup: [
60 { label: '模型确认人', value: '管理员 ' }, 344 { label: '模型确认人', value: '管理员 ' },
61 { label: '模型确认时间', value: '2021-12-12 09:12:13' }, 345 { label: '模型确认时间', value: '2021-12-12 09:12:13' },
...@@ -81,289 +365,7 @@ const treeInfo = ref({ ...@@ -81,289 +365,7 @@ const treeInfo = ref({
81 nodeKey: 'guid', 365 nodeKey: 'guid',
82 expandedKey: [], 366 expandedKey: [],
83 expandOnNodeClick: false, 367 expandOnNodeClick: false,
84 data: [ 368 data: data1 || [],
85 {
86 "children": [
87 {
88 "children": null,
89 "parentGuids": [
90 "c32ddd77191ff4afe149538ef4b2e0c3"
91 ],
92 "guid": "9c92df55a19cdce88f61e20a8e1e8a65",
93 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
94 "organisationCode": "11150001",
95 "organisationName": "链享供应链运营一部",
96 "bizState": "Y",
97 "createTime": "2023-10-25 14:23:31",
98 "createUserName": "测试",
99 "parentGuid": "c32ddd77191ff4afe149538ef4b2e0c3",
100 "orderNum": 1,
101 "level": 2,
102 "levelCode": "1.1",
103 "displayCreateTime": "2023-10-25 14:23:31"
104 }
105 ],
106 "parentGuids": null,
107 "guid": "c32ddd77191ff4afe149538ef4b2e0c3",
108 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
109 "organisationCode": "1115004",
110 "organisationName": "链享供应链",
111 "bizState": "Y",
112 "createTime": "2023-08-15 12:59:10",
113 "createUserName": "测试",
114 "parentGuid": "",
115 "orderNum": 2,
116 "level": 0,
117 "levelCode": "1",
118 "displayCreateTime": "2023-08-15 12:59:10"
119 },
120 {
121 "children": [
122 {
123 "children": [
124 {
125 "children": null,
126 "parentGuids": [
127 "e10332122834077907cd5ea61fa576c1",
128 "cdae7bb3cafb560482cad1b89a1e4b78"
129 ],
130 "guid": "16ea472a155c07433a63220f2ae1afe9",
131 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
132 "organisationCode": "11160011",
133 "organisationName": "链享运营一部1组",
134 "bizState": "S",
135 "createTime": "2023-10-25 13:15:57",
136 "createUserName": "测试",
137 "parentGuid": "cdae7bb3cafb560482cad1b89a1e4b78",
138 "orderNum": 1,
139 "level": 2,
140 "levelCode": "2.1.1",
141 "displayCreateTime": "2023-10-25 13:15:57"
142 }
143 ],
144 "parentGuids": [
145 "e10332122834077907cd5ea61fa576c1"
146 ],
147 "guid": "cdae7bb3cafb560482cad1b89a1e4b78",
148 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
149 "organisationCode": "1116001",
150 "organisationName": "链享运营一部",
151 "bizState": "S",
152 "createTime": "2023-10-25 13:14:15",
153 "createUserName": "测试",
154 "parentGuid": "e10332122834077907cd5ea61fa576c1",
155 "orderNum": 1,
156 "level": 1,
157 "levelCode": "2.1",
158 "displayCreateTime": "2023-10-25 13:14:15"
159 },
160 {
161 "children": null,
162 "parentGuids": [
163 "e10332122834077907cd5ea61fa576c1"
164 ],
165 "guid": "d98b44ffb35e4d17cf68f9a922e1c7b7",
166 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
167 "organisationCode": null,
168 "organisationName": "二部",
169 "bizState": "Y",
170 "createTime": "2023-10-26 09:45:36",
171 "createUserName": "测试",
172 "parentGuid": "e10332122834077907cd5ea61fa576c1",
173 "orderNum": 2,
174 "level": 1,
175 "levelCode": "2.2",
176 "displayCreateTime": "2023-10-26 09:45:36"
177 }
178 ],
179 "parentGuids": null,
180 "guid": "e10332122834077907cd5ea61fa576c1",
181 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
182 "organisationCode": "1115005",
183 "organisationName": "链享医药",
184 "bizState": "Y",
185 "createTime": "2023-09-12 15:59:35",
186 "createUserName": "测试",
187 "parentGuid": null,
188 "orderNum": 3,
189 "level": 0,
190 "levelCode": "2",
191 "displayCreateTime": "2023-09-12 15:59:35"
192 },
193 {
194 "children": [
195 {
196 "children": null,
197 "parentGuids": [
198 "9bd46f0f4fcf429518fae6ecb4849a9e"
199 ],
200 "guid": "870f23ae47e036eb88b35f726c31959b",
201 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
202 "organisationCode": null,
203 "organisationName": "运用三部",
204 "bizState": "Y",
205 "createTime": "2024-04-28 16:33:24",
206 "createUserName": "数往知来管理员",
207 "parentGuid": "9bd46f0f4fcf429518fae6ecb4849a9e",
208 "orderNum": 3,
209 "level": 1,
210 "levelCode": "3.3",
211 "displayCreateTime": "2024-04-28 16:33:24"
212 },
213 {
214 "children": null,
215 "parentGuids": [
216 "9bd46f0f4fcf429518fae6ecb4849a9e"
217 ],
218 "guid": "e06049046241dd71b153f227dbe7f801",
219 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
220 "organisationCode": null,
221 "organisationName": "运营二部",
222 "bizState": "Y",
223 "createTime": "2023-11-14 16:01:50",
224 "createUserName": "数往知来管理员",
225 "parentGuid": "9bd46f0f4fcf429518fae6ecb4849a9e",
226 "orderNum": 40,
227 "level": 1,
228 "levelCode": "3.2",
229 "displayCreateTime": "2023-11-14 16:01:50"
230 },
231 {
232 "children": null,
233 "parentGuids": [
234 "9bd46f0f4fcf429518fae6ecb4849a9e"
235 ],
236 "guid": "731cd185c868da8af48b492068ffaed4",
237 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
238 "organisationCode": null,
239 "organisationName": "运营一部",
240 "bizState": "Y",
241 "createTime": "2023-11-14 15:19:35",
242 "createUserName": "测试",
243 "parentGuid": "9bd46f0f4fcf429518fae6ecb4849a9e",
244 "orderNum": 41,
245 "level": 1,
246 "levelCode": "3.1",
247 "displayCreateTime": "2023-11-14 15:19:35"
248 }
249 ],
250 "parentGuids": null,
251 "guid": "9bd46f0f4fcf429518fae6ecb4849a9e",
252 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
253 "organisationCode": null,
254 "organisationName": "药企服务事业部1",
255 "bizState": "Y",
256 "createTime": "2023-11-14 14:49:14",
257 "createUserName": "数往知来管理员",
258 "parentGuid": "",
259 "orderNum": 4,
260 "level": 0,
261 "levelCode": "3",
262 "displayCreateTime": "2023-11-14 14:49:14"
263 },
264 {
265 "children": [
266 {
267 "children": null,
268 "parentGuids": [
269 "23be149ea3167a3f7f2d383023336efe"
270 ],
271 "guid": "e5f2b4958ee2d99309a41e0c6e1447c8",
272 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
273 "organisationCode": null,
274 "organisationName": "智能存储装备部",
275 "bizState": "Y",
276 "createTime": "2023-11-14 16:09:36",
277 "createUserName": "数往知来管理员",
278 "parentGuid": "23be149ea3167a3f7f2d383023336efe",
279 "orderNum": 51,
280 "level": 1,
281 "levelCode": "4.1",
282 "displayCreateTime": "2023-11-14 16:09:36"
283 }
284 ],
285 "parentGuids": null,
286 "guid": "23be149ea3167a3f7f2d383023336efe",
287 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
288 "organisationCode": null,
289 "organisationName": "医药物联网事业部",
290 "bizState": "Y",
291 "createTime": "2023-11-14 15:11:35",
292 "createUserName": "数往知来管理员",
293 "parentGuid": "",
294 "orderNum": 5,
295 "level": 0,
296 "levelCode": "4",
297 "displayCreateTime": "2023-11-14 15:11:35"
298 },
299 {
300 "children": null,
301 "parentGuids": null,
302 "guid": "1d82e875163749ca9ae45809ec432ae8",
303 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
304 "organisationCode": null,
305 "organisationName": "财务管理中心",
306 "bizState": "S",
307 "createTime": "2023-11-14 15:14:07",
308 "createUserName": "数往知来管理员",
309 "parentGuid": "",
310 "orderNum": 6,
311 "level": 0,
312 "levelCode": "6",
313 "displayCreateTime": "2023-11-14 15:14:07"
314 },
315 {
316 "children": null,
317 "parentGuids": null,
318 "guid": "cd9e6a0c76102364a9e88b79b28b0b32",
319 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
320 "organisationCode": null,
321 "organisationName": "资产服务",
322 "bizState": "Y",
323 "createTime": "2024-08-14 11:40:33",
324 "createUserName": "数往知来管理员",
325 "parentGuid": "",
326 "orderNum": 7,
327 "level": 0,
328 "levelCode": "9",
329 "displayCreateTime": "2024-08-14 11:40:33"
330 },
331 {
332 "children": [
333 {
334 "children": null,
335 "parentGuids": [
336 "dac448b77fa35f798bb4a06d8fd86334"
337 ],
338 "guid": "cb76777efe69182cfb2c75d41944553c",
339 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
340 "organisationCode": null,
341 "organisationName": "审批1",
342 "bizState": "Y",
343 "createTime": "2024-01-17 14:28:36",
344 "createUserName": "数往知来管理员",
345 "parentGuid": "dac448b77fa35f798bb4a06d8fd86334",
346 "orderNum": 100,
347 "level": 1,
348 "levelCode": "8.1",
349 "displayCreateTime": "2024-01-17 14:28:36"
350 }
351 ],
352 "parentGuids": null,
353 "guid": "dac448b77fa35f798bb4a06d8fd86334",
354 "tenantGuid": "9e5b9d7bfd8c4f4f8079e05de19bf7e0",
355 "organisationCode": null,
356 "organisationName": "审批组织",
357 "bizState": "Y",
358 "createTime": "2024-01-16 11:38:24",
359 "createUserName": "数往知来管理员",
360 "parentGuid": "",
361 "orderNum": 99,
362 "level": 0,
363 "levelCode": "8",
364 "displayCreateTime": "2024-01-16 11:38:24"
365 }
366 ],
367 }); 369 });
368 370
369 const expand1 = ref(true) 371 const expand1 = ref(true)
...@@ -436,6 +438,8 @@ const tableInfo = ref({ ...@@ -436,6 +438,8 @@ const tableInfo = ref({
436 438
437 const metadataTableInfo = ref({ 439 const metadataTableInfo = ref({
438 id: "metadata-table", 440 id: "metadata-table",
441 multiple: true,
442 rowKey: 'guid',
439 fields: [ 443 fields: [
440 { label: "序号", type: "index", width: 56, align: "center", fixed: "left" }, 444 { label: "序号", type: "index", width: 56, align: "center", fixed: "left" },
441 { label: "数据库名称", field: "damCode", width: 200 }, 445 { label: "数据库名称", field: "damCode", width: 200 },
...@@ -607,7 +611,7 @@ onBeforeMount(() => { ...@@ -607,7 +611,7 @@ onBeforeMount(() => {
607 <template> 611 <template>
608 <div class="container_wrap full flex"> 612 <div class="container_wrap full flex">
609 <div class="aside_wrap" v-show="step == 0"> 613 <div class="aside_wrap" v-show="step == 0">
610 <div class="aside_title">选择分类分级模板</div> 614 <div class="aside_title">选择分类</div>
611 <div class="aside_search"> 615 <div class="aside_search">
612 <el-input v-model.trim="asideSearchInput" placeholder="请输入关键字" :prefix-icon="Search" clearable 616 <el-input v-model.trim="asideSearchInput" placeholder="请输入关键字" :prefix-icon="Search" clearable
613 @change="querySearch" /> 617 @change="querySearch" />
...@@ -773,9 +777,11 @@ onBeforeMount(() => { ...@@ -773,9 +777,11 @@ onBeforeMount(() => {
773 } 777 }
774 778
775 .panel_desc { 779 .panel_desc {
776 margin: 8px 0; 780 margin: 8px 0 16px;
777 font-size: 14px; 781 font-size: 14px;
778 color: #666; 782 color: #666;
783 line-height: 1.5;
784 text-align: justify;
779 } 785 }
780 } 786 }
781 787
......
1 <route lang="yaml">
2 name: taskLog //分类分级任务日志
3 </route>
4
5 <script lang="ts" setup name="taskLog">
6 import { ref, onMounted } from "vue";
7 import { useRouter, useRoute } from "vue-router";
8 import useUserStore from "@/store/modules/user";
9 import { ElMessage, ElMessageBox } from "element-plus";
10
11 import useDataAssetStore from "@/store/modules/dataAsset";
12 import { getListingList, listingDelete, listingUpdateStatus, filterVal, getParamsDataList } from "@/api/modules/dataProduct";
13 import { TableColumnWidth } from '@/utils/enum';
14
15 import Table from "@/components/Table/index.vue";
16
17 const { proxy } = getCurrentInstance() as any;
18 const router = useRouter();
19 const userStore = useUserStore();
20 const userData = JSON.parse(userStore.userData);
21 const assetStore = useDataAssetStore();
22 const datas = [
23 {
24 "updateTime": "2024-07-16 13:17:00",
25 "updateUserName": "数往知来管理员",
26 "guid": "4e0e76c48fa043d5b35d09f3ccc7c265",
27 "approvalGuid": null,
28 "standardSetGuid": "58d1178a04904d599284fc1e61594c43",
29 "fieldStandardCode": "COL202406070021",
30 "dataVersion": 1,
31 "chName": "地址",
32 "enName": "address",
33 "dataTypeValue": "字符型",
34 "dataTypeCode": "varchar",
35 "dataDicGuid": "",
36 "dataDicName": null,
37 "isDataDic": "N",
38 "fieldLength": 600,
39 "fieldPrecision": null,
40 "dataState": 0,
41 "approveState": "N",
42 "dataCategory": "合伙人",
43 "dataEncryptionLevel": "界面加密",
44 "businessDefDesc": "地址",
45 "flowFlag": null,
46 "flowCode": null,
47 "functionCode": null,
48 "createStaffGuid": null,
49 "createUserId": "98df01b8d86c46f786dd10b4d0eb11dd",
50 "displayVersion": "V1",
51 "standardSetName": null,
52 "ruleType": null
53 },
54 {
55 "updateTime": "2024-01-27 10:19:45",
56 "updateUserName": "数往知来管理员",
57 "guid": "bc630207357c466dbff7613ea38985cc",
58 "approvalGuid": null,
59 "standardSetGuid": "58d1178a04904d599284fc1e61594c43",
60 "fieldStandardCode": "COL202401260124",
61 "dataVersion": 1,
62 "chName": "包含最小销售包装单元数量",
63 "enName": "inboxQuantity",
64 "dataTypeValue": "整型",
65 "dataTypeCode": "int",
66 "dataDicGuid": null,
67 "dataDicName": null,
68 "isDataDic": null,
69 "fieldLength": null,
70 "fieldPrecision": null,
71 "dataState": 1,
72 "approveState": "A",
73 "dataCategory": null,
74 "dataEncryptionLevel": "明文显示",
75 "businessDefDesc": "当前药品追溯码中包含的最小销售包装单元药品追溯码的数量,发货类型为03时可选",
76 "flowFlag": null,
77 "flowCode": null,
78 "functionCode": null,
79 "createStaffGuid": null,
80 "createUserId": "98df01b8d86c46f786dd10b4d0eb11dd",
81 "displayVersion": "V1",
82 "standardSetName": null,
83 "ruleType": null
84 },
85 {
86 "updateTime": "2024-01-27 11:03:59",
87 "updateUserName": "审批人4",
88 "guid": "420f2a68bd4441bf92010eadf698b685",
89 "approvalGuid": null,
90 "standardSetGuid": "58d1178a04904d599284fc1e61594c43",
91 "fieldStandardCode": "COL202401260122",
92 "dataVersion": 1,
93 "chName": "包装层级",
94 "enName": "packageLevel",
95 "dataTypeValue": "字符型",
96 "dataTypeCode": "varchar",
97 "dataDicGuid": null,
98 "dataDicName": null,
99 "isDataDic": null,
100 "fieldLength": 200,
101 "fieldPrecision": null,
102 "dataState": 1,
103 "approveState": "A",
104 "dataCategory": null,
105 "dataEncryptionLevel": "明文显示",
106 "businessDefDesc": "当前药品追溯码所处包装层级描述,发货类型为03时可选",
107 "flowFlag": null,
108 "flowCode": null,
109 "functionCode": null,
110 "createStaffGuid": null,
111 "createUserId": "98df01b8d86c46f786dd10b4d0eb11dd",
112 "displayVersion": "V1",
113 "standardSetName": null,
114 "ruleType": null
115 },
116 {
117 "updateTime": "2024-06-06 10:01:06",
118 "updateUserName": "审批人1",
119 "guid": "f841e1848ab94b1e81a0217a09a7a3d3",
120 "approvalGuid": "b674bffe8d2f4132918016b6baaf75aa",
121 "standardSetGuid": "58d1178a04904d599284fc1e61594c43",
122 "fieldStandardCode": "COL202401260120",
123 "dataVersion": 1,
124 "chName": "上一级包装药品追溯码",
125 "enName": "parentDTC",
126 "dataTypeValue": "字符型",
127 "dataTypeCode": "varchar",
128 "dataDicGuid": "",
129 "dataDicName": null,
130 "isDataDic": "N",
131 "fieldLength": 200,
132 "fieldPrecision": null,
133 "dataState": 1,
134 "approveState": "Y",
135 "dataCategory": "",
136 "dataEncryptionLevel": "明文显示",
137 "businessDefDesc": "当前药品追溯码大一级包装上的药品追溯码,发货类型为03时可选;当存在上一级包装时必选",
138 "flowFlag": null,
139 "flowCode": null,
140 "functionCode": null,
141 "createStaffGuid": null,
142 "createUserId": "98df01b8d86c46f786dd10b4d0eb11dd",
143 "displayVersion": "V1",
144 "standardSetName": null,
145 "ruleType": null
146 },
147 {
148 "updateTime": "2024-01-26 00:10:47",
149 "updateUserName": "数往知来管理员",
150 "guid": "d4d42dea2a5844b4a7f9238806ea507b",
151 "approvalGuid": null,
152 "standardSetGuid": "58d1178a04904d599284fc1e61594c43",
153 "fieldStandardCode": "COL202401260118",
154 "dataVersion": 1,
155 "chName": "药品追溯码",
156 "enName": "DTC",
157 "dataTypeValue": "字符型",
158 "dataTypeCode": "varchar",
159 "dataDicGuid": null,
160 "dataDicName": null,
161 "isDataDic": null,
162 "fieldLength": 200,
163 "fieldPrecision": null,
164 "dataState": 0,
165 "approveState": "N",
166 "dataCategory": null,
167 "dataEncryptionLevel": "明文显示",
168 "businessDefDesc": "用于唯一标识药品各级销售包装单元的代码,发货类型为03时可选",
169 "flowFlag": null,
170 "flowCode": null,
171 "functionCode": null,
172 "createStaffGuid": null,
173 "createUserId": "98df01b8d86c46f786dd10b4d0eb11dd",
174 "displayVersion": "V1",
175 "standardSetName": null,
176 "ruleType": null
177 },
178 {
179 "updateTime": "2024-01-26 00:10:47",
180 "updateUserName": "数往知来管理员",
181 "guid": "ff9d0e4f6fbb444c8dcf6f67bffcb659",
182 "approvalGuid": null,
183 "standardSetGuid": "58d1178a04904d599284fc1e61594c43",
184 "fieldStandardCode": "COL202401260116",
185 "dataVersion": 1,
186 "chName": "发货数量",
187 "enName": "deliveryQuantity",
188 "dataTypeValue": "整型",
189 "dataTypeCode": "int",
190 "dataDicGuid": null,
191 "dataDicName": null,
192 "isDataDic": null,
193 "fieldLength": null,
194 "fieldPrecision": null,
195 "dataState": 0,
196 "approveState": "N",
197 "dataCategory": null,
198 "dataEncryptionLevel": "明文显示",
199 "businessDefDesc": "发货的最小销售包装单元数量",
200 "flowFlag": null,
201 "flowCode": null,
202 "functionCode": null,
203 "createStaffGuid": null,
204 "createUserId": "98df01b8d86c46f786dd10b4d0eb11dd",
205 "displayVersion": "V1",
206 "standardSetName": null,
207 "ruleType": null
208 },
209 {
210 "updateTime": "2024-01-26 00:10:46",
211 "updateUserName": "数往知来管理员",
212 "guid": "fe88ac9e8d9c4f148833dbb3976fca77",
213 "approvalGuid": null,
214 "standardSetGuid": "58d1178a04904d599284fc1e61594c43",
215 "fieldStandardCode": "COL202401260114",
216 "dataVersion": 1,
217 "chName": "药品生产批号",
218 "enName": "batch",
219 "dataTypeValue": "字符型",
220 "dataTypeCode": "varchar",
221 "dataDicGuid": null,
222 "dataDicName": null,
223 "isDataDic": null,
224 "fieldLength": 20,
225 "fieldPrecision": null,
226 "dataState": 0,
227 "approveState": "N",
228 "dataCategory": null,
229 "dataEncryptionLevel": "明文显示",
230 "businessDefDesc": "药品包装上标示的生产批号",
231 "flowFlag": null,
232 "flowCode": null,
233 "functionCode": null,
234 "createStaffGuid": null,
235 "createUserId": "98df01b8d86c46f786dd10b4d0eb11dd",
236 "displayVersion": "V1",
237 "standardSetName": null,
238 "ruleType": null
239 },
240 {
241 "updateTime": "2024-01-26 00:10:45",
242 "updateUserName": "数往知来管理员",
243 "guid": "9759837e0d72472ab7441c1873c9159a",
244 "approvalGuid": null,
245 "standardSetGuid": "58d1178a04904d599284fc1e61594c43",
246 "fieldStandardCode": "COL202401260112",
247 "dataVersion": 1,
248 "chName": "药品有效期截止日期",
249 "enName": "expirationDate",
250 "dataTypeValue": "日期型",
251 "dataTypeCode": "date",
252 "dataDicGuid": null,
253 "dataDicName": null,
254 "isDataDic": null,
255 "fieldLength": null,
256 "fieldPrecision": null,
257 "dataState": 0,
258 "approveState": "N",
259 "dataCategory": null,
260 "dataEncryptionLevel": "明文显示",
261 "businessDefDesc": "药品有效期的截止日期",
262 "flowFlag": null,
263 "flowCode": null,
264 "functionCode": null,
265 "createStaffGuid": null,
266 "createUserId": "98df01b8d86c46f786dd10b4d0eb11dd",
267 "displayVersion": "V1",
268 "standardSetName": null,
269 "ruleType": null
270 },
271 {
272 "updateTime": "2024-01-26 00:10:45",
273 "updateUserName": "数往知来管理员",
274 "guid": "a39ed6123c6a420d9d1265315e714f86",
275 "approvalGuid": null,
276 "standardSetGuid": "58d1178a04904d599284fc1e61594c43",
277 "fieldStandardCode": "COL202401260110",
278 "dataVersion": 1,
279 "chName": "药品生产日期",
280 "enName": "productionDate",
281 "dataTypeValue": "日期型",
282 "dataTypeCode": "date",
283 "dataDicGuid": null,
284 "dataDicName": null,
285 "isDataDic": null,
286 "fieldLength": null,
287 "fieldPrecision": null,
288 "dataState": 0,
289 "approveState": "N",
290 "dataCategory": null,
291 "dataEncryptionLevel": "明文显示",
292 "businessDefDesc": "药品包装上标示的生产日期",
293 "flowFlag": null,
294 "flowCode": null,
295 "functionCode": null,
296 "createStaffGuid": null,
297 "createUserId": "98df01b8d86c46f786dd10b4d0eb11dd",
298 "displayVersion": "V1",
299 "standardSetName": null,
300 "ruleType": null
301 },
302 {
303 "updateTime": "2024-01-26 00:10:45",
304 "updateUserName": "数往知来管理员",
305 "guid": "ea597c1b8bb24a5ab053a80b084de98c",
306 "approvalGuid": null,
307 "standardSetGuid": "58d1178a04904d599284fc1e61594c43",
308 "fieldStandardCode": "COL202401260108",
309 "dataVersion": 1,
310 "chName": "统一社会信用代码(进口药品代理企业)",
311 "enName": "drugImporterUSCID",
312 "dataTypeValue": "字符型",
313 "dataTypeCode": "varchar",
314 "dataDicGuid": null,
315 "dataDicName": null,
316 "isDataDic": null,
317 "fieldLength": 18,
318 "fieldPrecision": null,
319 "dataState": 0,
320 "approveState": "N",
321 "dataCategory": null,
322 "dataEncryptionLevel": "明文显示",
323 "businessDefDesc": "进口药品代理企业的统一社会信用代码,进口药品必选;没有统一社会信用代码时使用组织机构代码",
324 "flowFlag": null,
325 "flowCode": null,
326 "functionCode": null,
327 "createStaffGuid": null,
328 "createUserId": "98df01b8d86c46f786dd10b4d0eb11dd",
329 "displayVersion": "V1",
330 "standardSetName": null,
331 "ruleType": null
332 }
333 ]
334
335 const page = ref({
336 limit: 50,
337 curr: 1,
338 sizes: [
339 { label: "10", value: 10 },
340 { label: "50", value: 50 },
341 { label: "100", value: 100 },
342 { label: "150", value: 150 },
343 { label: "200", value: 200 },
344 ],
345 });
346 const searchItemValue: any = ref({});
347 const currTableData: any = ref({});
348 const tableInfo = ref({
349 id: "mapping-table",
350 fields: [
351 { label: "序号", type: "index", width: 56, align: "center", fixed: "left" },
352 { label: "任务名称", field: "chName", width: 96 },
353 {
354 label: "目录名称", field: "dataTypeValue", width: 120, type: "text_btn", columClass: 'text_btn', click: (scope) => {
355 router.push({
356 name: "templateConfig",
357 query: { guid: scope.row.damGuid },
358 });
359 }
360 },
361 { label: "分类分级模板", field: "dataTypeValue", width: 200 },
362 { label: "元数据", field: "fieldStandardCode", width: 200 },
363 { label: "任务修改人", field: "dataCategory", width: 120 },
364 { label: "修改时间", field: "updateTime", width: TableColumnWidth.DATETIME },
365 { label: "确认次数", field: "fieldLength", width: 96, align: 'right' },
366 { label: "结果确认人", field: "updateUserName", width: 120 },
367 { label: "确认时间", field: "updateTime", width: TableColumnWidth.DATETIME },
368 {
369 label: "结果状态", field: "approveState", width: TableColumnWidth.STATE, align: 'center', type: "tag", getName: (scope) => {
370 return filterVal(scope.row.approveState, 'approveState');
371 }
372 },
373 ],
374 loading: false,
375 data: datas || [],
376 page: {
377 type: "normal",
378 rows: 0,
379 ...page.value,
380 },
381 actionInfo: {
382 label: "操作",
383 type: "btn",
384 width: 100,
385 btns: (scope) => {
386 let row = scope.row, btnArr: any = [
387 { label: "查看结果", value: "path" },
388 ];
389 // if (row.approveState == 'Y') {
390 // if (row.listingStatus == 'Y') {
391 // btnArr.splice(0, 0, { label: "详情", value: "detail" });
392 // } else {
393 // btnArr.splice(0, 0, { label: "编辑", value: "edit" }, { label: "详情", value: "detail" }, { label: "删除", value: "delete" });
394 // }
395 // } else {
396 // if (row.approveState == 'A') {
397 // btnArr.splice(0, 0, { label: "详情", value: "detail" });
398 // } else {
399 // btnArr.splice(0, 0, { label: "编辑", value: "edit" }, { label: "详情", value: "detail" }, { label: "删除", value: "delete" });
400 // }
401 // }
402 return btnArr;
403 },
404 },
405 });
406
407 const getTableData = () => {
408 tableInfo.value.loading = true;
409 getListingList(
410 Object.assign({}, searchItemValue.value, {
411 pageIndex: page.value.curr,
412 pageSize: page.value.limit,
413 })
414 ).then((res: any) => {
415 tableInfo.value.loading = false;
416 tableInfo.value.data = res.data.records || [];
417 tableInfo.value.page.curr = res.data.pageIndex;
418 tableInfo.value.page.limit = res.data.pageSize;
419 tableInfo.value.page.rows = res.data.totalRows;
420 })
421 .catch((res) => {
422 tableInfo.value.loading = false;
423 });
424 };
425
426 const tableBtnClick = (scope, btn) => {
427 const type = btn.value;
428 const row = scope.row;
429 currTableData.value = row;
430 if (type == "path") {
431 toPath(type);
432 } else if (type === "delete") {
433 open("此操作将永久删除,是否继续?", "warning");
434 }
435 };
436
437 const toPath = (type) => {
438 router.push({
439 name: "taskDetail",
440 query: {
441 guid: currTableData.value.guid,
442 name: currTableData.value.damName,
443 type
444 },
445 });
446 }
447
448 const tablePageChange = (info) => {
449 page.value.curr = Number(info.curr);
450 page.value.limit = Number(info.limit);
451 tableInfo.value.page.limit = page.value.limit;
452 tableInfo.value.page.curr = page.value.curr;
453 getTableData();
454 };
455
456 const open = (msg, type, isBatch = false) => {
457 ElMessageBox.confirm(msg, "提示", {
458 confirmButtonText: "确定",
459 cancelButtonText: "取消",
460 type: type,
461 }).then(() => {
462 const guids = [currTableData.value.guid];
463 listingDelete(guids).then((res: any) => {
464 if (res.code == proxy.$passCode) {
465 getFirstPageData();
466 ElMessage({
467 type: "success",
468 message: "删除成功",
469 });
470 } else {
471 ElMessage({
472 type: "error",
473 message: res.msg,
474 });
475 }
476 }).catch((res) => {
477 tableInfo.value.loading = false;
478 });
479 });
480 };
481
482 const getFirstPageData = () => {
483 page.value.curr = 1
484 tableInfo.value.page.curr = 1;
485 getTableData();
486 }
487
488 onActivated(() => {
489 if (assetStore.isRefresh) {//如果是首次加载,则不需要调用
490 getFirstPageData();
491 assetStore.set(false);
492 }
493 })
494
495 onBeforeMount(() => {
496
497 })
498
499 </script>
500
501 <template>
502 <div class="container_wrap" v-if="tableInfo.data.length">
503 <div class="table_tool_wrap">
504 <div class="table_title">分类分级任务</div>
505 </div>
506 <div class="table_panel_wrap">
507 <Table :tableInfo="tableInfo" @tableBtnClick="tableBtnClick" @tablePageChange="tablePageChange" />
508 </div>
509 </div>
510 <div class="container_wrap" v-else>
511 <div class="card-noData">
512 <img src="@/assets/images/no-data.png" :style="{ width: '96px', height: '96px' }" />
513 <p>暂无分类分级任务,<span class="text_btn" @click="toPath('add')">去新建</span></p>
514 </div>
515 </div>
516 </template>
517
518 <style scoped lang="scss">
519 .table_tool_wrap {
520 width: 100%;
521 height: 40px !important;
522 padding: 0 8px;
523
524 .table_title {
525 height: 40px;
526 line-height: 40px;
527 font-weight: 600;
528 font-size: 16px;
529 color: #212121;
530 }
531 }
532
533 .table_panel_wrap {
534 width: 100%;
535 height: calc(100% - 40px);
536 padding: 0px 8px 0;
537 }
538
539 .card-noData {
540 position: absolute;
541 top: 50%;
542 left: 50%;
543 transform: translate(-50%, -50%);
544 display: flex;
545 flex-direction: column;
546 align-items: center;
547 }
548 </style>
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!