Compare commits
No commits in common. 'main' and 'dev' have entirely different histories.
34 changed files with 677 additions and 5498 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -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