Commit d3b7283d by cat

zd

parent ada8e8a2
{
"name": "ruoyi",
"version": "3.8.9",
"description": "系统",
"description": "地震资料处理数字化验收支持平台",
"author": "若依",
"license": "MIT",
"scripts": {
......@@ -36,8 +36,7 @@
"url": "https://gitee.com/y_project/RuoYi-Vue.git"
},
"dependencies": {
"@jsonforms/core": "^3.6.0",
"@jsonforms/vue": "^3.6.0",
"@mdi/font": "^7.4.47",
"@riophae/vue-treeselect": "0.4.0",
"axios": "0.28.1",
"clipboard": "2.0.8",
......
import request from '@/utils/request'
// 查询分享管理列表
export function listFilerole(query) {
return request({
url: '/yscgFileRole/filerole/list',
method: 'get',
params: query,
})
}
// 查询分享管理详细
export function getFilerole(id) {
return request({
url: '/yscgFileRole/filerole/' + id,
method: 'get',
})
}
// 新增分享管理
export function addFilerole(data) {
return request({
url: '/yscgFileRole/filerole',
method: 'post',
data: data,
})
}
// 修改分享管理
export function updateFilerole(data) {
return request({
url: '/yscgFileRole/filerole',
method: 'put',
data: data,
})
}
// 删除分享管理
export function delFilerole(id) {
return request({
url: '/yscgFileRole/filerole/' + id,
method: 'delete',
})
}
// 批量添加分享管理
export function batchYscgFileRole(fileid, userIds) {
return request({
url: '/yscgFileRole/filerole/batchYscgFileRole',
method: 'put',
params: { fileid, userIds },
})
}
import request from '@/utils/request'
// 查询验收前期-项目信息-项目成员列表
export function listXmcy(query) {
return request({
url: '/ysqqXmxxXmcy/xmcy/list',
method: 'get',
params: query
})
}
// 查询验收前期-项目信息-项目成员详细
export function getXmcy(cyid) {
return request({
url: '/ysqqXmxxXmcy/xmcy/' + cyid,
method: 'get'
})
}
// 新增验收前期-项目信息-项目成员
export function addXmcy(data) {
return request({
url: '/ysqqXmxxXmcy/xmcy',
method: 'post',
data: data
})
}
// 修改验收前期-项目信息-项目成员
export function updateXmcy(data) {
return request({
url: '/ysqqXmxxXmcy/xmcy',
method: 'put',
data: data
})
}
// 删除验收前期-项目信息-项目成员
export function delXmcy(cyid) {
return request({
url: '/ysqqXmxxXmcy/xmcy/' + cyid,
method: 'delete'
})
}
import request from '@/utils/request'
// 查询资料列表
export function listZlcx(query) {
return request({
url: '/yscgWjscqk/wjscqk/list_My',
method: 'get',
params: query,
})
}
......@@ -37,7 +37,8 @@ export default {
data() {
return {
title: process.env.VUE_APP_TITLE,
// logo: logoImg
logo: null
// logo: logoImg (如果需要使用logo图片,取消注释并引入logoImg)
}
}
}
......
......@@ -128,6 +128,19 @@ export const constantRoutes = [
],
},
{
path: '/ysqqXmxxXmcy/xmcy',
component: Layout,
hidden: true,
children: [
{
path: 'index',
component: () => import('@/views/ysqqXmxxXmcy/xmcy/index'),
name: 'XmcyIndex',
meta: { title: '项目成员管理', activeMenu: '/ysqqXmxx/ysqqXmxx' },
},
],
},
{
path: '/ysqqXmxx/ysgc',
component: Layout,
hidden: true,
......@@ -170,6 +183,45 @@ export const constantRoutes = [
},
],
},
{
path: '/yscgFileRole',
component: Layout,
hidden: true,
children: [
{
path: 'filerole',
component: () => import('@/views/yscgFileRole/filerole/index'),
name: 'FileroleIndex',
meta: { title: '分享管理', activeMenu: '/yscgWjscqk/yscg' },
},
],
},
{
path: '/system/user',
component: Layout,
hidden: true,
children: [
{
path: '',
component: () => import('@/views/system/user/index'),
name: 'UserIndex',
meta: { title: '用户管理', activeMenu: '/system/user' },
},
],
},
// {
// path: '/zlcx',
// component: Layout,
// hidden: true,
// children: [
// {
// path: 'index',
// component: () => import('@/views/zlcx/index'),
// name: 'ZlcxIndex',
// meta: { title: '资料查询' },
// },
// ],
// },
]
// 动态路由,基于用户权限动态去加载
......
......@@ -10,10 +10,10 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="用户名称" prop="userName">
<el-form-item label="统一账号" prop="userName">
<el-input
v-model="queryParams.userName"
placeholder="请输入用户名称"
placeholder="请输入统一账号"
clearable
style="width: 240px;"
@keyup.enter.native="handleQuery"
......@@ -101,7 +101,7 @@
<el-table ref="tables" v-loading="loading" :data="list" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="handleSortChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="访问编号" align="center" prop="infoId" />
<el-table-column label="用户名称" align="center" prop="userName" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']" />
<el-table-column label="统一账号" align="center" prop="userName" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']" />
<el-table-column label="登录地址" align="center" prop="ipaddr" width="130" :show-overflow-tooltip="true" />
<el-table-column label="登录地点" align="center" prop="loginLocation" :show-overflow-tooltip="true" />
<el-table-column label="浏览器" align="center" prop="browser" :show-overflow-tooltip="true" />
......
......@@ -9,10 +9,10 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="用户名称" prop="userName">
<el-form-item label="统一账号" prop="userName">
<el-input
v-model="queryParams.userName"
placeholder="请输入用户名称"
placeholder="请输入统一账号"
clearable
@keyup.enter.native="handleQuery"
/>
......
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">
<el-form-item label="用户名称" prop="userName">
<el-form-item label="统一账号" prop="userName">
<el-input
v-model="queryParams.userName"
placeholder="请输入用户名称"
placeholder="请输入统一账号"
clearable
style="width: 240px"
@keyup.enter.native="handleQuery"
......@@ -61,8 +61,8 @@
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="用户名称" prop="userName" :show-overflow-tooltip="true" />
<el-table-column label="用户昵称" prop="nickName" :show-overflow-tooltip="true" />
<el-table-column label="统一账号" prop="userName" :show-overflow-tooltip="true" />
<el-table-column label="用户姓名" prop="nickName" :show-overflow-tooltip="true" />
<el-table-column label="邮箱" prop="email" :show-overflow-tooltip="true" />
<el-table-column label="手机" prop="phonenumber" :show-overflow-tooltip="true" />
<el-table-column label="状态" align="center" prop="status">
......
......@@ -2,10 +2,10 @@
<!-- 授权用户 -->
<el-dialog title="选择用户" :visible.sync="visible" width="800px" top="5vh" append-to-body>
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true">
<el-form-item label="用户名称" prop="userName">
<el-form-item label="统一账号" prop="userName">
<el-input
v-model="queryParams.userName"
placeholder="请输入用户名称"
placeholder="请输入统一账号"
clearable
@keyup.enter.native="handleQuery"
/>
......@@ -26,8 +26,8 @@
<el-row>
<el-table @row-click="clickRow" ref="table" :data="userList" @selection-change="handleSelectionChange" height="260px">
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column label="用户名称" prop="userName" :show-overflow-tooltip="true" />
<el-table-column label="用户昵称" prop="nickName" :show-overflow-tooltip="true" />
<el-table-column label="统一账号" prop="userName" :show-overflow-tooltip="true" />
<el-table-column label="用户姓名" prop="nickName" :show-overflow-tooltip="true" />
<el-table-column label="邮箱" prop="email" :show-overflow-tooltip="true" />
<el-table-column label="手机" prop="phonenumber" :show-overflow-tooltip="true" />
<el-table-column label="状态" align="center" prop="status">
......
......@@ -4,7 +4,7 @@
<el-form ref="form" :model="form" label-width="80px">
<el-row>
<el-col :span="8" :offset="2">
<el-form-item label="用户昵称" prop="nickName">
<el-form-item label="用户姓名" prop="nickName">
<el-input v-model="form.nickName" disabled />
</el-form-item>
</el-col>
......
......@@ -21,8 +21,8 @@
<el-col>
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"
label-width="68px">
<el-form-item label="用户名称" prop="userName">
<el-input v-model="queryParams.userName" placeholder="请输入用户名称" clearable style="width: 240px"
<el-form-item label="统一账号" prop="userName">
<el-input v-model="queryParams.userName" placeholder="请输入统一账号" clearable style="width: 240px"
@keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="手机号码" prop="phonenumber">
......@@ -72,9 +72,9 @@
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="用户编号" align="center" key="userId" prop="userId" v-if="columns[0].visible" />
<el-table-column label="用户名称" align="center" key="userName" prop="userName" v-if="columns[1].visible"
<el-table-column label="统一账号" align="center" key="userName" prop="userName" v-if="columns[1].visible"
:show-overflow-tooltip="true" />
<el-table-column label="用户昵称" align="center" key="nickName" prop="nickName" v-if="columns[2].visible"
<el-table-column label="用户姓名" align="center" key="nickName" prop="nickName" v-if="columns[2].visible"
:show-overflow-tooltip="true" />
<el-table-column label="部门" align="center" key="deptName" prop="dept.deptName" v-if="columns[3].visible"
:show-overflow-tooltip="true" />
......@@ -123,8 +123,8 @@
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-row>
<el-col :span="12">
<el-form-item label="用户昵称" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入用户昵称" maxlength="30" />
<el-form-item label="用户姓名" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入用户姓名" maxlength="30" />
</el-form-item>
</el-col>
<el-col :span="12">
......@@ -148,8 +148,8 @@
</el-row>
<el-row>
<el-col :span="12">
<el-form-item v-if="form.userId == undefined" label="用户名称" prop="userName">
<el-input v-model="form.userName" placeholder="请输入用户名称" maxlength="30" />
<el-form-item v-if="form.userId == undefined" label="统一账号" prop="userName">
<el-input v-model="form.userName" placeholder="请输入统一账号" maxlength="30" />
</el-form-item>
</el-col>
<el-col :span="12">
......@@ -329,8 +329,8 @@ export default {
// 列信息
columns: [
{ key: 0, label: `用户编号`, visible: true },
{ key: 1, label: `用户名称`, visible: true },
{ key: 2, label: `用户昵称`, visible: true },
{ key: 1, label: `统一账号`, visible: true },
{ key: 2, label: `用户姓名`, visible: true },
{ key: 3, label: `部门`, visible: true },
{ key: 4, label: `手机号码`, visible: true },
{ key: 5, label: `状态`, visible: true },
......@@ -339,11 +339,11 @@ export default {
// 表单校验
rules: {
userName: [
{ required: true, message: "用户名称不能为空", trigger: "blur" },
{ min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur' }
{ required: true, message: "统一账号不能为空", trigger: "blur" },
{ min: 2, max: 20, message: '统一账号长度必须介于 2 和 20 之间', trigger: 'blur' }
],
nickName: [
{ required: true, message: "用户昵称不能为空", trigger: "blur" }
{ required: true, message: "用户姓名不能为空", trigger: "blur" }
],
password: [
{ required: true, message: "用户密码不能为空", trigger: "blur" },
......
......@@ -21,8 +21,8 @@
<el-col>
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"
label-width="68px">
<el-form-item label="用户名称" prop="userName">
<el-input v-model="queryParams.userName" placeholder="请输入用户名称" clearable style="width: 240px"
<el-form-item label="统一账号" prop="userName">
<el-input v-model="queryParams.userName" placeholder="请输入统一账号" clearable style="width: 240px"
@keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="手机号码" prop="phonenumber">
......@@ -72,9 +72,9 @@
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="用户编号" align="center" key="userId" prop="userId" v-if="columns[0].visible" />
<el-table-column label="用户名称" align="center" key="userName" prop="userName" v-if="columns[1].visible"
<el-table-column label="统一账号" align="center" key="userName" prop="userName" v-if="columns[1].visible"
:show-overflow-tooltip="true" />
<el-table-column label="用户昵称" align="center" key="nickName" prop="nickName" v-if="columns[2].visible"
<el-table-column label="用户姓名" align="center" key="nickName" prop="nickName" v-if="columns[2].visible"
:show-overflow-tooltip="true" />
<el-table-column label="部门" align="center" key="deptName" prop="dept.deptName" v-if="columns[3].visible"
:show-overflow-tooltip="true" />
......@@ -123,8 +123,8 @@
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-row>
<el-col :span="12">
<el-form-item label="用户昵称" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入用户昵称" maxlength="30" />
<el-form-item label="用户姓名" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入用户姓名" maxlength="30" />
</el-form-item>
</el-col>
<el-col :span="12">
......@@ -148,8 +148,8 @@
</el-row>
<el-row>
<el-col :span="12">
<el-form-item v-if="form.userId == undefined" label="用户名称" prop="userName">
<el-input v-model="form.userName" placeholder="请输入用户名称" maxlength="30" />
<el-form-item v-if="form.userId == undefined" label="统一账号" prop="userName">
<el-input v-model="form.userName" placeholder="请输入统一账号" maxlength="30" />
</el-form-item>
</el-col>
<el-col :span="12">
......@@ -312,8 +312,8 @@ export default {
// 列信息
columns: [
{ key: 0, label: `用户编号`, visible: true },
{ key: 1, label: `用户名称`, visible: true },
{ key: 2, label: `用户昵称`, visible: true },
{ key: 1, label: `统一账号`, visible: true },
{ key: 2, label: `用户姓名`, visible: true },
{ key: 3, label: `部门`, visible: true },
{ key: 4, label: `手机号码`, visible: true },
{ key: 5, label: `状态`, visible: true },
......@@ -322,11 +322,11 @@ export default {
// 表单校验
rules: {
userName: [
{ required: true, message: "用户名称不能为空", trigger: "blur" },
{ min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur' }
{ required: true, message: "统一账号不能为空", trigger: "blur" },
{ min: 2, max: 20, message: '统一账号长度必须介于 2 和 20 之间', trigger: 'blur' }
],
nickName: [
{ required: true, message: "用户昵称不能为空", trigger: "blur" }
{ required: true, message: "用户姓名不能为空", trigger: "blur" }
],
password: [
{ required: true, message: "用户密码不能为空", trigger: "blur" },
......
......@@ -12,7 +12,7 @@
</div>
<ul class="list-group list-group-striped">
<li class="list-group-item">
<svg-icon icon-class="user" />用户名称
<svg-icon icon-class="user" />统一账号
<div class="pull-right">{{ user.userName }}</div>
</li>
<li class="list-group-item">
......
<template>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="用户昵称" prop="nickName">
<el-form-item label="用户姓名" prop="nickName">
<el-input v-model="form.nickName" maxlength="30" />
</el-form-item>
<el-form-item label="手机号码" prop="phonenumber">
......@@ -37,7 +37,7 @@ export default {
// 表单校验
rules: {
nickName: [
{ required: true, message: "用户昵称不能为空", trigger: "blur" }
{ required: true, message: "用户姓名不能为空", trigger: "blur" }
],
email: [
{ required: true, message: "邮箱地址不能为空", trigger: "blur" },
......
......@@ -25,10 +25,15 @@
:style="{ color: scope.row.zlsl > 0 ? '#67C23A' : '#F56C6C', fontSize: '18px' }">
</i>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="资料数量" align="center" prop="zlsl" min-width="120" show-overflow-tooltip />
<el-table-column label="成果" align="center" prop="id" min-width="100" show-overflow-tooltip>
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)">查看成果</el-button>
<!-- <el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)">资料管理</el-button>
<el-button size="mini" type="text" icon="el-icon-user" @click="handleXmcyInfo(scope.row)">项目成员</el-button> -->
<el-button size="mini" type="text" icon="el-icon-user" @click="handleXmcyInfo(scope.row)">资料管理</el-button>
</template>
</el-table-column>
</el-table>
......@@ -95,19 +100,33 @@ export default {
}
})
},
/** 项目成员按钮操作 */
handleXmcyInfo(row) {
// 跳转到文件上传情况页面(包含项目成员功能),传id和项目角色
this.$router.push({
path: '/yscgWjscqk/wjscqk',
query: {
xmid: row.id,
xmjs: row.xmjs || null
}
})
},
/** 表格行合并方法 */
spanMethod({ row, column, rowIndex, columnIndex }) {
// 项目名称列(第0列)、区块列(第1列)和成果列(第3列)需要合并
if (columnIndex === 0 || columnIndex === 1 || columnIndex === 4) {
// 项目名称列(第0列)、区块列(第1列)和成果列(第5列)需要合并
if (columnIndex === 0 || columnIndex === 1 || columnIndex === 5) {
let fieldName, currentValue
if (columnIndex === 0) {
// 项目名称列根据xmmc合并
fieldName = 'xmmc'
currentValue = row[fieldName]
} else if (columnIndex === 1) {
fieldName = 'qk'
// 区块列根据qk合并
fieldName = 'xmmc'
currentValue = row[fieldName]
} else if (columnIndex === 4) {
} else if (columnIndex === 5) {
// 成果列根据id合并
fieldName = 'id'
currentValue = row[fieldName]
}
......
......@@ -55,10 +55,10 @@
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['ysqqXmxx:ysqqXmxx:add']">新增</el-button>
<el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
<!-- <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
v-hasPermi="['ysqqXmxx:ysqqXmxx:edit']">修改</el-button>
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
v-hasPermi="['ysqqXmxx:ysqqXmxx:remove']">删除</el-button>
v-hasPermi="['ysqqXmxx:ysqqXmxx:remove']">删除</el-button> -->
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
v-hasPermi="['ysqqXmxx:ysqqXmxx:export']">导出</el-button>
</el-form-item>
......@@ -73,8 +73,8 @@
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> -->
<el-table border v-loading="loading" :data="ysqqXmxxList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center" />
<!-- <el-table-column label="主键" align="center" prop="id" /> -->
<!-- <el-table-column type="selection" width="50" align="center" /> -->
<el-table-column label="序号" align="center" type="index"/>
<el-table-column label="项目名称" align="center" prop="xmmc" min-width="100" show-overflow-tooltip />
<el-table-column label="项目日期" align="center" prop="xmrq" min-width="100" show-overflow-tooltip />
<el-table-column label="区块" align="center" prop="qk" min-width="70" show-overflow-tooltip />
......@@ -100,44 +100,56 @@
<el-table-column label="备用2" align="center" prop="ext2" />
<el-table-column label="备用3" align="center" prop="ext3" /> -->
<!-- <el-table-column label="项目状态" align="center" prop="xmzt" /> -->
<el-table-column label="操作" min-width="200" align="center" class-name="small-padding fixed-width">
<el-table-column label="操作" min-width="260" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<!-- 未提交状态:显示所有操作按钮 -->
<template v-if="scope.row.xmzt === '未提交'">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['ysqqXmxx:ysqqXmxx:edit']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['ysqqXmxx:ysqqXmxx:remove']">删除</el-button>
<el-button size="mini" type="text" icon="el-icon-upload2" @click="handleSubmit(scope.row)"
v-hasPermi="['ysqqXmxx:ysqqXmxx:submit']">提交</el-button>
<!-- 判断是否为查看者 -->
<template v-if="isViewer(scope.row.xmjs)">
<!-- 查看者:只能查看 -->
<el-button size="mini" type="text" icon="el-icon-odometer" @click="handleJxxInfo(scope.row)">井信息</el-button>
<el-button size="mini" type="text" icon="el-icon-user" @click="handleXmcyInfo(scope.row)">项目成员</el-button>
<el-button size="mini" type="text" icon="el-icon-files"
@click="handleSegyInfo(scope.row)">segy信息</el-button>
<el-button size="mini" type="text" icon="el-icon-location"
@click="handleYsgcInfo(scope.row)">导航图</el-button>
</template>
<!-- 待验收状态:显示查看、修改、删除、井信息、segy信息和撤回按钮 -->
<template v-else-if="scope.row.xmzt === '待验收'">
<el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)">查看</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['ysqqXmxx:ysqqXmxx:edit']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['ysqqXmxx:ysqqXmxx:remove']">删除</el-button>
<el-button size="mini" type="text" icon="el-icon-odometer" @click="handleJxxInfo(scope.row)">井信息</el-button>
<el-button size="mini" type="text" icon="el-icon-files"
@click="handleSegyInfo(scope.row)">segy信息</el-button>
<el-button size="mini" type="text" icon="el-icon-back" @click="handleWithdraw(scope.row)"
v-hasPermi="['ysqqXmxx:ysqqXmxx:withdraw']">撤回</el-button>
<el-button size="mini" type="text" icon="el-icon-location"
@click="handleYsgcInfo(scope.row)">导航图</el-button>
</template>
<!-- 已验收和已归档状态:只显示查看按钮 -->
<!-- 管理者和协作者:根据项目状态显示不同操作 -->
<template v-else>
<el-button size="mini" type="text" icon="el-icon-odometer" @click="handleJxxInfo(scope.row)">井信息</el-button>
<el-button size="mini" type="text" icon="el-icon-files"
@click="handleSegyInfo(scope.row)">segy信息</el-button>
<el-button size="mini" type="text" icon="el-icon-location"
@click="handleYsgcInfo(scope.row)">导航图</el-button>
<!-- 未提交状态:显示所有操作按钮 -->
<template v-if="scope.row.xmzt === '未提交'">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['ysqqXmxx:ysqqXmxx:edit']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['ysqqXmxx:ysqqXmxx:remove']">删除</el-button>
<el-button size="mini" type="text" icon="el-icon-upload2" @click="handleSubmit(scope.row)"
v-hasPermi="['ysqqXmxx:ysqqXmxx:submit']">提交</el-button>
<el-button size="mini" type="text" icon="el-icon-odometer" @click="handleJxxInfo(scope.row)">井信息</el-button>
<el-button size="mini" type="text" icon="el-icon-user" @click="handleXmcyInfo(scope.row)">项目成员</el-button>
<el-button size="mini" type="text" icon="el-icon-files"
@click="handleSegyInfo(scope.row)">segy信息</el-button>
<el-button size="mini" type="text" icon="el-icon-location"
@click="handleYsgcInfo(scope.row)">导航图</el-button>
</template>
<!-- 待验收状态:显示查看、井信息、segy信息、撤回和导航图按钮 -->
<template v-else-if="scope.row.xmzt === '待验收'">
<el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)">查看</el-button>
<el-button size="mini" type="text" icon="el-icon-odometer" @click="handleJxxInfo(scope.row)">井信息</el-button>
<el-button size="mini" type="text" icon="el-icon-user" @click="handleXmcyInfo(scope.row)">项目成员</el-button>
<el-button size="mini" type="text" icon="el-icon-files"
@click="handleSegyInfo(scope.row)">segy信息</el-button>
<el-button size="mini" type="text" icon="el-icon-back" @click="handleWithdraw(scope.row)"
v-hasPermi="['ysqqXmxx:ysqqXmxx:submit']">撤回</el-button>
<el-button size="mini" type="text" icon="el-icon-location"
@click="handleYsgcInfo(scope.row)">导航图</el-button>
</template>
<!-- 已验收和已归档状态:只显示查看按钮 -->
<template v-else>
<el-button size="mini" type="text" icon="el-icon-odometer" @click="handleJxxInfo(scope.row)">井信息</el-button>
<el-button size="mini" type="text" icon="el-icon-user" @click="handleXmcyInfo(scope.row)">项目成员</el-button>
<el-button size="mini" type="text" icon="el-icon-files"
@click="handleSegyInfo(scope.row)">segy信息</el-button>
<el-button size="mini" type="text" icon="el-icon-location"
@click="handleYsgcInfo(scope.row)">导航图</el-button>
</template>
</template>
</template>
</el-table-column>
......@@ -247,7 +259,7 @@ import { listYsqqXmxx, getYsqqXmxx, delYsqqXmxx, addYsqqXmxx, updateYsqqXmxx, st
export default {
name: "YsqqXmxx",
dicts: ['ys_xmzt'],
dicts: ['ys_xmzt', 'xm_js'],
data() {
return {
// 遮罩层
......@@ -443,6 +455,16 @@ export default {
}
})
},
/** 项目成员按钮操作 */
handleXmcyInfo(row) {
this.$router.push({
path: '/ysqqXmxxXmcy/xmcy/index',
query: {
zbid: row.id,
xmjs: row.xmjs // 传递当前用户在该项目中的角色
}
})
},
/** segy信息按钮操作 */
handleSegyInfo(row) {
this.$router.push({
......@@ -492,6 +514,18 @@ export default {
this.getList()
this.$modal.msgSuccess("撤回成功")
}).catch(() => { })
},
/** 判断是否为查看者 */
isViewer(xmjs) {
if (!xmjs || !this.dict || !this.dict.type || !this.dict.type.xm_js) {
return false
}
// 查找字典中标签包含"查看者"的角色
const role = this.dict.type.xm_js.find(item => item.value === xmjs)
if (role && role.label.includes('查看者')) {
return true
}
return false
}
}
}
......
......@@ -46,13 +46,13 @@
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button v-if="projectStatus === '未提交' || projectStatus === '待验收'" type="primary" plain icon="el-icon-plus"
<el-button v-if="projectStatus === '未提交'" type="primary" plain icon="el-icon-plus"
size="mini" @click="handleAdd" v-hasPermi="['ysqqXmxxJxx:jxx:add']">新增</el-button>
<el-button type="success" plain icon="el-icon-edit" size="mini"
:disabled="single || (projectStatus !== '未提交' && projectStatus !== '待验收')" @click="handleUpdate"
:disabled="single || projectStatus !== '未提交'" @click="handleUpdate"
v-hasPermi="['ysqqXmxxJxx:jxx:edit']">修改</el-button>
<el-button type="danger" plain icon="el-icon-delete" size="mini"
:disabled="multiple || (projectStatus !== '未提交' && projectStatus !== '待验收')" @click="handleDelete"
:disabled="multiple || projectStatus !== '未提交'" @click="handleDelete"
v-hasPermi="['ysqqXmxxJxx:jxx:remove']">删除</el-button>
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
v-hasPermi="['ysqqXmxxJxx:jxx:export']">导出</el-button>
......@@ -89,16 +89,16 @@
<el-table-column label="备用3" align="center" prop="ext3" /> -->
<el-table-column label="操作" min-width="100" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<!-- 未提交和待验收状态:显示修改和删除按钮 -->
<template v-if="projectStatus === '未提交' || projectStatus === '待验收'">
<!-- 未提交状态:显示修改和删除按钮 -->
<template v-if="projectStatus === '未提交'">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['ysqqXmxxJxx:jxx:edit']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['ysqqXmxxJxx:jxx:remove']">删除</el-button>
</template>
<!-- 其他状态(已验收、已归档):只显示查看按钮 -->
<!-- 其他状态(待验收、已验收、已归档):只显示查看按钮 -->
<template v-else>
<el-button size="mini" type="text" icon="el-icon-view" @click="handleUpdate(scope.row)">查看</el-button>
<el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)">查看</el-button>
</template>
</template>
</el-table-column>
......@@ -264,21 +264,26 @@ export default {
this.open = true
this.title = "添加验收前期-项目信息-井信息"
},
/** 修改/查看按钮操作 */
/** 修改按钮操作 */
handleUpdate(row) {
this.reset()
const id = row.id || this.ids
getJxx(id).then(response => {
this.form = response.data
this.open = true
// 根据项目状态决定是查看还是修改
if (this.projectStatus === '未提交' || this.projectStatus === '待验收') {
this.title = "修改验收前期-项目信息-井信息"
this.isReadOnly = false
} else {
this.title = "查看验收前期-项目信息-井信息"
this.isReadOnly = true
}
this.title = "修改验收前期-项目信息-井信息"
this.isReadOnly = false
})
},
/** 查看按钮操作 */
handleView(row) {
this.reset()
const id = row.id || this.ids
getJxx(id).then(response => {
this.form = response.data
this.open = true
this.title = "查看验收前期-项目信息-井信息"
this.isReadOnly = true
})
},
/** 提交按钮 */
......
......@@ -59,13 +59,13 @@
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button v-if="projectStatus === '未提交' || projectStatus === '待验收'" type="primary" plain icon="el-icon-plus"
<el-button v-if="projectStatus === '未提交'" type="primary" plain icon="el-icon-plus"
size="mini" @click="handleAdd" v-hasPermi="['ysqqXmxxSegy:segy:add']">新增</el-button>
<el-button type="success" plain icon="el-icon-edit" size="mini"
:disabled="single || (projectStatus !== '未提交' && projectStatus !== '待验收')" @click="handleUpdate"
:disabled="single || projectStatus !== '未提交'" @click="handleUpdate"
v-hasPermi="['ysqqXmxxSegy:segy:edit']">修改</el-button>
<el-button type="danger" plain icon="el-icon-delete" size="mini"
:disabled="multiple || (projectStatus !== '未提交' && projectStatus !== '待验收')" @click="handleDelete"
:disabled="multiple || projectStatus !== '未提交'" @click="handleDelete"
v-hasPermi="['ysqqXmxxSegy:segy:remove']">删除</el-button>
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
v-hasPermi="['ysqqXmxxSegy:segy:export']">导出</el-button>
......@@ -103,16 +103,16 @@
<el-table-column label="备用3" align="center" prop="ext3" /> -->
<el-table-column label="操作" min-width="100" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<!-- 未提交和待验收状态:显示修改和删除按钮 -->
<template v-if="projectStatus === '未提交' || projectStatus === '待验收'">
<!-- 未提交状态:显示修改和删除按钮 -->
<template v-if="projectStatus === '未提交'">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['ysqqXmxxSegy:segy:edit']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['ysqqXmxxSegy:segy:remove']">删除</el-button>
</template>
<!-- 其他状态(已验收、已归档):只显示查看按钮 -->
<!-- 其他状态(待验收、已验收、已归档):只显示查看按钮 -->
<template v-else>
<el-button size="mini" type="text" icon="el-icon-view" @click="handleUpdate(scope.row)">查看</el-button>
<el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)">查看</el-button>
</template>
</template>
</el-table-column>
......@@ -319,7 +319,7 @@ export default {
this.open = true
this.title = "添加segy信息"
},
/** 修改/查看按钮操作 */
/** 修改按钮操作 */
handleUpdate(row) {
this.reset()
const id = row.id || this.ids
......@@ -344,14 +344,37 @@ export default {
}
this.open = true
// 根据项目状态决定是查看还是修改
if (this.projectStatus === '未提交' || this.projectStatus === '待验收') {
this.title = "修改segy信息"
this.isReadOnly = false
} else {
this.title = "查看segy信息"
this.isReadOnly = true
this.title = "修改segy信息"
this.isReadOnly = false
})
},
/** 查看按钮操作 */
handleView(row) {
this.reset()
const id = row.id || this.ids
getSegy(id).then(response => {
this.form = response.data
// 设置文件列表,显示已上传的文件
if (this.form.jbsegy) {
this.jbsegyFileList = [{
name: this.form.jbsegyName || this.getFileNameFromPath(this.form.jbsegy),
url: this.form.jbsegy,
status: 'success'
}]
}
if (this.form.xbsegy) {
this.xbsegyFileList = [{
name: this.form.xbsegyName || this.getFileNameFromPath(this.form.xbsegy),
url: this.form.xbsegy,
status: 'success'
}]
}
this.open = true
this.title = "查看segy信息"
this.isReadOnly = true
})
},
/** 提交按钮 */
......
<!-- 资料查询 -->
<template>
<div class="app-container">
<!-- start: 查询条件 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="文件名称" prop="wjmc">
<el-input v-model="queryParams.wjmc" placeholder="请输入文件名称" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="资料类型" prop="zllx">
<el-select v-model="queryParams.zllx" placeholder="请选择资料类型" clearable>
<el-option
v-for="item in zllxOptions"
:key="item.id"
:label="item.lxmc"
:value="item.lxmc">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="项目名称" prop="xmmc">
<el-input v-model="queryParams.xmmc" placeholder="请输入项目名称" clearable @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- end: 查询条件 -->
<!-- start: 数据表格 -->
<el-table border v-loading="loading" :data="zlcxList">
<el-table-column label="项目名称" align="center" prop="xmmc" min-width="150" show-overflow-tooltip />
<el-table-column label="文件名称" align="center" prop="wjmc" min-width="200" show-overflow-tooltip>
<template slot-scope="scope">
<el-button type="text" @click="handleDownload(scope.row)" style="padding: 0; color: #409EFF;">
{{ scope.row.wjmc }}
</el-button>
</template>
</el-table-column>
<el-table-column label="资料类型" align="center" prop="zllx" min-width="120" show-overflow-tooltip />
<el-table-column label="上传时间" align="center" prop="createdTime" min-width="170" show-overflow-tooltip />
<el-table-column label="修改时间" align="center" prop="updateTime" min-width="170" show-overflow-tooltip />
</el-table>
<!-- end: 数据表格 -->
<!-- start: 分页 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
@pagination="getList" />
<!-- end: 分页 -->
</div>
</template>
<script>
import { listZlcx } from "@/api/zlcx/zlcx"
import { selectZllx } from "@/api/yscgZllx/zllx"
export default {
name: 'ZlcxIndex',
data() {
return {
// 遮罩层
loading: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 资料查询表格数据
zlcxList: [],
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
wjmc: null,
zllx: null,
xmmc: null
},
// 资料类型选项
zllxOptions: []
}
},
created() {
// 初始化资料类型选项
this.getZllxOptions()
// 获取列表数据
this.getList()
},
methods: {
/** 查询资料列表 */
getList() {
this.loading = true
listZlcx(this.queryParams).then(response => {
this.zlcxList = response.rows || []
this.total = response.total || 0
this.loading = false
}).catch(() => {
this.loading = false
})
},
/** 获取资料类型选项 */
getZllxOptions() {
selectZllx().then(response => {
this.zllxOptions = response.rows || []
})
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1
this.getList()
},
/** 重置按钮操作 */
resetQuery() {
this.queryParams = {
pageNum: 1,
pageSize: 10,
wjmc: null,
zllx: null,
xmmc: null
}
this.handleQuery()
},
/** 下载文件 */
handleDownload(row) {
// 检查是否有文件链接
if (!row.wjlj) {
this.$modal.msgWarning('该文件没有下载链接')
return
}
// 处理多个文件的情况(逗号分隔)
const fileNames = row.wjmc ? String(row.wjmc).split(',').filter(Boolean) : []
const fileLinks = String(row.wjlj).split(',').filter(Boolean)
if (fileLinks.length === 0) {
this.$modal.msgWarning('该文件没有下载链接')
return
}
// 如果只有一个文件,直接下载
if (fileLinks.length === 1) {
this.downloadFile(fileLinks[0], fileNames[0] || '文件')
return
}
// 如果有多个文件,显示选择列表
const fileOptions = fileLinks.map((link, index) => {
return {
name: fileNames[index] || `文件${index + 1}`,
link: link
}
})
// 使用MessageBox选择要下载的文件
const h = this.$createElement
const fileListHtml = fileOptions.map((file, index) => {
return h('div', {
style: {
padding: '8px 0',
cursor: 'pointer',
color: '#409EFF'
},
on: {
click: () => {
this.downloadFile(file.link, file.name)
this.$msgbox.close()
}
}
}, file.name)
})
this.$msgbox({
title: '请选择要下载的文件',
message: h('div', null, fileListHtml),
showCancelButton: false,
confirmButtonText: '取消'
}).catch(() => {})
},
/** 执行文件下载 */
downloadFile(url, fileName) {
if (!url) {
this.$modal.msgWarning('文件链接无效')
return
}
// 如果wjlj是文件名(不含路径),使用download插件
// 如果wjlj是完整路径,直接下载
if (url.includes('/') || url.startsWith('http')) {
// 完整路径,创建a标签进行下载
const link = document.createElement('a')
link.style.display = 'none'
const fullUrl = url.startsWith('http') ? url : (process.env.VUE_APP_BASE_API + url)
link.href = fullUrl
link.setAttribute('download', fileName)
link.setAttribute('target', '_blank')
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
this.$modal.msgSuccess('开始下载文件')
} else {
// 文件名,使用下载插件
this.$download.name(url)
}
}
}
}
</script>
<style lang="scss" scoped>
</style>
"use strict";
const path = require("path");
'use strict'
const path = require('path')
function resolve(dir) {
return path.join(__dirname, dir);
return path.join(__dirname, dir)
}
const CompressionPlugin = require("compression-webpack-plugin");
const CompressionPlugin = require('compression-webpack-plugin')
const name = process.env.VUE_APP_TITLE || "系统"; // 网页标题
const name = process.env.VUE_APP_TITLE || '地震资料处理数字化验收支持平台' // 网页标题
const baseUrl = "http://localhost:8080"; // 后端接口
const baseUrl = 'http://localhost:8080' // 后端接口
const port = process.env.port || process.env.npm_config_port || 80; // 端口
const port = process.env.port || process.env.npm_config_port || 80 // 端口
// vue.config.js 配置说明
//官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions
......@@ -20,34 +20,35 @@ module.exports = {
// 部署生产环境和开发环境下的URL。
// 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上
// 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。
publicPath: process.env.NODE_ENV === "production" ? "/" : "/",
publicPath: process.env.NODE_ENV === 'production' ? '/' : '/',
// 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist)
outputDir: "dist",
outputDir: 'dist',
// 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下)
assetsDir: "static",
assetsDir: 'static',
// 是否开启eslint保存检测,有效值:ture | false | 'error'
lintOnSave: process.env.NODE_ENV === "development",
lintOnSave: process.env.NODE_ENV === 'development',
// 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。
productionSourceMap: false,
transpileDependencies: ["quill", "@jsonforms/core", "jsonforms-vue"],
transpileDependencies: ['quill', '@jsonforms/core', 'jsonforms-vue'],
// webpack-dev-server 相关配置
devServer: {
host: "0.0.0.0",
host: '0.0.0.0',
port: port,
open: true,
proxy: {
// detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_BASE_API]: {
// target: `http://localhost:8999`,
// target: `http://192.168.31.108:8999`,
target: `http://192.168.110.69:8999`,
target: `http://192.168.31.12:8999`,
// target: `http://192.168.31.12:8999`,
changeOrigin: true,
pathRewrite: {
["^" + process.env.VUE_APP_BASE_API]: "",
['^' + process.env.VUE_APP_BASE_API]: '',
},
},
// springdoc proxy
"^/v3/api-docs/(.*)": {
'^/v3/api-docs/(.*)': {
target: baseUrl,
changeOrigin: true,
},
......@@ -57,7 +58,7 @@ module.exports = {
css: {
loaderOptions: {
sass: {
sassOptions: { outputStyle: "expanded" },
sassOptions: { outputStyle: 'expanded' },
},
},
},
......@@ -65,7 +66,7 @@ module.exports = {
name: name,
resolve: {
alias: {
"@": resolve("src"),
'@': resolve('src'),
},
},
plugins: [
......@@ -73,67 +74,67 @@ module.exports = {
new CompressionPlugin({
cache: false, // 不启用文件缓存
test: /\.(js|css|html|jpe?g|png|gif|svg)?$/i, // 压缩文件格式
filename: "[path][base].gz[query]", // 压缩后的文件名
algorithm: "gzip", // 使用gzip压缩
filename: '[path][base].gz[query]', // 压缩后的文件名
algorithm: 'gzip', // 使用gzip压缩
minRatio: 0.8, // 压缩比例,小于 80% 的文件不会被压缩
deleteOriginalAssets: false, // 压缩后删除原文件
}),
],
},
chainWebpack(config) {
config.plugins.delete("preload"); // TODO: need test
config.plugins.delete("prefetch"); // TODO: need test
config.plugins.delete('preload') // TODO: need test
config.plugins.delete('prefetch') // TODO: need test
// set svg-sprite-loader
config.module.rule("svg").exclude.add(resolve("src/assets/icons")).end();
config.module.rule('svg').exclude.add(resolve('src/assets/icons')).end()
config.module
.rule("icons")
.rule('icons')
.test(/\.svg$/)
.include.add(resolve("src/assets/icons"))
.include.add(resolve('src/assets/icons'))
.end()
.use("svg-sprite-loader")
.loader("svg-sprite-loader")
.use('svg-sprite-loader')
.loader('svg-sprite-loader')
.options({
symbolId: "icon-[name]",
symbolId: 'icon-[name]',
})
.end();
.end()
config.when(process.env.NODE_ENV !== "development", (config) => {
config.when(process.env.NODE_ENV !== 'development', (config) => {
config
.plugin("ScriptExtHtmlWebpackPlugin")
.after("html")
.use("script-ext-html-webpack-plugin", [
.plugin('ScriptExtHtmlWebpackPlugin')
.after('html')
.use('script-ext-html-webpack-plugin', [
{
// `runtime` must same as runtimeChunk name. default is `runtime`
inline: /runtime\..*\.js$/,
},
])
.end();
.end()
config.optimization.splitChunks({
chunks: "all",
chunks: 'all',
cacheGroups: {
libs: {
name: "chunk-libs",
name: 'chunk-libs',
test: /[\\/]node_modules[\\/]/,
priority: 10,
chunks: "initial", // only package third parties that are initially dependent
chunks: 'initial', // only package third parties that are initially dependent
},
elementUI: {
name: "chunk-elementUI", // split elementUI into a single package
name: 'chunk-elementUI', // split elementUI into a single package
test: /[\\/]node_modules[\\/]_?element-ui(.*)/, // in order to adapt to cnpm
priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
},
commons: {
name: "chunk-commons",
test: resolve("src/components"), // can customize your rules
name: 'chunk-commons',
test: resolve('src/components'), // can customize your rules
minChunks: 3, // minimum common number
priority: 5,
reuseExistingChunk: true,
},
},
});
config.optimization.runtimeChunk("single");
});
})
config.optimization.runtimeChunk('single')
})
},
};
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment