Compare commits
No commits in common. 'main' and 'dev' have entirely different histories.
28 changed files with 75 additions and 1707 deletions
@ -1,105 +0,0 @@ |
||||
import {request, request_ip} from "@/request/index.js"; |
||||
|
||||
|
||||
// 获取项目列表
|
||||
export const project_list = () => { |
||||
// console.log('project_list')
|
||||
return request({ |
||||
url: '/prd/project_list', |
||||
method: 'get' |
||||
}) |
||||
} |
||||
|
||||
// 获取产品版本列表
|
||||
export const prd_list = (page_num, page_size, project = '') => { |
||||
// console.log('prd_list')
|
||||
return request({ |
||||
url: '/prd/prd_list', |
||||
method: 'get', |
||||
params: { |
||||
page: page_num, |
||||
page_size: page_size, |
||||
project: project |
||||
} |
||||
}) |
||||
} |
||||
|
||||
|
||||
// 添加产品版本
|
||||
export const prd_add = (params) => { |
||||
// console.log('prd_add')
|
||||
const req_data = JSON.stringify({ |
||||
project: params['project'], |
||||
prd_version: params['prd_version'], |
||||
prd_doc_link: params['prd_doc_link'], |
||||
prd_comment: params['prd_comment'], |
||||
is_delete: params['is_delete'], |
||||
}) |
||||
return request({ |
||||
url: `/prd/prd_add`, |
||||
method: 'post', |
||||
data: req_data, |
||||
}) |
||||
} |
||||
|
||||
|
||||
// 获取产品版本列表
|
||||
export const prd_get = (id) => { |
||||
// console.log('prd_get')
|
||||
return request({ |
||||
url: `/prd/prd_list/${id}/`, |
||||
method: 'get', |
||||
}) |
||||
} |
||||
|
||||
|
||||
// 更新产品版本
|
||||
export const prd_update = (params, id) => { |
||||
// console.log('prd_update')
|
||||
const req_data = JSON.stringify({ |
||||
project: params['project'], |
||||
prd_version: params['prd_version'], |
||||
prd_doc_link: params['prd_doc_link'], |
||||
prd_comment: params['prd_comment'], |
||||
is_delete: params['is_delete'], |
||||
}) |
||||
return request({ |
||||
url: `/prd/prd_update/${id}/`, |
||||
method: 'put', |
||||
data: req_data, |
||||
}) |
||||
} |
||||
|
||||
// 删除产品版本
|
||||
export const prd_delete = (id) => { |
||||
// console.log('prd_delete')
|
||||
return request({ |
||||
url: `/prd/prd_delete/${id}/`, |
||||
method: 'delete', |
||||
}) |
||||
} |
||||
|
||||
// 获取历史数据
|
||||
export const prd_history = (id) => { |
||||
return request({ |
||||
url: `/prd/prd_history`, |
||||
method: 'get', |
||||
params: { |
||||
prd_id: id, |
||||
} |
||||
}) |
||||
} |
||||
|
||||
// 获取产品版本列表
|
||||
export const prd_list_ax_cloud = (page_num, page_size, project = '') => { |
||||
// console.log('prd_list')
|
||||
return request({ |
||||
url: '/prd/prd_list/ax_cloud', |
||||
method: 'get', |
||||
params: { |
||||
page: page_num, |
||||
page_size: page_size, |
||||
project: project |
||||
} |
||||
}) |
||||
} |
@ -1,150 +0,0 @@ |
||||
<script setup> |
||||
import {ref, reactive, computed, watch, onMounted, onBeforeMount} from 'vue' |
||||
import {ec_api_set_user_data, ec_api_clear_user_data} from '@/apis/ec_api.js' |
||||
import {ElMessage} from "element-plus"; |
||||
|
||||
// 接收TabArea组件传递的参数 |
||||
const props = defineProps(['level', 'data', 'base_info']) |
||||
|
||||
// 定义用户选择的场次变量 |
||||
const selectLevel = ref('') |
||||
const levelList = reactive([]) |
||||
|
||||
// 处理用户选择的数据 |
||||
async function handle_set_user_data() { |
||||
let selectLevelData = {} |
||||
props.level.forEach((item) => { |
||||
if (item['levelId'] === selectLevel.value) { |
||||
selectLevelData = item |
||||
} |
||||
}) |
||||
const req_data = { |
||||
api: props.data.path, |
||||
member_type: props.data.type, |
||||
format: props.data.format, |
||||
user_data: JSON.stringify(selectLevelData), |
||||
env: props.base_info.env, |
||||
cid: props.base_info.cinema, |
||||
pid: props.base_info.channel, |
||||
} |
||||
console.log('handle_set_user_data', req_data) |
||||
await ec_api_set_user_data(req_data).then( |
||||
(req) => { |
||||
if (req['result'] === 'success') { |
||||
ElMessage({message: '选择的卡级别已做为后续测试数据!', type: 'success'}) |
||||
} else { |
||||
ElMessage({message: '设置用户选择卡级别数据失败!', type: 'error'}) |
||||
} |
||||
} |
||||
).catch( |
||||
(err) => { |
||||
console.log(err) |
||||
ElMessage({message: '设置用户选择卡级别数据失败!', type: 'error'}) |
||||
} |
||||
) |
||||
} |
||||
|
||||
async function handle_clear_user_data() { |
||||
const req_data = { |
||||
api: props.data.path, |
||||
member_type: props.data.type, |
||||
env: props.base_info.env, |
||||
cid: props.base_info.cinema, |
||||
pid: props.base_info.channel, |
||||
} |
||||
console.log('handle_clear_user_data', req_data) |
||||
await ec_api_clear_user_data(req_data).then( |
||||
(req) => { |
||||
if (req['result'] === 'success') { |
||||
ElMessage({message: '选择的联名卡级别已清除,推荐参数将使用随机值!', type: 'success'}) |
||||
} else { |
||||
ElMessage({message: '清除用户选择联名卡级别数据失败!', type: 'error'}) |
||||
} |
||||
} |
||||
).catch( |
||||
(err) => { |
||||
console.log(err) |
||||
ElMessage({message: '清除用户选择联名卡级别数据失败!', type: 'error'}) |
||||
} |
||||
) |
||||
} |
||||
|
||||
onBeforeMount(() => { |
||||
console.log('CardLevel onBeforeMount') |
||||
console.log(props.level) |
||||
// 挂载时生成用于展示的数据源 |
||||
props.level.forEach((item) => { |
||||
levelList.push({ |
||||
key: item['levelId'], |
||||
name: item['levelName'], |
||||
fee: item['initMoney'], |
||||
type: item['typeDesc'], |
||||
ticket_discount: `${item['ticketDiscount']}%`, |
||||
online: item['enableOnlineIssue'], |
||||
data: item |
||||
}) |
||||
}) |
||||
console.log(levelList) |
||||
}) |
||||
|
||||
|
||||
watch(() => selectLevel.value, () => { |
||||
console.log('selectLevel.value', selectLevel.value) |
||||
handle_set_user_data() |
||||
}) |
||||
|
||||
</script> |
||||
|
||||
<template> |
||||
<hr id="break_line"/> |
||||
<div style="font-size: 16px; font-weight: bold; color: #909399; text-align: left; margin-bottom: 10px">选择场次: |
||||
<el-tooltip |
||||
class="box-item" |
||||
effect="dark" |
||||
content="点击清除选择后会将后台服务器中记录的选择内容清空,其他接口将通过随机获取的方式从此接口返回的数据中模拟参数" |
||||
placement="right" |
||||
> |
||||
<el-button size="small" style="font-weight: bold;color: #909399" @click="handle_clear_user_data">清除选择 |
||||
</el-button> |
||||
</el-tooltip> |
||||
</div> |
||||
<el-form style="max-width: 600px; margin-left: 20px"> |
||||
<el-form-item> |
||||
<el-radio-group v-model="selectLevel"> |
||||
<el-radio-button v-for="s in levelList" :label="s.key" :value="s.key" :key="s.key"> |
||||
<div style="text-align: left"> |
||||
<div style="margin-top: 5px"><span>{{ s.key }}</span> -- <span style="font-weight: bold">{{ s.name }}</span> -- <span>{{s.type}}</span><span v-if="s.online=== '1'"> -- </span><span style="font-weight: bold">{{s.online === '1' ? '支持线上开': ''}}</span> |
||||
</div> |
||||
<div style="margin-top: 5px"><span>开卡费 {{ s.fee }} 元 </span><span>    {{s.renew}}</span></div> |
||||
</div> |
||||
</el-radio-button> |
||||
</el-radio-group> |
||||
</el-form-item> |
||||
</el-form> |
||||
</template> |
||||
|
||||
<style scoped> |
||||
#break_line { |
||||
margin-top: 30px; |
||||
margin-bottom: 30px; |
||||
background-color: rgba(144, 147, 153, 0.5); |
||||
height: 1px; |
||||
border: none |
||||
} |
||||
|
||||
:deep(.el-radio-button) { |
||||
margin-bottom: 10px; |
||||
margin-right: 15px; |
||||
|
||||
} |
||||
|
||||
:deep(.el-radio-button__inner) { |
||||
width: 400px; |
||||
height: 60px; |
||||
background: #ebebeb; |
||||
color: #333; |
||||
border: 0 !important; |
||||
border-radius: 10px !important; |
||||
} |
||||
|
||||
</style> |
@ -1,25 +0,0 @@ |
||||
<script setup> |
||||
import {ref, watch} from 'vue' |
||||
|
||||
const pwd = ref('123321') |
||||
|
||||
const emits = defineEmits(['get_card_pwd']) |
||||
|
||||
watch(() => pwd.value, () => { |
||||
console.log(pwd.value) |
||||
emits("getCardPwd", pwd.value) |
||||
}) |
||||
</script> |
||||
|
||||
<template> |
||||
<el-row style="margin: 20px 0 20px 0"> |
||||
<el-col :span="2"><label style="font-size: 14px; margin-left: 20px">会员卡密码:</label></el-col> |
||||
<el-col :span="7"> |
||||
<el-input style="margin-left: 20px" size="small" v-model="pwd"></el-input> |
||||
</el-col> |
||||
</el-row> |
||||
</template> |
||||
|
||||
<style scoped> |
||||
|
||||
</style> |
@ -1,192 +0,0 @@ |
||||
<script setup> |
||||
import {ref, watch} from 'vue' |
||||
import {ElMessageBox} from "element-plus"; |
||||
|
||||
// 定义props |
||||
const props = defineProps(['type']) |
||||
|
||||
// 定义emits |
||||
const emits = defineEmits(["getSaleType", "getPriceType"]) |
||||
|
||||
// 定义选择项 |
||||
const selectSaleType = props.type === 'goods' ? ref('goods') : ref('ticket') |
||||
const selectPriceType = ref("cinema_price") |
||||
const ticketPrice = ref('20.00') |
||||
const haveServiceFee = ref(true) |
||||
const ticketQuanCheck = ref(false) |
||||
const ticketQuanNum = ref('0') |
||||
const ticketQuanValue = ref('0.00') |
||||
const ticketQuanType = ref('兑换券') |
||||
const ticketQuanTypeOptions = ref([{value: '兑换券', label: '兑换券'},{value: '抵值兑换券', label: '抵值兑换券'}, {value: '代金券', label: '代金券'}]) |
||||
const goodsQuanCheck = ref(false) |
||||
const goodsQuanNum = ref('0') |
||||
const goodsQuanValue = ref('0.00') |
||||
const goodsQuanType = ref('兑换券') |
||||
const goodsQuanTypeOptions = ref([{value: '兑换券', label: '兑换券'},{value: '抵值兑换券', label: '抵值兑换券'}, {value: '代金券', label: '代金券'}]) |
||||
|
||||
const containTicket = ["ticket", "all"] |
||||
const containGoods = ["goods", "all"] |
||||
|
||||
|
||||
// 检查售卖类型的变化 |
||||
watch(() => selectSaleType.value, () => { |
||||
emits("getSaleType", selectSaleType.value) |
||||
}) |
||||
|
||||
watch(() => ticketQuanCheck.value, () => { |
||||
if (ticketQuanCheck.value) { |
||||
console.log("ticketQuanCheck.value", ticketQuanCheck.value, ticketQuanNum.value, ticketQuanValue.value) |
||||
if (ticketQuanNum.value === 0 || ticketQuanValue.value === 0) { |
||||
ElMessageBox.alert('请设置影票券数量和面值!', "影票券", { |
||||
confirmButtonText: '知道了', |
||||
callback: () => { |
||||
ticketQuanCheck.value = false |
||||
} |
||||
}) |
||||
} |
||||
} |
||||
}) |
||||
|
||||
watch(() => goodsQuanCheck.value, () => { |
||||
if (goodsQuanCheck.value) { |
||||
console.log("goodsQuanCheck.value", goodsQuanCheck.value, goodsQuanNum.value, goodsQuanValue.value) |
||||
if (goodsQuanNum.value === 0 || goodsQuanValue.value === 0) { |
||||
ElMessageBox.alert('请设置卖品券数量和面值!', "卖品券", { |
||||
confirmButtonText: '知道了', |
||||
callback: () => { |
||||
goodsQuanCheck.value = false |
||||
} |
||||
}) |
||||
} |
||||
} |
||||
}) |
||||
|
||||
// 检查检查定价方式的变化 |
||||
watch(() => [selectPriceType.value, haveServiceFee.value, ticketPrice.value, ticketQuanCheck.value, ticketQuanNum.value, ticketQuanValue.value, goodsQuanCheck.value, goodsQuanNum.value, goodsQuanValue.value, goodsQuanType.value, ticketQuanType.value], () => { |
||||
emits("getPriceType", { |
||||
select_price_type: selectPriceType.value, |
||||
ticket_info: { |
||||
ticket_price: ticketPrice.value, |
||||
have_service_fee: haveServiceFee.value, |
||||
}, |
||||
ticket_quan_check: ticketQuanCheck.value, |
||||
ticket_quan: { |
||||
ticket_quan_num: ticketQuanNum.value, |
||||
ticket_quan_value: ticketQuanValue.value, |
||||
ticket_quan_type: ticketQuanType.value, |
||||
}, |
||||
goods_quan_check: goodsQuanCheck.value, |
||||
goods_quan: { |
||||
goods_quan_num: goodsQuanNum.value, |
||||
goods_quan_value: goodsQuanValue.value, |
||||
goods_quan_type: goodsQuanType.value, |
||||
} |
||||
}) |
||||
}) |
||||
|
||||
</script> |
||||
|
||||
<template> |
||||
<el-row type="flex" justify="start" align="middle" style="margin: 20px 0 10px 20px"> |
||||
<el-col :span="1" style="font-size: 14px; font-weight: bold; color: #919399;" class="col-right">售卖类型</el-col> |
||||
<el-col :span="6" class="col-left"> |
||||
<el-radio-group v-model="selectSaleType"> |
||||
<el-radio label="ticket" v-if="props['type'] === 'ticket'">单影票</el-radio> |
||||
<el-radio label="goods" v-if="props['type'] === 'goods'">单卖品</el-radio> |
||||
<el-radio label="all" v-if="props['type'] === 'ticket'">影票加卖品</el-radio> |
||||
</el-radio-group> |
||||
</el-col> |
||||
</el-row> |
||||
<el-row type="flex" justify="start" align="middle" style="margin: 0 0 10px 20px"> |
||||
<el-col :span="1" style="font-size: 14px; font-weight: bold; color: #919399;" class="col-right">定价方式</el-col> |
||||
<el-col :span="7" class="col-left"> |
||||
<el-radio-group v-model="selectPriceType"> |
||||
<el-radio label="cinema_price">影院定价</el-radio> |
||||
<el-radio label="third_price">三方定价</el-radio> |
||||
</el-radio-group> |
||||
</el-col> |
||||
</el-row> |
||||
<el-row v-if="selectPriceType === 'third_price'" type="flex" justify="start" align="middle" style="margin: 0 0 0 20px"> |
||||
<el-col :span="1" style="font-size: 14px; font-weight: bold; color: #919399;" class="col-right">三方定价</el-col> |
||||
|
||||
<el-col v-if="containTicket.includes(selectSaleType)" :span="8" class="col-left"> |
||||
<span style="font-size: 14px">单张影票结算价:</span> |
||||
<el-input-number v-model="ticketPrice" :min="0.01" :max="99999.99" :step="0.01" |
||||
controls-position="right" size="small"></el-input-number> |
||||
<el-checkbox v-model="haveServiceFee" style="margin-left: 20px">是否包含服务费</el-checkbox> |
||||
</el-col> |
||||
</el-row> |
||||
<el-row v-if="selectPriceType === 'third_price' && containTicket.includes(selectSaleType)" type="flex" justify="start" align="middle" style="margin: 0 0 0 20px"> |
||||
<el-col :span="1" style="font-size: 14px; font-weight: bold; color: #919399;" class="col-right"></el-col> |
||||
<el-col :span="15" class="col-left"> |
||||
<span>影票券:</span> |
||||
<el-input-number v-model="ticketQuanNum" :min="0" :max="10" :step="1" |
||||
controls-position="right" size="small"></el-input-number> |
||||
<span> 张,价值 </span> |
||||
<el-input-number v-model="ticketQuanValue" :min="0.00" :max="99999.99" :step="0.01" |
||||
controls-position="right" size="small"></el-input-number> |
||||
<span> 元</span> |
||||
<span style="margin-left: 20px">券类型 </span> |
||||
<el-select |
||||
v-model="ticketQuanType" |
||||
placeholder="请选择" |
||||
size="small" |
||||
style="width: 120px" |
||||
> |
||||
<el-option |
||||
v-for="item in ticketQuanTypeOptions" |
||||
:key="item.value" |
||||
:label="item.label" |
||||
:value="item.value" |
||||
/> |
||||
</el-select> |
||||
<el-checkbox v-model="ticketQuanCheck" style="margin-left: 20px">使用影票券</el-checkbox> |
||||
</el-col> |
||||
</el-row> |
||||
<el-row v-if="selectPriceType === 'third_price' && containGoods.includes(selectSaleType)" type="flex" justify="start" align="middle" style="margin: 0 0 30px 20px"> |
||||
<el-col :span="1" style="font-size: 14px; font-weight: bold; color: #919399;" class="col-right"></el-col> |
||||
<el-col :span="15" class="col-left"> |
||||
<span>卖品券:</span> |
||||
<el-input-number v-model="goodsQuanNum" :min="0" :max="10" :step="1" |
||||
controls-position="right" size="small"></el-input-number> |
||||
<span> 张,价值 </span> |
||||
<el-input-number v-model="goodsQuanValue" :min="0.00" :max="99999.99" :step="0.01" |
||||
controls-position="right" size="small"></el-input-number> |
||||
<span> 元</span> |
||||
<span style="margin-left: 20px">券类型 </span> |
||||
<el-select |
||||
v-model="goodsQuanType" |
||||
placeholder="请选择" |
||||
size="small" |
||||
style="width: 120px" |
||||
> |
||||
<el-option |
||||
v-for="item in goodsQuanTypeOptions" |
||||
:key="item.value" |
||||
:label="item.label" |
||||
:value="item.value" |
||||
/> |
||||
</el-select> |
||||
<el-checkbox v-model="goodsQuanCheck" style="margin-left: 20px">使用卖品券</el-checkbox> |
||||
</el-col> |
||||
</el-row> |
||||
</template> |
||||
|
||||
<style scoped> |
||||
.col-right { |
||||
display: flex; |
||||
justify-content: end; |
||||
align-items: center; |
||||
height: 100%; |
||||
} |
||||
|
||||
.col-left { |
||||
display: flex; |
||||
justify-content: start; |
||||
align-items: center; |
||||
height: 100%; |
||||
margin-left: 20px; |
||||
font-size: 14px; |
||||
} |
||||
|
||||
</style> |
@ -1,203 +0,0 @@ |
||||
<script setup> |
||||
import {onBeforeMount, onMounted, onBeforeUnmount, reactive, ref, unref, computed} from 'vue'; |
||||
import {useStore, mapGetters, mapState} from "vuex"; |
||||
import { |
||||
project_list, |
||||
prd_list, |
||||
prd_add, |
||||
prd_get, |
||||
prd_update, |
||||
prd_delete, |
||||
prd_history, |
||||
prd_list_ax_cloud |
||||
} from "@/apis/product.js"; |
||||
import {storage} from "@/storage/storage.js"; |
||||
import {onBeforeRouteLeave} from "vue-router"; |
||||
|
||||
|
||||
// 注册vuex |
||||
const store = useStore() |
||||
|
||||
|
||||
// region 表单代码 |
||||
|
||||
|
||||
// 点击搜索时提交的数据 |
||||
const fromData = reactive({ |
||||
project: '全部', |
||||
}) |
||||
// region 表格数据代码 |
||||
// 表格展示的数据 |
||||
const tableData = ref([]) |
||||
|
||||
// 过滤条件数据 |
||||
const projectList = ref([]) |
||||
|
||||
const currentPage = ref(1) |
||||
const pageSize = ref(20) |
||||
|
||||
const total = ref(0) |
||||
|
||||
// 处理翻页 |
||||
const handleCurrentChange = (newPage) => { |
||||
currentPage.value = newPage |
||||
get_table_data(currentPage.value, pageSize.value, fromData.project) |
||||
} |
||||
|
||||
const handleSizeChange = (newPageSize) => { |
||||
pageSize.value = newPageSize |
||||
get_table_data(currentPage.value, pageSize.value, fromData.project) |
||||
} |
||||
|
||||
// 数据提交 点击搜索按键提交数据 |
||||
const submitSearch = async () => { |
||||
tableData.value = [] |
||||
await get_table_data(currentPage.value, pageSize.value, fromData.project).then( |
||||
res => { |
||||
if (Array.isArray(res)) { |
||||
tableData.value = [...res] |
||||
|
||||
} else { |
||||
|
||||
} |
||||
} |
||||
).catch( |
||||
err => { |
||||
} |
||||
) |
||||
} |
||||
|
||||
// 通过异步请求获取影院列表数据 |
||||
async function get_project_data() { |
||||
projectList.value = [] |
||||
await project_list().then(res => { |
||||
if (Array.isArray(res)) { |
||||
projectList.value = [...res] |
||||
projectList.value.unshift({'id': 0, 'project_name': '全部', is_delete: false}) |
||||
} else { |
||||
} |
||||
}).catch(err => { |
||||
console.log(err) |
||||
} |
||||
) |
||||
} |
||||
|
||||
// 通过异步请求获取影院列表数据 |
||||
async function get_table_data(page_num = currentPage.value, page_size = pageSize.value, project_val = fromData.project) { |
||||
// 获取数据 |
||||
tableData.value = [] |
||||
console.log('get_table_data') |
||||
console.log(project_val) |
||||
project_val = project_val === '全部' ? '' : project_val |
||||
console.log(project_val) |
||||
await prd_list_ax_cloud(page_num, page_size, project_val).then(res => { |
||||
total.value = res['count'] |
||||
if (Array.isArray(res['results'])) { |
||||
tableData.value = [...res['results']] |
||||
console.log(tableData.value) |
||||
} else { |
||||
console.log('get_table_data.res is not an array') |
||||
} |
||||
}).catch(err => { |
||||
console.log(err) |
||||
} |
||||
) |
||||
} |
||||
|
||||
// 定义生命周期,在加载时获取一次表格数据 |
||||
onMounted( |
||||
async () => { |
||||
await get_project_data(); |
||||
await get_table_data(currentPage.value, pageSize.value, fromData.project); |
||||
} |
||||
) |
||||
// endregion |
||||
|
||||
</script> |
||||
|
||||
<template> |
||||
<el-form |
||||
:model="fromData" |
||||
:inline="true" |
||||
class="search_form" |
||||
> |
||||
<el-form-item label="所属项目" label-width="90"> |
||||
<el-select v-model="fromData.project" placeholder="请选择"> |
||||
<el-option v-for="item in projectList" :key="item['project_name']" :label="item['project_name']" |
||||
:value="item['project_name']"/> |
||||
</el-select> |
||||
</el-form-item> |
||||
<el-form-item> |
||||
<el-button type="primary" @click="submitSearch">搜索</el-button> |
||||
</el-form-item> |
||||
<!-- <el-button style="margin-right: 0">添加</el-button>--> |
||||
</el-form> |
||||
<el-table :data="tableData" style="width: 100%"> |
||||
<el-table-column prop="project" label="所属项目" min-width="200"></el-table-column> |
||||
<el-table-column prop="prd_version" label="版本" min-width="200"></el-table-column> |
||||
<el-table-column prop="prd_doc_link" label="产品原型链接" min-width="300" show-overflow-tooltip> |
||||
<template v-slot="scope"> |
||||
<a target="_blank" style="color:#007bff;" v-if="scope.row.prd_doc_link!=null" |
||||
@click="mark_read(scope.row.id, scope.row.update_at)" |
||||
v-bind:href="scope.row.prd_doc_link"> |
||||
{{ |
||||
scope.row.prd_doc_link.length > 30 ? scope.row.prd_doc_link.slice(0, 30) + '...' : scope.row.prd_doc_link |
||||
}} |
||||
</a> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column prop="prd_comment" label="版本描述" min-width="260"> |
||||
<template #default="{ row }"> |
||||
<el-tooltip |
||||
class="item" |
||||
popper-class="custom-tooltip" |
||||
effect="dark" |
||||
:raw-content="true" |
||||
:content="row.prd_comment.split('\n').join('<br>')" |
||||
placement="top-end"> |
||||
<span>{{ row.prd_comment.length > 10 ? row.prd_comment.slice(0, 10) + '...' : row.prd_comment }}</span> |
||||
</el-tooltip> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column prop="update_at" label="最后更新时间" min-width="210"> |
||||
</el-table-column> |
||||
<el-table-column prop="id" label="操作" min-width="120"> |
||||
<template v-slot="scope"> |
||||
<el-button type="primary" size="small" @click="PrdItemEdit(scope.row.id)">编辑</el-button> |
||||
</template> |
||||
</el-table-column> |
||||
</el-table> |
||||
<div class="pagination-container"> |
||||
<el-pagination |
||||
v-model:current-page="currentPage" |
||||
v-model:page-size="pageSize" |
||||
:page-sizes="[10, 20, 50]" |
||||
size="small" |
||||
layout="sizes, prev, pager, next" |
||||
:total="total" |
||||
@size-change="handleSizeChange" |
||||
@current-change="handleCurrentChange" |
||||
> |
||||
</el-pagination> |
||||
</div> |
||||
|
||||
|
||||
</template> |
||||
|
||||
|
||||
<style> |
||||
.pagination-container { |
||||
display: flex; |
||||
justify-content: flex-end; |
||||
margin-top: 20px; |
||||
} |
||||
|
||||
.search_form { |
||||
display: flex; |
||||
justify-content: flex-start; |
||||
} |
||||
|
||||
.custom-tooltip { |
||||
max-width: 500px; /* 设置最大宽度为 300px */ |
||||
} |
||||
</style> |
@ -1,3 +0,0 @@ |
||||
export default function env_config() { |
||||
return 'local' |
||||
} |
@ -1,6 +1,11 @@ |
||||
export default { |
||||
// method: 'get',
|
||||
// baseURL: 'http://172.16.1.63:8000',
|
||||
baseURL: 'http://172.16.1.168:8000', |
||||
// baseURL: 'http://127.0.0.1:8000',
|
||||
// baseWS: 'ws://172.16.1.63:8000',
|
||||
baseWS: 'ws://172.16.1.168:8000', |
||||
// baseWS: 'ws://127.0.0.1:8000',
|
||||
headers: { |
||||
'Content-Type': 'application/json;charset=UTF-8', |
||||
'Authorization': 'token 4e63b8854974c1fdac9deb891fd74dc145b53f85' |
@ -1,11 +0,0 @@ |
||||
export default { |
||||
baseURL: 'http://127.0.0.1:8000', |
||||
baseWS: 'ws://127.0.0.1:8000', |
||||
headers: { |
||||
'Content-Type': 'application/json;charset=UTF-8', |
||||
'Authorization': 'token 4e63b8854974c1fdac9deb891fd74dc145b53f85' |
||||
}, |
||||
timeout: 60000, |
||||
withCredentials: true, |
||||
responseType: 'json', |
||||
} |
@ -1,24 +0,0 @@ |
||||
export default { |
||||
direct: { |
||||
baseURL: 'http://172.16.1.63:8000', |
||||
baseWS: 'ws://172.16.1.63:8000', |
||||
headers: { |
||||
'Content-Type': 'application/json;charset=UTF-8', |
||||
'Authorization': 'token 4e63b8854974c1fdac9deb891fd74dc145b53f85' |
||||
}, |
||||
timeout: 60000, |
||||
withCredentials: true, |
||||
responseType: 'json', |
||||
}, |
||||
nginx:{ |
||||
baseURL: 'http://172.16.1.222', |
||||
baseWS: 'ws://172.16.1.63:8000', |
||||
headers: { |
||||
'Content-Type': 'application/json;charset=UTF-8', |
||||
'Authorization': 'token 4e63b8854974c1fdac9deb891fd74dc145b53f85' |
||||
}, |
||||
timeout: 60000, |
||||
withCredentials: true, |
||||
responseType: 'json', |
||||
} |
||||
} |
@ -1,12 +0,0 @@ |
||||
export const storage = { |
||||
set(key, value) { |
||||
localStorage.setItem(key, JSON.stringify(value)); |
||||
}, |
||||
get(key) { |
||||
const value = localStorage.getItem(key); |
||||
return value ? JSON.parse(value) : null; |
||||
}, |
||||
remove(key) { |
||||
localStorage.removeItem(key); |
||||
} |
||||
} |
@ -1,240 +0,0 @@ |
||||
<script setup> |
||||
import {onBeforeMount, onMounted, reactive, ref, unref, computed} from 'vue'; |
||||
import {useStore, mapGetters, mapState} from "vuex"; |
||||
import {cinema_list, cinema_search, cinema_user, change_cinema_user, write_git_version_to_db} from "@/apis/update.js"; |
||||
import CinemaUpdate from "@/components/update/CinemaUpdate.vue"; |
||||
|
||||
// 注册vuex |
||||
const store = useStore() |
||||
|
||||
|
||||
// region 表单代码 |
||||
// 搜索条件字段 |
||||
const cinemaSearch = reactive({ |
||||
ip: '', |
||||
version: '', |
||||
}) |
||||
|
||||
// 点击搜索时提交的数据 |
||||
const cinemaSearchRef = ref() |
||||
|
||||
// 数据校验部分 校验ip地址是否合法 |
||||
const ip_validate = (rule, value, callback) => { |
||||
const regex = new RegExp('((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})(\\.((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})){3}'); |
||||
if (value === '') { |
||||
callback() |
||||
} |
||||
if (!regex.test(value)) { |
||||
callback(new Error('请输入正确的IP地址')) |
||||
} else { |
||||
callback() |
||||
} |
||||
} |
||||
|
||||
// 指定表单的校验规则, 仅对ip进行校验 |
||||
const ipRule = reactive({ |
||||
ip: [{validator: ip_validate, trigger: 'change'}] |
||||
}) |
||||
|
||||
// 数据提交 点击搜索按键提交数据 |
||||
const submitSearch = async (formEl) => { |
||||
const {ip, version} = unref(cinemaSearch) |
||||
tableData.value = [] |
||||
await cinema_search({ip, version}).then( |
||||
res => { |
||||
if (Array.isArray(res)) { |
||||
tableData.value = [...res] |
||||
|
||||
} else { |
||||
|
||||
} |
||||
} |
||||
).catch( |
||||
err => { |
||||
} |
||||
) |
||||
if (!formEl) return |
||||
formEl.validate((valid) => { |
||||
if (valid) { |
||||
console.log('提交数据') |
||||
} else { |
||||
console.log('提交失败') |
||||
return false |
||||
} |
||||
}) |
||||
} |
||||
|
||||
// 重置搜索数据的逻辑 |
||||
const resetSearch = (formEl) => { |
||||
if (!formEl) return |
||||
formEl.resetFields() |
||||
} |
||||
|
||||
// 刷新逻辑 |
||||
const refresh = (formEL) => { |
||||
formEL.resetFields() |
||||
refresh_disable.value = true; |
||||
refresh_loading.value = true; |
||||
get_table_data() |
||||
update_git_version() |
||||
setTimeout(() => { |
||||
refresh_disable.value = false; |
||||
refresh_loading.value = false; |
||||
}, 5000) |
||||
} |
||||
// endregion |
||||
|
||||
// region |
||||
const update_git_version = async () => { |
||||
await write_git_version_to_db().then(res => { |
||||
console.log(res) |
||||
}).catch(err => { |
||||
console.log(err) |
||||
} |
||||
) |
||||
} |
||||
// endregion |
||||
|
||||
|
||||
// region 表格数据代码 |
||||
// 表格展示的数据 |
||||
const tableData = ref([]) |
||||
|
||||
// 定义开关控制刷新按键的状态 disable和loading |
||||
let refresh_disable = ref(false) |
||||
let refresh_loading = ref(false) |
||||
|
||||
// 通过异步请求获取影院列表数据 |
||||
async function get_table_data() { |
||||
tableData.value = [] |
||||
await cinema_list().then(res => { |
||||
if (Array.isArray(res)) { |
||||
tableData.value = [...res] |
||||
} else { |
||||
} |
||||
}).catch(err => { |
||||
console.log(err) |
||||
} |
||||
) |
||||
} |
||||
|
||||
// 定义生命周期,在加载时获取一次表格数据 |
||||
onMounted( |
||||
async () => { |
||||
await get_table_data(); |
||||
} |
||||
) |
||||
|
||||
// endregion |
||||
|
||||
// region 常用人代码 |
||||
// 定义常用人代码被选中的结果 |
||||
const selectedUser = ref('') |
||||
// 定义变量用于接受返回数据 |
||||
let userData = ref([]) |
||||
// 定义用于展示的数据变量 |
||||
onMounted(async () => { |
||||
await cinema_user().then((res) => { |
||||
const user_list = res.map((item, index) => { |
||||
return {key: item.id, label: item.username, value: item.username} |
||||
}) |
||||
user_list.unshift({key: 0, label: '暂无', value: '暂无'}) |
||||
userData.value = [...user_list] |
||||
}).catch((err) => { |
||||
}) |
||||
}) |
||||
|
||||
const cinemaUserChange = (user, id) => { |
||||
const params = {user, id} |
||||
change_cinema_user(params).then(res => { |
||||
}).catch(err => { |
||||
}) |
||||
} |
||||
|
||||
// endregion |
||||
|
||||
// region 升级相关代码 |
||||
const update_ip = ref('') |
||||
const ver_id = ref(0) |
||||
|
||||
const changeDialogStatus = (ip, ver) => { |
||||
store.state.updateModule.update_dialog_show = true |
||||
update_ip.value = ip |
||||
ver_id.value = ver |
||||
} |
||||
// endregion |
||||
|
||||
</script> |
||||
|
||||
<template> |
||||
<el-form |
||||
ref="cinemaSearchRef" |
||||
:model="cinemaSearch" |
||||
status-icon |
||||
:rules="ipRule" |
||||
class="cinema-search" |
||||
> |
||||
<el-row> |
||||
<el-col :span="5"> |
||||
<el-form-item label="影院IP" prop="ip" label-width="60"> |
||||
<el-input v-model="cinemaSearch.ip" placeholder="请输入完整的影院IP" style="width: 180px;"></el-input> |
||||
</el-form-item> |
||||
</el-col> |
||||
<el-col :span="5"> |
||||
<el-form-item label="系统版本" prop="version"> |
||||
<el-input v-model="cinemaSearch.version" placeholder="支持模糊查询" style="width: 160px;"></el-input> |
||||
</el-form-item> |
||||
</el-col> |
||||
<el-col :span="6"> |
||||
<el-button type="primary" @click="submitSearch(cinemaSearchRef)">搜索</el-button> |
||||
<el-button @click="resetSearch(cinemaSearchRef)">重置</el-button> |
||||
<el-button v-bind:disabled="refresh_disable" @click="refresh(cinemaSearchRef)" v-bind:loading="refresh_loading"> |
||||
刷新 |
||||
</el-button> |
||||
</el-col> |
||||
</el-row> |
||||
</el-form> |
||||
<el-table :data="tableData" style="width: 100%"> |
||||
<el-table-column prop="update_time" label="最后查询时间" min-width="180"></el-table-column> |
||||
<el-table-column prop="ip" label="操作" min-width="80"> |
||||
<template v-slot="scope"> |
||||
<el-button type="info" size="small" @click="changeDialogStatus(scope.row.ip, scope.row.ver_id)">更新</el-button> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column prop="selectedUser" label="当前使用人" min-width="120"> |
||||
<template v-slot="scope"> |
||||
<el-select v-model="scope.row.user" class="m-2" size="small" laceholder="请选择" style="width: 80px" |
||||
@change="cinemaUserChange(scope.row.user, scope.row.id)"> |
||||
<el-option v-for="data in userData" :key="data.id" :label="data.label" |
||||
:value="data.value"></el-option> |
||||
</el-select> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column prop="name" label="影院名称" min-width="250"></el-table-column> |
||||
<el-table-column prop="ip" label="影院IP" min-width="120"> |
||||
<template v-slot="scope"> |
||||
<a target="_blank" style="color:#007bff;" v-if="scope.row.ip!=null" |
||||
v-bind:href="'http://'+scope.row.ip+'/?code=leying'"> |
||||
{{ scope.row.ip }} |
||||
</a> |
||||
<span v-else> {{ scope.row.ip }}</span> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column prop="zz_num" label="专资编码" min-width="100"></el-table-column> |
||||
<el-table-column prop="inner_id" label="鼎新编码" min-width="90"></el-table-column> |
||||
<el-table-column prop="sys_ver" label="系统版本" min-width="175"></el-table-column> |
||||
<el-table-column prop="client_ver" label="客户端版本" min-width="150"></el-table-column> |
||||
<el-table-column prop="is_cloud" label="云版本" min-width="80"></el-table-column> |
||||
<el-table-column prop="remote_label" label="远程办公识别码" min-width="160" class-name="remote"></el-table-column> |
||||
<el-table-column prop="db_user" label="数据库账号" min-width="100"></el-table-column> |
||||
<el-table-column prop="db_pwd" label="数据库密码" min-width="120"></el-table-column> |
||||
</el-table> |
||||
<CinemaUpdate :ip="update_ip" :ver_id="ver_id"></CinemaUpdate> |
||||
</template> |
||||
|
||||
|
||||
<style scoped> |
||||
:deep(td.remote div) { |
||||
font-family: "YaHei Consolas Hybrid"; |
||||
} |
||||
</style> |
@ -1,342 +0,0 @@ |
||||
<script setup> |
||||
import {onBeforeMount, onMounted, onBeforeUnmount, reactive, ref, unref, computed} from 'vue'; |
||||
import {useStore, mapGetters, mapState} from "vuex"; |
||||
import { |
||||
project_list, |
||||
prd_list, |
||||
prd_add, |
||||
prd_get, |
||||
prd_update, |
||||
prd_delete, |
||||
prd_history, |
||||
prd_list_ax_cloud |
||||
} from "@/apis/product.js"; |
||||
import {storage} from "@/storage/storage.js"; |
||||
import {onBeforeRouteLeave} from "vue-router"; |
||||
|
||||
|
||||
// 注册vuex |
||||
const store = useStore() |
||||
|
||||
|
||||
// region 表单代码 |
||||
|
||||
|
||||
// 点击搜索时提交的数据 |
||||
const fromData = reactive({ |
||||
project: '全部', |
||||
}) |
||||
// region 表格数据代码 |
||||
// 表格展示的数据 |
||||
const tableData = ref([]) |
||||
|
||||
// 过滤条件数据 |
||||
const projectList = ref([]) |
||||
|
||||
const currentPage = ref(1) |
||||
const pageSize = ref(20) |
||||
|
||||
const total = ref(0) |
||||
|
||||
const history_dialog_id = ref(1) |
||||
|
||||
let local_storage_array = storage.get("prd_history") |
||||
|
||||
// 处理翻页 |
||||
const handleCurrentChange = (newPage) => { |
||||
currentPage.value = newPage |
||||
get_table_data(currentPage.value, pageSize.value, fromData.project) |
||||
} |
||||
|
||||
const handleSizeChange = (newPageSize) => { |
||||
pageSize.value = newPageSize |
||||
get_table_data(currentPage.value, pageSize.value, fromData.project) |
||||
} |
||||
|
||||
// 处理历史记录对话框 |
||||
const changeDialogStatus = (id) => { |
||||
history_dialog_id.value = id |
||||
console.log('changeDialogStatus', id) |
||||
get_history(history_dialog_id.value) |
||||
} |
||||
|
||||
|
||||
// 定义数据源 |
||||
const history_data = ref([]) |
||||
|
||||
// 定义对话框开关 |
||||
let history_dialog_show = ref(false) |
||||
|
||||
// 通过接口获取历史数据 |
||||
function get_history(id) { |
||||
prd_history(id).then(res => { |
||||
console.log('get_history') |
||||
if (Array.isArray(res)) { |
||||
history_data.value = [...res] |
||||
} |
||||
history_dialog_show.value = true |
||||
}).catch(err => { |
||||
console.log(err) |
||||
}); |
||||
} |
||||
|
||||
const handleClose = () => { |
||||
history_dialog_show.value = false |
||||
history_data.value = [] |
||||
} |
||||
|
||||
|
||||
// 数据提交 点击搜索按键提交数据 |
||||
const submitSearch = async () => { |
||||
tableData.value = [] |
||||
await get_table_data(currentPage.value, pageSize.value, fromData.project).then( |
||||
res => { |
||||
if (Array.isArray(res)) { |
||||
tableData.value = [...res] |
||||
|
||||
} else { |
||||
|
||||
} |
||||
} |
||||
).catch( |
||||
err => { |
||||
} |
||||
) |
||||
} |
||||
|
||||
// 更新localstorage |
||||
function update_local_storage(id, update_at, update_mode = true) { |
||||
if (local_storage_array !== null) { |
||||
let find_local_data = false |
||||
local_storage_array.forEach((item) => { |
||||
if (item["id"] === id) { |
||||
if (update_mode === true) { |
||||
item["update_at"] = update_at |
||||
} |
||||
find_local_data = true |
||||
return true |
||||
} |
||||
}) |
||||
if (!find_local_data) { |
||||
local_storage_array.push({id, update_at}) |
||||
return true |
||||
} |
||||
return false |
||||
} else { |
||||
local_storage_array = new Array({id, update_at}) |
||||
} |
||||
} |
||||
|
||||
const update_table_data = (id) => { |
||||
tableData.value.forEach((item) => { |
||||
if (item.id === id) { |
||||
item.have_update = false |
||||
} |
||||
}) |
||||
} |
||||
|
||||
const mark_read = (id, update_at) => { |
||||
update_local_storage(id, update_at) |
||||
update_table_data(id) |
||||
save_local_storage() |
||||
} |
||||
|
||||
const save_local_storage = () => { |
||||
tableData.value.forEach((table_item) => { |
||||
update_local_storage(table_item["id"], table_item["update_at"], false) |
||||
} |
||||
) |
||||
storage.remove('prd_history') |
||||
storage.set('prd_history', local_storage_array) |
||||
} |
||||
|
||||
// 通过异步请求获取影院列表数据 |
||||
async function get_project_data() { |
||||
projectList.value = [] |
||||
await project_list().then(res => { |
||||
if (Array.isArray(res)) { |
||||
projectList.value = [...res] |
||||
projectList.value.unshift({'id': 0, 'project_name': '全部', is_delete: false}) |
||||
} else { |
||||
} |
||||
}).catch(err => { |
||||
console.log(err) |
||||
} |
||||
) |
||||
} |
||||
|
||||
// 通过异步请求获取影院列表数据 |
||||
async function get_table_data(page_num = currentPage.value, page_size = pageSize.value, project_val = fromData.project) { |
||||
// 获取数据 |
||||
tableData.value = [] |
||||
console.log('get_table_data') |
||||
console.log(project_val) |
||||
project_val = project_val === '全部' ? '' : project_val |
||||
console.log(project_val) |
||||
await prd_list_ax_cloud(page_num, page_size, project_val).then(res => { |
||||
total.value = res['count'] |
||||
if (Array.isArray(res['results'])) { |
||||
tableData.value = [...res['results']] |
||||
console.log(tableData.value) |
||||
} else { |
||||
console.log('get_table_data.res is not an array') |
||||
} |
||||
}).catch(err => { |
||||
console.log(err) |
||||
} |
||||
) |
||||
if (local_storage_array !== null) { |
||||
//处理新收到标记 |
||||
tableData.value.forEach((table_item, table_index) => { |
||||
let find_local_data = false |
||||
table_item['have_update'] = false |
||||
local_storage_array.forEach((local_item, local_index) => { |
||||
if (table_item['id'] === local_item['id']) { |
||||
find_local_data = true |
||||
const table_datetime = new Date(table_item['update_at']) |
||||
const local_datetime = new Date(local_item['update_at']) |
||||
if (table_datetime > local_datetime) { |
||||
table_item['have_update'] = true |
||||
} |
||||
} |
||||
}) |
||||
if (!find_local_data) { |
||||
table_item['have_update'] = true |
||||
} |
||||
}) |
||||
} |
||||
} |
||||
|
||||
// 定义生命周期,在加载时获取一次表格数据 |
||||
onMounted( |
||||
async () => { |
||||
await get_project_data(); |
||||
await get_table_data(currentPage.value, pageSize.value, fromData.project); |
||||
save_local_storage() |
||||
} |
||||
) |
||||
|
||||
onBeforeUnmount( |
||||
() => { |
||||
save_local_storage() |
||||
} |
||||
) |
||||
onBeforeRouteLeave( |
||||
() => { |
||||
save_local_storage() |
||||
} |
||||
) |
||||
|
||||
|
||||
// endregion |
||||
|
||||
</script> |
||||
|
||||
<template> |
||||
<el-form |
||||
:model="fromData" |
||||
:inline="true" |
||||
class="search_form" |
||||
> |
||||
<el-form-item label="所属项目" label-width="90"> |
||||
<el-select v-model="fromData.project" placeholder="请选择"> |
||||
<el-option v-for="item in projectList" :key="item['project_name']" :label="item['project_name']" |
||||
:value="item['project_name']"/> |
||||
</el-select> |
||||
</el-form-item> |
||||
<el-form-item> |
||||
<el-button type="primary" @click="submitSearch">搜索</el-button> |
||||
</el-form-item> |
||||
<!-- <el-button style="margin-right: 0">添加</el-button>--> |
||||
</el-form> |
||||
<el-table :data="tableData" style="width: 100%"> |
||||
<el-table-column prop="project" label="所属项目" min-width="200"></el-table-column> |
||||
<el-table-column prop="prd_version" label="版本" min-width="200"></el-table-column> |
||||
<el-table-column prop="prd_doc_link" label="产品原型链接" min-width="300" show-overflow-tooltip> |
||||
<template v-slot="scope"> |
||||
<a target="_blank" style="color:#007bff;" v-if="scope.row.prd_doc_link!=null" |
||||
@click="mark_read(scope.row.id, scope.row.update_at)" |
||||
v-bind:href="scope.row.prd_doc_link"> |
||||
{{ |
||||
scope.row.prd_doc_link.length > 30 ? scope.row.prd_doc_link.slice(0, 30) + '...' : scope.row.prd_doc_link |
||||
}} |
||||
</a> |
||||
<sup v-if="scope.row.have_update" |
||||
style="color: red; margin-left: 3px; font-size: 10px">有更新</sup> |
||||
<!-- <span v-else> {{ scope.row.prd_doc_link }}</span>--> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column prop="prd_comment" label="版本描述" min-width="260"> |
||||
<template #default="{ row }"> |
||||
<el-tooltip |
||||
class="item" |
||||
popper-class="custom-tooltip" |
||||
effect="dark" |
||||
:raw-content="true" |
||||
:content="row.prd_comment.split('\n').join('<br>')" |
||||
placement="top-end"> |
||||
<span>{{ row.prd_comment.length > 10 ? row.prd_comment.slice(0, 10) + '...' : row.prd_comment }}</span> |
||||
</el-tooltip> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column prop="update_at" label="最后更新时间" min-width="210"> |
||||
</el-table-column> |
||||
<el-table-column prop="id" label="历史文档" min-width="120"> |
||||
<template v-slot="scope"> |
||||
<el-button type="primary" size="small" @click="changeDialogStatus(scope.row.id)" |
||||
:disabled="!scope.row.have_history">查看 |
||||
</el-button> |
||||
</template> |
||||
</el-table-column> |
||||
</el-table> |
||||
<div class="pagination-container"> |
||||
<el-pagination |
||||
v-model:current-page="currentPage" |
||||
v-model:page-size="pageSize" |
||||
:page-sizes="[10, 20, 50]" |
||||
size="small" |
||||
layout="sizes, prev, pager, next" |
||||
:total="total" |
||||
@size-change="handleSizeChange" |
||||
@current-change="handleCurrentChange" |
||||
> |
||||
</el-pagination> |
||||
</div> |
||||
<template> |
||||
<el-dialog v-model="history_dialog_show" title="历史记录" width="500px" :modal="true" |
||||
:close-on-click-modal="false" :append-to-body="true" @close="handleClose"> |
||||
<el-table :data="history_data" style="width: 100%"> |
||||
<el-table-column prop="update_at" label="版本发布日期" min-width="100"></el-table-column> |
||||
<el-table-column prop="history_doc_link" label="产品原型链接" min-width="300" show-overflow-tooltip> |
||||
<template v-slot="scope"> |
||||
<a target="_blank" style="color:#007bff;" v-if="scope.row.history_doc_link!=null" |
||||
v-bind:href="scope.row.history_doc_link"> |
||||
{{ |
||||
scope.row.history_doc_link.length > 30 ? scope.row.history_doc_link.slice(0, 30) + '...' : scope.row.history_doc_link |
||||
}} |
||||
</a> |
||||
</template> |
||||
</el-table-column> |
||||
</el-table> |
||||
</el-dialog> |
||||
</template> |
||||
|
||||
</template> |
||||
|
||||
|
||||
<style> |
||||
.pagination-container { |
||||
display: flex; |
||||
justify-content: flex-end; |
||||
margin-top: 20px; |
||||
} |
||||
|
||||
.search_form { |
||||
display: flex; |
||||
justify-content: flex-start; |
||||
} |
||||
|
||||
.custom-tooltip { |
||||
max-width: 500px; /* 设置最大宽度为 300px */ |
||||
} |
||||
</style> |
Loading…
Reference in new issue