Compare commits

..

110 Commits

Author SHA1 Message Date
9cd50bc908 修复pc端操作融合带 伽马值校正时不发送数据 2023-03-14 14:26:50 +08:00
9b677d7828 修复 曲面校正增加点后 切换点数量不发送 添加整个融合的注释 2023-03-14 14:19:16 +08:00
eed5964f02 放开是否禁用融合参数 显示网格 修改箭头大小 为平板增加融合带伽马值操作适配 2023-03-14 10:13:23 +08:00
miao
6bfdb69fd8 修复清屏时,依然存在的active样式 2023-03-09 19:12:20 +08:00
miao
be2a23fdff 关闭全部时以及清屏清除显示器当前选择 2023-03-09 17:50:12 +08:00
miao
3d0925f444 修复删除窗口错误删除 2023-03-09 17:41:57 +08:00
miao
4ddd39864e 合并时异常,对比修改 2023-03-09 16:33:46 +08:00
miao
1379a257c7 Merge branch 'magic_wall_' into master_v2
# Conflicts:
#	src/components/FusionSettings/DensityCorrection.vue
#	src/components/FusionSettings/FourPointCalibration.vue
#	src/components/FusionSettings/SurfaceCorrection.vue
#	src/components/FusionSettingsDialog.vue
2023-03-09 16:10:43 +08:00
miao
d7104f33fd 修复多次点击恢复显示器列表全部出现 2023-03-09 15:46:15 +08:00
miao
70d7a7010e 修改显示文字 2023-03-09 15:08:49 +08:00
miao
66dffac3fe 修复点恢复时,可能会恢复多次情况 2023-03-09 14:37:46 +08:00
miao
ea83d8023a 修复显示器列表宽高的变化 2023-03-09 14:11:56 +08:00
miao
4821e2100c 融合修改至3.3版本 2023-03-09 13:55:47 +08:00
6d5a661004 在03版本的基础上修改 隐藏融合页面的 禁用融合参数 显示网格 按钮 将背景颜色从辅助放到融合界面 2023-03-09 12:43:08 +08:00
miao
6105a290b3 测试代码 2023-03-09 10:19:32 +08:00
miao
ed0e427cd3 修改角度不能设置为小数 2023-03-09 10:12:35 +08:00
miao
946f2dda3f Merge branch 'master_v2' of http://www.cloudview.work/git/fangxiang/media_player_client into master_v2
# Conflicts:
#	src/components/FusionSettings/FusionLocale.vue
2023-03-09 10:12:35 +08:00
miao
7213e6bddb 魔墙:修改角度超出问题,以及显示器列表全部设置为一样的默认值 2023-03-09 10:10:20 +08:00
miao
caac3e3d60 魔墙:打开对话框时初始化变量,多选对齐完清空多选 2023-03-09 10:10:20 +08:00
miao
1f1a26de65 魔墙:加开窗避免显示为空 2023-03-09 10:10:19 +08:00
miao
8583f77627 魔墙:删除合并信息 2023-03-09 10:10:19 +08:00
miao
0f6972635c WIP on master_v2: c318910 删除合并信息 2023-03-09 10:10:19 +08:00
miao
590ea06f2f index on master_v2: c318910 删除合并信息 2023-03-09 10:10:18 +08:00
miao
7b25ddfee0 删除合并信息 2023-03-09 10:10:17 +08:00
miao
b6820b4368 Merge branch 'master_v2' of http://www.cloudview.work/git/fangxiang/media_player_client into master_v2
# Conflicts:
#	src/components/ControlPanelDialog.vue
2023-03-09 10:10:09 +08:00
miao
4aef830905 魔墙:修复清屏未及时通知
# Conflicts:
#	src/components/ControlPanelDialog.vue
2023-03-09 10:09:43 +08:00
miao
f0c6ad03d9 魔墙:修复清屏未及时通知 2023-03-09 10:09:24 +08:00
miao
191beed68d 魔墙:修改对话框大小 2023-03-09 10:09:24 +08:00
miao
b2f2805247 魔墙:增加翻译,修复虚拟窗口选中,修改角度坐标会乱选中窗口,添加魔墙的显示器列表宽高信息,增加恢复时恢复显示器列表信息 2023-03-09 10:09:24 +08:00
miao
7a0842ea24 魔墙:保持显示器宽高不变 2023-03-09 10:09:23 +08:00
miao
67d3799550 魔墙:修复多次删除其他窗口消失 2023-03-09 10:09:23 +08:00
miao
a6842221ad Merge branch 'master_v2' of http://www.cloudview.work/git/fangxiang/media_player_client into master_v2
# Conflicts:
#	src/components/ControlPanelDialog.vue
2023-03-03 17:21:28 +08:00
miao
be5bffaaff 修复点击更换数据未及时更换 2023-03-03 17:17:48 +08:00
miao
9eee4a4d1f 修复点击更换数据未及时更换 2023-03-03 17:15:41 +08:00
44ae08f0c1 修复疏密校正键盘操作点不移动 2023-03-03 14:19:36 +08:00
c62a34e34b 加入键盘awsd交互 2023-03-03 14:09:59 +08:00
70cb05c4ce 将平板模式下的长按识别设置为15ms 2023-03-03 11:34:06 +08:00
12504e0ff6 优化疏密校正ui 修复融合带平板模式下 不能选中融合带的问题 2023-03-03 11:25:22 +08:00
55cba70a1c 为平板增加融合带操作弹窗 2023-03-03 09:52:25 +08:00
52dd69a9a5 增加保存配置时的删除 2023-03-02 15:58:31 +08:00
e5a142fad4 修复投影机只显示一行的bug 2023-03-02 14:30:46 +08:00
33e76ee393 修复曲面校正和疏密校正多点切换时不修改当前选中的点数 2023-03-01 17:11:04 +08:00
0a5f561bd6 只在平板模式下语言为英语时更改ui适配 2023-03-01 15:18:07 +08:00
2c498c05f0 为平板模式下英文做适配 2023-03-01 15:09:50 +08:00
75311073cb 优化ui细节 2023-03-01 13:47:26 +08:00
14076866ec 修复 融合设置参数同步问题 投影机布局从后端获取 2023-03-01 11:19:56 +08:00
fangxiang
44aadff1d2 注册码可以鼠标选中复制 2023-02-28 17:15:42 +08:00
82fc72c185 修复快速 多次点击重置所有导致界面不显示 2023-02-28 16:08:49 +08:00
006d13af6a 修复疏密调整数据下发错误 2023-02-28 15:49:17 +08:00
1eb926d029 修复曲面校正不发送默认点数 2023-02-28 14:39:32 +08:00
a87b1bc380 修复数据发送顺序不对导致的问题 2023-02-28 14:04:01 +08:00
593323a934 修复疏密数据计算错误导致的错误 2023-02-28 10:29:17 +08:00
039d2d2de3 平板模式下疏密不允许拖动 2023-02-28 09:31:05 +08:00
3f499105d9 增加平板支持 2023-02-27 17:36:04 +08:00
243516ca6d Merge branch 'master_v2' of http://www.cloudview.work/git/fangxiang/media_player_client into master_v2 2023-02-27 10:51:11 +08:00
6360f499da 修改融合带值保证为偶数 2023-02-27 10:20:28 +08:00
fangxiang
bb438b9eec 增加升级完后刷新浏览器或者清空缓存的提示 2023-02-27 09:59:37 +08:00
miao
61b3766012 修复文件上传不能及时看见文件 2023-02-27 09:12:38 +08:00
f8dd60edbd 删除无效代码 2023-02-24 17:37:34 +08:00
d59a111b0d Merge branch 'master_v2' of http://www.cloudview.work/git/fangxiang/media_player_client into master_v2 2023-02-24 17:36:17 +08:00
48466524bb 修复首页数据 不同步 2023-02-24 17:36:13 +08:00
miao
46dee256f3 Merge branch 'master_v2' of http://www.cloudview.work/git/fangxiang/media_player_client into master_v2 2023-02-24 16:56:42 +08:00
miao
84ae856c71 魔墙修复多次点击恢复异常 2023-02-24 16:56:31 +08:00
55b518facc Merge branch 'master_v2' of http://www.cloudview.work/git/fangxiang/media_player_client into master_v2 2023-02-24 16:47:50 +08:00
4738681294 优化提示 修改ui大小 2023-02-24 16:47:46 +08:00
miao
da7a4bdd05 修复魔墙层级问题以及恢复问题 2023-02-24 16:38:42 +08:00
5998be5c1c 修复 投影机下发错误 2023-02-24 16:04:13 +08:00
5ce15fcb80 修复切换投影机布局的错误 2023-02-24 15:33:14 +08:00
efb6f0437a 修复界面数据错误 2023-02-24 15:06:37 +08:00
d71124dfc4 修复 切换显示排列错误 2023-02-24 14:33:10 +08:00
2f645fa71c 修复 四点校正 限制问题 2023-02-24 14:08:42 +08:00
5027ba5233 加入限制 2023-02-24 14:00:14 +08:00
aa0e83045b 修复曲面校正不发送当前点数 2023-02-24 09:42:13 +08:00
77e270c6b2 增加 动态添加值细节 2023-02-23 19:47:16 +08:00
d29ca4c6dd 修复融合参数界面同步错误问题 2023-02-23 19:32:51 +08:00
361bcb7719 修复 是否同步操作不保存状态 2023-02-23 17:31:41 +08:00
ae87589a45 Merge branch 'master_v2' of http://www.cloudview.work/git/fangxiang/media_player_client into master_v2 2023-02-23 17:11:08 +08:00
800dfec98d 修复动态添加时重置全部方案数据错误 优化细节 2023-02-23 17:10:51 +08:00
fangxiang
3bc125cff0 注册协议增加attribute字段 2023-02-23 16:46:50 +08:00
5c7ac2a7d0 修复重置时不保存数据 2023-02-23 14:35:52 +08:00
miao
1b93f2f92a 魔墙状态主页面右键开窗适应大小 2023-02-23 11:13:01 +08:00
3b84db438f 更改ui 修复摄影机数量显示错误问题 2023-02-23 09:35:28 +08:00
1d7e4de1d1 Merge branch 'master_v2' of http://www.cloudview.work/git/fangxiang/media_player_client into master_v2 2023-02-22 17:44:49 +08:00
740ff764e5 加入 投影机最大数量限制 2023-02-22 17:44:43 +08:00
miao
9c7d961e67 添加魔墙状态主页面的轮询开窗 2023-02-22 17:00:36 +08:00
966fe44583 删除不必要的代码 2023-02-22 15:09:35 +08:00
899fdc5e66 修复获取不到数据的错误 2023-02-22 15:01:19 +08:00
ljqing
98975d4cd5 修改字符串 2023-02-22 14:55:48 +08:00
miao
f0f340e9a9 修复主页面显示魔墙时开机异常 2023-02-22 14:51:38 +08:00
09c37b7e82 Merge branch 'master_v2' of http://www.cloudview.work/git/fangxiang/media_player_client into master_v2 2023-02-22 14:33:52 +08:00
52c375fc7d 加入鼠标滚轮交互 2023-02-22 14:33:47 +08:00
miao
a380a132b7 修复主页面因关开机导致的窗口变化问题 2023-02-22 14:08:12 +08:00
fangxiang
ba2594addf 解决合并错误 2023-02-21 20:05:31 +08:00
fangxiang
53ca6af019 注册细分产品 2023-02-21 19:59:37 +08:00
6c304fdfe6 加入投影机布局选择 2023-02-21 17:10:54 +08:00
fdeb182c75 完成动态曲面添加 2023-02-21 14:10:48 +08:00
ljqing
e4003940da 非空判断 2023-02-20 19:49:58 +08:00
fangxiang
789e80cffc 修改版本号 2023-02-20 19:00:56 +08:00
fangxiang
ee37d680b2 增加GetHttpInterfaceVersion来校验兼容性 2023-02-20 18:58:34 +08:00
fangxiang
00c4056b5d 增加http接口兼容判断 2023-02-20 15:17:20 +08:00
miao
a4c3a24dda Merge branch 'master_v2' of http://www.cloudview.work/git/fangxiang/media_player_client into master_v2 2023-02-20 15:05:29 +08:00
miao
e9cbd79d3b 修复无界状态的显示墙靠下 2023-02-20 15:05:01 +08:00
ljqing
4a8aacd710 Merge branch 'blending' into master_v2 2023-02-20 09:14:19 +08:00
miao
1ce66817d4 Merge branch 'master_v2' of http://www.cloudview.work/git/fangxiang/media_player_client into master_v2 2023-02-17 14:29:46 +08:00
miao
a45c188c1e 判断是否为无界,显示隐藏底图升级数据恢复等操作 2023-02-17 14:28:03 +08:00
ljqing
a254c7d118 修改融合界面 2023-02-17 14:20:00 +08:00
ljqing
dea3713269 修改字符串 2023-02-17 14:00:04 +08:00
ljqing
652f6bfd2e Merge branch 'blending' into master_v2 2023-02-17 09:38:52 +08:00
miao
601a95a33e 修复文件上传中列表滚动 2023-02-16 11:34:55 +08:00
miao
27f914c995 升级对话框显示服务器版本 2023-02-16 11:10:49 +08:00
25 changed files with 4409 additions and 1332 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "media_player_client", "name": "media_player_client",
"version": "1.5.6", "version": "1.6.0",
"description": "A Quasar Framework app", "description": "A Quasar Framework app",
"productName": "MediaPlayerClient", "productName": "MediaPlayerClient",
"author": "fangxiang <fangxiang@cloudview.work>", "author": "fangxiang <fangxiang@cloudview.work>",

View File

@ -41,9 +41,12 @@ module.exports = configure(function (ctx) {
// Full list of options: https://v2.quasar.dev/quasar-cli/quasar-conf-js#Property%3A-build // Full list of options: https://v2.quasar.dev/quasar-cli/quasar-conf-js#Property%3A-build
build: { build: {
vueRouterMode: "hash", // available values: 'hash', 'history' vueRouterMode: "hash", // available values: 'hash', 'history'
uglifyOptions: {
compress: {
drop_console: true,
},
},
// transpile: false, // transpile: false,
// Add dependencies for transpiling with Babel (Array of string/regex) // Add dependencies for transpiling with Babel (Array of string/regex)
// (from node_modules, which are by default not transpiled). // (from node_modules, which are by default not transpiled).
// Applies only if "transpile" is set to true. // Applies only if "transpile" is set to true.
@ -52,7 +55,7 @@ module.exports = configure(function (ctx) {
// rtl: true, // https://v2.quasar.dev/options/rtl-support // rtl: true, // https://v2.quasar.dev/options/rtl-support
// preloadChunks: true, // preloadChunks: true,
// showProgress: false, // showProgress: false,
// gzip: true, gzip: true,
// analyze: true, // analyze: true,
// Options below are automatically set depending on the env, set them if you want to override // Options below are automatically set depending on the env, set them if you want to override

View File

@ -15,6 +15,8 @@ import GlobalData from "./common/GlobalData";
import { EProductNames } from "./entities/ProductNames"; import { EProductNames } from "./entities/ProductNames";
import { api } from "./boot/axios"; import { api } from "./boot/axios";
import { WuJieInitializer } from "./common/WuJieInitializer"; import { WuJieInitializer } from "./common/WuJieInitializer";
import ClientConnection from "./common/ClientConnection";
import { Common } from "./common/Common";
export default defineComponent({ export default defineComponent({
name: "App", name: "App",
@ -117,7 +119,7 @@ export default defineComponent({
console.log(e); console.log(e);
} }
EventBus.getInstance().on(EventNamesDefine.CheckDebug2, () => { EventBus.getInstance().on(EventNamesDefine.CheckDebug, () => {
const to_normal_url = () => { const to_normal_url = () => {
const p1 = window.location.href.indexOf("?debug"); const p1 = window.location.href.indexOf("?debug");
const p2 = window.location.href.indexOf("#"); const p2 = window.location.href.indexOf("#");
@ -284,6 +286,40 @@ export default defineComponent({
}); });
} }
EventBus.getInstance().on(
EventNamesDefine.CurrentConnectConnected,
async (connection: ClientConnection) => {
const show_version_tip = () =>
$q.dialog({
persistent: true,
title: $t.t("Version Mismatch !"),
message: $t.t(
"Version Mismatch ! Please Upgrade The Software Again ! Otherwise, The File Function Cannot Be Used !"
),
});
if (connection) {
let count = 0;
while (
connection &&
!connection.is_login &&
count < (1000 * 10) / 100 /* 10 S */
) {
await Common.waitFor(100);
}
if (count < (1000 * 10) / 100) {
try {
const response = await connection.getHttpInterfaceVersion();
if (!response || response.version != 2) {
show_version_tip();
}
} catch (e) {
show_version_tip();
}
}
}
}
);
return {}; return {};
}, },
}); });

View File

@ -710,6 +710,17 @@ export default class ClientConnection {
) )
); );
} }
public setMagicWallList(list:any) {
this.ws?.send(
JSON.stringify(
new Protocol.SetApplicationConfigRequestEntity(
0,
"magic_list",
typeof (list) == 'string' ? list : JSON.stringify(list)
)
)
);
}
public setConfigure(k: string, v: string) { public setConfigure(k: string, v: string) {
this.ws?.send( this.ws?.send(
@ -823,6 +834,7 @@ export default class ClientConnection {
active_code: string, active_code: string,
online: boolean, online: boolean,
active_forever: boolean, active_forever: boolean,
attribute: number,
secret_key?: string, secret_key?: string,
hour?: number hour?: number
) { ) {
@ -833,6 +845,7 @@ export default class ClientConnection {
active_code, active_code,
online, online,
active_forever, active_forever,
attribute,
secret_key, secret_key,
hour, hour,
0 0
@ -1343,6 +1356,12 @@ export default class ClientConnection {
); );
} }
public async getHttpInterfaceVersion() {
return await this.doRpc<Protocol.RpcGetHttpInterfaceVersionResponseEntity>(
new Protocol.RpcGetHttpInterfaceVersionRequestEntity()
);
}
public async setJointActionEquipment( public async setJointActionEquipment(
entity: JointActionEquipmentTableEntity entity: JointActionEquipmentTableEntity
) { ) {
@ -1438,7 +1457,8 @@ export default class ClientConnection {
column: number, column: number,
location: number, location: number,
enable: boolean, enable: boolean,
width: number width: number,
auto_sync: boolean,
) { ) {
return await this.doRpc<Protocol.NoneResponse>( return await this.doRpc<Protocol.NoneResponse>(
new Protocol.SetBlendingOverlapRequestEntity( new Protocol.SetBlendingOverlapRequestEntity(
@ -1446,7 +1466,8 @@ export default class ClientConnection {
column, column,
location, location,
enable, enable,
width width,
auto_sync
) )
); );
} }
@ -1551,21 +1572,15 @@ export default class ClientConnection {
); );
} }
public async SetProjectorResolution( public async SetProjectorResolution(width: number, height: number) {
width: number,
height: number
) {
return await this.doRpc<Protocol.GetBlendingConfigResponseEntity>( return await this.doRpc<Protocol.GetBlendingConfigResponseEntity>(
new Protocol.SetProjectorResolutionRequestEntity(width, height) new Protocol.SetProjectorResolutionRequestEntity(width, height)
); );
} }
public async SetProjectorLayout( public async SetProjectorLayout(row: number, column: number) {
row: number,
column: number
) {
return await this.doRpc<Protocol.GetBlendingConfigResponseEntity>( return await this.doRpc<Protocol.GetBlendingConfigResponseEntity>(
new Protocol.SetProjectorResolutionRequestEntity(row, column) new Protocol.SetProjectorLayoutRequestEntity(row, column)
); );
} }

View File

@ -11,7 +11,7 @@
} }
" "
> >
<q-card class="overflow-hidden" style="overflow-y: scroll; max-width: 35vw"> <q-card class="overflow-hidden" style="overflow-y: scroll; max-width: 40vw">
<q-form> <q-form>
<q-card-section class="q-ma-none q-pa-sm"> <q-card-section class="q-ma-none q-pa-sm">
<div class="row"> <div class="row">
@ -37,8 +37,67 @@
<q-separator /> <q-separator />
<q-card-section style="max-height: 50vh; width: 35vw" class="scroll"> <q-card-section style="max-height: 60vh; width: 40vw" class="scroll">
<q-list> <q-list>
<q-item>
<q-item-section avatar>{{ $t("product") }}</q-item-section>
<q-item-section>
<q-radio
v-model="selected_product"
val=""
:label="$t('normal')"
color="cyan"
class="offset-md-1 col"
:loading="loading"
:disable="loading"
/>
</q-item-section>
<q-item-section>
<q-radio
v-model="selected_product"
val="magic_wall"
:label="$t('magic wall')"
color="cyan"
class="offset-md-1 col"
:loading="loading"
:disable="loading"
/>
</q-item-section>
<q-item-section>
<q-radio
v-model="selected_product"
val="fusion"
:label="$t('fusion')"
color="cyan"
class="offset-md-1 col"
:loading="loading"
:disable="loading"
/>
</q-item-section>
</q-item>
<q-item v-if="selected_product == 'fusion'">
<q-item-section avatar>{{ $t("fusion") }}</q-item-section>
<q-item-section>
<div class="row" v-for="(row, row_index) in 3" :key="row">
<q-radio
v-for="(item, item_index) in 3"
:key="row_index * 3 + item"
v-model="function_fusion_count"
:val="row_index * 3 + item"
:label="
(row_index * 3 + item).toString() +
$t(' ') +
$t('fusion out')
"
color="cyan"
class="col"
:class="item_index ? 'offset-md-1 ' : ''"
:loading="loading"
:disable="loading"
/>
</div>
</q-item-section>
</q-item>
<q-item> <q-item>
<q-item-section avatar>{{ $t("function") }}</q-item-section> <q-item-section avatar>{{ $t("function") }}</q-item-section>
<q-item-section> <q-item-section>
@ -69,7 +128,6 @@
:disable="loading" :disable="loading"
/> />
</q-item-section> </q-item-section>
</q-item> </q-item>
<q-item> <q-item>
<q-item-section avatar></q-item-section> <q-item-section avatar></q-item-section>
@ -83,40 +141,22 @@
:disable="loading" :disable="loading"
/> />
</q-item-section> </q-item-section>
</q-item>
<q-item>
<q-item-section> </q-item-section>
<q-item-section> <q-item-section>
<q-checkbox
v-model="function_magic_wall"
@update:model-value="changeMagic()"
:label="$t('magic wall')"
color="cyan"
class="offset-md-1 col"
:loading="loading"
:disable="loading"
/>
</q-item-section>
<q-item-section>
<q-checkbox
v-model="function_fusion"
@update:model-value="changeFusion()"
:label="$t('fusion')"
color="cyan"
class="offset-md-1 col"
:loading="loading"
:disable="loading"
/>
</q-item-section>
<q-item-section avatar>
<q-btn <q-btn
@click="setDeviceAttribute" @click="setDeviceAttributeAndProduct"
:label="$t('commit')" :label="$t('commit')"
no-caps no-caps
outline outline
class="q-px-lg"
color="primary" color="primary"
/> />
</q-item-section> </q-item-section>
<q-item-section> </q-item-section>
</q-item> </q-item>
<q-separator />
<q-item> <q-item>
<q-item-section avatar> <q-item-section avatar>
{{ $t("language") }} {{ $t("language") }}
@ -153,7 +193,6 @@
/> />
</q-item-section> </q-item-section>
</q-item> </q-item>
<q-separator class="q-mt-md" /> <q-separator class="q-mt-md" />
<q-item class="q-mt-md"> <q-item class="q-mt-md">
@ -199,8 +238,10 @@ import { useStore } from "src/store";
import { useQuasar, date as $date } from "quasar"; import { useQuasar, date as $date } from "quasar";
import { useI18n } from "vue-i18n"; import { useI18n } from "vue-i18n";
import GlobalData from "src/common/GlobalData"; import GlobalData from "src/common/GlobalData";
import { Protocol } from "src/entities/WSProtocol"; import {
import { EDeviceAttribute } from "src/entities/EDeviceAttribute"; EDeviceAttribute,
EDeviceAttributeHelper,
} from "src/entities/EDeviceAttribute";
export default defineComponent({ export default defineComponent({
name: "ComponentAdvancedDebugDialog", name: "ComponentAdvancedDebugDialog",
@ -226,10 +267,44 @@ export default defineComponent({
const function_magic_wall = ref( const function_magic_wall = ref(
$store.state.custom_defines.function_magic_wall $store.state.custom_defines.function_magic_wall
); );
const function_fusion = ref( const function_fusion = ref($store.state.custom_defines.function_fusion);
$store.state.custom_defines.function_magic_wall const function_fusion_count = ref(0);
);
const target_language = ref("zh-CN"); const target_language = ref("zh-CN");
const selected_product = ref("");
watch(
() => selected_product.value,
(newValue) => {
function_fusion.value = newValue == "fusion";
function_magic_wall.value = newValue == "magic_wall";
}
);
const getFinalAttribute = () => {
let attribute = EDeviceAttribute.None;
if (function_center_control.value) {
attribute |= EDeviceAttribute.CenterControl;
}
if (function_output_board.value) {
attribute |= EDeviceAttribute.OutputBoard;
}
if (function_mirroring_output.value) {
attribute |= EDeviceAttribute.MirroringOutput;
}
if (function_custom_ISV.value) {
attribute |= EDeviceAttribute.CustomISV;
}
if (function_magic_wall.value) {
attribute |= EDeviceAttribute.ProductMagicWall;
}
if (function_fusion.value) {
attribute |= EDeviceAttributeHelper.getProdictFusionAttributeByIndex(
function_fusion_count.value
);
}
return attribute;
};
return { return {
show_dialog, show_dialog,
@ -239,8 +314,10 @@ export default defineComponent({
function_custom_ISV, function_custom_ISV,
function_magic_wall, function_magic_wall,
function_fusion, function_fusion,
function_fusion_count,
function_mirroring_output, function_mirroring_output,
target_language, target_language,
selected_product,
showDialog() { showDialog() {
show_dialog.value = true; show_dialog.value = true;
@ -254,8 +331,18 @@ export default defineComponent({
$store.state.custom_defines.function_mirroring_output; $store.state.custom_defines.function_mirroring_output;
function_magic_wall.value = function_magic_wall.value =
$store.state.custom_defines.function_magic_wall; $store.state.custom_defines.function_magic_wall;
function_fusion.value = function_fusion.value = $store.state.custom_defines.function_fusion;
$store.state.custom_defines.function_fusion; function_fusion_count.value =
EDeviceAttributeHelper.getProductFusionOutputCountDefault(
$store.state.device_attribute,
1
);
if (function_magic_wall.value) {
selected_product.value = "magic_wall";
} else if (function_fusion.value) {
selected_product.value = "fusion";
}
}, },
resetData() { resetData() {
loading.value = false; loading.value = false;
@ -264,8 +351,9 @@ export default defineComponent({
function_output_board.value = false; function_output_board.value = false;
function_mirroring_output.value = false; function_mirroring_output.value = false;
function_custom_ISV.value = false; function_custom_ISV.value = false;
function_magic_wall.value=false; function_magic_wall.value = false;
function_fusion.value=false function_fusion.value = false;
selected_product.value = "";
}, },
restartDevice() { restartDevice() {
@ -343,27 +431,22 @@ export default defineComponent({
</div>`, </div>`,
}); });
}, },
setDeviceAttribute() { setDeviceAttributeAndProduct() {
let attribute = EDeviceAttribute.None; let attribute = getFinalAttribute();
if (function_center_control.value) { GlobalData.getInstance()
attribute |= EDeviceAttribute.CenterControl; .getCurrentClient()
} ?.setDeviceAttribute(attribute);
if (function_output_board.value) {
attribute |= EDeviceAttribute.OutputBoard;
}
if (function_mirroring_output.value) {
attribute |= EDeviceAttribute.MirroringOutput;
}
if (function_custom_ISV.value) { $q.notify({
attribute |= EDeviceAttribute.CustomISV; color: "positive",
} icon: "done",
if (function_magic_wall.value) { message: $t.t("set device function") + $t.t("success") + "!",
attribute |= EDeviceAttribute.ProductMagicWall; position: "top",
} timeout: 1500,
if (function_fusion.value) { });
attribute |= EDeviceAttribute.ProductFusion; },
} setDeviceAttribute() {
let attribute = getFinalAttribute();
GlobalData.getInstance() GlobalData.getInstance()
.getCurrentClient() .getCurrentClient()
@ -389,16 +472,16 @@ export default defineComponent({
timeout: 1500, timeout: 1500,
}); });
}, },
changeMagic(){ changeMagic() {
if(function_magic_wall.value){ if (function_magic_wall.value) {
function_fusion.value=false; function_fusion.value = false;
} }
}, },
changeFusion(){ changeFusion() {
if(function_fusion.value){ if (function_fusion.value) {
function_magic_wall.value=false; function_magic_wall.value = false;
}
} }
},
}; };
}, },
}); });

File diff suppressed because it is too large Load Diff

View File

@ -222,10 +222,11 @@
style="color: #ffbe4a; font-size: 2.5em" style="color: #ffbe4a; font-size: 2.5em"
></q-icon> ></q-icon>
{{ {{
props.value.length > 60 props.value.length > 25
? props.value.substr(0, 60) + "..." ? props.value.substr(0, 25) + "..."
: props.value : props.value
}} }}
<q-tooltip> {{ props.value }} </q-tooltip> <q-tooltip> {{ props.value }} </q-tooltip>
</div> </div>
<div v-else-if="props.col.name == 'file_size'"> <div v-else-if="props.col.name == 'file_size'">
@ -918,7 +919,6 @@ export default defineComponent({
const response = await GlobalData.getInstance() const response = await GlobalData.getInstance()
.getCurrentClient() .getCurrentClient()
?.CreateDirectoryFileManager(path.value, data); ?.CreateDirectoryFileManager(path.value, data);
console.log(response);
if (response && response.success) { if (response && response.success) {
refresh_file_list(); refresh_file_list();
$q.notify({ $q.notify({
@ -1090,6 +1090,8 @@ export default defineComponent({
}); });
loading.value = false; loading.value = false;
uploading.value = false; uploading.value = false;
refresh_file_list()
uploader.value.reset()
}, 500); }, 500);
}, },
copyFile(file: FileEntity) { copyFile(file: FileEntity) {

File diff suppressed because it is too large Load Diff

View File

@ -17,18 +17,19 @@
</div> </div>
</div> </div>
<div> <div>
<div class="row"> <div class="row" v-show="ispad">
<div class="col-1"></div> <div class="col-1"></div>
<div class="col-2 q-px-md"> <q-select class="q-pt-md" :label="$t('point')" :dense="true" filled <div class="col-2 q-px-md" @mousewheel="details_selsect"> <q-select class="q-pt-md" :label="$t('point')" :dense="true" filled
v-model="options_model" @update:model-value="(val) => { options_model = val }" :options="options" emit-value v-model="options_model" @update:model-value="(val) => { options_model = val }" :options="options" emit-value
map-options /></div> map-options /></div>
<div class="col-2 q-px-md"> <q-input filled type="number" class="q-pt-md" :dense="true" <div class="col-2 q-px-md" @mousewheel="details_selsect_val($event,'x')">
v-model="value[options_model].x" @update:model-value="chang(options_model, $event, 'h')" label="x" <q-input filled type="number" class="q-pt-md" :dense="true"
lazy-rules /> v-model="value[options_model].x" @click="()=>{url.indexOf('pad')!=-1?ipad_chang=true:''}" :readonly="url.indexOf('pad')!=-1" @update:model-value="chang(options_model, $event, 'h')" label="x"
lazy-rules >
</q-input>
</div> </div>
<div class="col-2 q-px-md"> <q-input filled type="number" class="q-pt-md" :dense="true" <div class="col-2 q-px-md" @mousewheel="details_selsect_val($event,'y')"> <q-input filled type="number" class="q-pt-md" :dense="true"
v-model="value[options_model].y" @update:model-value="chang(options_model, $event, 'h')" label="y" v-model="value[options_model].y" @click="()=>{url.indexOf('pad')!=-1?ipad_chang=true:''}" :readonly="url.indexOf('pad')!=-1" @update:model-value="chang(options_model, $event, 'h')" label="y"
lazy-rules /></div> lazy-rules /></div>
<div class="q-pt-md col-2"> <div class="q-pt-md col-2">
<q-btn color="white" @click="reset(options_model, true, 'h')" text-color="black" :label="$t('reset')" /> <q-btn color="white" @click="reset(options_model, true, 'h')" text-color="black" :label="$t('reset')" />
@ -38,7 +39,76 @@
</div> </div>
</div> </div>
<div v-show="!ispad" style="display: flex;justify-content: space-around;">
<div class="q-px-md" @mousewheel="details_selsect"> <q-select class="q-pt-md" :label="$t('point')" :dense="true" filled
v-model="options_model" @update:model-value="(val) => { options_model = val }" :options="options" emit-value
map-options /></div>
<div class="q-px-md" @mousewheel="details_selsect_val($event,'x')">
<q-input filled type="number" class="q-pt-md" :dense="true"
v-model="value[options_model].x" @focus="input_x_focus=true" @blur="input_x_focus=false" @click="()=>{url.indexOf('pad')!=-1?ipad_chang=true:''}" :readonly="url.indexOf('pad')!=-1" @update:model-value="chang(options_model, $event, 'h')" label="x"
lazy-rules >
<template v-if="input_x_focus" v-slot:append>
<q-icon name="arrow_upward" @mousedown="mousedown('+','x')" @mouseup="mouseup" />
<q-icon name="arrow_downward" @mousedown="mousedown('-','x')" @mouseup="mouseup" />
</template>
</q-input>
</div> </div>
<div class="q-px-md" @mousewheel="details_selsect_val($event,'y')"> <q-input filled type="number" class="q-pt-md" :dense="true"
v-model="value[options_model].y" @focus="input_y_focus=true" @blur="input_y_focus=false" @click="()=>{url.indexOf('pad')!=-1?ipad_chang=true:''}" :readonly="url.indexOf('pad')!=-1" @update:model-value="chang(options_model, $event, 'h')" label="y"
lazy-rules >
<template v-if="input_y_focus" v-slot:append>
<q-icon name="arrow_upward" @mousedown="mousedown('+','y')" @mouseup="mouseup" />
<q-icon name="arrow_downward" @mousedown="mousedown('-','y')" @mouseup="mouseup" />
</template>
</q-input>
</div>
<div class="q-pt-md">
<q-btn color="white" @click="reset(options_model, true, 'h')" text-color="black" :label="$t('reset')" />
</div>
<div class="q-pt-md">
<div><q-btn color="white" @click="resetall" text-color="black" :label="$t('resetall')" /></div>
</div>
</div>
</div>
<!-- </div> -->
<q-dialog v-model="ipad_chang">
<q-card style="width: 40vw; max-width: 80vw;">
<q-card-section>
<!-- <div class="text-h6">{{ $t('point') +(options_model+1 )}}</div> -->
<div class="row">
<div class="col-4"><q-select class="q-pt-md" :label="$t('point')" :dense="true" filled
v-model="options_model" @update:model-value="(val) => { options_model = val }" :options="options" emit-value
map-options /></div>
</div>
</q-card-section>
<q-card-section class="q-pt-none">
<div class="row">
<div class="col-12" style="text-align: center;"><q-btn color="white" text-color="black" icon="keyboard_arrow_up" @touchstart="handlerTouchstart('y','+')" @touchend="handlerTouchend" /></div>
</div>
<div class="row">
<div class="col-6" style="text-align: center;"><q-btn color="white" text-color="black" icon="keyboard_arrow_left" @touchstart="handlerTouchstart('x','-')" @touchend="handlerTouchend" /></div>
<div class="col-6" style="text-align: center;"><q-btn color="white" text-color="black" icon="keyboard_arrow_right" @touchstart="handlerTouchstart('x','+')" @touchend="handlerTouchend" /></div>
</div>
<div class="row">
<div class="col-12" style="text-align: center;"><q-btn color="white" text-color="black" icon="keyboard_arrow_down" @touchstart="handlerTouchstart('y','-')" @touchend="handlerTouchend" /></div>
</div>
</q-card-section>
<q-card-actions align="right" class="bg-white text-teal">
<q-btn flat :label="$t('close')" color="primary" @click="ipad_chang=false" />
</q-card-actions>
</q-card>
</q-dialog>
</template> </template>
<style scoped> <style scoped>
@ -53,6 +123,16 @@
} }
</style> </style>
<!-- 取消浏览器自带的input箭头 使用q-input的图标实现 -->
<style>
input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
-webkit-appearance: none !important;
margin: 0;
}
</style>
<script lang="ts"> <script lang="ts">
import { import {
defineComponent, defineComponent,
@ -62,7 +142,9 @@ import {
watch, watch,
nextTick, nextTick,
onBeforeUnmount, onBeforeUnmount,
defineExpose defineExpose,
toRefs,
inject
} from "vue"; } from "vue";
import { useStore } from "src/store"; import { useStore } from "src/store";
import { useI18n } from "vue-i18n"; import { useI18n } from "vue-i18n";
@ -76,20 +158,39 @@ import { config } from "process";
import { QSelect, QInput, QBtn } from "quasar"; import { QSelect, QInput, QBtn } from "quasar";
import { div } from "zrender/lib/core/vector"; import { div } from "zrender/lib/core/vector";
import GlobalData from "src/common/GlobalData"; import GlobalData from "src/common/GlobalData";
import { number } from "@intlify/core-base";
export default defineComponent({ export default defineComponent({
name: "ComponentDensityCorrection", name: "ComponentDensityCorrection",
components: { components: {
Vue3DraggableResizable Vue3DraggableResizable
}, },
setup() { props: {
col: {
type: String,
},
row: {
type: String,
}
},
setup(props) {
const now_selsect_projector:any = inject<string>("now_selsect_projector");
let set = GlobalData.getInstance().getCurrentClient(); let set = GlobalData.getInstance().getCurrentClient();
let $store = useStore(); let $store = useStore();
let $t = useI18n(); let $t = useI18n();
const ste_status = ref(0); const ste_status = ref(0);
let allconfig = JSON.parse($store.state.fusion_configuration); let allconfig = JSON.parse($store.state.fusion_configuration);
let config = JSON.parse($store.state.fusion_configuration).projectors[0];
/**
* 平板弹窗修改
*/
const ipad_chang=ref(false)
/**
* 当前url路径
*/
let url = window.location.href;
const configselsect = computed(() => { const configselsect = computed(() => {
return $store.state.selected_projector; return $store.state.selected_projector;
}); });
@ -104,10 +205,20 @@ export default defineComponent({
$store.getters.GetTheCurrentlySelectedCamera[1] $store.getters.GetTheCurrentlySelectedCamera[1]
); );
}); });
/**
* 当前配置文件
*/
let config = JSON.parse($store.state.fusion_configuration).projectors[selectedprojector.value];
/**
* 当前点的数量
*/
const value_point_amount = ref(5) const value_point_amount = ref(5)
/**
* 深度copy函数
* @param o1
* @param o2
*/
const deepcopy = (o1: any, o2: any) => { const deepcopy = (o1: any, o2: any) => {
for (let k in o2) { for (let k in o2) {
if (typeof o2[k] === "object") { if (typeof o2[k] === "object") {
@ -118,11 +229,14 @@ export default defineComponent({
} }
} }
}; };
/**
* 使用服务器配置
*/
const use_server_config = () => { const use_server_config = () => {
value.value = [] value.value = []
value_point.value = [] value_point.value = []
for (let index = 0; index < config.point4.length; index++) { for (let index = 0; index < config.point4.length; index++) {
let tmp: DensityCorrectionPoint = config.point4[index]; let tmp: DensityCorrectionPoint = config.point4[index];
value.value.push(tmp) value.value.push(tmp)
let x_y = coordinate_transformation_value_to_xy(tmp.x, tmp.y) let x_y = coordinate_transformation_value_to_xy(tmp.x, tmp.y)
@ -137,7 +251,9 @@ export default defineComponent({
value_point.value.push(tmp_point) value_point.value.push(tmp_point)
} }
} }
/**
* 使用缓存
*/
const use_set_cache = () => { const use_set_cache = () => {
if (set_cache.value[selectedprojector.value] != null) { if (set_cache.value[selectedprojector.value] != null) {
let tmp = JSON.parse(set_cache.value[selectedprojector.value]); let tmp = JSON.parse(set_cache.value[selectedprojector.value]);
@ -146,12 +262,16 @@ export default defineComponent({
recalculate_coordinates() recalculate_coordinates()
} }
} }
/**
* 保存缓存
*/
const save_set_cache = () => { const save_set_cache = () => {
let tmp = { value: value.value, value_point: value_point.value } let tmp = { value: value.value, value_point: value_point.value }
set_cache.value[selectedprojector.value] = JSON.stringify(tmp); set_cache.value[selectedprojector.value] = JSON.stringify(tmp);
} }
/**
* 监听是否切换了投影机
*/
watch( watch(
() => configselsect, () => configselsect,
(newVal, oldVal) => { (newVal, oldVal) => {
@ -178,7 +298,9 @@ export default defineComponent({
); );
/**
* 缓存 变量
*/
const set_cache: any = ref([]); const set_cache: any = ref([]);
// //
let value = ref(<DensityCorrection[]>[]); let value = ref(<DensityCorrection[]>[]);
@ -188,11 +310,21 @@ export default defineComponent({
* 当前选中的点的索引 * 当前选中的点的索引
*/ */
const options_model = ref(0) const options_model = ref(0)
/**
* html div元素用来计算
*/
const div = ref(); const div = ref();
/**
* 最大值
*/
const max = ref({ x: 0, y: 0 }) const max = ref({ x: 0, y: 0 })
/**
* 点大小
*/
const point = ref({ w: 20, h: 20 }) const point = ref({ w: 20, h: 20 })
/**
* 监听点的切换
*/
watch(() => options_model, (newval, oldval) => { watch(() => options_model, (newval, oldval) => {
set?.SetBlendingOption("blending_grids_select_point", `4:${options_model.value + 1}`) set?.SetBlendingOption("blending_grids_select_point", `4:${options_model.value + 1}`)
}, { deep: true }) }, { deep: true })
@ -205,7 +337,9 @@ export default defineComponent({
max.value.x = div.value.offsetWidth max.value.x = div.value.offsetWidth
max.value.y = div.value.offsetHeight max.value.y = div.value.offsetHeight
}) })
/**
* 计算可供选择的点
*/
const options = computed(() => { const options = computed(() => {
let tmp = [] let tmp = []
for (let index = 0; index < value_point.value.length; index++) { for (let index = 0; index < value_point.value.length; index++) {
@ -216,23 +350,61 @@ export default defineComponent({
} }
return tmp return tmp
}) })
/**
* 修改点数量函数
* @param val
*/
const chang_point_amount = (val: number) => { const chang_point_amount = (val: number) => {
start_point() start_point()
} }
/**
* 小点移动回调
* @param $event
* @param index
*/
const dragStartHandle = ($event: any, index: number) => { const dragStartHandle = ($event: any, index: number) => {
let obj_x = $event.x let obj_x = $event.x
let obj_y = $event.y let obj_y = $event.y
let tmp = coordinate_transformation_xy_to_value(obj_x, obj_y) let tmp = coordinate_transformation_xy_to_value(obj_x, obj_y)
value.value[index].x = Math.round(tmp.x) value.value[index].x = Math.round(tmp.x)
value.value[index].y = Math.round(tmp.y) value.value[index].y = Math.round(tmp.y)
send_value(index, Math.round(tmp.x), Math.round(tmp.y)) /**
save_set_cache() * 判断摄像机
*/
if(now_selsect_projector?.value=='0-0'){
if(index==1||index==3){
value.value[index].x = Math.round(tmp.x)>allconfig.projector_width?allconfig.projector_width:Math.round(tmp.x)
}
}
if(now_selsect_projector?.value=='0-1'){
if(index==0||index==2){
value.value[index].x = Math.round(tmp.x)<0?0:Math.round(tmp.x)
}
} }
send_value(index, value.value[index].x , value.value[index].y)
save_set_cache()
}
/**
* 点的数据发生修改时计算位置
* @param index
* @param $event
* @param type
*/
const chang = (index: number, $event: any, type: string) => { const chang = (index: number, $event: any, type: string) => {
index = Number(index) index = Number(index)
if (now_selsect_projector?.value == '0-0'&&props.col=='2') {
if (index == 1 || index == 3) {
value.value[index].x > allconfig.projector_width ? value.value[index].x =allconfig.projector_width : value.value[index].x
}
}
if (now_selsect_projector?.value == '0-1'&&props.col=='2') {
if (index == 0 || index == 2) {
value.value[index].x < 0 ? value.value[index].x= 0 : value.value[index].x
}
}
let tmp = coordinate_transformation_value_to_xy(value.value[index].x, value.value[index].y) let tmp = coordinate_transformation_value_to_xy(value.value[index].x, value.value[index].y)
value_point.value[index].y = Math.round(tmp.y) value_point.value[index].y = Math.round(tmp.y)
value_point.value[index].x = Math.round(tmp.x) value_point.value[index].x = Math.round(tmp.x)
@ -296,8 +468,10 @@ export default defineComponent({
onMounted(() => { onMounted(() => {
Proportion.value.x = allconfig.projector_width / (div.value.offsetWidth - point.value.w) Proportion.value.x = allconfig.projector_width / (div.value.offsetWidth - point.value.w)
Proportion.value.y = allconfig.projector_height / (div.value.offsetHeight - point.value.h) Proportion.value.y = allconfig.projector_height / (div.value.offsetHeight - point.value.h)
set?.GetBlendingConfig("").then((res) => {
config=JSON.parse(res?.config??"").projectors[selectedprojector.value];
start_point() start_point()
start() //start()
use_server_config() use_server_config()
if ( if (
sessionStorage.FourPointCalibration && sessionStorage.FourPointCalibration &&
@ -305,7 +479,8 @@ export default defineComponent({
) { ) {
set_cache.value = JSON.parse(sessionStorage.FourPointCalibration); set_cache.value = JSON.parse(sessionStorage.FourPointCalibration);
use_set_cache(); use_set_cache();
} }})
keyDown()
window.onresize = () => { window.onresize = () => {
return (() => { return (() => {
if (div != null) { if (div != null) {
@ -339,6 +514,7 @@ export default defineComponent({
value_point.value[index].x = Math.round(tmp.x) value_point.value[index].x = Math.round(tmp.x)
} }
send_value(-2,0,0) send_value(-2,0,0)
save_set_cache()
} }
const recalculate_coordinates = () => { const recalculate_coordinates = () => {
try { try {
@ -358,10 +534,228 @@ export default defineComponent({
} }
} }
/**
* 滚轮切换
* @param details
*/
const details_selsect=(details:any) => {
let spt=details.deltaY/100
if(spt>0){
if(options_model.value>=value_point.value.length-1){
options_model.value=0
}else{
options_model.value++
}
}else{
if(options_model.value<=1){
options_model.value=value_point.value.length-1
}else{
options_model.value--
}
}
}
/**
* 滚轮改变数据
*/
const details_selsect_val = (details: any, type: string) => {
let spt = details.deltaY / 100
switch (type) {
case 'x':
if (spt < 0) {
if(now_selsect_projector?.value=='0-0'&&props.col=='2'){
if(options_model.value==1||options_model.value==3){
value.value[options_model.value].x>allconfig.projector_width?value.value[options_model.value].x = allconfig.projector_width:value.value[options_model.value].x++
}else{
value.value[options_model.value].x++
}
}else{
value.value[options_model.value].x++
}
} else {
if(now_selsect_projector?.value=='0-1'&&props.col=='2'){
if(options_model.value==0||options_model.value==2){
value.value[options_model.value].x <0?value.value[options_model.value].x = 0:value.value[options_model.value].x --
}else{
value.value[options_model.value].x--
}
}else{
value.value[options_model.value].x --
}
}
break;
default:
if (spt < 0) {
value.value[options_model.value].y++
} else {
value.value[options_model.value].y--
}
break;
}
chang(options_model.value,"","")
}
/**
* 长按实现
* 单击实现
*/
let loop: NodeJS.Timeout
let loop_end: NodeJS.Timeout
const handlerTouchstart=(type:string,fun:string)=>{
loop_end = setTimeout(() => {
loop=setInterval(()=>{
if(type=='x'){
if(fun=='+'){
value.value[options_model.value].x++
}else{
value.value[options_model.value].x--
}
}else{
if(fun=='+'){
value.value[options_model.value].y++
}else{
value.value[options_model.value].y--
}
}
chang(options_model.value,0,'')
},10)
}, 1000);
if(type=='x'){
if(fun=='+'){
value.value[options_model.value].x++
}else{
value.value[options_model.value].x--
}
}else{
if(fun=='+'){
value.value[options_model.value].y++
}else{
value.value[options_model.value].y--
}
}
chang(options_model.value,0,'')
}
const handlerTouchend=()=>{
clearTimeout(loop_end)
clearInterval(loop)
}
/**
* 键盘监听
*/
const keyDown = () => {
document.onkeydown = (e) => {
let lock=0;
let e1 = e || window.event || arguments.callee.caller.arguments[0]
switch (e.code) {
case "KeyW":
value.value[options_model.value].y++
break;
case "KeyA":
value.value[options_model.value].x--
break;
case "KeyS":
value.value[options_model.value].y--
break;
case "KeyD":
value.value[options_model.value].x++
break;
default:
lock=1
break;
}
if(lock==0)chang(options_model.value,"h", 'h')
}
}
const ispad=computed(()=>{
let url = window.location.href;
return url.indexOf("pad")!=-1
})
const add_cut=(fun:string,type:string)=>{
switch (type) {
case 'x':
if(fun=='+'){
value.value[options_model.value].x++
}else{
value.value[options_model.value].x--
}
break;
default:
if(fun=='+'){
value.value[options_model.value].y++
}else{
value.value[options_model.value].y--
}
break;
}
}
let loop_start:NodeJS.Timeout
let loop_finish:NodeJS.Timeout
const input_x_focus=ref(false)
const input_y_focus=ref(false)
const mousedown = (fun:string,type:string) => {
loop_start= setTimeout(() => {
loop_finish=setInterval(()=>{
switch (type) {
case 'x':
if(fun=='+'){
value.value[options_model.value].x++
}else{
value.value[options_model.value].x--
}
break;
default:
if(fun=='+'){
value.value[options_model.value].y++
}else{
value.value[options_model.value].y--
}
break;
}
chang(options_model.value,0,'')
},30)
}, 1000);
switch (type) {
case 'x':
if(fun=='+'){
value.value[options_model.value].x++
}else{
value.value[options_model.value].x--
}
break;
default:
if(fun=='+'){
value.value[options_model.value].y++
}else{
value.value[options_model.value].y--
}
break;
}
chang(options_model.value,0,'')
}
const mouseup = () => {
clearTimeout(loop_start)
clearInterval(loop_finish)
}
defineExpose({ defineExpose({
options_model, options_model,
}); });
return { return {
input_x_focus,
input_y_focus,
mousedown,
mouseup,
add_cut,
now_selsect_projector,
details_selsect,
resetall, resetall,
div, div,
max, max,
@ -374,7 +768,13 @@ export default defineComponent({
reset, reset,
value_point_amount, value_point_amount,
chang_point_amount, chang_point_amount,
options options,
details_selsect_val,
ipad_chang,
url,
handlerTouchstart,
handlerTouchend,
ispad
} }
} }
}) })

View File

@ -11,15 +11,33 @@
<q-toggle class="float-right" v-model="array[0].isshow" label="" /> <q-toggle class="float-right" v-model="array[0].isshow" label="" />
</div> </div>
<div class="col-6"> <div class="col-6">
<q-input dense filled type="number" :autofocus="group == 0" :bg-color="group == 0 ? 'cyan-1' : ''" <q-input v-show="ispad" dense filled type="number" :autofocus="group == 0"
@focus="group = 0" v-model="array[0].value" :label="$t('upper fusion zone parameters')" lazy-rules :bg-color="group == 0 ? 'cyan-1' : ''" @focus="group = 0" v-model.number="array[0].value"
:rules="[ :label="$t('upper fusion zone parameters')" lazy-rules
@click="() => { url.indexOf('pad') != -1 ? ipad_chang = true : ''; group = 0 }"
:readonly="url.indexOf('pad') != -1" :rules="[
(val) => (val) =>
(val !== null && val !== '') || (val !== null && val !== '') ||
$t('Please enter a number'), $t('Please enter a number'),
(val) => (val) =>
(val >= 0 && val < config.height) || $t('Please enter 0-100'), (val >= 0 && val < config.height) || $t('Please enter 0-100'),
]" /> ]" />
<q-input v-show="!ispad" dense filled type="number" :autofocus="group == 0"
:bg-color="group == 0 ? 'cyan-1' : ''" @focus="() => { group = 0; input_focus[0] = true }"
v-model.number="array[0].value" :label="$t('upper fusion zone parameters')" lazy-rules
@click="() => { url.indexOf('pad') != -1 ? ipad_chang = true : ''; group = 0 }"
:readonly="url.indexOf('pad') != -1" @blur="input_focus[0] = false" :rules="[
(val) =>
(val !== null && val !== '') ||
$t('Please enter a number'),
(val) =>
(val >= 0 && val < config.height) || $t('Please enter 0-100'),
]">
<template v-if="input_focus[0]" v-slot:append>
<q-icon name="arrow_upward" @mousedown="mousedown('+', 0)" @mouseup="mouseup" />
<q-icon name="arrow_downward" @mousedown="mousedown('-', 0)" @mouseup="mouseup" />
</template>
</q-input>
</div> </div>
</div> </div>
</div> </div>
@ -30,39 +48,75 @@
<div class="col-6"> <div class="col-6">
<div class="row"> <div class="row">
<div class="col-3"> <div class="col-3">
<q-toggle class="float-right" v-model="array[1].isshow" label="" /> <q-toggle class="float-right" @click="group = 1" v-model="array[1].isshow" label="" />
</div> </div>
<div class="col-6"> <div class="col-6">
<q-input dense filled type="number" :autofocus="group == 1" :bg-color="group == 1 ? 'cyan-1' : ''" <q-input v-show="ispad" dense filled type="number" :autofocus="group == 1"
@focus="group = 1" v-model="array[1].value" :label="$t('Left fusion Band Parameters')" lazy-rules :bg-color="group == 1 ? 'cyan-1' : ''" @focus="group = 1" v-model.number="array[1].value"
:rules="[ :label="$t('Left fusion Band Parameters')" lazy-rules
@click="() => { url.indexOf('pad') != -1 ? ipad_chang = true : ''; group = 1 }"
:readonly="url.indexOf('pad') != -1" :rules="[
(val) => (val) =>
(val !== null && val !== '') || (val !== null && val !== '') ||
$t('Please enter a number'), $t('Please enter a number'),
(val) => (val) =>
(val >= 0 && val < config.width) || $t('Please enter 0-100'), (val >= 0 && val < config.width) || $t('Please enter 0-100'),
]" /> ]" />
<q-input v-show="!ispad" dense filled type="number" :autofocus="group == 1"
:bg-color="group == 1 ? 'cyan-1' : ''" @focus="() => { group = 1; input_focus[1] = true }"
v-model.number="array[1].value" :label="$t('Left fusion Band Parameters')" lazy-rules
@click="() => { url.indexOf('pad') != -1 ? ipad_chang = true : ''; group = 1 }"
:readonly="url.indexOf('pad') != -1" @blur="input_focus[1] = false" :rules="[
(val) =>
(val !== null && val !== '') ||
$t('Please enter a number'),
(val) =>
(val >= 0 && val < config.width) || $t('Please enter 0-100'),
]">
<template v-if="input_focus[1]" v-slot:append>
<q-icon name="arrow_upward" @mousedown="mousedown('+', 1)" @mouseup="mouseup" />
<q-icon name="arrow_downward" @mousedown="mousedown('-', 1)" @mouseup="mouseup" />
</template>
</q-input>
</div> </div>
</div> </div>
</div> </div>
<div class="col-6"> <div class="col-6">
<div class="row"> <div class="row">
<div class="col-3"> <div class="col-3">
<q-toggle class="float-right" v-model="array[2].isshow" label="" /> <q-toggle class="float-right" @click="group = 2" v-model="array[2].isshow" label="" />
</div> </div>
<div class="col-6"> <div class="col-6">
<q-input dense filled type="number" :autofocus="group == 2" :bg-color="group == 2 ? 'cyan-1' : ''" <q-input v-show="ispad" dense filled type="number" :autofocus="group == 2"
@focus="group = 2" v-model="array[2].value" :label="$t('Right fusion Band Parameters')" lazy-rules :bg-color="group == 2 ? 'cyan-1' : ''" @focus="group = 2" v-model.number="array[2].value"
:rules="[ :label="$t('Right fusion Band Parameters')" lazy-rules
@click="() => { url.indexOf('pad') != -1 ? ipad_chang = true : ''; group = 2 }"
:readonly="url.indexOf('pad') != -1" :rules="[
(val) => (val) =>
(val !== null && val !== '') || (val !== null && val !== '') ||
$t('Please enter a number'), $t('Please enter a number'),
(val) => (val) =>
(val >= 0 && val < config.width) || $t('Please enter 0-100'), (val >= 0 && val < config.width) || $t('Please enter 0-100'),
]" /> ]" />
<q-input v-show="!ispad" dense filled type="number" :autofocus="group == 2"
:bg-color="group == 2 ? 'cyan-1' : ''" @focus="() => { group = 2; input_focus[2] = true }"
v-model.number="array[2].value" :label="$t('Right fusion Band Parameters')" lazy-rules
@click="() => { url.indexOf('pad') != -1 ? ipad_chang = true : ''; group = 2 }"
:readonly="url.indexOf('pad') != -1" @blur="input_focus[2] = false" :rules="[
(val) =>
(val !== null && val !== '') ||
$t('Please enter a number'),
(val) =>
(val >= 0 && val < config.width) || $t('Please enter 0-100'),
]">
<template v-if="input_focus[2]" v-slot:append>
<q-icon name="arrow_upward" @mousedown="mousedown('+', 2)" @mouseup="mouseup" />
<q-icon name="arrow_downward" @mousedown="mousedown('-', 2)" @mouseup="mouseup" />
</template>
</q-input>
</div> </div>
<div class="col-3"><span>{{ $t('Whether to operate synchronously') }}</span><q-checkbox <div class="col-3"><span>{{ $t('Whether to operate synchronously') }}</span><q-checkbox
v-model="auto_sync" /></div> v-model="auto_sync" @update:model-value="() => { }" /></div>
</div> </div>
</div> </div>
</div> </div>
@ -75,15 +129,33 @@
<q-toggle class="float-right" v-model="array[3].isshow" label="" /> <q-toggle class="float-right" v-model="array[3].isshow" label="" />
</div> </div>
<div class="col-6"> <div class="col-6">
<q-input dense filled type="number" :autofocus="group == 3" :bg-color="group == 3 ? 'cyan-1' : ''" <q-input v-show="ispad" dense filled type="number" :autofocus="group == 3"
@focus="group = 3" v-model="array[3].value" :label="$t('Lower fusion Zone Parameters')" lazy-rules :bg-color="group == 3 ? 'cyan-1' : ''" @focus="group = 3" v-model.number="array[3].value"
:rules="[ :label="$t('Lower fusion Zone Parameters')" lazy-rules
@click="() => { url.indexOf('pad') != -1 ? ipad_chang = true : ''; group = 3 }"
:readonly="url.indexOf('pad') != -1" :rules="[
(val) => (val) =>
(val !== null && val !== '') || (val !== null && val !== '') ||
$t('Please enter a number'), $t('Please enter a number'),
(val) => (val) =>
(val >= 0 && val < config.height) || $t('Please enter 0-100'), (val >= 0 && val < config.height) || $t('Please enter 0-100'),
]" /> ]" />
<q-input v-show="!ispad" dense filled type="number" :autofocus="group == 3"
:bg-color="group == 3 ? 'cyan-1' : ''" @focus="() => { group = 3; input_focus[3] = true }"
v-model.number="array[3].value" :label="$t('Lower fusion Zone Parameters')" lazy-rules
@click="() => { url.indexOf('pad') != -1 ? ipad_chang = true : ''; group = 3 }"
:readonly="url.indexOf('pad') != -1" @blur="input_focus[3] = false" :rules="[
(val) =>
(val !== null && val !== '') ||
$t('Please enter a number'),
(val) =>
(val >= 0 && val < config.height) || $t('Please enter 0-100'),
]">
<template v-if="input_focus[3]" v-slot:append>
<q-icon name="arrow_upward" @mousedown="handlerTouchstart('+')" @mouseup="handlerTouchend" />
<q-icon name="arrow_downward" @mousedown="handlerTouchstart('-')" @mouseup="handlerTouchend" />
</template>
</q-input>
</div> </div>
</div> </div>
</div> </div>
@ -91,20 +163,38 @@
</div> </div>
</div> </div>
</div> </div>
<div class="col-12" v-if="group != 4"> <div class="col-12" v-show="group != 4 || ispad">
<p class="text-center" style="margin: 0 0 8;">{{ $t("Set Fusion Band Parameters") }}</p> <p class="text-center" style="margin: 0 0 8;">{{ $t("Set Fusion Band Parameters") }}</p>
<div style="display: flex; justify-content: space-evenly"> <div style="display: flex; justify-content: space-evenly">
<div> <div>
<q-slider v-model="array[group].alpha" :min="0.0" @change="chang('alpha')" :max="1" :step="0.01" color="green" <q-slider v-model="array[group].alpha" v-show="!ispad" :min="0.0" @change="chang('alpha')" :max="1" :step="0.01"
vertical reverse label-always /> color="green" vertical reverse label-always />
<div> <q-input dense filled hide-bottom-space type="number" max="1" min="0" step="0.1" <div> <q-input v-show="ispad" dense filled hide-bottom-space type="number" max="1" min="0" step="0.1"
@update:model-value="chang('alpha')" v-model="array[group].alpha" lazy-rules :rules="[ @update:model-value="chang('alpha')"
@click="() => { now_apg = 'alpha'; ispad ? ipad_chang_input = true : '' }" :readonly="ispad"
v-model.number="array[group].alpha" lazy-rules :rules="[
(val) => (val) =>
(val !== null && val !== '') || (val !== null && val !== '') ||
$t('Please enter a number'), $t('Please enter a number'),
(val) => (val) =>
(val >= 0 && val <= 1) || $t('Please enter a value within the range'), (val >= 0 && val <= 1) || $t('Please enter a value within the range'),
]" /> ]" />
<q-input v-show="!ispad" dense filled hide-bottom-space type="number" max="1" min="0" step="0.1"
@update:model-value="chang('alpha')"
@click="() => { now_apg = 'alpha'; ispad ? ipad_chang_input = true : '' }" :readonly="ispad"
@focus="input_focus_apg[0] = true" @blur="input_focus_apg[0] = false" v-model.number="array[group].alpha"
lazy-rules :rules="[
(val) =>
(val !== null && val !== '') ||
$t('Please enter a number'),
(val) =>
(val >= 0 && val <= 1) || $t('Please enter a value within the range'),
]">
<template v-if="input_focus_apg[0]" v-slot:append>
<q-icon name="arrow_upward" @mousedown="handlerTouchstart_apg('+')" @mouseup="handlerTouchend_apg" />
<q-icon name="arrow_downward" @mousedown="handlerTouchstart_apg('-')" @mouseup="handlerTouchend_apg" />
</template>
</q-input>
<p style="text-align: center;">Alpha</p> <p style="text-align: center;">Alpha</p>
<q-btn style="margin-top: 0.5rem;" color="white" @click="reset('alpha')" text-color="black" <q-btn style="margin-top: 0.5rem;" color="white" @click="reset('alpha')" text-color="black"
:label="$t('reset')" /> :label="$t('reset')" />
@ -112,16 +202,32 @@
</div> </div>
<div> <div>
<q-slider v-model="array[group].p" :min="0" @change="chang('p')" :max="16" :step="0.01" color="green" vertical <q-slider v-model="array[group].p" v-show="!ispad" :min="0" @change="chang('p')" :max="16" :step="0.01"
reverse label-always /> color="green" vertical reverse label-always />
<div> <q-input dense filled hide-bottom-space type="number" max="16" min="0" step="0.1" <div> <q-input v-show="ispad" dense filled hide-bottom-space type="number" max="16" min="0" step="0.1"
@update:model-value="chang('p')" v-model="array[group].p" lazy-rules :rules="[ @update:model-value="chang('p')" @click="() => { now_apg = 'p'; ispad ? ipad_chang_input = true : '' }"
:readonly="ispad" v-model.number="array[group].p" lazy-rules :rules="[
(val) => (val) =>
(val !== null && val !== '') || (val !== null && val !== '') ||
$t('Please enter a number'), $t('Please enter a number'),
(val) => (val) =>
(val >= 0 && val <= 16) || $t('Please enter a value within the range'), (val >= 0 && val <= 16) || $t('Please enter a value within the range'),
]" /> ]" />
<q-input v-show="!ispad" dense filled hide-bottom-space type="number" max="16" min="0" step="0.1"
@focus="input_focus_apg[1] = true" @blur="input_focus_apg[1] = false" @update:model-value="chang('p')"
@click="() => { now_apg = 'p'; ispad ? ipad_chang_input = true : '' }" :readonly="ispad"
v-model.number="array[group].p" lazy-rules :rules="[
(val) =>
(val !== null && val !== '') ||
$t('Please enter a number'),
(val) =>
(val >= 0 && val <= 16) || $t('Please enter a value within the range'),
]">
<template v-if="input_focus_apg[1]" v-slot:append>
<q-icon name="arrow_upward" @mousedown="handlerTouchstart_apg('+')" @mouseup="handlerTouchend_apg" />
<q-icon name="arrow_downward" @mousedown="handlerTouchstart_apg('-')" @mouseup="handlerTouchend_apg" />