This commit is contained in:
xiaojibeier
2026-07-06 03:36:46 +08:00
parent 300b15aa9f
commit f3726f0810
506 changed files with 221985 additions and 1 deletions
+66
View File
@@ -0,0 +1,66 @@
# ── 依赖 ──────────────────────────────────────────
node_modules/
# ── 构建产物 ──────────────────────────────────────
dist/
dist-ssr/
build/
*.tsbuildinfo
# ── 环境变量(含密钥,勿提交)──────────────────────
.env
.env.*
!.env.example
# ── 日志 ──────────────────────────────────────────
logs/
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
# ── 测试 / 覆盖率 ─────────────────────────────────
coverage/
/cypress/videos/
/cypress/screenshots/
# ── Tauri / Rust ──────────────────────────────────
src-tauri/target/
src-tauri/gen/schemas/
# ── 移动端 / 本地 SDK(体积大,本机路径)──────────
NDK/
# ── 系统文件 ──────────────────────────────────────
.DS_Store
Thumbs.db
Desktop.ini
# ── 编辑器 / IDE ──────────────────────────────────
.vscode/*
!.vscode/extensions.json
.idea/
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
# ── Cursor / AI 本地缓存 ───────────────────────────
.cursor/
# ── 密钥与证书 ────────────────────────────────────
*.pem
*.p12
*.key
*.keystore
credentials.json
secrets.json
# ── 临时文件 ──────────────────────────────────────
*.local
*.tmp
*.temp
.cache/
Executable
+1
View File
@@ -0,0 +1 @@
SDK Manager Tools
Regular → Executable
+34 -1
View File
@@ -1,2 +1,35 @@
# weihai_erp
# showtime_pay
This template should help get you started developing with Vue 3 in Vite.
## Recommended IDE Setup
[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur).
## Customize configuration
See [Vite Configuration Reference](https://vite.dev/config/).
## Project Setup
```sh
npm install
```
### Compile and Hot-Reload for Development
```sh
npm run dev
```
### Compile and Minify for Production
```sh
npm run build
```
## 变更记录
- **仓库级按日摘录(威海前端):** 根目录 **[`PROJECT_OVERVIEW.md`](../../../PROJECT_OVERVIEW.md)** → **「8. showtime_weihai」** 变更摘录(**最新见 2026-05-10** 含组织/部门关联物料分类、成员列与 KPI 展示、常量信息选择过滤与删除确认等;**2026-05-09** 含多维表传播索引与配置管理刷新等)。
- **应用内「更新说明」弹层:** [`src/data/appChangelog.js`](src/data/appChangelog.js)(与上者同日条目应对齐)。
- **多维表技术长文(列类型、数据源、`oa_config` 备忘等):** [`docs/多维表格(MDT)_改动纪要.md`](docs/多维表格(MDT)_改动纪要.md)。
+107
View File
@@ -0,0 +1,107 @@
# 多维表格(MDT)改动纪要
面向产品/联调:本节为多维表与 **配置保存 → 多维表衍生回写** 的技术长文。**按日变更摘录**以仓库根目录 **`PROJECT_OVERVIEW.md` →「8. showtime_weihai」** 为准(与 `src/data/appChangelog.js` 对齐);本文件写实现细节与沿革,避免与总览表格完全重复。
---
## 1. 数据源 listed 与请求策略
| 项 | 说明 |
|----|------|
| 共用模块 | `src/views/material/mdt/dsListedApi.js`:白名单映射 `oa_bank``oa_config``oa_led`ledger)等,未命中时 **`oa_<x>``/api/<x>/listed`** 回退。 |
| 主视图 | `MultiDimensionalTable.vue``getListedApiForDsTable` 从上述模块导入,避免与各处的 listed 路由分叉。 |
| 去重 | `POST /api/excel/dynamic/data_source/listed` 成功后记 `dataSourcesListedLoaded`,并用 inflight Promise 合并并发调用。 |
| 并行 | 关联列 / 数据源列的 `runRefreshLinkDisplayMap` 内对 `fetchLinkDisplay``fetchDsDisplay` 使用 `Promise.all`。 |
| 预取 | `prefetchSideSheetCaches` 对侧表预取并行;`ensureLookupTable` 对同一 `target` 用 Map 合并进行中的请求。 |
---
## 2. LinkPicker(关联记录 / 数据源选择弹窗)
| 项 | 说明 |
|----|------|
| 解析模块 | `src/views/material/mdt/pickerFieldResolve.js``resolvePickerDynLabel` 等对动态表 **`cells`** 按列类型递归解析(查找引用、关联、数据源、单多选等),与主表网格侧语义对齐。 |
| 预热 | `warmupPickerResolveContext`:对列中出现的 `table:` / `ds:` 及直接查表目标做 **BFS**,并合并各层列定义中出现的 **数据源** 以拉 listed 构建 `dsMapsByTarget`。 |
| 动态表判定 | `linkTarget` 规范化(如 `Table:``table:`);仅凭「行内有 `cells` + 已有列定义」也会走格子解析路径,避免误用扁平行而退化为 `row.id`。 |
| 可读标题兜底 | 配置列解析结果为内部 id 时,尝试扫描同类列推断可读文案;占位行号 `#1``#2` 等兜底。 |
| 加载 UX | `element-loading-text="正在加载可选记录…"`。 |
| 刷新 | `pickerViewEpoch` + 列表 `:key`,预热完成后强制刷新列表与已选 chips。 |
| **写回常量不出现在候选列表(2026-05-10)** | 目标为 `oa_config` 时,合并 listed 后 **`filter` 掉** `desc` 命中 `isOaConfigDescFromMdtWriteback` 的行(与多维表 `formatOaConstWriteDesc` 文案一致:`来自多维表格「…」· 列「…」`),防止「表写回的常量」在弹窗再次被关联。实现:`oaConfigListedMerge.js``OA_CONFIG_DESC_FROM_MDT_SUFFIX_RE`)、`LinkPicker.vue`。 |
---
## 3. 查找引用与关联列的体验与样式
| 项 | 说明 |
|----|------|
| 查找引用占位 | 无解析结果时:**「—」+ 「无引用数据」**(小字);整格占位使用 `cell-lookup-placeholder-row`(深灰、`font-style: normal`,与默认浅灰斜体计算列区分)。 |
| 悬停说明 | `buildLookupFailureExplanation` / `getLookupCellTooltip` 用词改为白话(避免「对方表」「该行无录入」等偏开发措辞)。 |
| 关联列 | 标签可带 `title`;有 PK 但尚未解析出可读 tag 时的加载/失败提示文案。 |
---
## 4. 涉及文件一览(数据源于传播与多维表 UX 的早期迭代)
- `src/views/material/MultiDimensionalTable.vue`
- `src/views/material/mdt/LinkPicker.vue`
- `src/views/material/mdt/pickerFieldResolve.js`(新增)
- `src/views/material/mdt/dsListedApi.js`(新增)
---
## 5. 衍生常量传播 · 上游索引(减轻全表 view)
保存配置项或多维表格子写回常量后,`oaConstWritePropagation.js` 会按合并后的 `oa_config` listed 去多维表里找「漂移」并调用 `/api/config/set`。**冷启动仍会逐表 view**,之后便依赖客户端缓存尽量 **少 view**
| 项 | 说明 |
|----|------|
| 静态依赖 | `mdtConstUpstreamDeps.js``computeMdtUpstreamScanHint(columns, rows)`**`oaConstWrite` / `oa_const_write`** 绑定列推断:公式链上的 `ds:oa_config` 格内 PK → Pinia 同款 **sig**;数字列写回 / 链上出现 lookup·link → 该表 **scanAll(保守)**;无任何绑定 → **noDeps**。 |
| 持久化索引 | `mdtUpstreamIndexCache.js``localStorage` **`mdt_const_upstream_idx_v1`**`upsert` / `shouldScanTableForConfigPatch(excel_code, patchSig)`。传播循环里:**无索引或应扫时才 view**;每次 view 后对应该表 **`upsert` hint**。 |
| 表格侧回填 | `MultiDimensionalTable.vue`:换表 **`loadContent`**、**保存成功** 后对本表 **`upsert`**,保证用户在 MDT 里改绑定/公式后索引不陈旧。**从未在本机打开过的表**只能靠传播首轮 view 写入索引。 |
| 补丁 sig | `configConstantSig(classify_code, key)``patchSig` 空时仍可依赖索引 **跳过 noDeps**,避免无写回表的无效请求。 |
| 演进 | 未做服务端依赖索引;日后订单/长连接可替换或补强。 |
**涉及文件**`oaConstWritePropagation.js``mdtConstUpstreamDeps.js``mdtUpstreamIndexCache.js``MultiDimensionalTable.vue`
---
## 6. 配置项管理:`loadCfg` 时机与进行中提示(`ConfigManage.vue`
| 项 | 说明 |
|----|------|
| 二次拉列表 | 保存:`/api/config/set` 成功 → **第一次 `loadCfg`**`propagateMdtDependentConstants`(可能二次 `config/set`)→ **再一次 `loadCfg`**,避免首拉早于衍生落库。 |
| 橘色常驻提示 | 第一次 `loadCfg` 后到传播结束前:`ElMessage.warning``duration: 0`(口语文案,示意「顺带算多维表里绑定的」);**`finally``close`**,再出现绿色的「已按多维表公式同步 N 项…」。 |
---
## 7. 已知产品差异(尚未在本迭代落地)
### 常量 / 「常量信息」数据源(`oa_config`
- 接口 `POST /api/excel/dynamic/data_source/listed`**`table: oa_config`**,下拉展示一般为 **「常量信息」**。
- 「配置项管理」(`ConfigManage.vue` / 菜单「常量管理」)业务流程为:**一级分类 → 子分类 → `/api/config/listed`(带 `classify_code`)→ 每条配置的 `key` / `value` / `desc`**。
- 当前多维表「数据源选择」对 `oa_config` 仍走通用 **扁平 listed +「展示字段」**,与后台分类层级 **不完全同构**;若要「先分类再选常量」,需单独产品方案与前端交互(及部分存盘结构设计,例如 `classify_code + key`),**记入本文档备忘,后续专项做**。
---
## 8. 配置项管理卡片:多维表 desc 分行与阴影
- 多维表写回常量时 `desc` 形态为 **`来自多维表格「表名」· 列「列标题」`**(见 `MultiDimensionalTable.vue``formatOaConstWriteDesc`)。
- `ConfigManage.vue` 若匹配该形态,将 **表来源****`· 列「列名」`** 拆成两行,放在 **Key/Value 与底栏之间的 flex 伸展区**内:同行卡片 **栅格 stretch 等高**;多维表两行用 **`justify-content: space-between`** 把列名行贴在底栏分割线上方,**不依赖再堆一行撑高整卡**;单行 `desc` 仍在区顶,余下空白由 flex 填充。栅格显式 **`column-gap` / `row-gap`**,子卡 **勿设 `width:100%` 顶破轨道** 以免叠层。
---
## 9. 删除常量/删列确认与格内失效展示(2026-05-10)
| 项 | 说明 |
|----|------|
| 配置项删除 | `ConfigManage.vue`:删除前明示页签/物料/多维表可能仍引用、**不自动修改引用**;取消单独捕获。多维表写回的占位项仍禁止在此删除(既有逻辑)。 |
| 删除列 | `MultiDimensionalTable.vue``columnDeleteTouchesOaConst`——列为 **`ds:oa_config`**,或数字/公式列且存在 **`oaConstWrite`** 绑定——删列确认追加文案。 |
| 后台已删常量、格内 PK 仍在 | `resolveDsCell` 无记录时返回 **空串**;格内仍有 PK 时常 **仍渲染数据源外壳、主展示区为空**。 |
---
## 10. 维护说明
- **按日摘录**:根目录 **`PROJECT_OVERVIEW.md`** → **「8. showtime_weihai」**;应用内弹出层 **`src/data/appChangelog.js`** 与总览对齐。
- 修改本纪要、changelog 或总览后,生产环境需重新 **build** 方可生效。
+45
View File
@@ -0,0 +1,45 @@
# 组织管理 · 关联物料分类
面向联调/产品:编辑组织弹窗右侧「关联物料分类」的实现说明。与 **应用内更新说明**`src/data/appChangelog.js`)及根目录 **`PROJECT_OVERVIEW.md` →「8. showtime_weihai」** 同日(2026-05-10)条目对齐。
---
## 1. 接口约定
| 用途 | 方法 | 路径 | Body 要点 |
|------|------|------|-----------|
| 当前组织已关联的物料分类 | POST | `/api/company/category_listed` | `{ company_code }` |
| 新增关联 | POST | `/api/company/link_category` | `{ company_code, category_code }` |
| 解除关联 | POST | `/api/company/unlink_category` | `{ company_code, category_code }` |
| 全量物料分类树(勾选用 + 路径索引) | POST | `/api/category/listed` | `{}` |
响应解析:关联列表兼容 `data` 为数组或 `list` / `rows` / `categories` 等字段;分类树与物料分类页一致,节点映射为 `id``category_code`)、`label``children`
---
## 2. 交互流程
1. **编辑组织**(已有 `company_code`):打开弹窗后请求 `category_listed`,并行请求 `category/listed` 构建 **code →「父 / 子 / …」** 路径表;列表每项上方展示灰色路径行,下方为名称与编码。
2. **新建组织**:无组织编码,右侧仅说明文案,不调列表与维护接口。
3. **管理关联**:点击「管理关联」加载树,预勾选当前已关联节点;用户勾选/取消勾选后点「确认」,与进入管理时的勾选快照 diff,分别调用 `link_category``unlink_category`
4. **加载文案**:列表与树加载态为「加载中」;提交关联过程遮罩为 **「关联中」**。
5. **说明文案**:标题行右侧橘色小字提示进入管理后勾选 / 取消勾选与确认的含义(无编辑权限时仍可看到说明,可无按钮)。
---
## 3. 布局与样式(OrgManage.vue
- 弹窗宽度约 **1200px**`el-dialog__body` **固定高度**`min(68vh, 720px)`),避免树数据加载后整窗被撑高。
- 左侧表单区、右侧关联区 **内部纵向滚动**;分类票据双列、关联列表与树区域 **禁止横向滚动条**(树标签省略号截断)。
- 右侧虚线容器内:列表模式与管理模式(搜索 + 树 + 取消/确认)切换,高度在固定窗体内分配。
---
## 4. 代码位置
| 项 | 路径 |
|----|------|
| 页面 | `src/views/base/OrgManage.vue` |
| 权限 | `usePagePower('company')``canUpdate` 控制「管理关联」按钮 |
同名能力(**部门 `dept_code`**、页签入口)见 **`docs/部门管理_关联物料分类.md`**。
+44
View File
@@ -0,0 +1,44 @@
# 部门管理 · 关联物料分类
面向联调/产品:**部门管理** 右侧顶栏页签 **「关联物料分类」** 的实现说明。交互与 **组织管理** 弹窗内「关联物料分类」一致(已关联列表、路径行、「管理关联」全树勾选、确认 diff 保存),差异在于主键为 **部门 `dept_code`**、入口为页签而非弹窗侧栏。与 **应用内更新说明**`src/data/appChangelog.js`**2026-05-10** 条目对齐(与 `docs/组织管理_关联物料分类.md` 同日)。
---
## 1. 接口约定
| 用途 | 方法 | 路径 | Body 要点 |
|------|------|------|-----------|
| 当前部门已关联的物料分类 | POST | `/api/dept/category_listed` | `{ dept_code }` |
| 新增关联 | POST | `/api/dept/link_category` | `{ dept_code, category_code }` |
| 解除关联 | POST | `/api/dept/unlink_category` | `{ dept_code, category_code }` |
| 全量物料分类树(勾选用 + 路径索引) | POST | `/api/category/listed` | `{}` |
响应解析:关联列表兼容 `data` 为数组,或对象内 `list` / `rows` / `categories` / `data` 等字段;分类树与组织侧一致,节点映射为 `id``category_code`)、`label``children`
---
## 2. 交互流程
1. **选择部门**:左侧部门树选中节点后,若当前页签为 **「关联物料分类」**,请求 `category_listed``dept_code`),并行请求 `category/listed` 构建 **code →「父 / 子 / …」** 路径表;列表项上方为灰色路径行,下方为名称与编码。
2. **未选部门**:右侧工作区提示先选部门,不调列表与维护接口。
3. **切换页签**:切回「角色列表」时退出物料分类管理态(取消编辑中的树);切至「关联物料分类」且已有选中部门时刷新已关联列表。
4. **切换部门**:在「关联物料分类」下更换部门时退出管理态并重新拉取该部门的关联列表。
5. **管理关联**:点击「管理关联」加载树,预勾选当前已关联节点;勾选/取消后点「确认」,与进入管理时的快照 diff,分别调用 `link_category``unlink_category`
6. **加载文案**:列表与树加载态为「加载中」;提交关联过程遮罩为 **「关联中」**。
7. **权限**`usePagePower('dept')``canUpdate` 控制「管理关联」按钮(无编辑权限时仍可看到橘色说明文案)。
---
## 3. 布局与样式(DeptManage.vue
- 右侧 **`dept-right-stack`**:顶栏 **「角色列表 | 关联物料分类」**,下方整块切换;**不** 把页签放在左侧部门栏。
- 「关联物料分类」:`dept-mc-workspace` 占满页签下方区域;有部门时为虚线框 **`dept-mc-bordered`** 包一层,内层 **`dept-mc-panel`** 与组织侧 `org-mc-*` 规则对齐(列表滚动区、管理态搜索 + 树 + 取消/确认;树标签省略、内部纵向滚动)。
---
## 4. 代码与文档对照
| 项 | 路径 |
|----|------|
| 页面 | `src/views/base/DeptManage.vue` |
| 类似实现(组织 + `company_code` | `src/views/base/OrgManage.vue``docs/组织管理_关联物料分类.md` |
Executable
+25
View File
@@ -0,0 +1,25 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/png" href="%BASE_URL%favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="preload" as="image" href="%BASE_URL%map.webp" type="image/webp" />
<title></title>
<script>
// 必须在所有 JS 模块加载前运行,否则 loglevel 会缓存原始 console 引用
// 屏蔽 OpenIM SDK 内部 "SDK =>" 调试日志
;(function () {
var _filter = function (a) { return typeof a === 'string' && a.startsWith('SDK =>') }
;['log', 'info', 'debug', 'trace'].forEach(function (m) {
var orig = console[m].bind(console)
console[m] = function () { if (!_filter(arguments[0])) orig.apply(console, arguments) }
})
})()
</script>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.js"></script>
</body>
</html>
Executable
+28
View File
@@ -0,0 +1,28 @@
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"]
},
"target": "es2020",
"module": "esnext",
"moduleResolution": "node",
"jsx": "preserve",
"strict": true,
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"resolveJsonModule": true,
"allowSyntheticDefaultImports": true,
"lib": ["esnext", "dom", "dom.iterable", "scripthost"]
},
"include": [
"src/**/*.js",
"src/**/*.vue",
"src/**/*.json"
],
"exclude": [
"node_modules",
"dist"
]
}
+7
View File
@@ -0,0 +1,7 @@
import VabCard from './index.vue'
VabCard.install = function(app) {
app.component(VabCard.name, VabCard)
}
export default VabCard
+81
View File
@@ -0,0 +1,81 @@
<template>
<el-card :body-class="props.bodyClass" :body-style="props.bodyStyle" :class="['vab-card', $attrs.class]" :shadow="props.shadow">
<template v-if="$slots.header || props.title" #header>
<slot v-if="$slots.header" name="header"></slot>
<template v-else>{{ props.title }}</template>
</template>
<el-skeleton v-if="props.skeleton" animated :loading="skeletonShow" :rows="props.skeletonRows">
<template #default>
<slot></slot>
</template>
</el-skeleton>
<slot v-else></slot>
<template v-if="$slots.footer" #footer>
<slot name="footer"></slot>
</template>
</el-card>
</template>
<script setup>
import { ref, onBeforeUnmount } from 'vue'
import { ElCard } from 'element-plus'
// 定义组件名称
defineOptions({
name: 'VabCard',
})
// 定义 props
const props = defineProps({
...ElCard.props,
shadow: {
type: String,
default: 'never',
},
skeleton: {
type: Boolean,
default: false,
},
skeletonRows: {
type: Number,
default: 5, // 显示的数量会比传入的数量多 1
},
title: {
type: String,
default: '',
},
})
const skeletonShow = ref(true)
const timer = setTimeout(() => {
skeletonShow.value = false
}, 500)
onBeforeUnmount(() => {
if (timer) clearTimeout(timer)
})
</script>
<style lang="scss" scoped>
.vab-card {
:deep() {
.el-card__header {
font-weight: 500;
color: inherit;
background: inherit;
[class*='ri-'] {
background-image: linear-gradient(120deg, #bd34fe 30%, var(--el-color-primary));
background-clip: text;
-webkit-text-fill-color: transparent;
}
}
.el-skeleton {
height: 100%;
overflow: hidden;
}
}
}
</style>
+7
View File
@@ -0,0 +1,7 @@
import VabColorfulCard from './index.vue'
VabColorfulCard.install = function(app) {
app.component(VabColorfulCard.name, VabColorfulCard)
}
export default VabColorfulCard
+92
View File
@@ -0,0 +1,92 @@
<template>
<el-card
:body-style="props.bodyStyle"
class="vab-colorful-card"
:shadow="props.shadow"
:style="
props.style
? props.style
: {
background: `linear-gradient(135deg, ${props.colorFrom} 15%, ${props.colorTo} 85%)`,
}
"
>
<!-- 头部插槽 -->
<template v-if="$slots.header" #header>
<slot name="header"></slot>
</template>
<!-- 使用 Iconify -->
<Icon v-if="props.icon" :icon="props.icon" class="card-icon" />
<!-- 默认插槽 -->
<slot></slot>
</el-card>
</template>
<script setup>
import { ElCard } from 'element-plus'
import { Icon } from '@iconify/vue' // 导入 Iconify
// 定义组件名称
defineOptions({
name: 'VabColorfulCard',
})
// 定义 props
const props = defineProps({
bodyStyle: {
type: [String, Object],
default: ''
},
shadow: {
type: String,
default: 'always',
},
colorFrom: {
type: String,
default: '',
},
colorTo: {
type: String,
default: '',
},
title: {
type: String,
default: '',
},
icon: {
type: String,
default: '',
},
style: {
type: Object,
default: () => ({}),
},
})
</script>
<style lang="scss" scoped>
.vab-colorful-card {
position: relative;
min-height: 120px;
cursor: pointer;
border: 1px solid rgba(0, 0, 0, 0.1); // 更淡的边框
border-radius: 4px; // 稍微小一点的圆角
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05); // 更轻的阴影
transition: all 0.25s;
:deep(.el-card__header) {
color: var(--el-color-white);
}
:deep(.el-card__body) {
padding: 20px;
}
.card-icon {
position: absolute;
right: 20px;
font-size: 60px;
transform: rotate(15deg);
}
}
</style>
+7
View File
@@ -0,0 +1,7 @@
import VabCount from './index.vue'
VabCount.install = function(app) {
app.component(VabCount.name, VabCount)
}
export default VabCount
+106
View File
@@ -0,0 +1,106 @@
<template>
<span>{{ displayValue }}</span>
</template>
<script setup>
import { ref, computed, watch } from 'vue'
import { isNumber } from '@/utils/validate'
import { TransitionPresets, useTransition } from '@vueuse/core'
defineOptions({
name: 'VabCount',
})
const props = defineProps({
startValue: {
type: Number,
required: false,
default: 0,
},
endValue: {
type: Number,
required: false,
default: 20,
},
duration: {
type: Number,
required: false,
default: 3000,
},
autoplay: {
type: Boolean,
required: false,
default: true,
},
decimals: {
type: Number,
required: false,
default: 0,
validator(value) {
return value >= 0
},
},
decimal: {
type: String,
required: false,
default: '.',
},
separator: {
type: String,
required: false,
default: ',',
},
prefix: {
type: String,
required: false,
default: '',
},
suffix: {
type: String,
required: false,
default: '',
},
useEasing: {
type: Boolean,
required: false,
default: true,
},
easingFn: {
type: Array,
default: () => [0.2, 0.2, 0, 1],
},
})
const source = ref(props.startValue)
const output = useTransition(source, {
duration: props.duration,
transition: props.useEasing ? props.easingFn : TransitionPresets.linear,
})
const formatNumber = (num) => {
num = num.toFixed(props.decimals)
num += ''
const x = num.split('.')
let x1 = x[0]
const x2 = x.length > 1 ? props.decimal + x[1] : ''
const rgx = /(\d+)(\d{3})/
if (props.separator && !isNumber(props.separator)) {
while (rgx.test(x1)) {
x1 = x1.replace(rgx, `$1${props.separator}$2`)
}
}
return props.prefix + x1 + x2 + props.suffix
}
const displayValue = computed(() => formatNumber(output.value))
watch(
props,
(props) => {
if (props.autoplay) {
source.value = props.endValue
}
},
{ immediate: true }
)
</script>
+23
View File
@@ -0,0 +1,23 @@
import VabColorfulCard from './components/VabColorfulCard'
import VabCard from './components/VabCard'
import VabCount from './components/VabCount'
// 导入样式
import './styles/vab.scss'
const components = [
VabColorfulCard,
VabCard,
VabCount,
// 其他组件...
]
export default {
install(app) {
components.forEach(component => {
app.component(component.name, component)
})
}
}
export { VabColorfulCard, VabCard, VabCount }
+16
View File
@@ -0,0 +1,16 @@
@use 'normalize.css';
@use 'element-plus/theme-chalk/src/index';
@use './var.scss' as *;
// 基础样式
body {
font-size: var(--el-font-size-base);
color: var(--el-color-black);
background: var(--el-background-color);
}
// 卡片样式
.vab-card {
border-radius: var(--el-border-radius-base);
transition: var(--el-transition);
}
+36
View File
@@ -0,0 +1,36 @@
@use './variables.scss' as *;
:root {
//背景色
--el-background-color: #f6f8f9;
//菜单背景色
--el-menu-background-color: #282c34;
//菜单文字颜色
--el-menu-color-text: #ffffff;
// 主题色
--el-color-primary: #{$base-color-primary};
--el-color-primary-light-1: #{$vab-color-primary-light-1};
--el-color-primary-light-2: #{$vab-color-primary-light-2};
--el-color-primary-light-3: #{$vab-color-primary-light-3};
--el-color-primary-light-4: #{$vab-color-primary-light-4};
--el-color-primary-light-5: #{$vab-color-primary-light-5};
--el-color-primary-light-6: #{$vab-color-primary-light-6};
--el-color-primary-light-7: #{$vab-color-primary-light-7};
--el-color-primary-light-8: #{$vab-color-primary-light-8};
--el-color-primary-light-9: #{$vab-color-primary-light-9};
// 成功色
--el-color-success: #{$base-color-success};
--el-color-success-light: #{$vab-color-success-light};
--el-color-success-lighter: #{$vab-color-success-lighter};
// 白色
--el-color-white: #ffffff;
--el-color-warning: #{$base-color-warning};
--el-color-danger: #{$base-color-danger};
--el-transition-duration: 0.25s;
--el-transition: all var(--el-transition-duration) cubic-bezier(0.42, 0, 0.58, 1);
}
+26
View File
@@ -0,0 +1,26 @@
@use "sass:color";
/**
* @description 全局主题变量配置
*/
$base-color-primary: #4e88f3;
$base-color-success: #13ce66;
$base-color-warning: #e6a23c;
$base-color-danger: #fd4e4e;
$base-color-error: #fd4e4e;
$base-color-text: #909399;
$vab-color-primary: $base-color-primary;
$vab-color-primary-light-1: color.mix(white, $base-color-primary, 10%);
$vab-color-primary-light-2: color.mix(white, $base-color-primary, 20%);
$vab-color-primary-light-3: color.mix(white, $base-color-primary, 30%);
$vab-color-primary-light-4: color.mix(white, $base-color-primary, 40%);
$vab-color-primary-light-5: color.mix(white, $base-color-primary, 50%);
$vab-color-primary-light-6: color.mix(white, $base-color-primary, 60%);
$vab-color-primary-light-7: color.mix(white, $base-color-primary, 70%);
$vab-color-primary-light-8: color.mix(white, $base-color-primary, 80%);
$vab-color-primary-light-9: color.mix(white, $base-color-primary, 90%);
$vab-color-success: $base-color-success;
$vab-color-success-light: color.mix(white, $base-color-success, 80%);
$vab-color-success-lighter: color.mix(white, $base-color-success, 90%);
Generated Executable
+8887
View File
File diff suppressed because it is too large Load Diff
Executable
+52
View File
@@ -0,0 +1,52 @@
{
"name": "showtime_pay",
"version": "0.0.0",
"private": true,
"type": "module",
"scripts": {
"dev": "vite",
"prebuild": "node scripts/bump-build-id.mjs",
"build": "vite build",
"preview": "vite preview",
"tauri": "tauri",
"tauri:dev": "tauri dev",
"tauri:build": "tauri build"
},
"dependencies": {
"@amap/amap-jsapi-loader": "^1.0.1",
"@element-plus/icons-vue": "^2.3.1",
"@iconify/vue": "^4.1.1",
"@openim/client-sdk": "^3.8.3",
"@tauri-apps/api": "^2.8.0",
"@univerjs/preset-sheets-core": "^0.16.1",
"@univerjs/presets": "^0.16.1",
"@vueuse/core": "^12.7.0",
"animate.css": "^4.1.1",
"axios": "^1.7.9",
"countup.js": "^2.9.0",
"dayjs": "^1.11.13",
"echarts": "^6.0.0",
"element-plus": "^2.9.4",
"mapbox-gl": "^3.18.1",
"normalize.css": "^8.0.1",
"nprogress": "^0.2.0",
"pinia": "^2.3.1",
"postcss": "^8.5.2",
"qs": "^6.14.0",
"sortablejs": "^1.15.7",
"vite-plugin-remove-console": "^2.2.0",
"vue": "^3.5.13",
"vue-i18n": "^11.1.1",
"vue-router": "^4.5.0",
"xlsx": "^0.18.5"
},
"devDependencies": {
"@tauri-apps/cli": "^2.8.4",
"@vitejs/plugin-vue": "^5.2.1",
"autoprefixer": "^10.4.21",
"cross-env": "^10.0.0",
"sass": "^1.85.0",
"vite": "^6.0.11",
"vite-plugin-vue-devtools": "^7.7.1"
}
}
+5
View File
@@ -0,0 +1,5 @@
export default {
plugins: {
autoprefixer: {},
},
}
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 957 B

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 938 B

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 927 B

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Executable
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 494 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 264 KiB

+58
View File
@@ -0,0 +1,58 @@
/**
* 生产 11 位构建号:YYYYMMDD(8+ 当日第几次构建(3 位 001~999)
* 状态存 build/build-sequence.json,结果写 src/config/buildId.json
* 在 npm prebuild 时执行(仅正式 vite build 前,dev 不跑)
*/
import fs from 'node:fs'
import path from 'node:path'
import { fileURLToPath } from 'node:url'
const __dirname = path.dirname(fileURLToPath(import.meta.url))
const root = path.resolve(__dirname, '..')
const statePath = path.join(root, 'build', 'build-sequence.json')
const outPath = path.join(root, 'src', 'config', 'buildId.json')
const now = new Date()
const y = now.getFullYear()
const m = String(now.getMonth() + 1).padStart(2, '0')
const d = String(now.getDate()).padStart(2, '0')
const ymd8 = `${y}${m}${d}`
const todayKey = `${y}-${m}-${d}`
let state = { date: todayKey, daySeq: 0 }
if (fs.existsSync(statePath)) {
try {
const prev = JSON.parse(fs.readFileSync(statePath, 'utf8'))
if (prev && typeof prev === 'object') {
state.date = prev.date || todayKey
state.daySeq = Number.isFinite(prev.daySeq) ? prev.daySeq : 0
}
} catch { /* 忽略损坏文件 */ }
}
if (state.date === todayKey) {
state.daySeq = (state.daySeq || 0) + 1
} else {
state.date = todayKey
state.daySeq = 1
}
if (state.daySeq > 999) {
console.warn('[bump-build-id] 当日构建已超过 999 次,已钳位为 999')
state.daySeq = 999
}
const buildId = `${ymd8}${String(state.daySeq).padStart(3, '0')}`
fs.mkdirSync(path.dirname(statePath), { recursive: true })
fs.writeFileSync(statePath, JSON.stringify(state, null, 2), 'utf8')
fs.mkdirSync(path.dirname(outPath), { recursive: true })
fs.writeFileSync(
outPath,
JSON.stringify(
{ buildId, generatedAt: new Date().toISOString() },
null,
2,
),
'utf8',
)
console.log(`[bump-build-id] buildId=${buildId}`)
+4
View File
@@ -0,0 +1,4 @@
# Generated by Cargo
# will have compiled files and executables
/target/
/gen/schemas
Generated Executable
+5067
View File
File diff suppressed because it is too large Load Diff
+25
View File
@@ -0,0 +1,25 @@
[package]
name = "app"
version = "0.1.0"
description = "A Tauri App"
authors = ["you"]
license = ""
repository = ""
edition = "2021"
rust-version = "1.77.2"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[lib]
name = "app_lib"
crate-type = ["staticlib", "cdylib", "rlib"]
[build-dependencies]
tauri-build = { version = "2.4.1", features = [] }
[dependencies]
serde_json = "1.0"
serde = { version = "1.0", features = ["derive"] }
log = "0.4"
tauri = { version = "2.8.5", features = [] }
tauri-plugin-log = "2"
+3
View File
@@ -0,0 +1,3 @@
fn main() {
tauri_build::build()
}
+11
View File
@@ -0,0 +1,11 @@
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "default",
"description": "enables the default permissions",
"windows": [
"main"
],
"permissions": [
"core:default"
]
}
+3
View File
@@ -0,0 +1,3 @@
xcuserdata/
build/
Externals/
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

@@ -0,0 +1,116 @@
{
"images" : [
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "AppIcon-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "AppIcon-20x20@3x.png",
"scale" : "3x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "AppIcon-29x29@2x-1.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "AppIcon-29x29@3x.png",
"scale" : "3x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "AppIcon-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "AppIcon-40x40@3x.png",
"scale" : "3x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "AppIcon-60x60@2x.png",
"scale" : "2x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "AppIcon-60x60@3x.png",
"scale" : "3x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "AppIcon-20x20@1x.png",
"scale" : "1x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "AppIcon-20x20@2x-1.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "AppIcon-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "AppIcon-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "AppIcon-40x40@1x.png",
"scale" : "1x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "AppIcon-40x40@2x-1.png",
"scale" : "2x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "AppIcon-76x76@1x.png",
"scale" : "1x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "AppIcon-76x76@2x.png",
"scale" : "2x"
},
{
"size" : "83.5x83.5",
"idiom" : "ipad",
"filename" : "AppIcon-83.5x83.5@2x.png",
"scale" : "2x"
},
{
"size" : "1024x1024",
"idiom" : "ios-marketing",
"filename" : "AppIcon-512@2x.png",
"scale" : "1x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
+6
View File
@@ -0,0 +1,6 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}
+8
View File
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>method</key>
<string>debugging</string>
</dict>
</plist>
+30
View File
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="17150" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="Y6W-OH-hqX">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17122"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="System colors in document resources" minToolsVersion="11.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="s0d-6b-0kx">
<objects>
<viewController id="Y6W-OH-hqX" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="5EZ-qb-Rvc">
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<viewLayoutGuide key="safeArea" id="vDu-zF-Fre"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="Ief-a0-LHa" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
</objects>
</scene>
</scenes>
<resources>
<systemColor name="systemBackgroundColor">
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</systemColor>
</resources>
</document>
+21
View File
@@ -0,0 +1,21 @@
# Uncomment the next line to define a global platform for your project
target 'app_iOS' do
platform :ios, '14.0'
# Pods for app_iOS
end
target 'app_macOS' do
platform :osx, '11.0'
# Pods for app_macOS
end
# Delete the deployment target for iOS and macOS, causing it to be inherited from the Podfile
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET'
config.build_settings.delete 'MACOSX_DEPLOYMENT_TARGET'
end
end
end
+8
View File
@@ -0,0 +1,8 @@
#pragma once
namespace ffi {
extern "C" {
void start_app();
}
}
+6
View File
@@ -0,0 +1,6 @@
#include "bindings/bindings.h"
int main(int argc, char * argv[]) {
ffi::start_app();
return 0;
}
+458
View File
@@ -0,0 +1,458 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 77;
objects = {
/* Begin PBXBuildFile section */
299814393FFBF154FAD94CA8 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3673D372C5ABDD1AD6E7067 /* QuartzCore.framework */; };
3036F7131E55779ABF15BD58 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 02B7F8347F94B067E6B27396 /* LaunchScreen.storyboard */; };
31585529C029A01BE249A285 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E81BD6B453D87B7F7B1597B /* CoreGraphics.framework */; };
324A1E9A4258E7911D4DAC39 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9FACFFCB6E3743955F72464C /* Security.framework */; };
53CDD0ACFBE8BDF1550B2E53 /* main.mm in Sources */ = {isa = PBXBuildFile; fileRef = 682535EEFE1DA20BE07B123C /* main.mm */; };
5C516481BCA83A182C2BCC94 /* assets in Resources */ = {isa = PBXBuildFile; fileRef = 3842AE2A64FB9933D0400EA4 /* assets */; };
618672DC8A5E0605441C9935 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E2B15F176E4B041AE33EEEA /* UIKit.framework */; };
836D84C5F07860664DAF79C8 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8F57162F5CC7AEDD55F173D /* WebKit.framework */; };
9D59FB167BB4E699DA17D1E9 /* MetalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04B56F58E2E44DDE1D67E7B7 /* MetalKit.framework */; };
C6BD59C055C986EA4A77FDA2 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AF1DE57E7D9CF13BB2E0E038 /* Assets.xcassets */; };
C869023DDFE275D42F3FBF29 /* libapp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 39EEC6A55698228E08917A52 /* libapp.a */; };
E68F6CFDAED6503ABB4044A5 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE1209BFDECB28E00189B168 /* Metal.framework */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
007E478DB8BC37A788C4730F /* app_iOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = app_iOS.entitlements; sourceTree = "<group>"; };
02B7F8347F94B067E6B27396 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = "<group>"; };
04B56F58E2E44DDE1D67E7B7 /* MetalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MetalKit.framework; path = System/Library/Frameworks/MetalKit.framework; sourceTree = SDKROOT; };
0E2B15F176E4B041AE33EEEA /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
1631E4CFBB715FFDBF919C8C /* main.rs */ = {isa = PBXFileReference; path = main.rs; sourceTree = "<group>"; };
17B52554D60D361AFE791C3E /* lib.rs */ = {isa = PBXFileReference; path = lib.rs; sourceTree = "<group>"; };
1E81BD6B453D87B7F7B1597B /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
306B9C1792E7B1C53FA262A6 /* bindings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = bindings.h; sourceTree = "<group>"; };
3842AE2A64FB9933D0400EA4 /* assets */ = {isa = PBXFileReference; lastKnownFileType = folder; path = assets; sourceTree = SOURCE_ROOT; };
39EEC6A55698228E08917A52 /* libapp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libapp.a; sourceTree = "<group>"; };
682535EEFE1DA20BE07B123C /* main.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = main.mm; sourceTree = "<group>"; };
81E326B61ED92E1D1EECF952 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
9FACFFCB6E3743955F72464C /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; };
AF1DE57E7D9CF13BB2E0E038 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
CE1209BFDECB28E00189B168 /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; };
D8F57162F5CC7AEDD55F173D /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
F3673D372C5ABDD1AD6E7067 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
FBC720DFA1D01F55B0A32344 /* app_iOS.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = app_iOS.app; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
4825CF6C55516D374210C8E1 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
C869023DDFE275D42F3FBF29 /* libapp.a in Frameworks */,
31585529C029A01BE249A285 /* CoreGraphics.framework in Frameworks */,
E68F6CFDAED6503ABB4044A5 /* Metal.framework in Frameworks */,
9D59FB167BB4E699DA17D1E9 /* MetalKit.framework in Frameworks */,
299814393FFBF154FAD94CA8 /* QuartzCore.framework in Frameworks */,
324A1E9A4258E7911D4DAC39 /* Security.framework in Frameworks */,
618672DC8A5E0605441C9935 /* UIKit.framework in Frameworks */,
836D84C5F07860664DAF79C8 /* WebKit.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
1BBF8C620E54F8C028CA130C /* Frameworks */ = {
isa = PBXGroup;
children = (
1E81BD6B453D87B7F7B1597B /* CoreGraphics.framework */,
39EEC6A55698228E08917A52 /* libapp.a */,
CE1209BFDECB28E00189B168 /* Metal.framework */,
04B56F58E2E44DDE1D67E7B7 /* MetalKit.framework */,
F3673D372C5ABDD1AD6E7067 /* QuartzCore.framework */,
9FACFFCB6E3743955F72464C /* Security.framework */,
0E2B15F176E4B041AE33EEEA /* UIKit.framework */,
D8F57162F5CC7AEDD55F173D /* WebKit.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
2867E55E70187711EE923EBD /* app_iOS */ = {
isa = PBXGroup;
children = (
007E478DB8BC37A788C4730F /* app_iOS.entitlements */,
81E326B61ED92E1D1EECF952 /* Info.plist */,
);
path = app_iOS;
sourceTree = "<group>";
};
329C38BE5E8B40354375D0D0 /* bindings */ = {
isa = PBXGroup;
children = (
306B9C1792E7B1C53FA262A6 /* bindings.h */,
);
path = bindings;
sourceTree = "<group>";
};
78CBE3E5873199C0066F12DF /* Sources */ = {
isa = PBXGroup;
children = (
FB1C68C0357A1866B3D27465 /* app */,
);
path = Sources;
sourceTree = "<group>";
};
855775165ACE55D883F89EB3 /* src */ = {
isa = PBXGroup;
children = (
17B52554D60D361AFE791C3E /* lib.rs */,
1631E4CFBB715FFDBF919C8C /* main.rs */,
);
name = src;
path = ../../src;
sourceTree = "<group>";
};
87648061424F20D5D4871E9E = {
isa = PBXGroup;
children = (
3842AE2A64FB9933D0400EA4 /* assets */,
AF1DE57E7D9CF13BB2E0E038 /* Assets.xcassets */,
02B7F8347F94B067E6B27396 /* LaunchScreen.storyboard */,
2867E55E70187711EE923EBD /* app_iOS */,
BAFB695BB8415511FEC74542 /* Externals */,
78CBE3E5873199C0066F12DF /* Sources */,
855775165ACE55D883F89EB3 /* src */,
1BBF8C620E54F8C028CA130C /* Frameworks */,
EE72B6AC647386A11F795E44 /* Products */,
);
sourceTree = "<group>";
};
BAFB695BB8415511FEC74542 /* Externals */ = {
isa = PBXGroup;
children = (
);
path = Externals;
sourceTree = "<group>";
};
EE72B6AC647386A11F795E44 /* Products */ = {
isa = PBXGroup;
children = (
FBC720DFA1D01F55B0A32344 /* app_iOS.app */,
);
name = Products;
sourceTree = "<group>";
};
FB1C68C0357A1866B3D27465 /* app */ = {
isa = PBXGroup;
children = (
682535EEFE1DA20BE07B123C /* main.mm */,
329C38BE5E8B40354375D0D0 /* bindings */,
);
path = app;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
E86255CB8A1836C0BF0C0E14 /* app_iOS */ = {
isa = PBXNativeTarget;
buildConfigurationList = CDCB6DFA1AEBFEE3F608BA27 /* Build configuration list for PBXNativeTarget "app_iOS" */;
buildPhases = (
E028F843270D8815FCE2B491 /* Build Rust Code */,
81BE6BC5B603407AF570E994 /* Sources */,
2FBCB8C3ED193E9C4A9FDB59 /* Resources */,
4825CF6C55516D374210C8E1 /* Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = app_iOS;
packageProductDependencies = (
);
productName = app_iOS;
productReference = FBC720DFA1D01F55B0A32344 /* app_iOS.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
A9B1B09F1872768368ACECE2 /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = YES;
LastUpgradeCheck = 1430;
};
buildConfigurationList = B302E784349268C93E6F0A36 /* Build configuration list for PBXProject "app" */;
compatibilityVersion = "Xcode 14.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
Base,
en,
);
mainGroup = 87648061424F20D5D4871E9E;
minimizedProjectReferenceProxies = 1;
preferredProjectObjectVersion = 77;
projectDirPath = "";
projectRoot = "";
targets = (
E86255CB8A1836C0BF0C0E14 /* app_iOS */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
2FBCB8C3ED193E9C4A9FDB59 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
C6BD59C055C986EA4A77FDA2 /* Assets.xcassets in Resources */,
3036F7131E55779ABF15BD58 /* LaunchScreen.storyboard in Resources */,
5C516481BCA83A182C2BCC94 /* assets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
E028F843270D8815FCE2B491 /* Build Rust Code */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
);
name = "Build Rust Code";
outputFileListPaths = (
);
outputPaths = (
"$(SRCROOT)/Externals/x86_64/${CONFIGURATION}/libapp.a",
"$(SRCROOT)/Externals/arm64/${CONFIGURATION}/libapp.a",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "npm run -- tauri ios xcode-script -v --platform ${PLATFORM_DISPLAY_NAME:?} --sdk-root ${SDKROOT:?} --framework-search-paths \"${FRAMEWORK_SEARCH_PATHS:?}\" --header-search-paths \"${HEADER_SEARCH_PATHS:?}\" --gcc-preprocessor-definitions \"${GCC_PREPROCESSOR_DEFINITIONS:-}\" --configuration ${CONFIGURATION:?} ${FORCE_COLOR} ${ARCHS:?}";
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
81BE6BC5B603407AF570E994 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
53CDD0ACFBE8BDF1550B2E53 /* main.mm in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
1B9D5B8D34E6E0C88D0207F2 /* release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ARCHS = (
arm64,
);
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = app_iOS/app_iOS.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_BITCODE = NO;
"EXCLUDED_ARCHS[sdk=iphoneos*]" = x86_64;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\".\"",
);
INFOPLIST_FILE = app_iOS/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
"LIBRARY_SEARCH_PATHS[arch=arm64]" = "$(inherited) $(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)";
"LIBRARY_SEARCH_PATHS[arch=x86_64]" = "$(inherited) $(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)";
PRODUCT_BUNDLE_IDENTIFIER = com.tauri.dev;
PRODUCT_NAME = "showtime_pay";
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALID_ARCHS = arm64;
};
name = release;
};
3C6497CF9EADFA373F12EF5C /* release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
SWIFT_VERSION = 5.0;
};
name = release;
};
4AC19FD47C6011940ACEB467 /* debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ARCHS = (
arm64,
);
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = app_iOS/app_iOS.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_BITCODE = NO;
"EXCLUDED_ARCHS[sdk=iphoneos*]" = x86_64;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\".\"",
);
INFOPLIST_FILE = app_iOS/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
"LIBRARY_SEARCH_PATHS[arch=arm64]" = "$(inherited) $(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)";
"LIBRARY_SEARCH_PATHS[arch=x86_64]" = "$(inherited) $(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)";
PRODUCT_BUNDLE_IDENTIFIER = com.tauri.dev;
PRODUCT_NAME = "showtime_pay";
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALID_ARCHS = arm64;
};
name = debug;
};
CAA806262C53A2E15E5DB0CA /* debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"$(inherited)",
"DEBUG=1",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
};
name = debug;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
B302E784349268C93E6F0A36 /* Build configuration list for PBXProject "app" */ = {
isa = XCConfigurationList;
buildConfigurations = (
CAA806262C53A2E15E5DB0CA /* debug */,
3C6497CF9EADFA373F12EF5C /* release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = debug;
};
CDCB6DFA1AEBFEE3F608BA27 /* Build configuration list for PBXNativeTarget "app_iOS" */ = {
isa = XCConfigurationList;
buildConfigurations = (
4AC19FD47C6011940ACEB467 /* debug */,
1B9D5B8D34E6E0C88D0207F2 /* release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = debug;
};
/* End XCConfigurationList section */
};
rootObject = A9B1B09F1872768368ACECE2 /* Project object */;
}
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:">
</FileRef>
</Workspace>
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildSystemType</key>
<string>Original</string>
<key>DisableBuildSystemDeprecationDiagnostic</key>
<true/>
</dict>
</plist>
@@ -0,0 +1,131 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1430"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"
runPostActionsOnFailure = "NO">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "E86255CB8A1836C0BF0C0E14"
BuildableName = "app_iOS.app"
BlueprintName = "app_iOS"
ReferencedContainer = "container:app.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "NO"
onlyGenerateCoverageForSpecifiedTargets = "NO">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "E86255CB8A1836C0BF0C0E14"
BuildableName = "app_iOS.app"
BlueprintName = "app_iOS"
ReferencedContainer = "container:app.xcodeproj">
</BuildableReference>
</MacroExpansion>
<Testables>
</Testables>
<CommandLineArguments>
</CommandLineArguments>
<EnvironmentVariables>
<EnvironmentVariable
key = "RUST_BACKTRACE"
value = "full"
isEnabled = "YES">
</EnvironmentVariable>
<EnvironmentVariable
key = "RUST_LOG"
value = "info"
isEnabled = "YES">
</EnvironmentVariable>
</EnvironmentVariables>
</TestAction>
<LaunchAction
buildConfiguration = "debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "E86255CB8A1836C0BF0C0E14"
BuildableName = "app_iOS.app"
BlueprintName = "app_iOS"
ReferencedContainer = "container:app.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<CommandLineArguments>
</CommandLineArguments>
<EnvironmentVariables>
<EnvironmentVariable
key = "RUST_BACKTRACE"
value = "full"
isEnabled = "YES">
</EnvironmentVariable>
<EnvironmentVariable
key = "RUST_LOG"
value = "info"
isEnabled = "YES">
</EnvironmentVariable>
</EnvironmentVariables>
</LaunchAction>
<ProfileAction
buildConfiguration = "release"
shouldUseLaunchSchemeArgsEnv = "NO"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "E86255CB8A1836C0BF0C0E14"
BuildableName = "app_iOS.app"
BlueprintName = "app_iOS"
ReferencedContainer = "container:app.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<CommandLineArguments>
</CommandLineArguments>
<EnvironmentVariables>
<EnvironmentVariable
key = "RUST_BACKTRACE"
value = "full"
isEnabled = "YES">
</EnvironmentVariable>
<EnvironmentVariable
key = "RUST_LOG"
value = "info"
isEnabled = "YES">
</EnvironmentVariable>
</EnvironmentVariables>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
+44
View File
@@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>0.1.0</string>
<key>CFBundleVersion</key>
<string>0.1.0</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>arm64</string>
<string>metal</string>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
</dict>
</plist>
+5
View File
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict/>
</plist>
+88
View File
@@ -0,0 +1,88 @@
name: app
options:
bundleIdPrefix: com.tauri.dev
deploymentTarget:
iOS: 14.0
fileGroups: [../../src]
configs:
debug: debug
release: release
settingGroups:
app:
base:
PRODUCT_NAME: showtime_pay
PRODUCT_BUNDLE_IDENTIFIER: com.tauri.dev
targetTemplates:
app:
type: application
sources:
- path: Sources
scheme:
environmentVariables:
RUST_BACKTRACE: full
RUST_LOG: info
settings:
groups: [app]
targets:
app_iOS:
type: application
platform: iOS
sources:
- path: Sources
- path: Assets.xcassets
- path: Externals
- path: app_iOS
- path: assets
buildPhase: resources
type: folder
- path: LaunchScreen.storyboard
info:
path: app_iOS/Info.plist
properties:
LSRequiresIPhoneOS: true
UILaunchStoryboardName: LaunchScreen
UIRequiredDeviceCapabilities: [arm64, metal]
UISupportedInterfaceOrientations:
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
UISupportedInterfaceOrientations~ipad:
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationPortraitUpsideDown
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
CFBundleShortVersionString: 0.1.0
CFBundleVersion: "0.1.0"
entitlements:
path: app_iOS/app_iOS.entitlements
scheme:
environmentVariables:
RUST_BACKTRACE: full
RUST_LOG: info
settings:
base:
ENABLE_BITCODE: false
ARCHS: [arm64]
VALID_ARCHS: arm64
LIBRARY_SEARCH_PATHS[arch=x86_64]: $(inherited) $(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)
LIBRARY_SEARCH_PATHS[arch=arm64]: $(inherited) $(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES: true
EXCLUDED_ARCHS[sdk=iphoneos*]: x86_64
groups: [app]
dependencies:
- framework: libapp.a
embed: false
- sdk: CoreGraphics.framework
- sdk: Metal.framework
- sdk: MetalKit.framework
- sdk: QuartzCore.framework
- sdk: Security.framework
- sdk: UIKit.framework
- sdk: WebKit.framework
preBuildScripts:
- script: npm run -- tauri ios xcode-script -v --platform ${PLATFORM_DISPLAY_NAME:?} --sdk-root ${SDKROOT:?} --framework-search-paths "${FRAMEWORK_SEARCH_PATHS:?}" --header-search-paths "${HEADER_SEARCH_PATHS:?}" --gcc-preprocessor-definitions "${GCC_PREPROCESSOR_DEFINITIONS:-}" --configuration ${CONFIGURATION:?} ${FORCE_COLOR} ${ARCHS:?}
name: Build Rust Code
basedOnDependencyAnalysis: false
outputFiles:
- $(SRCROOT)/Externals/x86_64/${CONFIGURATION}/libapp.a
- $(SRCROOT)/Externals/arm64/${CONFIGURATION}/libapp.a
+32
View File
@@ -0,0 +1,32 @@
#!/usr/bin/env node
// Tauri iOS build script
// This script is called during the Xcode build process
const path = require('path');
const { spawn } = require('child_process');
// 获取项目根目录
const projectRoot = path.resolve(__dirname, '../../..');
const tauriRoot = path.resolve(projectRoot, 'src-tauri');
console.log('Starting Tauri iOS build...');
console.log('Project root:', projectRoot);
console.log('Tauri root:', tauriRoot);
// 执行 tauri build for iOS
const buildProcess = spawn('npx', ['tauri', 'build', '--target', 'ios'], {
cwd: projectRoot,
stdio: 'inherit',
env: { ...process.env }
});
buildProcess.on('exit', (code) => {
console.log(`Tauri build exited with code ${code}`);
process.exit(code);
});
buildProcess.on('error', (error) => {
console.error('Error running tauri build:', error);
process.exit(1);
});
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Some files were not shown because too many files have changed in this diff Show More